2016-07-07 10 views
1

Я разрабатываю код вычисления вычислительной жидкости (CFD) с использованием CUDA. Поскольку я выполняю некоторые тесты ускорения на одном графическом процессоре Tesla K40 (по сравнению с процессором Intel Xeon E5 v2) для разных размеров проблем, графический процессор демонстрирует более высокую скорость, увеличивая размер проблемы. Например, я получаю ускорение в 1,5 раза за ~ 1 миллион элементов, в то время как он улучшает до ~ 11x для 10 миллионов элементов.Производительность графических процессоров зависит от количества элементов (problem_size)

Я не знаю, теоретически, что вызывает более высокую производительность для больших проблем? Собственно, это также тот случай, который я видел во многих научных (особенно жидкостной механике) приложениях, работающих на GPU. (Мне было интересно, затронуты ли что-то вроде служебных данных ядра, латентности и т. Д.)

Спасибо за любой ответ или комментарий!

PS: По ускорению я имею в виду отношение времени выполнения кода графического процессора к времени выполнения версии ЦП. Фактически, я увеличиваю размер проблемы в обеих версиях (и, конечно, применяю одинаковый размер проблемы для обоих в каждом сравнительном тесте) и пересчитываю ускорение для соответствующего размера проблемы.

+1

Ускорение относительно того, что? – Drop

+0

Как я уже говорил; ускорение по сравнению с процессором. – Siamak

+3

Вы должны предоставить более подробную информацию. Как скорость на элемент? Получаете ли вы относительное увеличение производительности, потому что GPU становится быстрее для каждого элемента (вероятно, из-за скрытых задержек) или из-за того, что процессор становится медленнее (возможно, размер кеша). – havogt

ответ

1

Причина работает ядро ​​GPU обычно поставляется с погона постоянной времени (не может быть постоянным, но мы можем рассмотреть случай постоянного), такие как ядро ​​запуска накладных, передача данных PCIe и т.д.

Пусть выполнено это постоянные накладные расходы графического процессора t секунды, скорость графического процессора g миллионов элементов в секунду, скорость процессора c миллионов элементов в секунду. Обе скорости являются постоянными (может быть не так, как указано в @havogt). На CPU нет накладных расходов. У вас есть уравнения

(t + 1/g) * 1.5 = 1/c 
(t + 10/g) * 11 = 10/c 

Вы могли бы получить

g/c = 37.125 
t = 0.640/c 

что означает

  1. для достаточно большого элемента данных (> 100 м), скорость GPU близка к 37.125x скорости процессора ;
  2. постоянное накладное время равно времени обработки 0,640M элементов на процессоре.
+0

Кажется разумным. Благодаря! – Siamak

Смежные вопросы