Могу ли я настроить синхронизацию потоков CUDA по сетке?

Я использовал кооперативные группы для выполнения синхронизации между потоками внутри ядра на уровне устройства:

      __global__ void my_kernel(...){
   grid_group grid = this_grid();

   // ... 
   grid.sync();
   // ...
}

И это совместный запуск, который делает доступной эту синхронизацию:

      cudaLaunchCooperativeKernel((void *)my_kernel, grid_dime, block_dime, kernel_args, shmem_size, 0);

Вызов sync() синхронизирует все потоки в сетке. Мои тесты показывают, что для большого количества потоков в сетке этот подход требует очень много времени, особенно когда блоки размещаются более чем на одном SM.

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

0 ответов

Другие вопросы по тегам