mirror of
https://github.com/deepseek-ai/DeepEP.git
synced 2026-11-05 00:47:32 +00:00
[GH-ISSUE #21] Question about GPU Driver #21
Labels
No labels
pull-request
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
deepseek-ai/DeepEP#21
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @Qizhi697 on GitHub (Feb 26, 2025).
Original GitHub issue: https://github.com/deepseek-ai/DeepEP/issues/21
I would like to ask which version of the
GPU driveryou have installed on theH800 hopper architectureto support the smooth operation ofPTX?@LyricZhao commented on GitHub (Feb 26, 2025):
I guess the PTX is not related to OS driver, but an undoced Hopper hardware feature:
L1::no_allocateis not a hint but a strong option to disable the L1 cache (so that ensuring the volatile data read correctness).@zsnoob commented on GitHub (Mar 30, 2025):
Brief discussion:
In this context, considering both the repository and the documentation, could we interpret this "disable" as follows: for volatile data, the use of no_allocate makes it impossible for the data to be written into L1 (unified with nc to make sure correctness). As a result, accesses to violatile data always miss in L1/nc. Since reading from nc doesn't require engaging the cache coherence protocol, it effectively bypasses "L1 overhead" as well. In that sense, the L1 cache is "disabled" for such accesses—not just by avoiding writing into it, but also by excluding L1 from the read overhead. The access will always miss in nc.
Or there is a better way to explain "disable" rather than "Do not allocate data to cache. (.level::eviction_priority)" for
no_allocatein the PTX documentation? Thank you!@LyricZhao commented on GitHub (Mar 31, 2025):
You can read the README:
Undefined-behavior PTX usage
ld.global.nc.L1::no_allocate.L2::256Bto read volatile data. The PTX modifier.ncindicates that a non-coherent cache is used. But the correctness is tested to be guaranteed with.L1::no_allocateon Hopper architectures, and performance will be much better. The reason we guess may be: the non-coherent cache is unified with L1, and the L1 modifier is not just a hint but a strong option, so that the correctness can be guaranteed by no dirty data in L1.__ldg(i.e.,ld.nc). Even compared to manually unrolled volatile reads, it was significantly faster (likely due to additional compiler optimizations). However, the results could be incorrect or dirty. After consulting the PTX documentation, we discovered that L1 and non-coherent cache are unified on Hopper architectures. We speculated that.L1::no_allocatemight resolve the issue, leading to this discovery.DISABLE_AGGRESSIVE_PTX_INSTRS=1tosetup.pyand disable this, or file an issue.@LyricZhao commented on GitHub (Mar 31, 2025):
We observe that
ld.ncis much faster thanld, but it is wrong. As L1 and non-coherent cache are unified on Hopper architectures, so we triedld.nc.L1::no_allocateand it worked (always not storing into L1 as you said).But I guess
ld.L1::no_allocate(nonc) also works, you can have a try. If so,.L1::no_allocateis used to ensure correctness,.ncencourages NVCC to do more optimizations. They are separate two options.@zsnoob commented on GitHub (Mar 31, 2025):
Thanks, very insightful for me!