memory - 本地内存,我假设的概念正确吗?

标签 memory opencl gpu local

我使用的是 HD5770,它有 10 个计算单元和 32k 本地内存。

我的全局尺寸是256 * 256,
我的本地尺寸是 256

每个工作组需要使用 1k 本地内存,我如下指定:

clSetKernelArg(predicate, param++, 1024, NULL);

首先:这是分配本地内存的正确方法吗?或者我是否必须在设置内核参数以及稍后对此的索引时指定所有工作组一起使用的缓冲区的整体大小缓冲区取决于本地 ID?

第二:一个工作组只能在一个计算单元上执行吗?

第三:工作组结束后内存会被释放吗? (如果每个工作组使用 1k,则 32k 对于 256 个工作组来说是不够的)

或者以更一般的方式:调度程序是否会处理不并行调度超过 32 个工作组的情况?

谢谢!

最佳答案

1) 这就是您分配 1024 字节未初始化本地内存的方式,所以如果这就是您想要的,那么是的,您做得对。您还可以像这样定义内核内部的内存:

__local float localBuffer[1024];

2) 这是实现定义的,所以没有办法知道,你也不能假设这一点。一般来说,一个工作组在多个计算单元上执行,但就像我说的,你永远不知道。

3)内存将在下次使用时被覆盖,因此您不必担心释放它,特别是因为它尚未初始化并且您没有传入某些缓冲区。

希望这有帮助

关于memory - 本地内存,我假设的概念正确吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14920979/

相关文章:

c - 声明一次数组 C

java - EhCache 的 CacheStatistics getCacheHits 与 getInMemoryHits

memory - elasticsearch - max_map_count 与堆大小

在 Visual Studio 10 中使用 OpenCL 的 C++/CLI

opencl - OpenCL 内核执行时间过长导致崩溃

Android:像 Whatsapp 一样在没有 GPU OverDraw 的情况下绘制背景

C - 如何释放在其节点中具有链表的链表?

c++ - 是否有与 Thrust(GPU 的并行 STL)类似的库,但用于 GPGPU AMD Radeon?

c++ - OpenAcc标准中内核与并行指令之间的区别

cuda - Nvidia Profiling NVPROF 的 CPU 启动和 GPU 启动的开始和结束边界在哪里?