Меня интересует этот вопрос: есть ли способ синхронизировать только одну функцию ядра? Например, если у меня что-то вроде этого:

function_1 <<< dimgrid, dimblock >>> (param1, param2, param3);
funckion_2 <<< dimgrid, dimblock >>> (param4, param5, param5);
function_1 <<< dimgrid, dimblock >>> (param6, param7, param8);

можно ли узнать, завершилась ли вторая function_1 раньше первой ?. Может ли функция cudaDeviceSynchronize () помочь мне в решении этой проблемы? Мне это нужно, потому что мне нужно повторно использовать некоторые ресурсы (param-i) для других функций ядра.

J.kol

Ответов: 1

Ответы (1)

Если вы запускаете каждое ядро ​​в его собственном потоке, вы можете использовать cudaStreamSynchronize в потоке, в котором запущено ядро, которое вы хотите подождать. Так что-то вроде:

//stream creation for stream1, stream2
...
function_1 <<< dimgrid, dimblock, 0, stream1 >>> (param1, param2, param3);
funckion_2 <<< dimgrid, dimblock, 0, stream2 >>> (param4, param5, param5);
function_1 <<< dimgrid, dimblock, 0, stream1 >>> (param6, param7, param8);

cudaStreamSynchronize(stream1);

, вероятно, сделает то, что вы хотите.

2022 WebDevInsider