From 12f3eb871d107a02aa768a9fcc6b7a92261748c8 Mon Sep 17 00:00:00 2001 From: Jason Volk Date: Fri, 7 Jan 2022 10:59:31 -0800 Subject: [PATCH] ircd::simt: Fix buffer and ordering hokey-pokey. --- include/ircd/simt/mean.h | 16 ++++++++++------ include/ircd/simt/norm.h | 7 ++++--- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/include/ircd/simt/mean.h b/include/ircd/simt/mean.h index f120c2f33..396f9c534 100644 --- a/include/ircd/simt/mean.h +++ b/include/ircd/simt/mean.h @@ -30,17 +30,21 @@ struct ircd_math_mean /// ln = local group size /// inline void -ircd_simt_math_mean_f4lldr(__local float4 *const restrict out, - __local const float4 *const restrict in, +ircd_simt_math_mean_f4lldr(__local float4 *const buf, const uint ln, const uint li) { - out[li] = in[li]; - ircd_simt_reduce_add_f4lldr(out, ln, li); + ircd_simt_reduce_add_f4lldr(buf, ln, li); if(li == 0) - out[li] = ircd_simt_reduce_add_f4(out[li]) / (ln * 4); + { + const float + sum = ircd_simt_reduce_add_f4(buf[li]), + res = sum / (ln * 4); - ircd_simt_broadcast_f4lldr(out, ln, li); + buf[li] = res; + } + + ircd_simt_broadcast_f4lldr(buf, ln, li); } #endif diff --git a/include/ircd/simt/norm.h b/include/ircd/simt/norm.h index bb4705746..fa47b4050 100644 --- a/include/ircd/simt/norm.h +++ b/include/ircd/simt/norm.h @@ -21,17 +21,18 @@ ircd_simt_math_norm_f4lldr(__local float4 *const out, const uint ln, const uint li) { - ircd_simt_math_mean_f4lldr(tmp, in, ln, li); + tmp[li] = in[li]; + ircd_simt_math_mean_f4lldr(tmp, ln, li); const float4 sub_mean = in[li] - tmp[li]; tmp[li] = pow(sub_mean, 2); - ircd_simt_math_mean_f4lldr(out, tmp, ln, li); + ircd_simt_math_mean_f4lldr(tmp, ln, li); const float4 epsilon = 0.00001f, - s = sqrt(out[li] + epsilon); + s = sqrt(tmp[li] + epsilon); out[li] = sub_mean / s; }