私は構造を持っています
struct packet
{
int src_ip;
int dest_ip;
int src_port;
int dest_port;
int protocol;
};
cuda カーネルは次のとおりです。
__global__
void GPU(struct packet * packets,int * gpu_action)
{
int i;
i = (int) packets[6]->src_ip;
}
主な機能は次のとおりです。
int main ()
{
int * gpu_action;
struct packet * gpu_packets;
struct packet * cpu_gpu_packets;
int * action;
action = (int *)malloc(TOTAL_PACKETS*sizeof(int));
cpu_gpu_packets = (struct packet *)malloc(TOTAL_PACKETS*sizeof(struct packet));
cudaMalloc((void**)&gpu_action,TOTAL_PACKETS*sizeof(int));
cudaMalloc((void**)&gpu_packets,TOTAL_PACKETS*sizeof(struct packet));
cudaMemcpy(gpu_packets,cpu_gpu_packets,TOTAL_PACKETS*sizeof(struct packet),cudaMemcpyHostToDevice);
GPU<<<1,1>>>(gpu_packets,gpu_action);
}
nvcc を使用してコンパイルすると、エラーと警告が表示されます。次の時点で「式は完全なオブジェクト型へのポインターである必要があります」というエラーが表示されます
i = packets[6]->src_ip;
構文に何か問題がありますか?? 上記のコードは、ホスト関数では正常に機能しますが、cuda __global__ 関数では機能しません。