CUDA内核中的访问结构成员

CUDA内核中的访问结构成员,cuda,Cuda,我有一个结构 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 mai

我有一个结构

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);

}
主要功能如下:

__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);

}
语法有什么错误吗??
上述代码适用于主机函数,但不适用于cuda全局函数。

您使用了错误的运算符访问数据包数组中的元素

更改:

i = (int) packets[6]->src_ip;
                   ^^^^
致:


另外,不要试图通过添加随机强制转换来修复编译错误—这通常不是正确的解决方案—始终尝试理解根本问题并正确修复它。

您使用了错误的运算符来访问数据包数组中的元素

更改:

i = (int) packets[6]->src_ip;
                   ^^^^
致:


另外,不要试图通过添加随机强制转换来修复编译错误-这通常不是正确的解决方案-始终尝试理解潜在问题并正确修复它。

以后,在发布问题时,请更加注意代码格式。如果您希望人们在一个问题中阅读大量您的代码,请尽量将其格式化,以便易于阅读和理解。今后,在发布问题时,请更加注意代码格式。如果您希望人们在一个问题中阅读大量您的代码,请尽量将其格式化,使其易于阅读和理解。我更改了它,但仍然是相同的错误,很好,谢谢你的回复。你确定你把
->
改成了
?你的内核代码可以看到
结构包的完整声明,也就是说,你已经包含了相关的头,或者它声明在同一个源文件中?(为了“修复”早期的编译错误,您并没有在内核源文件中匿名声明
struct packet;
)当我获取您的代码时,用它构建一个完整的应用程序,并且只进行Paul R建议的更改,它正确编译,没有错误(只有警告),如图所示。如果您仍然有问题,那是因为您没有告诉我们或告诉我们您是如何安排代码或编译的。我更改了它,但仍然是相同的错误,非常感谢您的回答。您确定您已将
->
更改为
?并且您的内核代码可以看到
结构包的完整声明
,也就是说,您已经包含了相关的头文件,或者它声明在同一个源文件中?(为了“修复”早期的编译错误,您并没有在内核源文件中匿名声明
struct packet;
)当我获取您的代码时,用它构建一个完整的应用程序,并且只进行Paul R建议的更改,它正确编译,没有错误(只有警告),如图所示。如果您仍然有问题,那是因为您没有告诉我们或向我们展示如何安排代码或编译。