Почему решение системы линейных уравнений с использованием cula (dgesv) медленнее, чем mkl (dgesv) для небольших наборов данных

Я написал программу CUDA C и C для решения матричного уравнения Ax = b с использованием подпрограммы CULA dgesv и подпрограммы MKL dgesv. Похоже, что для небольшого набора данных программа CPU работает быстрее, чем программа GPU. Но графический процессор превосходит процессор, когда набор данных превышает 500. Я использую свой ноутбук dell с процессором i3 и графическим процессором Geforce 525M. Как лучше всего объяснить начальную низкую производительность графического процессора?

Я написал другую программу, которая берет два вектора, умножает их и складывает результат. Это похоже на скалярное произведение, только результат - векторная сумма, а не скаляр. В этой программе графический процессор быстрее процессора даже для небольшого набора данных. Я использую тот же ноутбук. Почему графический процессор быстрее в этой программе даже для небольшого набора данных по сравнению с описанным выше? Причина в том, что при суммировании не требуется много вычислений?


person Kofi Baah    schedule 26.11.2012    source источник
comment
Накладные расходы на связь! Для ускорения передача данных (при пропускной способности PCI-E) в системе GPGPU не должна быть узким местом приложения. В небольшом наборе данных не стоит перемещать небольшие данные на GPU, потому что вычисления незначительны. В этом случае время запуска ядра и перемещения данных определяет преимущества ускорения вычислений, ведущие к снижению производительности.   -  person lashgar    schedule 26.11.2012
comment
Графический процессор дает преимущество, когда сокращение времени вычислений на графическом процессоре (по сравнению с центральным процессором) превышает стоимость передачи данных. Я считаю, что решение системы линейных уравнений находится где-то между O (n ^ 2) и O (n ^ 3 ) сложность. Для очень малых n эта вычислительная сложность может быть недостаточно большой, чтобы компенсировать стоимость передачи данных. Но очевидно, что чем больше n, тем больше должно быть. С другой стороны, ваша векторная операция может иметь сложность только O (n). Так что сценарий выгоды будет выглядеть иначе.   -  person Robert Crovella    schedule 27.11.2012
comment
@RobertCrovella: Модельное количество FLOP для dgesv с одной RHS обычно принимается как 0,67n ^ 3.   -  person talonmies    schedule 27.11.2012
comment
спасибо за понимание. Хорошо объяснено   -  person Kofi Baah    schedule 27.11.2012
comment
@RobertCrovella: Возможно, вы могли бы добавить это в качестве ответа, чтобы убрать вопрос из списка неотвеченных.   -  person talonmies    schedule 08.01.2013


Ответы (1)


Нередко графические процессоры менее интересны для небольших наборов данных по сравнению с большими наборами данных. Причины этого будут зависеть от конкретного алгоритма. Графические процессоры обычно имеют более высокую пропускную способность основной памяти, чем процессоры, а также могут превосходить их по производительности в тяжелых условиях обработки чисел. Но графические процессоры обычно работают хорошо только тогда, когда проблема связана с параллелизмом, который может быть обнаружен. Использование преимуществ этого параллелизма позволяет алгоритму задействовать большую полосу пропускания памяти, а также более высокие вычислительные возможности.

Однако, прежде чем графический процессор сможет что-либо сделать, необходимо передать данные графическому процессору. И это создает «затраты» на версию кода для графического процессора, которая обычно не присутствует в версии для процессора.

Чтобы быть более точным, графический процессор обеспечит преимущество, когда сокращение времени вычислений на графическом процессоре (по сравнению с процессором) превышает стоимость передачи данных. Я считаю, что решение системы линейных уравнений находится где-то между O (n ^ 2) и O (n ^ 3) сложностью. Для очень малых n эта вычислительная сложность может быть недостаточно большой, чтобы компенсировать стоимость передачи данных. Но очевидно, что чем больше n, тем больше должно быть. С другой стороны, ваша векторная операция может иметь сложность только O (n). Так что сценарий выгоды будет выглядеть иначе.

Для случая O (n ^ 2) или O (n ^ 3), когда мы переходим к большим наборам данных, «стоимость» передачи данных увеличивается как O (n), но требования к вычислениям для решения увеличиваются как O ( n ^ 2) (или O (n ^ 3)). Следовательно, для более крупных наборов данных должны быть экспоненциально большие вычислительные нагрузки, что снижает влияние «стоимости» передачи данных. С другой стороны, проблема O (n), вероятно, не будет иметь этой динамики масштабирования. Рабочая нагрузка увеличивается с той же скоростью, что и «стоимость» передачи данных.

Также обратите внимание, что если «стоимость» передачи данных в графический процессор может быть скрыта путем перекрытия ее с вычислительной работой, тогда «стоимость» перекрывающейся части становится «бесплатной», то есть она не влияет на общее время решения.

person Robert Crovella    schedule 08.01.2013