Преобразование всех переменных в gpuArrays не ускоряет вычисления

Я пишу симулятор с MATLAB, где я использовал ускорение CUDA.

Предположим, у нас есть вектор x а также yматрица A и скалярные переменные dt,dx,a,b,c,

Что я узнал, так это, поставив x,y,A в gpuArray() перед запуском итерации и встроенных функций итерация может быть значительно ускорена.

Тем не менее, когда я пытался поставить переменные, такие как dt,dx,a,b,c в gpuArray()программа будет значительно замедлена более чем на 30%. (Время увеличено с 7 до 11 с).

Почему не стоит помещать все переменные в gpuArray()?

(Короткий комментарий, эти скаляры были умножены вместе с x,y,Aи никогда не использовался во время одной итерации.)

1 ответ

Решение

Аппаратное обеспечение графического процессора оптимизировано для работы с относительно большими объемами данных. Вы на самом деле видите преимущество вычислений на GPU только тогда, когда можете загружать множество ядер обработки большим количеством данных, чтобы они были заняты. Обычно это означает, что вам нужны операции, работающие с тысячами или миллионами элементов.

Затраты на запуск операций на GPU сокращают время вычислений при работе со скалярными величинами, поэтому неудивительно, что они медленнее, чем на CPU. (Это не свойственно MATLAB & gpuArray).

Другие вопросы по тегам