Когда параметр ядра CUDA не влияет на время выполнения - PullRequest
1 голос
/ 22 июня 2011

У меня есть программа CUDA с огромным доступом к памяти, которые «случайны» и, таким образом, вообще НЕ объединяются. Теперь, когда я тестирую эту программу для различных параметров времени выполнения ядра и выбираю размер блока всегда кратным 7 (начиная с 7 до, скажем, 980), а threadsPerBlock всегда кратен размеру основы (от 32 до 1024, скажем,), разницы нет во время выполнения программы. Как можно это объяснить?

Большое спасибо!

1 Ответ

1 голос
/ 08 июля 2011

Влияние размера блока резьбы минимально.Это последняя оптимизация, которую я бы попробовал (и только если заполняемость ужасно плохая, класс Fermi имеет практически одинаковую производительность, когда заполняемость превышает 50% или около того).Если ваше ядро ​​действительно плохое, то вы вообще не заметите никаких отличий.

Кроме того, вы можете запустить CUDA Visual Profiler для своего кода Matlab.С помощью кодирования GPU профилируйте все.

Выполните следующие шаги в настройке сеанса.

  1. в Launch укажите свой исполняемый файл Matlab.
  2. В рабочем каталоге выберите каталог вашего скрипта matlab
  3. в Аргументах: -nojvm -nosplash -r name_of_matlab_script (без .m)

При этом,из личного опыта, посмотрите, можете ли вы использовать текстурную память для кэширования.Даже если доступ к памяти не слит, вы, тем не менее, можете получить некоторые попадания в кэш из памяти.

...