Это один из стандартных примеров кода мы находим, где каждый ...Почему мой GPU часть кода работает гораздо медленнее процессора
import time
import numpy
import pycuda.gpuarray as gpuarray
import pycuda.cumath as cumath
import pycuda.autoinit
size = 1e7
t0 = time.time()
x = numpy.linspace(1, size, size).astype(numpy.float32)
y = numpy.sin(x)
t1 = time.time()
cpuTime = t1-t0
print(cpuTime)
t0 = time.time()
x_gpu = gpuarray.to_gpu(x)
y_gpu = cumath.sin(x_gpu)
y = y_gpu.get()
t1 = time.time()
gpuTime = t1-t0
print(gpuTime)
результаты: 200 мс для центрального процессора и 2,45 сек для GPU. .. более 10X
Я бегу на победу 10 ... против 2015 с PTVS ...
с наилучшими пожеланиями ...
Стеф
Для начала вы должны, вероятно, использовать 'timeit' для точного времени выполнения среднего времени выполнения кода. Во-вторых, возможно, что в вызове 'gpuarray.to_gpu (x)' слишком много накладных расходов. Попробуйте выполнить эту настройку вне вашей функции синхронизации. Наконец, имейте в виду, что numpy очень оптимизирован для этих видов операций. Поэтому неразумно видеть в некоторых случаях более низкую производительность на графическом процессоре без оптимизации кода GPU. –
Я выполнил вышеуказанный код с помощью модуля 'timeit'. Я получаю 20.6ms за цикл (100 циклов) для кода gpu и 129ms за цикл для numpy cpu code. GPU = GTX760, CPU = i5-2400. Интересно, что, по-видимому, код gpu работает медленнее при первом запуске в интерактивной подсказке python (400 мс), но быстрее (20 мс) с повторным исполнением в том же экземпляре. –
Спасибо ... да я вижу то же самое ... довольно накладные расходы ... для первого прохода ... –