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

Reply via email to