Соберите результат из другого блока потоков - PullRequest
0 голосов
/ 26 мая 2019

Я только начал изучать CUDA, и я действительно очень озадачен тем, как использовать память GPU, проблема в том, что Мне нужно, чтобы каждый блок (группа потоков в одном и том же блоке) возвращал свой собственный результат и копировал его в память процессора.

Мой вопрос: Могу ли я сохранить результат каждого блока в общей памяти, а затем скопировать его в глобальную память? Как я могу собрать результат каждого?

Буду благодарен, если кто-то может помочь!

1 Ответ

2 голосов
/ 26 мая 2019

Общая память на блок, каждый блок имеет свой экземпляр общего буфера, и только потоки в этом блоке имеют к нему доступ.

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

Например:

__global__ void gather(int* output) {
    __shared__ int shared_buffer[128]; 
    .... // threads in block work in shared_buffer
         // store output value for block in shared_buffer[0]

    __syncthreads();
    if(threadIdx.x == 0) output[blockIdx.x] = shared_buffer[0];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...