 	// round num_threads to nearest warpSize
 	num_threads -= num_threads % warpSize;
 
-	num_threads = nd4j::math::nd4j_max<int>(32, num_threads);
+	num_threads = nd4j::math::nd4j_max<int>(1, num_threads);
 
 	// since we use shared memory as fast memory for some cases - we need to count that in
 	int memory_limit = getBaseMemorySize(xRank, funcAttr);

}

void NativeOps::setGridLimit(int gridSize) {
	if (gridSize > 1024)
		gridSize = 1024;
	if (gridSize < 1)
		gridSize = 1;
	blockLimit = gridSize;

							checkCudaErrors(cudaStreamSynchronize(*stream));

						// at this point, all IMax indexes are gathered, and we execute
						fillDimensionalIsMaxFloat<<<512, 32, funcAttributes[36].sharedSizeBytes, *stream>>>(special, hostYShapeInfo, result, resultShapeInfo, tadMaxShapeInfo, dimension, 1, tadMaxOffsets );


						checkCudaErrors(cudaStreamSynchronize(*stream));
