Мое ядро cuda генерирует что-то, что подается на хост в конце выполнения блока.
Скелет выглядит следующим образом.
host_data, в который записываются данные, выделяется как отображенная память хоста.
host_data_count - также отображенная память, которая указывает количество произведенных данных.
Я использую графический процессор GTX 580 с архитектурой Fermi и CC 2.0.
__global__ void kernel(host_data, host_data_count)
{
__shared__ int shd_data[1024];
__shared__ int shd_cnt;
int i;
if (threadIdx.x == 0)
shd_cnt = 0;
__syncthreads();
while ( ... )
{
if (something happens)
{
i = atomicAdd(&shd_cnt, 1);
shd_data[i] = d;
}
}
__syncthreads();
if (threadIdx.x == 0)
{
i = atomicAdd(host_data_count, shd_cnt);
memcpy(&host_data[i], shd_data, shd_cnt * 4);
}
}
Чего мне не хватает в этом коде ядра?
Кто-нибудь может помочь?