successful reductoin on GPU. not parallel. uses atomicAdd()s