← WGSL Spesifikasyonu

Atomic ve Bellek Senkronizasyonu

Atomic operasyonlar, memory layout kuralları, barrier senkronizasyonu ve memory ordering — 13–14

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.