As seen in NVIDIA tuning guides
https://docs.nvidia.com/cuda/ampere-tuning-guide/index.html#unified-shared-memory-l1-texture-cache
https://docs.nvidia.com/cuda/ada-tuning-guide/index.html#unified-shared-memory-l1-texture-cache
https://docs.nvidia.com/cuda/hopper-tuning-guide/index.html#unified-shared-memory-l1-texture-cache
https://docs.nvidia.com/cuda/blackwell-tuning-guide/index.html#unified-shared-memory-l1-texture-cache
each thread block reserves 1KB of shared memory, which is the same size of 0x400.
This is an open hypothesis that these reserved 1KB of shared memory is related to the triplet @!PT LDS RZ, [RZ].
What I remember in sm90 SASS is that these triplets are used for synchronizing shared memory accesses between ld.acquire and st.release, or synchronizing general proxy and async proxy by fence.proxy.async.shared. (I could not provide access to hopper GPU and SASS code of my project as it is not my property, but my workplace).
@!PT LDS RZ, [RZ] could be used for safely flushing data into shared memory as it is fixed latency instructions. My hypothesis is that 1KB padding is required for instructions like @!PT LDS RZ, [RZ], with maintaining the memory consistency without RAW/WAR/WAW hazard AND avoiding shared memory bank conflicts.
I suggest making a microbenchmark for ld.acquire, st.release, ld.relaxed, st.relaxed into shared memory and mbarrier based instructions for future Hopper and Blackwell server GPU benchmarks with Async Tensor Core/Tensor Memory Accelerators.
You could use mbarrier based async memory access benchmarks on sm120 through LDGSTS & cp.async.mbarrier.arrive pairs.
As seen in NVIDIA tuning guides
https://docs.nvidia.com/cuda/ampere-tuning-guide/index.html#unified-shared-memory-l1-texture-cache
https://docs.nvidia.com/cuda/ada-tuning-guide/index.html#unified-shared-memory-l1-texture-cache
https://docs.nvidia.com/cuda/hopper-tuning-guide/index.html#unified-shared-memory-l1-texture-cache
https://docs.nvidia.com/cuda/blackwell-tuning-guide/index.html#unified-shared-memory-l1-texture-cache
each thread block reserves 1KB of shared memory, which is the same size of 0x400.
This is an open hypothesis that these reserved 1KB of shared memory is related to the triplet @!PT LDS RZ, [RZ].
What I remember in sm90 SASS is that these triplets are used for synchronizing shared memory accesses between ld.acquire and st.release, or synchronizing general proxy and async proxy by fence.proxy.async.shared. (I could not provide access to hopper GPU and SASS code of my project as it is not my property, but my workplace).
@!PT LDS RZ, [RZ] could be used for safely flushing data into shared memory as it is fixed latency instructions. My hypothesis is that 1KB padding is required for instructions like @!PT LDS RZ, [RZ], with maintaining the memory consistency without RAW/WAR/WAW hazard AND avoiding shared memory bank conflicts.
I suggest making a microbenchmark for ld.acquire, st.release, ld.relaxed, st.relaxed into shared memory and mbarrier based instructions for future Hopper and Blackwell server GPU benchmarks with Async Tensor Core/Tensor Memory Accelerators.
You could use mbarrier based async memory access benchmarks on sm120 through LDGSTS & cp.async.mbarrier.arrive pairs.