ATOM_XCHG(3clc)

πŸ“¦
version 1.0~svn33624 Β· 3 versions
, in ubuntu jammy, ubuntu noble

πŸ’– ATOM_XCHG πŸ’–

okay bestie, welcome to ATOM_XCHG from the OpenCL Manual β€” yes it's a 3clc page, yes it's niche, yes it still ate πŸ’…


✨ NAME ✨

atom_xchg β€” the 64-bit atom_xchg functions, no cap.

here's the whole lineup, copy-paste-able, character for character:

long atom_xchg(volatile global(3clc) long *p, long val);

long atom_xchg(volatile global(3clc) long *p, long val);

ulong atom_xchg(volatile local(3clc) ulong *p, ulong val);

ulong atom_xchg(volatile local(3clc) ulong *p, ulong val);
yes bestie, those lines really do repeat. that's the lore. we do not touch the lore. πŸ™ˆ

🌸 DESCRIPTION 🌸

So the vibe is: it swaps the 32-bit value (which the page calls old) sitting at the location pointed to by p with the new value you hand it as val. Then it returns old. Like a little trade-off between you and memory. iconic behavior honestly 🫢

If your app wants to use this extension, you're gonna need to include this line in the OpenCL program source, exactly like this:

#pragma OPENCL EXTENSION cl_khr_int64_base_atomics : enable

This function gets performed in one atomic transaction. And here's the important part, so listen up: these transactions are atomic for the device executing these atomic functions. There is no guarantee of atomicity if the atomic operations to the same memory location are being performed by kernels executing on multiple devices. so like... one device, fine. multiple devices, chaos, you're on your own πŸ’€

Also! Atomic operations on 64-bit integers and 32-bit integers (and float) are also atomic with regard to each other. besties in the same clique, all atomic together ✨


⭐ SPECIFICATION ⭐

OpenCL Specification[1]


πŸŽ€ SEE ALSO πŸŽ€

go read those too, iykyk πŸ“š


πŸ‘‘ AUTHORS πŸ‘‘

The Khronos Group


Copyright Β© 2007-2011 The Khronos Group Inc.

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and/or associated documentation files (the "Materials"), to deal in the Materials without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Materials, and to permit persons to whom the Materials are furnished to do so, subject to the condition that this copyright notice and permission notice shall be included in all copies or substantial portions of the Materials.


πŸ’œ NOTES πŸ’œ

  1. OpenCL Specification page 279, section 6.12.11 - Atomic Functions for 32-bit integers

and that's the whole page, bestie!! this one's from The Khronos Group, dated 01/14/2021 β€” so you know exactly which era of OpenCL lore you're reading. go swap some values atomically, you've got this πŸ’–βœ¨πŸ¦‹

πŸ“¦ where this page comes from