Atomic Tipler
atomic<T> tipi, yalnızca i32 ve u32 bileşen
tipleriyle kullanılabilir. Atomic değişkenler yalnızca storage ve
workgroup address space'lerinde bulunabilir.
var<workgroup> counter: atomic<u32>;
@group(0) @binding(0)
var<storage, read_write> globalCounter: atomic<u32>;
Atomic Fonksiyonlar
| Fonksiyon | Açıklama |
|---|---|
| atomicLoad(p) | Atomic değeri okur |
| atomicStore(p, v) | Atomic değer yazar |
| atomicAdd(p, v) | Atomic toplama, eski değeri döner |
| atomicSub(p, v) | Atomic çıkarma, eski değeri döner |
| atomicMax(p, v) | Atomic maksimum |
| atomicMin(p, v) | Atomic minimum |
| atomicAnd(p, v) | Atomic bitwise AND |
| atomicOr(p, v) | Atomic bitwise OR |
| atomicXor(p, v) | Atomic bitwise XOR |
| atomicCompareExchangeWeak(p, cmp, v) | CAS — başarılıysa değiştirir |
// Histogram: her thread kendi bin'ine atom ekler
@compute @workgroup_size(256)
fn histogram(@builtin(global_invocation_id) gid: vec3u) {
let val = input[gid.x];
let bin = u32(val * 255.0);
atomicAdd(&bins[bin], 1u);
}
Barrier Senkronizasyonu
| Barrier | Açıklama |
|---|---|
| workgroupBarrier() | Workgroup içi tüm invocation'ları senkronize eder |
| storageBarrier() | Storage buffer yazma/okuma sıralamasını garanti eder |
| textureBarrier() | Texture yazma/okuma sıralamasını garanti eder |
Memory Layout
Alignment Kuralları: f32 →
4B align · vec2f → 8B · vec3f → 16B · vec4f → 16B
· mat4x4f → 16B (sütun başına). struct padding otomatik eklenir.