Я новичок в CUDA и пытаюсь написать эффективную функцию ядра для анализа пакета, содержащего 'k' разных сообщений разной длины (что я знаю). Это то, что я сделал.
//head ----> pointing to a page locked memory i.e start of the packet
//k -----> Number of messages in the packet
host_func()
{
cudaHostGetDevicePointer(&d_dataPtr, head, 0);
int *h_bytes;
cudaHostAlloc((void**)&h_bytes, sizeof(int), cudaHostAllocWriteCombined | cudaHostAllocMapped);
*h_bytes = 0;
cudaHostGetDevicePointer(&d_bytes, h_bytes, 0);
kernel<<<1,26>>>(d_dataPtr, d_bytes, k);
cudaThreadSynchronize();
}
__global__ void kernel(char *data, int *bytesProcessed, int *numOfMessages)
{
int temp = 0;
for(int i=0;i<*numOfMessages;i++)
{
switch(*data)
{
case 'A':
//do some processing
temp = sizeof(MessageA);
break;
case 'B':
//do some processing
temp = sizeof(MessageB);
break;
case 'C':
//do some processing
temp = sizeof(MessageB);
break;
}
data += temp;
*bytesProcessed += temp;
}
}
Я могу проанализировать данные, но проблема в том, что потоки в одной и той же деформации обрабатывают один и тот же тип сообщения, что делает это ядро крайне неэффективным. Любая помощь в синхронизации потоков должным образом будет принята.