【发布时间】:2013-03-07 02:37:37
【问题描述】:
开发人员,
有人可以给我一个提示吗? 我没有找到任何关于如何在同一个内核中分配常量和动态共享内存的信息,或者让我们更珍贵地问一下: 如何调用内核,其中需要分配的共享内存量在编译时只是部分知道? 例如,参考allocating shared memory,如何进行动态分配变得非常明显。 但是让我们假设我有以下内核:
__global__ void MyKernel(int Float4ArrSize, int FloatArrSize)
{
__shared__ float Arr1[256];
__shared__ char Arr2[256];
extern __shared_ float DynamArr[];
float4* DynamArr1 = (float4*) DynamArr;
float* DynamArr = (float*) &DynamArr1[Float4ArrSize];
// do something
}
内核调用:
int SharedMemorySize = Float4ArrSize + FloatArrSize;
SubstractKernel<<< numBlocks, threadsPerBlock, SharedMemorySize, stream>>>(Float4ArrSize, FloatArrSize)
我实际上无法弄清楚编译器如何将共享内存的大小仅链接到我想要动态分配的部分。 或者参数“SharedMemeorySize”是否代表了每块共享内存的总量,所以我需要计算常量内存的大小(int SharedMemorySize = Float4ArrSize + FloatArrSize + 256*sizeof(float)+ 256*sizeof(char)) ?
请赐教或只是简单地指向一些代码sn-ps。 提前非常感谢。
干杯格雷格
【问题讨论】:
-
操作!它只需要一个
__shared__变量。尝试将所有内容组合到一个结构中。 -
@SorooshBateni 不,它没有!内核调用中的参数只影响动态分配的共享内存的大小,静态分配的部分不受影响,它们的方式很好。
-
是的,我说动态分配单元 (:D) 只需要一个
__shared__变量。
标签: c++ cuda shared-memory