У меня есть 3D-сетка трехмерных блоков, и внутри каждого блока мне нужно последовательно вычислять по слоям «z» блока. Другими словами, я хочу выполнить сначала все (x, y, 0) потоки, затем все (x, y, 1) и т. Д. Мне нужно выполнить мои потоки по слоям (подсчет слоев по оси z). Я знаю о функции __syncthreads(), но я не знаю, как синхронизировать потоки с ней так, как я хочу.Threads syncronization in CUDA
UPD:
__global__ void Kernel(//some params)
{
//some code
__syncthreads();
}
Это позволит синхронизировать все нити в блоке. Но мне нужно выполнить все потоки, где z = 0, затем все нити, где z = 1 и т. Д.
Что вы пробовали? Что не сработало? Пожалуйста, покажите нам свое решение. –
Этот вопрос нуждается в более подробной информации, но я подозреваю, что ответ: определить блок потока для размера групп потоков, которые необходимо синхронизировать. Другими словами, разделите слои на отдельные блоки. – harrism
@harrism, я знаю, что могу это сделать. Но в этом случае мне придется запускать ядро несколько раз, и это негативно скажется на производительности. – Max