Можете ли вы предсказать время работы ядра CUDA? - PullRequest
1 голос
/ 20 сентября 2011

В какой степени можно прогнозировать / рассчитывать производительность ядра CUDA?

Немного поработав с CUDA, это кажется нетривиальным.

Но мой коллега, который не работает над CUDA, сказал мне, что это не может быть трудно, если у вас есть пропускная способность памяти, количество процессоров и их скорость?

То, что он сказал, похоже, не соответствует тому, что я прочитал. Это то, что я мог себе представить, может работать. Что ты думаешь?

 Memory processed
------------------ = runtime for memory bound kernels ?
 Memory bandwidth 

или

   Flops
------------ = runtime for computation bound kernels?
 Max GFlops

Ответы [ 2 ]

2 голосов
/ 21 сентября 2011

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

Например, для ядер с ограниченным объемом памяти те, у которых много пропусков кэша, будут отличаться прите с хитами.Или те, у кого есть расхождения, те, у кого есть барьеры ...

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

Надеюсь, это поможет.

1 голос
/ 20 сентября 2011

Я думаю, вы можете предсказать лучший случай с небольшим количеством работы.Как вы сказали, с количеством команд, пропускной способностью памяти, размером ввода и т. Д.

Однако прогнозировать фактический или наихудший случай гораздо сложнее.

Прежде всего, существуют такие факторы, как шаблоны доступа к памяти.Например: со старыми картами, поддерживающими CUDA, вы должны были уделять внимание распределению ваших глобальных обращений к памяти, чтобы все они не боролись за один банк памяти.(Более новые карты CUDA используют хеш-код между логическими и физическими адресами для решения этой проблемы).

Во-вторых, существуют недетерминированные факторы, такие как: насколько занята шина PCI?Насколько загружено ядро ​​хоста?И т.д.

Я подозреваю, что самый простой способ приблизиться к фактическим временам выполнения - это, в основном, запустить ядро ​​на подмножествах входных данных и посмотреть, сколько на самом деле это займет времени.

...