From d48d47c6d59800b9bf6355a499b6939d6240d0ec Mon Sep 17 00:00:00 2001 From: Chris Duncan Date: Sat, 4 Jan 2025 00:34:02 -0800 Subject: [PATCH] Move atomic check to start of main. Add atomic check prior to setting nonce. --- src/lib/workers/powgpu.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/lib/workers/powgpu.ts b/src/lib/workers/powgpu.ts index 517d1a1..f2129ba 100644 --- a/src/lib/workers/powgpu.ts +++ b/src/lib/workers/powgpu.ts @@ -148,6 +148,9 @@ export class PowGpu extends WorkerInterface { @builtin(workgroup_id) workgroup_id: vec3, @builtin(local_invocation_id) local_id: vec3 ) { + if (atomicLoad(&work.found) != 0u) { + return; + } var id: u32 = ((workgroup_id.x & 0xff) << 24) | ((workgroup_id.y & 0xff) << 16) | ((workgroup_id.z & 0xff) << 8) | @@ -190,9 +193,6 @@ export class PowGpu extends WorkerInterface { * Iterate and hash until nonce found */ for (var j: u32 = 0u; j < 0x1u; j = j + 1u) { - if (atomicLoad(&work.found) != 0u) { - return; - } m[0u] = m[0u] ^ j; // twelve rounds of mixing @@ -208,7 +208,7 @@ export class PowGpu extends WorkerInterface { } // Store the result directly into work array - if ((BLAKE2B_IV32_1 ^ v[1u] ^ v[17u]) > ubo.threshold) { + if (atomicLoad(&work.found) == 0u && (BLAKE2B_IV32_1 ^ v[1u] ^ v[17u]) > ubo.threshold) { atomicStore(&work.found, 1u); work.nonce.x = m[0]; work.nonce.y = m[1]; -- 2.34.1