From 8ef161d28940564be66bdc97765da29ec56f4cdd Mon Sep 17 00:00:00 2001 From: keptsecret Date: Fri, 20 Jun 2025 14:55:45 +0700 Subject: [PATCH 1/9] first draft of subgroup scan article --- .../index.md | 201 ++++++++++++++++++ blog/authors.yml | 11 +- 2 files changed, 211 insertions(+), 1 deletion(-) create mode 100644 blog/2025/2025-06-19-subgroup-shuffle-reconvergence-on-nvidia/index.md diff --git a/blog/2025/2025-06-19-subgroup-shuffle-reconvergence-on-nvidia/index.md b/blog/2025/2025-06-19-subgroup-shuffle-reconvergence-on-nvidia/index.md new file mode 100644 index 0000000..39f97d9 --- /dev/null +++ b/blog/2025/2025-06-19-subgroup-shuffle-reconvergence-on-nvidia/index.md @@ -0,0 +1,201 @@ +--- +title: 'Nvidia SPIR-V Compiler Bug or Do Subgroup Shuffle Operations Not Imply Reconvergence?' +slug: 'subgroup-shuffle-reconvergence-on-nvidia' +description: "A look at the behavior behind Nabla's subgroup scan" +date: '2025-06-19' +authors: ['keptsecret'] +tags: ['nabla', 'vulkan', 'article'] +last_update: + date: '2025-06-19' + author: keptsecret +--- + +Reduce and scan operations are core building blocks in the world of parallel computing, and now Nabla has a new release with those operations made even faster for Vulkan at the subgroup and workgroup levels. + +This article takes a brief look at the Nabla implementation for reduce and scan on the GPU in Vulkan, and then a discussion on expected reconvergence behavior after subgroup operations. + + + +## Reduce and Scan + +Let's give a quick introduction, or recap for those already familiar, to reduce and scan operations. + +A reduction takes a binary associative operator $\bigoplus$ and an array of $n$ elements + +$\left[x_0, x_1,...,x_{n-1}\right]$, + +and returns + +$x_0 \bigoplus x_1 \bigoplus ... \bigoplus x_{n-1}$. + +In other words, when $\bigoplus$ is an addition, a reduction of the array $X$ is then the sum of all elements of array $X$. + +``` +Input: 4 6 2 3 7 1 0 5 +Reduction: 28 +``` + +A scan is a generalization of reduction, and takes a binary associative operator $\bigoplus$ with identity $I$ and an array of $n$ elements. +Then, for each element, performs the reduction from the first element to the current element. +An _exclusive_ scan does so for all elements before the current element. + +$\left[I, x_0, (x_0 \bigoplus x_1), ..., (x_0 \bigoplus x_1 \bigoplus ... \bigoplus x_{n-2})\right]$. + +An _inclusive_ scan then includes the current element as well. + +$\left[x_0, (x_0 \bigoplus x_1), ..., (x_0 \bigoplus x_1 \bigoplus ... \bigoplus x_{n-1})\right]$. + +Notice the last element of the inclusive scan is the same as the reduction. + +``` +Input: 4 6 2 3 7 1 0 5 +Exclusive: 0 4 10 12 15 22 23 23 +Inclusive: 4 10 12 15 22 23 23 28 +``` + +## Nabla's subgroup scans + +We start with the most basic of building blocks: doing a reduction or a scan in the local subgroup of a Vulkan device. +Pretty simple actually, since Vulkan already has subgroup arithmetic operations supported via SPIRV, and it's all available in Nabla. + +```cpp +nbl::hlsl::glsl::groupAdd(T value) +nbl::hlsl::glsl::groupInclusiveAdd(T value) +nbl::hlsl::glsl::groupExclusiveAdd(T value) +etc... +``` + +But wait, the SPIRV-provided operations all require your Vulkan physical device to have support the `GroupNonUniformArithmetic` capability. +So, Nabla provides emulated versions for that too, and it's all compiled into a single templated struct call. + +```cpp +template +struct inclusive_scan; + +template +struct exclusive_scan; + +template +struct reduction; +``` + +The implementation of emulated subgroup scans make use of subgroup shuffle operations to access partial sums from other invocations in the subgroup. + +```cpp +T inclusive_scan(T value) +{ + rhs = shuffleUp(value, 1) + value = value + (firstInvocation ? identity : rhs) + + for (i = 1; i < SubgroupSizeLog2; i++) + { + nextLevelStep = 1 << i + rhs = shuffleUp(value, nextLevelStep) + value = value + (nextLevelStep out of bounds ? identity : rhs) + } + return value +} +``` + +In addition, Nabla also supports passing vectors into these subgroup operations, so you can perform reduce or scans on up to subgroup size * 4 (for `vec4`) elements per call. +Note that it expects the elements in the vectors to be consecutive and in the same order as the input array. + +You can find all the implementations on the [Nabla repository](https://github.com/Devsh-Graphics-Programming/Nabla/blob/master/include/nbl/builtin/hlsl/subgroup2/arithmetic_portability_impl.hlsl) + +## An issue with subgroup sync and reconvergence + +Now, onto a pretty significant, but strangely obscure, problem that I ran into during unit testing this prior to release. +Nabla also has implementations for workgroup reduce and scans that make use of the subgroup scans above, and one such section looks like this. + +```cpp +... workgroup scan code ... + +for (idx = 0; idx < VirtualWorkgroupSize / WorkgroupSize; idx++) +{ + value = getValueFromDataAccessor(memoryIdx) + + value = subgroup::inclusive_scan(value) + + setValueToDataAccessor(memoryIdx) + + if (lastSubgroupInvocation) + { + setValueToSharedMemory(smemIdx) + } +} +control_barrier() + +... workgroup scan code ... +``` + +At first glance, it looks fine, and it does produce the expected results for the most part... except in some very specific cases. +And from some more testing and debugging to try and identify the cause, I've found the conditions to be: + +* using an Nvidia GPU +* using emulated versions of subgroup operations +* a decent number of iterations in the loop (in this case at least 8). + +I tested this on an Intel GPU, to be sure, and the workgroup scan ran correctly. +That was very baffling initially. And the results produced on an Nvidia device looked like a sync problem. + +It was even more convincing when I moved the control barrier inside the loop and it immediately produced correct scan results. + +```cpp +... workgroup scan code ... + +for (idx = 0; idx < VirtualWorkgroupSize / WorkgroupSize; idx++) +{ + value = getValueFromDataAccessor(memoryIdx) + + value = subgroup::inclusive_scan(value) + + setValueToDataAccessor(memoryIdx) + + if (lastSubgroupInvocation) + { + setValueToSharedMemory(smemIdx) + } + control_barrier() +} + +... workgroup scan code ... +``` + +Ultimately, we came to the conclusion that each subgroup invocation was probably somehow not in sync as each loop went on. +Particularly, the last invocation that spends some extra time writing to shared memory may have been lagging behind. +It is a simple fix to the emulated subgroup reduce and scan. A memory barrier was enough. + +```cpp +T inclusive_scan(T value) +{ + memory_barrier() + + rhs = shuffleUp(value, 1) + value = value + (firstInvocation ? identity : rhs) + + for (i = 1; i < SubgroupSizeLog2; i++) + { + nextLevelStep = 1 << i + rhs = shuffleUp(value, nextLevelStep) + value = value + (nextLevelStep out of bounds ? identity : rhs) + } + return value +} +``` + +As a side note, using the `SPV_KHR_maximal_reconvergence` extension doesn't resolve this issue surprisingly. + +However, this was only a problem on Nvidia devices. +And as the title of this article states, it's unclear whether this is a bug in Nvidia's SPIRV compiler or subgroup shuffle operations just do not imply reconvergence in the spec. + +------------------- + +P.S. you may note in the source code that the memory barrier contains the workgroup memory mask, despite us only needing sync in the subgroup scope. + +```cpp +spirv::memoryBarrier(spv::ScopeSubgroup, spv::MemorySemanticsWorkgroupMemoryMask | spv::MemorySemanticsAcquireMask); +``` + +This is because unfortunately, the subgroup memory mask doesn't seem to count as a storage class, at least according to the Vulkan SPIRV validator. +Only the next step up in memory level is valid. +I feel like there's possibly something missing here. diff --git a/blog/authors.yml b/blog/authors.yml index f7e1c12..50e704d 100644 --- a/blog/authors.yml +++ b/blog/authors.yml @@ -32,4 +32,13 @@ fletterio: image_url: https://avatars.githubusercontent.com/u/40742817?v=4 page: true socials: - github: Fletterio \ No newline at end of file + github: Fletterio + +keptsecret: + name: Sorakrit Chonwattanagul + title: Junior Developer @ DevSH GP + url: https://github.com/keptsecret/ + image_url: https://avatars.githubusercontent.com/u/27181108?v=4 + page: true + socials: + github: keptsecret \ No newline at end of file From dc0a64df24b94d4040058ea52ddff1ab1b6c41d8 Mon Sep 17 00:00:00 2001 From: keptsecret Date: Mon, 23 Jun 2025 14:59:02 +0700 Subject: [PATCH 2/9] some corrections --- .../index.md | 25 ++++++------------- 1 file changed, 8 insertions(+), 17 deletions(-) diff --git a/blog/2025/2025-06-19-subgroup-shuffle-reconvergence-on-nvidia/index.md b/blog/2025/2025-06-19-subgroup-shuffle-reconvergence-on-nvidia/index.md index 39f97d9..dad08a7 100644 --- a/blog/2025/2025-06-19-subgroup-shuffle-reconvergence-on-nvidia/index.md +++ b/blog/2025/2025-06-19-subgroup-shuffle-reconvergence-on-nvidia/index.md @@ -66,7 +66,7 @@ etc... ``` But wait, the SPIRV-provided operations all require your Vulkan physical device to have support the `GroupNonUniformArithmetic` capability. -So, Nabla provides emulated versions for that too, and it's all compiled into a single templated struct call. +So, Nabla provides emulated versions for that too, and both versions are compiled into a single templated struct call. ```cpp template @@ -129,7 +129,7 @@ control_barrier() ``` At first glance, it looks fine, and it does produce the expected results for the most part... except in some very specific cases. -And from some more testing and debugging to try and identify the cause, I've found the conditions to be: +And from some more testing and debugging to try and identify the cause, I've found the conditions to be: * using an Nvidia GPU * using emulated versions of subgroup operations @@ -163,12 +163,12 @@ for (idx = 0; idx < VirtualWorkgroupSize / WorkgroupSize; idx++) Ultimately, we came to the conclusion that each subgroup invocation was probably somehow not in sync as each loop went on. Particularly, the last invocation that spends some extra time writing to shared memory may have been lagging behind. -It is a simple fix to the emulated subgroup reduce and scan. A memory barrier was enough. +It is a simple fix to the emulated subgroup reduce and scan. A subgroup barrier was enough. ```cpp T inclusive_scan(T value) { - memory_barrier() + control_barrier() rhs = shuffleUp(value, 1) value = value + (firstInvocation ? identity : rhs) @@ -185,17 +185,8 @@ T inclusive_scan(T value) As a side note, using the `SPV_KHR_maximal_reconvergence` extension doesn't resolve this issue surprisingly. -However, this was only a problem on Nvidia devices. -And as the title of this article states, it's unclear whether this is a bug in Nvidia's SPIRV compiler or subgroup shuffle operations just do not imply reconvergence in the spec. - -------------------- - -P.S. you may note in the source code that the memory barrier contains the workgroup memory mask, despite us only needing sync in the subgroup scope. - -```cpp -spirv::memoryBarrier(spv::ScopeSubgroup, spv::MemorySemanticsWorkgroupMemoryMask | spv::MemorySemanticsAcquireMask); -``` +However, this problem was only observed on Nvidia devices. +And as the title of this article states, it's unclear whether this is a bug in Nvidia's SPIRV compiler or subgroup shuffle operations just do not imply reconvergence in the Vulkan specification. -This is because unfortunately, the subgroup memory mask doesn't seem to count as a storage class, at least according to the Vulkan SPIRV validator. -Only the next step up in memory level is valid. -I feel like there's possibly something missing here. +---------------------------- +_This issue was observed happening inconsistently on Nvidia driver version 576.80, released 17th June 2025._ From 8f6ade82f3d4b0e31401fea0a9b2b4e39d27f2a9 Mon Sep 17 00:00:00 2001 From: keptsecret Date: Tue, 24 Jun 2025 16:53:41 +0700 Subject: [PATCH 3/9] much more info, discussion on topic --- .../index.md | 81 ++++++++++++++++--- blog/authors.yml | 13 ++- 2 files changed, 79 insertions(+), 15 deletions(-) diff --git a/blog/2025/2025-06-19-subgroup-shuffle-reconvergence-on-nvidia/index.md b/blog/2025/2025-06-19-subgroup-shuffle-reconvergence-on-nvidia/index.md index dad08a7..fefc919 100644 --- a/blog/2025/2025-06-19-subgroup-shuffle-reconvergence-on-nvidia/index.md +++ b/blog/2025/2025-06-19-subgroup-shuffle-reconvergence-on-nvidia/index.md @@ -3,16 +3,17 @@ title: 'Nvidia SPIR-V Compiler Bug or Do Subgroup Shuffle Operations Not Imply R slug: 'subgroup-shuffle-reconvergence-on-nvidia' description: "A look at the behavior behind Nabla's subgroup scan" date: '2025-06-19' -authors: ['keptsecret'] +authors: ['keptsecret', 'devshgraphicsprogramming'] tags: ['nabla', 'vulkan', 'article'] last_update: date: '2025-06-19' author: keptsecret --- -Reduce and scan operations are core building blocks in the world of parallel computing, and now Nabla has a new release with those operations made even faster for Vulkan at the subgroup and workgroup levels. +Reduce and scan operations are core building blocks in the world of parallel computing, and now [Nabla has a new release](https://github.com/Devsh-Graphics-Programming/Nabla/tree/v0.6.2-alpha1) with those operations made even faster for Vulkan at the subgroup and workgroup levels. -This article takes a brief look at the Nabla implementation for reduce and scan on the GPU in Vulkan, and then a discussion on expected reconvergence behavior after subgroup operations. +This article takes a brief look at the Nabla implementation for reduce and scan on the GPU in Vulkan. +Then, I discuss a missing reconvergence behavior that was expected after subgroup shuffle operations that was only observed on Nvidia devices. @@ -56,7 +57,8 @@ Inclusive: 4 10 12 15 22 23 23 28 ## Nabla's subgroup scans We start with the most basic of building blocks: doing a reduction or a scan in the local subgroup of a Vulkan device. -Pretty simple actually, since Vulkan already has subgroup arithmetic operations supported via SPIRV, and it's all available in Nabla. +Pretty simple actually, since Vulkan already has subgroup arithmetic operations supported. +Nabla exposes this via the [GLSL compatibility header](https://github.com/Devsh-Graphics-Programming/Nabla/blob/v0.6.2-alpha1/include/nbl/builtin/hlsl/glsl_compat/subgroup_arithmetic.hlsl) built of [HLSL SPIR-V inline intrinsics](https://github.com/Devsh-Graphics-Programming/Nabla/blob/v0.6.2-alpha1/include/nbl/builtin/hlsl/spirv_intrinsics/subgroup_arithmetic.hlsl). ```cpp nbl::hlsl::glsl::groupAdd(T value) @@ -65,7 +67,7 @@ nbl::hlsl::glsl::groupExclusiveAdd(T value) etc... ``` -But wait, the SPIRV-provided operations all require your Vulkan physical device to have support the `GroupNonUniformArithmetic` capability. +But wait, the SPIR-V-provided operations all require your Vulkan physical device to have support the `GroupNonUniformArithmetic` capability. So, Nabla provides emulated versions for that too, and both versions are compiled into a single templated struct call. ```cpp @@ -80,6 +82,8 @@ struct reduction; ``` The implementation of emulated subgroup scans make use of subgroup shuffle operations to access partial sums from other invocations in the subgroup. +This is based on the [Kogge–Stone adder (KSA)](https://developer.nvidia.com/gpugems/gpugems3/part-vi-gpu-computing/chapter-39-parallel-prefix-sum-scan-cuda), using $\log_2 n$ steps where $n$ is the subgroup size with all lanes active. +It should also be noted that in cases like this where the SIMD/SIMT processor pays for all lanes regardless of whether or not they're active, the KSA design is faster than more theoretically work-efficient parallel scans like the Blelloch (which we use at the workgroup granularity). ```cpp T inclusive_scan(T value) @@ -99,8 +103,9 @@ T inclusive_scan(T value) In addition, Nabla also supports passing vectors into these subgroup operations, so you can perform reduce or scans on up to subgroup size * 4 (for `vec4`) elements per call. Note that it expects the elements in the vectors to be consecutive and in the same order as the input array. +This is because we've found through benchmarking that the instructing the GPU to do a vector load/store results in faster performance than any attempt at coalesced load/store. -You can find all the implementations on the [Nabla repository](https://github.com/Devsh-Graphics-Programming/Nabla/blob/master/include/nbl/builtin/hlsl/subgroup2/arithmetic_portability_impl.hlsl) +You can find all the implementations on the [Nabla repository](https://github.com/Devsh-Graphics-Programming/Nabla/blob/v0.6.2-alpha1/include/nbl/builtin/hlsl/subgroup2/arithmetic_portability_impl.hlsl) ## An issue with subgroup sync and reconvergence @@ -110,6 +115,7 @@ Nabla also has implementations for workgroup reduce and scans that make use of t ```cpp ... workgroup scan code ... +debug_barrier() for (idx = 0; idx < VirtualWorkgroupSize / WorkgroupSize; idx++) { value = getValueFromDataAccessor(memoryIdx) @@ -123,11 +129,13 @@ for (idx = 0; idx < VirtualWorkgroupSize / WorkgroupSize; idx++) setValueToSharedMemory(smemIdx) } } -control_barrier() +workgroup_execution_and_memory_barrier() ... workgroup scan code ... ``` +_I should note that `memoryIdx` is unique and per-invocation, and also that shared memory is only written to in this step to be accessed in later steps._ + At first glance, it looks fine, and it does produce the expected results for the most part... except in some very specific cases. And from some more testing and debugging to try and identify the cause, I've found the conditions to be: @@ -143,6 +151,7 @@ It was even more convincing when I moved the control barrier inside the loop and ```cpp ... workgroup scan code ... +debug_barrier() for (idx = 0; idx < VirtualWorkgroupSize / WorkgroupSize; idx++) { value = getValueFromDataAccessor(memoryIdx) @@ -155,20 +164,20 @@ for (idx = 0; idx < VirtualWorkgroupSize / WorkgroupSize; idx++) { setValueToSharedMemory(smemIdx) } - control_barrier() + workgroup_execution_and_memory_barrier() } ... workgroup scan code ... ``` Ultimately, we came to the conclusion that each subgroup invocation was probably somehow not in sync as each loop went on. -Particularly, the last invocation that spends some extra time writing to shared memory may have been lagging behind. -It is a simple fix to the emulated subgroup reduce and scan. A subgroup barrier was enough. +Particularly, the effect we're seeing is a shuffle done as if `value` is not in lockstep at the call site. +We tested using a subgroup execution barrier and maximal reconvergence, and found out a memory barrier is enough. ```cpp T inclusive_scan(T value) { - control_barrier() + memory_barrier() rhs = shuffleUp(value, 1) value = value + (firstInvocation ? identity : rhs) @@ -183,10 +192,56 @@ T inclusive_scan(T value) } ``` +However, this problem was only observed on Nvidia devices. + As a side note, using the `SPV_KHR_maximal_reconvergence` extension doesn't resolve this issue surprisingly. +I feel I should point out that many presentations and code listings seem to give an impression subgroup shuffle operations execute in lockstep based on the very simple examples provided. +For instance, [the example in this presentation](https://vulkan.org/user/pages/09.events/vulkanised-2025/T08-Hugo-Devillers-SaarlandUniversity.pdf) correctly demonstrates where invocations in a tangle are reading and storing to SSBO, but may mislead readers into not considering the Availability and Visibility for other scenarios that need it. +Specifically, it does not have an intended read-after write if invocations in a tangle execute in lockstep. +(With that said, since subgroup operations are SSA and take arguments "by copy", this discussion of Memory Dependencies and availability-visibility is not relevant to our problem, but just something to be aware of.) -However, this problem was only observed on Nvidia devices. -And as the title of this article states, it's unclear whether this is a bug in Nvidia's SPIRV compiler or subgroup shuffle operations just do not imply reconvergence in the Vulkan specification. +### A minor detour onto the performance of native vs. emulated on Nvidia devices + +I think this observation warrants a small discussion section of its own. +The table below are some numbers from our benchmark measured through Nvidia's Nsight Graphics profiler of a subgroup inclusive scan using native SPIR-V instructions and our emulated version. + +_Native_ + +| Workgroup size | SM throughput (%) | CS warp occupancy (%) | # registers | Dispatch time (ms) | +| :------------: | :---------------: | :-------------------: | :---------: | :----------------: | +| 256 | 41.6 | 90.5 | 16 | 27 | +| 512 | 41.4 | 89.7 | 16 | 27.15 | +| 1024 | 40.5 | 59.7 | 16 | 27.74 | + +_Emulated_ + +| Workgroup size | SM throughput (%) | CS warp occupancy (%) | # registers | Dispatch time (ms) | +| :------------: | :---------------: | :-------------------: | :---------: | :----------------: | +| 256 | 37.9 | 90.7 | 16 | 12.22 | +| 512 | 37.7 | 90.3 | 16 | 12.3 | +| 1024 | 37.1 | 60.5 | 16 | 12.47 | + +These numbers are baffling to say the least, particularly the fact that our emulated subgroup scans are twice as fast than the native solution. +It should be noted that this is with the subgroup barrier in place, not that we saw any marked decrease in performance compared to earlier versions without it. + +An potential explanation for this may be that Nvidia has to consider any inactive invocations in a subgroup, having them behave as if they contribute the identity $I$ element to the scan. +Our emulated scan instead requires people call the arithmetic in subgroup uniform fashion. +If that is not the case, this seems like a cause for concern for Nvidia's SPIR-V compiler. + +### What could cause this behavior on Nvidia? — The Independent Program Counter + +We think a potential culprit for this could be Nvidia's Independent Program Counter (IPC) that was introduced with the Volta architecture. + +Prior to Volta, all threads in a subgroup share the same program counter, which handles scheduling of instructions across all those threads. +This means all threads in the same subgroup execute the same instruction at any given time. +Therefore, when you have a branch in the program flow across threads in the same subgroup, all execution paths generally have to be executed and mask off threads that should not be active for that path. + +With Volta up to now, each thread has its own program counter that allows it to execute independently of other threads in the same subgroup. +This also provides a new possibility on Nvidia devices, where you can now synchronize threads in the same subgroup. +In CUDA, this is exposed through `__syncwarp()`, and we can do similar in Vulkan using subgroup control barriers. +It's entirely possible that each subgroup shuffle operation does not run in lockstep, with the branching introduced in the loop, which would be why that is our solution to the problem for now. + +In the end, it's unclear whether this is a bug in Nvidia's SPIR-V compiler or subgroup shuffle operations just do not imply reconvergence in the Vulkan specification. ---------------------------- _This issue was observed happening inconsistently on Nvidia driver version 576.80, released 17th June 2025._ diff --git a/blog/authors.yml b/blog/authors.yml index 50e704d..58fa4d8 100644 --- a/blog/authors.yml +++ b/blog/authors.yml @@ -36,9 +36,18 @@ fletterio: keptsecret: name: Sorakrit Chonwattanagul - title: Junior Developer @ DevSH GP + title: Associate Developer @ DevSH GP url: https://github.com/keptsecret/ image_url: https://avatars.githubusercontent.com/u/27181108?v=4 page: true socials: - github: keptsecret \ No newline at end of file + github: keptsecret + +devshgraphicsprogramming: + name: Mateusz Kielan + title: CTO of DevSH GP + url: https://github.com/devshgraphicsprogramming + image_url: https://avatars.githubusercontent.com/u/6894321?v=4 + page: true + socials: + github: devshgraphicsprogramming From b29b0c815513c014eaf6969456419d7c14e5f99e Mon Sep 17 00:00:00 2001 From: keptsecret Date: Tue, 24 Jun 2025 16:56:34 +0700 Subject: [PATCH 4/9] added devsh to froglist --- static/webring/froglist.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/static/webring/froglist.json b/static/webring/froglist.json index ca55d24..de4e856 100644 --- a/static/webring/froglist.json +++ b/static/webring/froglist.json @@ -76,5 +76,11 @@ "url": "https://rtarun9.github.io/", "displayName": "Tarun R", "description": "Personal site with projects and blogs that are rarely updated" + }, + { + "name": "devsh", + "url": "https://www.devsh.eu/", + "displayName": "DevSH Graphics Programming", + "description": "Homepage of DevSH Graphics Programming: Computer Graphics, Computer Geometry & Vision and High Performance Computing Consultancy" } ] From 786dcbce74fd34090ae068b3585c479069059cb8 Mon Sep 17 00:00:00 2001 From: keptsecret Date: Wed, 25 Jun 2025 13:30:59 +0700 Subject: [PATCH 5/9] last section of blog post --- .../index.md | 61 ++++++++++++++++++- 1 file changed, 60 insertions(+), 1 deletion(-) diff --git a/blog/2025/2025-06-19-subgroup-shuffle-reconvergence-on-nvidia/index.md b/blog/2025/2025-06-19-subgroup-shuffle-reconvergence-on-nvidia/index.md index fefc919..eac93c3 100644 --- a/blog/2025/2025-06-19-subgroup-shuffle-reconvergence-on-nvidia/index.md +++ b/blog/2025/2025-06-19-subgroup-shuffle-reconvergence-on-nvidia/index.md @@ -241,7 +241,66 @@ This also provides a new possibility on Nvidia devices, where you can now synchr In CUDA, this is exposed through `__syncwarp()`, and we can do similar in Vulkan using subgroup control barriers. It's entirely possible that each subgroup shuffle operation does not run in lockstep, with the branching introduced in the loop, which would be why that is our solution to the problem for now. -In the end, it's unclear whether this is a bug in Nvidia's SPIR-V compiler or subgroup shuffle operations just do not imply reconvergence in the Vulkan specification. +In the end, it's unclear whether this is a bug in Nvidia's SPIR-V compiler or subgroup shuffle operations actually do not imply reconvergence in the Vulkan specification. +Unfortunately, I couldn't find anything explicit mention in the SPIR-V specification that confirmed this, even with hours of scouring the spec. + +## What does this implication mean for subgroup operations? + +Consider what it means if subgroup convergence doesn't guarantee that active tangle invocations execute a subgroup operation in lockstep. + +Subgroup ballot and ballot arithmetic are two where you don't have to consider lockstepness, because it is expected that the return value of ballot to be uniform in a tangle and it is known exactly what it should be. +Similarly, for subgroup broadcasts, first the value being broadcast needs to computed, say from invocation K. +Even if other invocations don't run in lockstep, they can't read the value until invocation K broadcasts it if they want to read the same value (uniformity) and you know what value should be read (broadcasting invocation can check it got the same value back). + +On the flip side, reductions will always produce a uniform return value for all invocations, even if you reduce a stale or out-of-lockstep input value. + +Meanwhile, subgroup operations that don't return tangle-uniform values, such as shuffles and scans, would only produce the expected result only if performed on constants or variables written with an execution and memory dependency. +These operations can give different results per invocation so there's no implied uniformity, which means there's no reason to expect any constraints on their apparent lockstepness being implied transitively through the properties of the return value. + +The important consideration then is how a subgroup operation is implemented. +When a subgroup operation doesn't explicitly state that they all have to execute at the same time by all invocations, we can imagine a scenario where a shuffle may be as simple as the receiving invocation snooping another's register without requiring any action on the latter's part. +And that comes with obvious IPC dangers, as snooping it before it gets written or after it gets overwritten if there are no other execution dependencies will surely provide inconsistent results. + +This leads to code listings like the following becoming undefined behavior simply by changing the `Broadcast` into a `Shuffle`. + +```cpp +// Broadcasting after computation +// OK, only counts active invocations in tangle (doesn't change) +int count = subgroupBallotBitCount(true); +// OK, done on a constant +int index = subgroupExclusiveAdd(1); +int base, base_slot; +if (subgroupElect()) + base_slot = atomicAdd(dst.size,count); +// NOT OK, `base_slot` not available, visible or other invocations may even have raced ahead of the elected one +// Not every invocation will see the correct value of `base_slot` in the elected one memory dependency not ensured +base = subgroupBroadcastFirst(base_slot); +``` + +Similarly again, with [this example from the Khronos blog on maximal reconvergence](https://www.khronos.org/blog/khronos-releases-maximal-reconvergence-and-quad-control-extensions-for-vulkan-and-spir-v) + +```cpp +// OK, thanks to subgroup uniform control flow, no wiggle room here (need to know all invcocation values) +if (subgroupAny(needs_space)) { + // OK, narrowly because `subgroupBallot` returns a ballot thats uniform in a tangle + uvec4 mask = subgroupBallot(needs_space); + // OK, because `mask` is tangle-uniform + uint size = subgroupBallotBitCount(mask); + uint base = 0; + if (subgroupElect()) + base = atomicAdd(b.free, size); + + // NOT OK if replaced Broadcast with Shuffle, non-elected invocations could race ahead or not see (visibility) the `base` value in the elected invocation before that one would excecute a shuffle + base = subgroupBroadcastFirst(base); + // OK, but only because `mask` is tangle-uniform + uint offset = subgroupBallotExclusiveBitCount(mask); + + if (needs_space) + b.data[base + offset] = ...; +} +``` + +With all that said, it needs to be noted that one can't expect every instruction to run in lockstep, as that would negate the advantages of Nvidia's IPC. ---------------------------- _This issue was observed happening inconsistently on Nvidia driver version 576.80, released 17th June 2025._ From 516505e41d561b5259f53d9426e3b3b9757bd214 Mon Sep 17 00:00:00 2001 From: keptsecret Date: Thu, 26 Jun 2025 12:16:20 +0700 Subject: [PATCH 6/9] possible final set of additions/changes to post --- .../index.md | 66 +++++++++++++----- .../pascal_simt_model.png | Bin 0 -> 68027 bytes .../volta_scheduling_model.png | Bin 0 -> 76301 bytes blog/authors.yml | 4 +- 4 files changed, 50 insertions(+), 20 deletions(-) create mode 100644 blog/2025/2025-06-19-subgroup-shuffle-reconvergence-on-nvidia/pascal_simt_model.png create mode 100644 blog/2025/2025-06-19-subgroup-shuffle-reconvergence-on-nvidia/volta_scheduling_model.png diff --git a/blog/2025/2025-06-19-subgroup-shuffle-reconvergence-on-nvidia/index.md b/blog/2025/2025-06-19-subgroup-shuffle-reconvergence-on-nvidia/index.md index eac93c3..2a8f34e 100644 --- a/blog/2025/2025-06-19-subgroup-shuffle-reconvergence-on-nvidia/index.md +++ b/blog/2025/2025-06-19-subgroup-shuffle-reconvergence-on-nvidia/index.md @@ -1,6 +1,6 @@ --- -title: 'Nvidia SPIR-V Compiler Bug or Do Subgroup Shuffle Operations Not Imply Reconvergence?' -slug: 'subgroup-shuffle-reconvergence-on-nvidia' +title: 'Nvidia SPIR-V Compiler Bug or Do Subgroup Shuffle Operations Not Imply Execution Dependency?' +slug: 'subgroup-shuffle-execution-dependency-on-nvidia' description: "A look at the behavior behind Nabla's subgroup scan" date: '2025-06-19' authors: ['keptsecret', 'devshgraphicsprogramming'] @@ -13,7 +13,8 @@ last_update: Reduce and scan operations are core building blocks in the world of parallel computing, and now [Nabla has a new release](https://github.com/Devsh-Graphics-Programming/Nabla/tree/v0.6.2-alpha1) with those operations made even faster for Vulkan at the subgroup and workgroup levels. This article takes a brief look at the Nabla implementation for reduce and scan on the GPU in Vulkan. -Then, I discuss a missing reconvergence behavior that was expected after subgroup shuffle operations that was only observed on Nvidia devices. + +Then, I discuss a missing excution dependency expected for a subgroup shuffle operation, which was only a problem on Nvidia devices in some test cases. @@ -91,6 +92,7 @@ T inclusive_scan(T value) rhs = shuffleUp(value, 1) value = value + (firstInvocation ? identity : rhs) + [unroll] for (i = 1; i < SubgroupSizeLog2; i++) { nextLevelStep = 1 << i @@ -110,6 +112,7 @@ You can find all the implementations on the [Nabla repository](https://github.co ## An issue with subgroup sync and reconvergence Now, onto a pretty significant, but strangely obscure, problem that I ran into during unit testing this prior to release. +[See the unit tests.](https://github.com/Devsh-Graphics-Programming/Nabla-Examples-and-Tests/blob/master/23_Arithmetic2UnitTest/app_resources/testSubgroup.comp.hlsl) Nabla also has implementations for workgroup reduce and scans that make use of the subgroup scans above, and one such section looks like this. ```cpp @@ -134,17 +137,17 @@ workgroup_execution_and_memory_barrier() ... workgroup scan code ... ``` -_I should note that `memoryIdx` is unique and per-invocation, and also that shared memory is only written to in this step to be accessed in later steps._ +_I should note that this is the first level of scans for the workgroup scope. It is only one step of the algorithm and the data accesses are completely independent. Thus, `memoryIdx` is unique and per-invocation, and also that shared memory is only written to in this step to be accessed in later steps._ At first glance, it looks fine, and it does produce the expected results for the most part... except in some very specific cases. -And from some more testing and debugging to try and identify the cause, I've found the conditions to be: +After some more testing and debugging to try and identify the cause, I've found the conditions to be: * using an Nvidia GPU * using emulated versions of subgroup operations * a decent number of iterations in the loop (in this case at least 8). I tested this on an Intel GPU, to be sure, and the workgroup scan ran correctly. -That was very baffling initially. And the results produced on an Nvidia device looked like a sync problem. +This was very baffling initially. And the results produced on an Nvidia device looked like a sync problem. It was even more convincing when I moved the control barrier inside the loop and it immediately produced correct scan results. @@ -172,7 +175,8 @@ for (idx = 0; idx < VirtualWorkgroupSize / WorkgroupSize; idx++) Ultimately, we came to the conclusion that each subgroup invocation was probably somehow not in sync as each loop went on. Particularly, the effect we're seeing is a shuffle done as if `value` is not in lockstep at the call site. -We tested using a subgroup execution barrier and maximal reconvergence, and found out a memory barrier is enough. +We tested using a subgroup execution barrier and maximal reconvergence. +Strangely enough, just a memory barrier also fixed it, which it shouldn't have as subgroup shuffles are magical intrinsics that take arguments by copy and don't really deal with accessing any memory locations (SSA form). ```cpp T inclusive_scan(T value) @@ -182,9 +186,11 @@ T inclusive_scan(T value) rhs = shuffleUp(value, 1) value = value + (firstInvocation ? identity : rhs) + [unroll] for (i = 1; i < SubgroupSizeLog2; i++) { nextLevelStep = 1 << i + memory_barrier() rhs = shuffleUp(value, nextLevelStep) value = value + (nextLevelStep out of bounds ? identity : rhs) } @@ -196,16 +202,21 @@ However, this problem was only observed on Nvidia devices. As a side note, using the `SPV_KHR_maximal_reconvergence` extension doesn't resolve this issue surprisingly. I feel I should point out that many presentations and code listings seem to give an impression subgroup shuffle operations execute in lockstep based on the very simple examples provided. + For instance, [the example in this presentation](https://vulkan.org/user/pages/09.events/vulkanised-2025/T08-Hugo-Devillers-SaarlandUniversity.pdf) correctly demonstrates where invocations in a tangle are reading and storing to SSBO, but may mislead readers into not considering the Availability and Visibility for other scenarios that need it. -Specifically, it does not have an intended read-after write if invocations in a tangle execute in lockstep. + +Such simple examples are good enough to demonstrate the purpose of the extension, but fail to elaborate on specific details. +If it did have a read-after-write between subgroup invocations, subgroup scope memory dependencies would have been needed. + (With that said, since subgroup operations are SSA and take arguments "by copy", this discussion of Memory Dependencies and availability-visibility is not relevant to our problem, but just something to be aware of.) ### A minor detour onto the performance of native vs. emulated on Nvidia devices +Since all recent Nvidia GPUs support subgroup arithmetic SPIR-V capability, why were we using emulation with shuffles? I think this observation warrants a small discussion section of its own. The table below are some numbers from our benchmark measured through Nvidia's Nsight Graphics profiler of a subgroup inclusive scan using native SPIR-V instructions and our emulated version. -_Native_ +#### Native | Workgroup size | SM throughput (%) | CS warp occupancy (%) | # registers | Dispatch time (ms) | | :------------: | :---------------: | :-------------------: | :---------: | :----------------: | @@ -213,7 +224,7 @@ _Native_ | 512 | 41.4 | 89.7 | 16 | 27.15 | | 1024 | 40.5 | 59.7 | 16 | 27.74 | -_Emulated_ +#### Emulated | Workgroup size | SM throughput (%) | CS warp occupancy (%) | # registers | Dispatch time (ms) | | :------------: | :---------------: | :-------------------: | :---------: | :----------------: | @@ -222,11 +233,11 @@ _Emulated_ | 1024 | 37.1 | 60.5 | 16 | 12.47 | These numbers are baffling to say the least, particularly the fact that our emulated subgroup scans are twice as fast than the native solution. -It should be noted that this is with the subgroup barrier in place, not that we saw any marked decrease in performance compared to earlier versions without it. +It should be noted that this is with the subgroup barrier before every shuffle, we did not see any marked decrease in performance. An potential explanation for this may be that Nvidia has to consider any inactive invocations in a subgroup, having them behave as if they contribute the identity $I$ element to the scan. Our emulated scan instead requires people call the arithmetic in subgroup uniform fashion. -If that is not the case, this seems like a cause for concern for Nvidia's SPIR-V compiler. +If that is not the case, this seems like a cause for concern for Nvidia's SPIR-V to SASS compiler. ### What could cause this behavior on Nvidia? — The Independent Program Counter @@ -236,25 +247,39 @@ Prior to Volta, all threads in a subgroup share the same program counter, which This means all threads in the same subgroup execute the same instruction at any given time. Therefore, when you have a branch in the program flow across threads in the same subgroup, all execution paths generally have to be executed and mask off threads that should not be active for that path. +
+ ![Pascal and prior SIMT model](pascal_simt_model.png "Pascal and prior SIMT model") +
Thread scheduling under the SIMT warp execution model of Pascal and earlier NVIDIA GPUs. Taken from [NVIDIA TESLA V100 GPU ARCHITECTURE](https://images.nvidia.com/content/volta-architecture/pdf/volta-architecture-whitepaper.pdf)
+
+ With Volta up to now, each thread has its own program counter that allows it to execute independently of other threads in the same subgroup. This also provides a new possibility on Nvidia devices, where you can now synchronize threads in the same subgroup. +The active invocations still have to execute the same instruction, but it can be at different locations in the program (e.g. different iterations of a loop). + +
+ ![Volta Independent Thread Scheduling model](volta_scheduling_model.png "Volta Independent Thread Scheduling model") +
Independent thread scheduling in Volta architecture onwards interleaving execution from divergent branches, using an explicit sync to reconverge threads. Taken from [NVIDIA TESLA V100 GPU ARCHITECTURE](https://images.nvidia.com/content/volta-architecture/pdf/volta-architecture-whitepaper.pdf)
+
+ In CUDA, this is exposed through `__syncwarp()`, and we can do similar in Vulkan using subgroup control barriers. -It's entirely possible that each subgroup shuffle operation does not run in lockstep, with the branching introduced in the loop, which would be why that is our solution to the problem for now. +It's entirely possible that each subgroup shuffle operation does not run in lockstep with the branching introduced, which would be why that is our solution to the problem for now. + +Unfortunately, I couldn't find anything explicit mention in the SPIR-V specification that confirmed whether subgroup shuffle operations actually imply execution dependency, even with hours of scouring the spec. -In the end, it's unclear whether this is a bug in Nvidia's SPIR-V compiler or subgroup shuffle operations actually do not imply reconvergence in the Vulkan specification. -Unfortunately, I couldn't find anything explicit mention in the SPIR-V specification that confirmed this, even with hours of scouring the spec. +So then we either have... -## What does this implication mean for subgroup operations? +## This is a gray area of the Subgroup Shuffle Spec and allowed Undefined Behaviour Consider what it means if subgroup convergence doesn't guarantee that active tangle invocations execute a subgroup operation in lockstep. -Subgroup ballot and ballot arithmetic are two where you don't have to consider lockstepness, because it is expected that the return value of ballot to be uniform in a tangle and it is known exactly what it should be. +Subgroup ballot and ballot arithmetic are two where you don't have to consider lockstepness, because it is expected that the return value of ballot to be uniform in a tangle, and as a corollary, it is known exactly what it should be. + Similarly, for subgroup broadcasts, first the value being broadcast needs to computed, say from invocation K. Even if other invocations don't run in lockstep, they can't read the value until invocation K broadcasts it if they want to read the same value (uniformity) and you know what value should be read (broadcasting invocation can check it got the same value back). On the flip side, reductions will always produce a uniform return value for all invocations, even if you reduce a stale or out-of-lockstep input value. -Meanwhile, subgroup operations that don't return tangle-uniform values, such as shuffles and scans, would only produce the expected result only if performed on constants or variables written with an execution and memory dependency. +Meanwhile, subgroup operations that don't return tangle-uniform values, such as shuffles and scans, would only produce the expected result only if performed on constants or variables written with an execution dependency. These operations can give different results per invocation so there's no implied uniformity, which means there's no reason to expect any constraints on their apparent lockstepness being implied transitively through the properties of the return value. The important consideration then is how a subgroup operation is implemented. @@ -302,5 +327,10 @@ if (subgroupAny(needs_space)) { With all that said, it needs to be noted that one can't expect every instruction to run in lockstep, as that would negate the advantages of Nvidia's IPC. +## Or a bug in Nvidia's SPIR-V to SASS compiler + +And crucially, it's impossible to know (or discuss in the case of a signed NDA) what's happening for the bug or performance regression with Nvidia. +Unlike AMD's RDNA ISAs where we can verify that the compiler is doing what it should be doing using Radeon GPU Analyzer, the generated SASS is inaccessible and neither is the compiler public. + ---------------------------- _This issue was observed happening inconsistently on Nvidia driver version 576.80, released 17th June 2025._ diff --git a/blog/2025/2025-06-19-subgroup-shuffle-reconvergence-on-nvidia/pascal_simt_model.png b/blog/2025/2025-06-19-subgroup-shuffle-reconvergence-on-nvidia/pascal_simt_model.png new file mode 100644 index 0000000000000000000000000000000000000000..d6f47000926a8ad868dbeac0deaeea27c586ce30 GIT binary patch literal 68027 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⋘6$TxvNfkgKfyw*m(0Y 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 z z11Co=hXn-%b>#Lt6j%wA#K*^XOsc1Cxp3ja$*NM<$**~BT##LzPE1TZy?@KS0p(Qq@>&ns^f|6U1cwTKPcV}4-a$m z3kW1;XCE}g!&d%OBmR)e$DJ(Mk7bGP%@2S5`lZmkHf|Mex~JXs)LyPFwC`J6_rApc zDI|n*UN@CB4Udj)(ZhdzI_r{xlB~9Ob#j+4#bhlg(;efaJOR)yk+?cO^l65k(*jyRFHsjaPT@@5o8&n71qm%I&l zZQ0~wvUU`^)Y$r)cjF&E5{$a|i$Z8m4*ARUm?imy>YLbu`20 l6S$6S2MU%=|Nk%aq9}f$c0GrZI*`0l@wn=-%%kV7{x1MzO6mXr literal 0 HcmV?d00001 diff --git a/blog/authors.yml b/blog/authors.yml index 58fa4d8..d8db3db 100644 --- a/blog/authors.yml +++ b/blog/authors.yml @@ -45,8 +45,8 @@ keptsecret: devshgraphicsprogramming: name: Mateusz Kielan - title: CTO of DevSH GP - url: https://github.com/devshgraphicsprogramming + title: CTO of DevSH Graphics Programming Sp. z O.O. + url: https://www.devsh.eu/ image_url: https://avatars.githubusercontent.com/u/6894321?v=4 page: true socials: From d18d705eb2e4cc0c20f414450f9d2cc6ad01d7c4 Mon Sep 17 00:00:00 2001 From: keptsecret Date: Thu, 26 Jun 2025 12:41:51 +0700 Subject: [PATCH 7/9] changed memory barrier to subgroup execution barrier in pseudocode --- .../index.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/blog/2025/2025-06-19-subgroup-shuffle-reconvergence-on-nvidia/index.md b/blog/2025/2025-06-19-subgroup-shuffle-reconvergence-on-nvidia/index.md index 2a8f34e..0ccf8a6 100644 --- a/blog/2025/2025-06-19-subgroup-shuffle-reconvergence-on-nvidia/index.md +++ b/blog/2025/2025-06-19-subgroup-shuffle-reconvergence-on-nvidia/index.md @@ -181,8 +181,7 @@ Strangely enough, just a memory barrier also fixed it, which it shouldn't have a ```cpp T inclusive_scan(T value) { - memory_barrier() - + subgroup_execution_barrier() rhs = shuffleUp(value, 1) value = value + (firstInvocation ? identity : rhs) @@ -190,7 +189,7 @@ T inclusive_scan(T value) for (i = 1; i < SubgroupSizeLog2; i++) { nextLevelStep = 1 << i - memory_barrier() + subgroup_execution_barrier() rhs = shuffleUp(value, nextLevelStep) value = value + (nextLevelStep out of bounds ? identity : rhs) } From 2fa6f6a5f127080a13e81adbe748a87628f8c1e0 Mon Sep 17 00:00:00 2001 From: keptsecret Date: Thu, 26 Jun 2025 14:18:20 +0700 Subject: [PATCH 8/9] add another use case of ipc arch --- .../index.md | 37 ++++++++++++++++-- .../linked_list_lock.png | Bin 0 -> 41155 bytes 2 files changed, 34 insertions(+), 3 deletions(-) create mode 100644 blog/2025/2025-06-19-subgroup-shuffle-reconvergence-on-nvidia/linked_list_lock.png diff --git a/blog/2025/2025-06-19-subgroup-shuffle-reconvergence-on-nvidia/index.md b/blog/2025/2025-06-19-subgroup-shuffle-reconvergence-on-nvidia/index.md index 0ccf8a6..9803e1b 100644 --- a/blog/2025/2025-06-19-subgroup-shuffle-reconvergence-on-nvidia/index.md +++ b/blog/2025/2025-06-19-subgroup-shuffle-reconvergence-on-nvidia/index.md @@ -14,7 +14,7 @@ Reduce and scan operations are core building blocks in the world of parallel com This article takes a brief look at the Nabla implementation for reduce and scan on the GPU in Vulkan. -Then, I discuss a missing excution dependency expected for a subgroup shuffle operation, which was only a problem on Nvidia devices in some test cases. +Then, I discuss a missing execution dependency expected for a subgroup shuffle operation, which was only a problem on Nvidia devices in some test cases. @@ -105,7 +105,9 @@ T inclusive_scan(T value) In addition, Nabla also supports passing vectors into these subgroup operations, so you can perform reduce or scans on up to subgroup size * 4 (for `vec4`) elements per call. Note that it expects the elements in the vectors to be consecutive and in the same order as the input array. -This is because we've found through benchmarking that the instructing the GPU to do a vector load/store results in faster performance than any attempt at coalesced load/store. +This is because we've found through benchmarking that the instructing the GPU to do a vector load/store results in faster performance than any attempt at coalesced load/store with striding. + +We also found shuffles and vector arithmetic to be very expensive, and so having the least amount of data exchange between invocations and pre-scanning up to 4 elements within an invocation was significantly faster. You can find all the implementations on the [Nabla repository](https://github.com/Devsh-Graphics-Programming/Nabla/blob/v0.6.2-alpha1/include/nbl/builtin/hlsl/subgroup2/arithmetic_portability_impl.hlsl) @@ -261,7 +263,36 @@ The active invocations still have to execute the same instruction, but it can be In CUDA, this is exposed through `__syncwarp()`, and we can do similar in Vulkan using subgroup control barriers. -It's entirely possible that each subgroup shuffle operation does not run in lockstep with the branching introduced, which would be why that is our solution to the problem for now. + +The IPC also enables starvation-free algorithms on CUDA, along with the use of mutexes where a thread that attempts to acquire a mutex is guaranteed to eventually succeed. Consider the example in the Volta whitepaper of a doubly linked list: + +```cpp +__device__ void insert_after(Node* a, Node* b) +{ + Node* c; + lock(a); + lock(a->next); + c = a->next; + + a->next = b; + b->prev = a; + + b->next = c; + c->prev = b; + + unlock(c); + unlock(a); +} +``` + +The diagram shows how, with IPC, even if thread K holds the lock for node A, another thread J in the same subgroup (warp in the case of CUDA) can wait for the lock to become available and not affect K's progress. + +
+ ![Doubly Linked List lock](linked_list_lock.png "Doubly Linked List lock") +
Locks are acquired for nodes A and C, shown on the left, before the threads inserts node B shown on the right. Taken from [NVIDIA TESLA V100 GPU ARCHITECTURE](https://images.nvidia.com/content/volta-architecture/pdf/volta-architecture-whitepaper.pdf)
+
+ +In our case however, it's entirely possible that each subgroup shuffle operation does not run in lockstep with the branching introduced, which would be why subgroup execution barriers are our solution to the problem for now. Unfortunately, I couldn't find anything explicit mention in the SPIR-V specification that confirmed whether subgroup shuffle operations actually imply execution dependency, even with hours of scouring the spec. diff --git a/blog/2025/2025-06-19-subgroup-shuffle-reconvergence-on-nvidia/linked_list_lock.png b/blog/2025/2025-06-19-subgroup-shuffle-reconvergence-on-nvidia/linked_list_lock.png new file mode 100644 index 0000000000000000000000000000000000000000..6ecf59e4821324b22466f71889741bd61c5481ea GIT binary patch literal 41155 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≦owJnN^XN|6@;6sa~3SG_nu45aYKd!NIbJadhAomjCTtOY0h+Wbe5c@vAP5hySZNh15 z{xq{jGbgO^NbdeAgr*Jh+QhHKi+nb@ozZFrv?e_L%DZT0v@|z6mZQ825EnY1>{P|` zCgV2ds|YJB=@)&~6R3&E@R-B)d#vWY_Zk!7sRBt%&nCHZ_R{Ya){+@N9NM&s{(9AP z==o$!Ce#SBa&j=I-@q#TDjU2T;MI-;7faF3%6)nCs-L}PwviR}+eczj2lxt#X{~n7 zkWVZv^eQtr>4RLINHOeMT|!Vh+B}>NJF|>I<)`BPu|i(tF~cIkcxEdg0K~E9(ZQ2x zzw*zGe^vJ1M-eF^kLRZbgwpndTRsscbg4j z5=aq`Vm7gpahs^j Date: Thu, 26 Jun 2025 14:31:57 +0700 Subject: [PATCH 9/9] use full company name --- blog/authors.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/blog/authors.yml b/blog/authors.yml index d8db3db..dc95fa4 100644 --- a/blog/authors.yml +++ b/blog/authors.yml @@ -27,7 +27,7 @@ jaked: fletterio: name: Francisco Letterio - title: Junior Developer @ DevSH GP + title: Junior Developer @ DevSH Graphics Programming Sp. z O.O. url: https://github.com/Fletterio image_url: https://avatars.githubusercontent.com/u/40742817?v=4 page: true @@ -36,7 +36,7 @@ fletterio: keptsecret: name: Sorakrit Chonwattanagul - title: Associate Developer @ DevSH GP + title: Associate Developer @ DevSH Graphics Programming Sp. z O.O. url: https://github.com/keptsecret/ image_url: https://avatars.githubusercontent.com/u/27181108?v=4 page: true