timing functions add to check performance of individual kernels. Reduction appears to be the bottleneck