【问题标题】:Does Vulkan support local subgroup memory sharing and manipulation?Vulkan 是否支持本地子组内存共享和操作?
【发布时间】:2021-10-23 05:40:21
【问题描述】:

在 OpenCL 中,只要我想操作子组内存,我就可以使用 __local。类似地,CUDA 有 __shared__ 关键字。 Vulkan 有类似的东西吗?我在子组教程中看不到任何内容 https://www.khronos.org/blog/vulkan-subgroup-tutorial 虽然我确实看到他们提到了共享内存,但他们从未真正解释过如何初始化它。

【问题讨论】:

标签: memory gpu vulkan gpu-local-memory


【解决方案1】:

Vulkan 支持shared 缓冲区。在这里更好地描述它们

https://www.khronos.org/opengl/wiki/Compute_Shader#Shared_variables

使用示例如下所示

layout (local_size_x = 32) in;

layout(std430, set = 0, binding = 1) buffer SomeBuffer{
    int some_ints[];
};

shared int[32] shared_ints;

void main(){
   shared_ints[gl_LocalInvocationID.x] = some_ints[gl_GlobalInvocationID.x];
}

【讨论】:

  • 那么这个词是工作组吗?工作组——被调度的线程块,可以通过共享内存共享数据,与屏障同步;子组是waves(AMD)或warps(nvidia),是工作组的一部分,所有线程一次执行相同的指令。如果您想在带有扩展名的子组内移动数据,请使用随机播放或广播。
  • 这个术语太混乱了。你可能知道一些详细描述它的地方吗?
猜你喜欢
  • 2019-05-07
  • 1970-01-01
  • 1970-01-01
  • 2021-07-26
  • 2011-08-10
  • 2011-11-06
  • 2011-07-20
  • 2022-08-11
  • 1970-01-01
相关资源
最近更新 更多