在内核函数中,我想要两个共享内存向量,两者都有size长度(实际上sizeof(float)*size).
因为如果需要变量就无法直接在内核函数中分配内存,我必须动态分配它,如:
myKernel<<<numBlocks, numThreads, 2*sizeof(float)*size>>> (...);
Run Code Online (Sandbox Code Playgroud)
并且,在内核中:
extern __shared__ float row[];
extern __shared__ float results[];
Run Code Online (Sandbox Code Playgroud)
但是,这不起作用.
取而代之的是,我只extern __shared__ float rowresults[]使用2*size分配的内存制作了一个包含所有数据的向量.所以row通话仍然是一样的,results通话也是如此rowresults[size+previousIndex].这确实有效.
这不是一个大问题,因为无论如何我得到了我期望的结果,但有没有办法将我动态分配的共享内存分成两个(或更多)不同的变量?只是为了美丽.
__shared__上的C编程指南部分包括从动态分配的共享内存中分配多个数组的示例:
extern __shared__ float array[];
__device__ void func() // __device__ or __global__ function
{
short* array0 = (short*)array;
float* array1 = (float*)&array0[128];
int* array2 = (int*)&array1[64];
}
Run Code Online (Sandbox Code Playgroud)
由于您只是获取指向元素的指针并使其成为新数组,我相信您可以调整它以使用动态偏移而不是示例中的静态偏移.他们还注意到对齐必须相同,这在您的情况下不应该是一个问题.
| 归档时间: |
|
| 查看次数: |
11398 次 |
| 最近记录: |