Thank you for the addition and the sanity check, I've added the full example to the wiki: http://wiki.tiker.net/PyCuda/Examples/SimpleSpeedTest
Re. "is 100* right or 205*?" that question comes from my long background in optimisation. I'm used to see incremental gains, not orders-of-magnitude. I know my GPU has 112 cores so I expected "about 100* speedup" (though this ignores clock speed, ALU efficiency etc I know). Basically I wanted someone else to tell me that 205* sounded sensible and I hadn't done anything silly :-) Much obliged, Ian. On 2 March 2010 19:06, J-Pascal Mercier <[email protected]> wrote: > On Tuesday 02 March 2010 06:17:03 pm Ian Ozsvald wrote: >> Continuing my post about a simple speed test from before (thanks Ian!) >> I have a modified version (at the end). This was the original thread: >> http://tiker.net/pipermail/pycuda_tiker.net/2010-January/000940.html >> >> The new code runs a loop on sin() using get_function, using a GPUArray >> and using straight numpy. The get_function version is fastest, then >> the GPUArray (limited I guess by memory copies to/from the device on >> each iteration), then numpy. > > Hi Ian, > > I would add a comparison the array with a ElementwiseKernel. One of the > biggest overhead of cuda using the GPUArray is due to the kernel startup time > and in not the actual kernel itself. With longer kernels it is not a big deal > but with a repeated small kernel it is quite astonishing how you can kill > performances. > > Here is the actual ElementwiseKernel which is almost on par with your GPU > version (0.11s vs 0.14s) > > > ############ > # Elementwise SECTION > # > from pycuda.elementwise import ElementwiseKernel > kernel = ElementwiseKernel( > "float *a, int niter", > "for(int n = 0; n < niter; n++) { a[i] = sin(a[i]);}", > "sine") > > > a = numpy.ones(nbr_values).astype(numpy.float32) > a_gpu = gpuarray.to_gpu(a) > start.record() > > kernel(a_gpu, numpy.int(n_iter)) > > end.record() > end.synchronize() > secs = start.time_till(end)*1e-3 > print "Elementwise time:", secs > print "Elementwise result starts with...", a_gpu.get()[:3] > > > > > >> It looks as though the GPU solution (get_function) is 205 times faster >> than the CPU version. Does this make sense? > > I believe it does. What make you think 100 time is right and 205 is over? > > On my computer ( Intel(R) Xeon(R) CPU 5120 @ 1.86GHz vs GTX280) it is about > 120x which is not the standard gain but i would say not uncommon for CPU->GPU. > > Cheers, > > J-Pascal Mercier > > > > > _______________________________________________ > PyCUDA mailing list > [email protected] > http://host304.hostmonster.com/mailman/listinfo/pycuda_tiker.net > -- Ian Ozsvald (A.I. researcher, screencaster) [email protected] http://IanOzsvald.com http://morconsulting.com/ http://TheScreencastingHandbook.com http://ProCasts.co.uk/examples.html http://twitter.com/ianozsvald _______________________________________________ PyCUDA mailing list [email protected] http://host304.hostmonster.com/mailman/listinfo/pycuda_tiker.net
