如何将值加载到外部共享数组中
How to load values into extern shared array
将数组从全局内存加载到共享内存时,共享内存中的变量无法执行我想要的操作。
template<class T>
__global__ void kernel(T *t1,T *t2)
{
int tid=threadIdx.x;
extern __shared__ T array1[];
extern __shared__ T array2[];
array1[tid]=t1[tid];//copy (1)
array2[tid]=t2[tid];//copy (2)
__syncthreads();
}
事实证明,array1[tid]
=array2[tid]
=t2[tid]
。
当copy (1)
和copy (2)
的位置交换时,结果是array1[tid]
=array2[tid]
=t1[tid]
。
只有当我删除extern
时,结果才是我想要的(array1[tid]
=t1[tid]
,array2[tid]
=t2[tid]
)。
有人能解释为什么吗?
这:
extern __shared__ T array1[];
extern __shared__ T array2[];
不会像你想的那样工作。
这些指针(array1
和array2
)将指向相同的位置。
如果希望使用动态分配的共享内存来创建多个阵列,则必须按照编程指南中给出的说明进行操作。类似这样的东西:
extern __shared__ T array1[];
T * array2 = array1 + size_of_array_1;
应该起作用。
并且确保在内核启动参数中传递一个大小分配,该大小分配对于array1
的大小和array2
的大小都是足够的字节
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 在cuda线程之间共享大量常量数据
- 如何从具有移动语义的类对象中生成共享指针
- 仅在少数方法(静态或共享库)中解析的外部符号
- 共享需要外部库的 Visual Studio 项目
- 如何使用Makevars链接到RCPP中已经编译的外部共享库
- 无法将Android WebView渲染到C 和Java代码之间共享的外部纹理中
- 如何包含具有多个 dll/dylib 的外部(共享)库
- 加载共享库时出错:无法在外部硬件上打开共享对象文件:
- 增强共享内存:文件的卷已被外部更改,打开文件不再有效
- 如何将值加载到外部共享数组中
- 如何将外部共享库链接到本机扩展
- 外部应用程序使用共享内存接收消息,但没有包含的数据
- CMake:从外部项目链接共享C++对象会生成具有相对路径的二进制文件,而不是绝对路径
- 加载外部共享库时出现 G++ 链接问题
- 如何为android构建外部c++库(静态或共享)
- c++主外部函数之间的共享列表
- 在类之间共享向量时,无法解析的外部符号向量
- 我可以在两个OpenGL上下文之间共享外部纹理吗?