Поддерживает ли Vulkan совместное использование памяти и манипулирование локальной подгруппой?
В OpenCL я мог бы использовать
__local
всякий раз, когда я хотел манипулировать памятью подгруппы. Аналогично CUDA имеет
__shared__
ключевое слово. Есть ли у Vulkan что-то подобное? Я ничего не вижу в руководстве по подгруппе https://www.khronos.org/blog/vulkan-subgroup-tutorial, хотя я вижу, что они упоминают общую память, но никогда не объясняют, как ее инициализировать.
1 ответ
Вулкан поддерживает
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];
}