簡體   English   中英

是否有與 CUDA 的 atomicCAS 等效的 DPC++/SYCL?

[英]Is there a DPC++/SYCL equivalent of CUDA's atomicCAS?

據我了解,CUDA的atomicCAS有如下定義(這是四個之一)

int atomicCAS(int* address, int compare, int val);

並將全局共享內存中位於address (在文檔old中命名)的值與compare進行原子比較,如果相等,則將值分配給val ,否則什么也不做。 在這兩種情況下都返回old

查看 SYCL API,我只能找到compare_exchange_strong ,不幸的是,它沒有做我想要的,使用與上面相同的命名,它比較oldcompare ,如果不成功,則改變compare (通過引用傳遞)。

正如 Peter Cordes 在評論中指出的那樣, sycl::compare_exchange_strong是正確的選擇。 從 SYCL 2020 rev. 4 compare_exchange_strong的描述:

以原子方式將此atomic_ref引用的對象的值與expected的值進行比較。 如果值相等,則將引用對象的值替換為desired的值; 否則將被引用對象的原始值賦給expected

所以,

int old = compare;
ref.compare_exchange_strong(old, val);

是,就更新ref而言,相當於

old = atomicCAS(address, compare, val);

如果你有興趣,你可以親自看看 hipSYCL 是如何實現sycl::compare_exchange_strong的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM