开发商,
有人可以给我一个提示吗?我没有找到任何关于如何在同一个内核中分配常量和动态共享内存的信息,或者让我们更珍贵地问:如何调用一个内核,其中需要分配的共享内存量在编译时只是部分知道?以分配共享内存为例,如何进行动态分配变得非常明显。但是让我们假设我有以下内核:
__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)) ?
请赐教或只是简单地指向一些代码片段。提前非常感谢。
欢呼格雷格