Memory 将动态内存传递给cuda中结构数组的共享内存

Memory 将动态内存传递给cuda中结构数组的共享内存,memory,cuda,Memory,Cuda,我在主机中具有以下结构 struct cluster { double *centroid; int num_elements; double *sum_elements; }; 我想通过动态分配共享内存来调用CUDA内核。共享内存是上述结构的数组。上面的结构还有两个动态数组,它们将在内核中动态分配,但它们是已知的,让我们将数组的大小称为-d。我尝试使用以下方法调用内核: kernel<<<block, thread, 2*d*sizeof(doub

我在主机中具有以下结构

struct cluster {
    double *centroid;
    int num_elements;
    double *sum_elements;
 };
我想通过动态分配共享内存来调用CUDA内核。共享内存是上述结构的数组。上面的结构还有两个动态数组,它们将在内核中动态分配,但它们是已知的,让我们将数组的大小称为-d。我尝试使用以下方法调用内核:

kernel<<<block, thread, 2*d*sizeof(double) + sizeof(int)>>>
内核

但我发现一个结构的内存大小并不等于它的元素的内存大小之和。我的问题是:如何动态分配共享内存?谢谢。

既然@talomnies要求接受答案。。。我的答案是,你需要通过的尺寸是 d*sizeof(集群)


如果你想更多地了解它们,我还建议你看看。

嗯,你为什么认为
sizeof(double)
应该与
sizeof(*double)
相同?这和你之前(非常相似)的问题一样令人困惑。你到底在问什么?它是如何分配共享内存并将其分配给结构中的两个指针的吗?您肯定想为一个
d
结构数组分配
d*sizeof(cluster)
字节的共享内存吗?我很想知道我得到了什么感谢。你能不能写下你自己对这个问题的答案并接受它(这完全可以接受),或者编辑这个问题以便其他人可以接受?因为这里的目标是回答每一个问题,我不能这样做,因为我仍然不知道你最初问的是什么。。。。。。