 	{
 		//int f[] = { 3, 1, 7, 0, 4, 1, 6, 3, 3, 1, 7, 0, 4, 1, 6, 3 };
 		int f[] = { 3, 1, 7, 0, 4, 1, 6, 3, 3, 1 };
+		//int f[] = { 3, 1, 7, 0, 4, 1, 6, 3 };
 
-		int c = aten::nextPow2(AT_COUNTOF(f));
+		//int c = aten::nextPow2(AT_COUNTOF(f));
+		int c = AT_COUNTOF(f);
 
 		std::vector<int> x(c);
 		memcpy(&x[0], f, sizeof(int) * AT_COUNTOF(f));


	// Clear the root
	if (index == 0) {
		temp[num - 1] = 0;
	}

	// Down sweep
	for (int d = 1; d < num; d *= 2) {
		offset >>= 1;
		__syncthreads();


	data[index] += incr[blockIdx.x];
}

__global__ void exclusiveScan(const int* src, int num, int stride, int* dst)
{
	extern __shared__ int temp[];

	int index = threadIdx.x;
	int offset = 1;

	// Copy input data to shared memory
	temp[2 * index] = src[2 * index + (blockIdx.x * blockDim.x * 2)];
	temp[2 * index + 1] = src[2 * index + 1 + (blockIdx.x * blockDim.x * 2)];

	// Up sweep
	for (int d = stride >> 1; d > 0; d >>= 1) {
		__syncthreads();

		if (index < d) {
