Новичок в CUDA здесь.
В моем коде я в настоящее время запускаю ядра много раз в цикле в коде хоста. (Потому что мне нужна синхронизация между блоками). Поэтому я подумал, смогу ли я оптимизировать запуск ядра.
Мои запуски ядра выглядят примерно так:
MyKernel<<<blocks,threadsperblock>>>(double_ptr, double_ptr, int N, double x);
Таким образом, для запуска ядра некоторый сигнал, очевидно, должен пройти от ЦП к графическому процессору, но мне интересно, заметно ли замедляет этот процесс передача аргументов.
Аргументы ядра каждый раз одинаковы, поэтому, возможно, я мог бы сэкономить время, скопировав их один раз, получить к ним доступ в ядре по имени, определенному
__device__ int N;
<and somehow (how?) copy the value to this name N on the GPU once>
и просто запустить ядро без аргументов как таковых
MyKernel<<<blocks,threadsperblock>>>();
Сделает ли это мою программу быстрее? Как лучше всего это сделать? Насколько мне известно, аргументы хранятся в некоторой постоянной глобальной памяти. Как я могу убедиться, что значения, переданные вручную, хранятся в памяти, которая работает так же быстро или быстрее?
Заранее благодарю за любую помощь.