 	// 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);


	// we don't want to spawn more blocks, that gpu can actually handle without queue

	num_blocks = nd4j::math::nd4j_min<int>(num_blocks, max_active_blocks);
	num_blocks = nd4j::math::nd4j_min<int>(num_blocks, blockLimit);

//	if (num_blocks > countMP)

	if (verbose && launchDims.x == 1)
		printf("AF2 opNum:[%i]\n", opNum);

	indexReduceFloat<<<launchDims.x, launchDims.y,launchDims.z, *stream>>>(
			opNum,
			x,
			xShapeInfo, shape::rank(hostXShapeInfo),
