首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >GPU上指针的大小与CPU上指针的大小

GPU上指针的大小与CPU上指针的大小
EN

Stack Overflow用户
提问于 2015-03-27 14:16:59
回答 4查看 1.1K关注 0票数 1

我在设备端定义了一个结构。它在GPU和CPU上会有相同的大小吗?

东道方:

代码语言:javascript
运行
复制
typedef struct {
    cl_float4* ptr;
} my_struct_cpu;

设备侧:

代码语言:javascript
运行
复制
typedef struct {
    float4* ptr;
} my_struct_gpu;
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-03-27 21:31:10

代码语言:javascript
运行
复制
typedef struct {
    cl_float4* ptr;
} my_struct_cpu;

在这种情况下,主机指针的大小为(int*) == sizeof(cl_float4*),它将映射到4字节或8字节,这取决于应用程序是用32位还是64位编译的。最有可能是64位,如果你是在一个非移动设备,也许32位或64位在智能手机,尽管这是正在改变。

代码语言:javascript
运行
复制
typedef struct {
    float4* ptr;
} my_struct_gpu;

==的大小(int*)在设备上也可以是32位或64位,但是,对于OpenCL 1.x,不需要主机指针和设备指针的大小相同,实际上,OpenCL 2.x的GPU将是32位pointers.h,这是非常常见的情况。尤其是,OpenCL 2.0在CPU和GPU之间引入了共享虚拟内存,作为扩展,如果给定的OpenCL平台支持这一点,那么主机和设备指针的大小实际上是相同的。此外,如果支持全细粒度支持向量机,这是一个额外的扩展,那么就可以将主机指针直接传递给设备,例如在其他数据结构中。

票数 1
EN

Stack Overflow用户

发布于 2015-03-27 14:58:12

你能举个例子说明你将如何使用它吗?

这种结构在两边使用基本上都是胡说八道,因为您不能在另一个cl_mem中传递指向一个cl_mem的指针。

票数 0
EN

Stack Overflow用户

发布于 2015-03-27 15:24:14

不能保证设备上指针的大小与主机上的大小相同。因此,也不能保证结构将具有相同的大小。

通过使用clGetDeviceInfoCL_DEVICE_ADDRESS_BITS作为param_name,可以在运行时为特定设备的指针请求使用的大小。OpenCL规范说明了返回值的如下内容。

指定为无符号整数值的默认计算设备地址空间大小(以位为单位)。当前支持的值为32位或64位。

我在上面测试的机器使用64位大小的指针,而GPU则返回32位。因此,在这种情况下,结构将是不同的大小。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29302831

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档