Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenCL本地内存有限制吗?_Opencl_Gpgpu_Gpu Shared Memory - Fatal编程技术网

OpenCL本地内存有限制吗?

OpenCL本地内存有限制吗?,opencl,gpgpu,gpu-shared-memory,Opencl,Gpgpu,Gpu Shared Memory,今天,我又向内核添加了四个\uu local变量以转储中间结果。但是,只需将另外四个变量添加到内核的签名并添加相应的内核参数,就会将内核的所有输出都渲染为“0”。所有cl函数都不会返回错误代码 我进一步尝试只添加两个较小变量中的一个。如果我只添加其中一个,它会工作,但如果我同时添加这两个,它会崩溃 那么OpenCL的这种行为是否意味着我分配了大量的本地内存?我怎样才能知道我有多少可用的\uu local内存?我不确定,但我觉得这是必须看到的 只需浏览以下链接。读一下 一本好书: 一点相关的东西:

今天,我又向内核添加了四个
\uu local
变量以转储中间结果。但是,只需将另外四个变量添加到内核的签名并添加相应的内核参数,就会将内核的所有输出都渲染为“0”。所有cl函数都不会返回错误代码

我进一步尝试只添加两个较小变量中的一个。如果我只添加其中一个,它会工作,但如果我同时添加这两个,它会崩溃


那么OpenCL的这种行为是否意味着我分配了大量的本地内存?我怎样才能知道我有多少可用的
\uu local
内存?

我不确定,但我觉得这是必须看到的

只需浏览以下链接。读一下

一本好书:

一点相关的东西:


通过使用带有
clGetDeviceInfo
功能的
CL\u device\u local\u MEM\u SIZE
标志,可以查询设备在其每个计算单元上提供的本地内存量:

cl_ulong size;
clGetDeviceInfo(deviceID, CL_DEVICE_LOCAL_MEM_SIZE, sizeof(cl_ulong), &size, 0);

返回的大小以字节为单位。每个工作组都可以严格地为自己分配这么多内存。但是,请注意,如果它确实分配最大值,这可能会阻止在同一计算单元上同时调度其他工作组。

当然有,因为本地内存是物理的,而不是虚拟的

从使用CPU上的虚拟地址空间到理论上拥有我们想要的内存—由于分页文件/交换分区耗尽,可能会在非常大的大小时失败,甚至可能不会,直到我们实际尝试使用太多内存,使其无法映射到物理RAM和磁盘

对于需要访问实际RAM中特定区域的计算机操作系统内核(或其较低级别的部分),情况并非如此

GPU全局和本地内存也不是这样。没有*内存分页(将感知到的线程地址重新映射到物理内存地址);没有交换。特别是关于本地内存,每个计算单元(=GPU上的每个对称多处理器)都有一组RAM用作本地内存;这里的绿色石板:

每一块这样的板的大小就是你得到的

clGetDeviceInfo(·,CL\u设备\本地\内存大小,·,·)

举例来说,在GPU上,本地内存大小为16KB或48KB(64KB的补码用于缓存对全局内存的访问)。因此,到今天为止,GPU本地内存相对于全局设备内存来说非常小



1-在以Pascal架构开始的nVIDIA GPU上,支持分页;但这不是使用设备内存的常见方式。

@einpoklum@CiroSantilli烏坎事件2016六四事件法轮功: 相应地更新了此答案,谢谢。现在请考虑删除评论。这被报告为“本地内存大小”。