From 1b5b1ae532ca0a5b6c449b5cfa37ed4840c0ccb3 Mon Sep 17 00:00:00 2001 From: Chris Duncan Date: Mon, 13 Jan 2025 14:32:47 -0800 Subject: [PATCH] Optimize 64-bit addition. More to come since this is producing valid results. --- src/shaders/compute.wgsl | 192 +++++++++++++++------------------------ 1 file changed, 72 insertions(+), 120 deletions(-) diff --git a/src/shaders/compute.wgsl b/src/shaders/compute.wgsl index 354b65f..16f2af1 100644 --- a/src/shaders/compute.wgsl +++ b/src/shaders/compute.wgsl @@ -114,11 +114,9 @@ fn main(@builtin(global_invocation_id) id: vec3) { */ // a = a + b - o0 = v0 + v8; - o1 = v1 + v9; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; + v1 = v1 + v9; + v1 = v1 + select(0u, 1u, v0 + v8 < v0); + v0 = v0 + v8; // a = a + m[sigma[r][2*i+0]] o0 = v0 + m0; @@ -147,11 +145,9 @@ fn main(@builtin(global_invocation_id) id: vec3) { v9 = (xor1 >> 24u) ^ (xor0 << 8u); // a = a + b - o0 = v0 + v8; - o1 = v1 + v9; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; + v1 = v1 + v9; + v1 = v1 + select(0u, 1u, v0 + v8 < v0); + v0 = v0 + v8; // a = a + m[sigma[r][2*i+1]] o0 = v0 + m2; @@ -743,11 +739,9 @@ fn main(@builtin(global_invocation_id) id: vec3) { */ // a = a + b - o0 = v0 + v8; - o1 = v1 + v9; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; + v1 = v1 + v9; + v1 = v1 + select(0u, 1u, v0 + v8 < v0); + v0 = v0 + v8; // // a = a + m[sigma[r][2*i+0]] // // skip since adding 0u does nothing @@ -779,11 +773,9 @@ fn main(@builtin(global_invocation_id) id: vec3) { v9 = (xor1 >> 24u) ^ (xor0 << 8u); // a = a + b - o0 = v0 + v8; - o1 = v1 + v9; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; + v1 = v1 + v9; + v1 = v1 + select(0u, 1u, v0 + v8 < v0); + v0 = v0 + v8; // // a = a + m[sigma[r][2*i+1]] // // skip since adding 0u does nothing @@ -1372,11 +1364,9 @@ fn main(@builtin(global_invocation_id) id: vec3) { */ // a = a + b - o0 = v0 + v8; - o1 = v1 + v9; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; + v1 = v1 + v9; + v1 = v1 + select(0u, 1u, v0 + v8 < v0); + v0 = v0 + v8; // // a = a + m[sigma[r][2*i+0]] // // skip since adding 0u does nothing @@ -1408,11 +1398,9 @@ fn main(@builtin(global_invocation_id) id: vec3) { v9 = (xor1 >> 24u) ^ (xor0 << 8u); // a = a + b - o0 = v0 + v8; - o1 = v1 + v9; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; + v1 = v1 + v9; + v1 = v1 + select(0u, 1u, v0 + v8 < v0); + v0 = v0 + v8; // // a = a + m[sigma[r][2*i+1]] // // skip since adding 0u does nothing @@ -2001,11 +1989,9 @@ fn main(@builtin(global_invocation_id) id: vec3) { */ // a = a + b - o0 = v0 + v8; - o1 = v1 + v9; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; + v1 = v1 + v9; + v1 = v1 + select(0u, 1u, v0 + v8 < v0); + v0 = v0 + v8; // // a = a + m[sigma[r][2*i+0]] // // skip since adding 0u does nothing @@ -2037,11 +2023,9 @@ fn main(@builtin(global_invocation_id) id: vec3) { v9 = (xor1 >> 24u) ^ (xor0 << 8u); // a = a + b - o0 = v0 + v8; - o1 = v1 + v9; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; + v1 = v1 + v9; + v1 = v1 + select(0u, 1u, v0 + v8 < v0); + v0 = v0 + v8; // // a = a + m[sigma[r][2*i+1]] // // skip since adding 0u does nothing @@ -2630,11 +2614,9 @@ fn main(@builtin(global_invocation_id) id: vec3) { */ // a = a + b - o0 = v0 + v8; - o1 = v1 + v9; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; + v1 = v1 + v9; + v1 = v1 + select(0u, 1u, v0 + v8 < v0); + v0 = v0 + v8; // // a = a + m[sigma[r][2*i+0]] // // skip since adding 0u does nothing @@ -2666,11 +2648,9 @@ fn main(@builtin(global_invocation_id) id: vec3) { v9 = (xor1 >> 24u) ^ (xor0 << 8u); // a = a + b - o0 = v0 + v8; - o1 = v1 + v9; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; + v1 = v1 + v9; + v1 = v1 + select(0u, 1u, v0 + v8 < v0); + v0 = v0 + v8; // a = a + m[sigma[r][2*i+1]] o0 = v0 + m0; @@ -3259,11 +3239,9 @@ fn main(@builtin(global_invocation_id) id: vec3) { */ // a = a + b - o0 = v0 + v8; - o1 = v1 + v9; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; + v1 = v1 + v9; + v1 = v1 + select(0u, 1u, v0 + v8 < v0); + v0 = v0 + v8; // a = a + m[sigma[r][2*i+0]] o0 = v0 + m4; @@ -3292,11 +3270,9 @@ fn main(@builtin(global_invocation_id) id: vec3) { v9 = (xor1 >> 24u) ^ (xor0 << 8u); // a = a + b - o0 = v0 + v8; - o1 = v1 + v9; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; + v1 = v1 + v9; + v1 = v1 + select(0u, 1u, v0 + v8 < v0); + v0 = v0 + v8; // // a = a + m[sigma[r][2*i+1]] // // skip since adding 0u does nothing @@ -3888,11 +3864,9 @@ fn main(@builtin(global_invocation_id) id: vec3) { */ // a = a + b - o0 = v0 + v8; - o1 = v1 + v9; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; + v1 = v1 + v9; + v1 = v1 + select(0u, 1u, v0 + v8 < v0); + v0 = v0 + v8; // // a = a + m[sigma[r][2*i+0]] // // skip since adding 0u does nothing @@ -3924,11 +3898,9 @@ fn main(@builtin(global_invocation_id) id: vec3) { v9 = (xor1 >> 24u) ^ (xor0 << 8u); // a = a + b - o0 = v0 + v8; - o1 = v1 + v9; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; + v1 = v1 + v9; + v1 = v1 + select(0u, 1u, v0 + v8 < v0); + v0 = v0 + v8; // // a = a + m[sigma[r][2*i+1]] // // skip since adding 0u does nothing @@ -4517,11 +4489,9 @@ fn main(@builtin(global_invocation_id) id: vec3) { */ // a = a + b - o0 = v0 + v8; - o1 = v1 + v9; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; + v1 = v1 + v9; + v1 = v1 + select(0u, 1u, v0 + v8 < v0); + v0 = v0 + v8; // // a = a + m[sigma[r][2*i+0]] // // skip since adding 0u does nothing @@ -4553,11 +4523,9 @@ fn main(@builtin(global_invocation_id) id: vec3) { v9 = (xor1 >> 24u) ^ (xor0 << 8u); // a = a + b - o0 = v0 + v8; - o1 = v1 + v9; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; + v1 = v1 + v9; + v1 = v1 + select(0u, 1u, v0 + v8 < v0); + v0 = v0 + v8; // // a = a + m[sigma[r][2*i+1]] // // skip since adding 0u does nothing @@ -5146,11 +5114,9 @@ fn main(@builtin(global_invocation_id) id: vec3) { */ // a = a + b - o0 = v0 + v8; - o1 = v1 + v9; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; + v1 = v1 + v9; + v1 = v1 + select(0u, 1u, v0 + v8 < v0); + v0 = v0 + v8; // // a = a + m[sigma[r][2*i+0]] // // skip since adding 0u does nothing @@ -5182,11 +5148,9 @@ fn main(@builtin(global_invocation_id) id: vec3) { v9 = (xor1 >> 24u) ^ (xor0 << 8u); // a = a + b - o0 = v0 + v8; - o1 = v1 + v9; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; + v1 = v1 + v9; + v1 = v1 + select(0u, 1u, v0 + v8 < v0); + v0 = v0 + v8; // // a = a + m[sigma[r][2*i+1]] // // skip since adding 0u does nothing @@ -5775,11 +5739,9 @@ fn main(@builtin(global_invocation_id) id: vec3) { */ // a = a + b - o0 = v0 + v8; - o1 = v1 + v9; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; + v1 = v1 + v9; + v1 = v1 + select(0u, 1u, v0 + v8 < v0); + v0 = v0 + v8; // // a = a + m[sigma[r][2*i+0]] // // skip since adding 0u does nothing @@ -5811,11 +5773,9 @@ fn main(@builtin(global_invocation_id) id: vec3) { v9 = (xor1 >> 24u) ^ (xor0 << 8u); // a = a + b - o0 = v0 + v8; - o1 = v1 + v9; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; + v1 = v1 + v9; + v1 = v1 + select(0u, 1u, v0 + v8 < v0); + v0 = v0 + v8; // a = a + m[sigma[r][2*i+1]] o0 = v0 + m4; @@ -6404,11 +6364,9 @@ fn main(@builtin(global_invocation_id) id: vec3) { */ // a = a + b - o0 = v0 + v8; - o1 = v1 + v9; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; + v1 = v1 + v9; + v1 = v1 + select(0u, 1u, v0 + v8 < v0); + v0 = v0 + v8; // a = a + m[sigma[r][2*i+0]] o0 = v0 + m0; @@ -6437,11 +6395,9 @@ fn main(@builtin(global_invocation_id) id: vec3) { v9 = (xor1 >> 24u) ^ (xor0 << 8u); // a = a + b - o0 = v0 + v8; - o1 = v1 + v9; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; + v1 = v1 + v9; + v1 = v1 + select(0u, 1u, v0 + v8 < v0); + v0 = v0 + v8; // a = a + m[sigma[r][2*i+1]] o0 = v0 + m2; @@ -7033,11 +6989,9 @@ fn main(@builtin(global_invocation_id) id: vec3) { */ // a = a + b - o0 = v0 + v8; - o1 = v1 + v9; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; + v1 = v1 + v9; + v1 = v1 + select(0u, 1u, v0 + v8 < v0); + v0 = v0 + v8; // // a = a + m[sigma[r][2*i+0]] // // skip since adding 0u does nothing @@ -7069,11 +7023,9 @@ fn main(@builtin(global_invocation_id) id: vec3) { v9 = (xor1 >> 24u) ^ (xor0 << 8u); // a = a + b - o0 = v0 + v8; - o1 = v1 + v9; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; + v1 = v1 + v9; + v1 = v1 + select(0u, 1u, v0 + v8 < v0); + v0 = v0 + v8; // // a = a + m[sigma[r][2*i+1]] // // skip since adding 0u does nothing -- 2.34.1