2016-09-06 3 views
-2

Я новичок в Numba и CUDA и выполнил измерения для сравнения функций cuda jitted с Numpy на нескольких основных примерах. Например,Ожидаемое ускорение Numba/CUDA против Numpy

@cuda.jit("void(float32[:])") 
def gpu_computation(array): 
    pos = cuda.grid(1) 
    if pos < array.size: 
     array[pos] = array[pos] ** 2.6 

по сравнению с однотридовой

def cpu_computation(array): 
    array = array ** 2.6 
    return array 

с

n=1000000 
array = np.linspace(0, 100, num=n, dtype=np.float32) 
threads per block = 32 
blocks per grid = 31250 

я получаю около 3x с ускорения GPU. Это также то, что я получаю при выполнении матричного умножения (как базовой, так и интеллектуальной версии, найденной в документации Numba). Оптимизация с копированием на/с устройства не помогла.

Ожидается ли такое ускорение? Я ожидал на порядок больше. Моя машина: Mac OSX с GeForce GTX 775M 2048 МБ и CUDA 7.5.30.

ответ

2

Арифметическая пропускная способность с двойной точностью вашего GTX 775M составляет 1/24th of the single precision throughput. Поскольку Python не имеет одного типа точности, вам необходимо использовать Numba types, чтобы явно помечать ваши данные как единую точность.

К сожалению, нет возможности ускорить вычисления с двойной точностью, отличные от использования другого графического процессора (линейки Tesla или оригинального, теперь не выпускаемого GTX Titan).

+0

Спасибо, кажется, важно знать. Я обновил фрагмент кода выше, чтобы показать, что я сейчас измеряю, но пока не вижу разницы. – jam123