Nicolai Hähnle <[email protected]> writes: > From: Nicolai Hähnle <[email protected]> > > By transposing the loop and the writer/reader branching, the effective level > of parallelism in the test is increased for a typical wave-based architecture. > > Increasing the window size on top of that helps to reliably expose different > implementation errors for AMD GCN. > > Cc: Francisco Jerez <[email protected]> > --- > After trying a bunch of different things, it turns out that the combination > of these rather small changes ends up covering all the cases. > Thanks! I haven't tested yet whether I can still reproduce an inversion with the control test on Intel hardware, but the change looks good anyway so feel free to push:
Reviewed-by: Francisco Jerez <[email protected]> > .../shader-mem-barrier.c | 32 > ++++++++++------------ > 1 file changed, 15 insertions(+), 17 deletions(-) > > diff --git a/tests/spec/arb_shader_image_load_store/shader-mem-barrier.c > b/tests/spec/arb_shader_image_load_store/shader-mem-barrier.c > index 5fdd86b..ddf5da6 100644 > --- a/tests/spec/arb_shader_image_load_store/shader-mem-barrier.c > +++ b/tests/spec/arb_shader_image_load_store/shader-mem-barrier.c > @@ -48,7 +48,7 @@ > #define W 256 > > /** Window height. */ > -#define H 16 > +#define H 64 > > /** Total number of pixels in the image. */ > #define N (W * H) > @@ -142,15 +142,15 @@ run_test(const struct image_test_info *test, > " int x = (idx.x % K) + (idx.x / (2 * K)) > * (2 * K);\n" > " int i, n = 1000;\n" > "\n" > - " if (check) {\n" > - " /*\n" > - " * Consumer: Monitor the > evolution of a pair of\n" > - " * image locations until the test > runs to\n" > - " * completion or an inconsistency > is observed.\n" > - " */\n" > - " for (i = 0; i < n; ++i) {\n" > - " uint u, v;\n" > + " for (i = 0; i < n; ++i) {\n" > + " uint u, v;\n" > "\n" > + " if (check) {\n" > + " /*\n" > + " * Consumer: Monitor the > evolution of a pair of\n" > + " * image locations until > the test runs to\n" > + " * completion or an > inconsistency is observed.\n" > + " */\n" > " v = imageLoad(img, > ivec2(x, idx.y)).x;\n" > " MEMORY_BARRIER();\n" > " u = imageLoad(img, ivec2(x > + K, idx.y)).x;\n" > @@ -158,14 +158,12 @@ run_test(const struct image_test_info *test, > " if (u < v)\n" > " /* Fail. */\n" > " return GRID_T(v << > 16 | u, 0, 0, 1);\n" > - " }\n" > - " } else {\n" > - " /*\n" > - " * Producer: Update the same pair > of image locations\n" > - " * sequentially with increasing > values ordering the\n" > - " * stores with a barrier.\n" > - " */\n" > - " for (i = 0; i < n; ++i) {\n" > + " } else {\n" > + " /*\n" > + " * Producer: Update the > same pair of image locations\n" > + " * sequentially with > increasing values ordering the\n" > + " * stores with a > barrier.\n" > + " */\n" > " imageStore(img, ivec2(x + > K, idx.y), DATA_T(i));\n" > " MEMORY_BARRIER();\n" > " imageStore(img, ivec2(x, > idx.y), DATA_T(i));\n" > -- > 2.5.0
signature.asc
Description: PGP signature
_______________________________________________ Piglit mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/piglit
