nbody: Require Catalyst 12.3 on Tahiti
12 files changed, 60 lines added, 4 lines removed
Changes
--- milkyway/include/milkyway_cl_util.h 4d1adda7f7a80ad48e1a27c54033522c0d179ea7
+++ milkyway/include/milkyway_cl_util.h 2c0bff7694f1a5ab98e398723db325f7d59ff0b6
@@ -43,6 +43,7 @@
+cl_bool mwCALVersionMin(const DevInfo* di, int minMajor, int minMinor, int minPatchLevel);
--- milkyway/include/milkyway_timing.h 4d1adda7f7a80ad48e1a27c54033522c0d179ea7
+++ milkyway/include/milkyway_timing.h 2c0bff7694f1a5ab98e398723db325f7d59ff0b6
@@ -39,6 +39,7 @@
+void mwPrintHighResTimeDiff(const MWHighResTime* t2, const MWHighResTime* t1, const char* msg);
--- milkyway/src/milkyway_cl_util.c 4d1adda7f7a80ad48e1a27c54033522c0d179ea7
+++ milkyway/src/milkyway_cl_util.c 2c0bff7694f1a5ab98e398723db325f7d59ff0b6
@@ -347,6 +347,42 @@
+cl_bool mwCALVersionMin(const DevInfo* di, int minMajor, int minMinor, int minPatchLevel)
+{+ int major = 0, minor = 0, patchLevel = 0;
+
+ assert(mwIsAMDGPUDevice(di));
+
+ if (sscanf(di->driver, "CAL %d.%d.%d", &major, &minor, &patchLevel) != 3)
+ {+ return CL_FALSE;
+ }
+
+ if (major > minMajor)
+ {+ return CL_TRUE;
+ }
+ else if (major < minMajor)
+ {+ return CL_FALSE;
+ }
+ else
+ {+ if (minor > minMinor)
+ {+ return CL_TRUE;
+ }
+ else if (minor < minMinor)
+ {+ return CL_FALSE;
+ }
+ else
+ {+ return (patchLevel >= minPatchLevel);
+ }
+ }
+}
+
--- milkyway/src/milkyway_lua_util.c 4d1adda7f7a80ad48e1a27c54033522c0d179ea7
+++ milkyway/src/milkyway_lua_util.c 2c0bff7694f1a5ab98e398723db325f7d59ff0b6
@@ -36,7 +36,7 @@
- #define mkdir(x, y) mkdir(x)
+ #define mkdir(x, y) _mkdir(x)
--- milkyway/src/milkyway_timing.c 4d1adda7f7a80ad48e1a27c54033522c0d179ea7
+++ milkyway/src/milkyway_timing.c 2c0bff7694f1a5ab98e398723db325f7d59ff0b6
@@ -243,5 +243,17 @@
-
-
+void mwPrintHighResTimeDiff(const MWHighResTime* t2, const MWHighResTime* t1, const char* msg)
+{+ MWHighResTime dt = mwDiffMWHighResTime(t2, t1);
+ uint64_t ms = dt.nSec / 1000000ULL;
+ uint64_t ns = dt.nSec - ms * 1000000ULL;
+
+ mw_printf("%s: sec = "LLU" msec = "LLU" nsec = "LLU"\n",+ msg,
+ dt.sec,
+ ms,
+ ns
+ );
+}
+
--- nbody/src/nbody_cl.c 4d1adda7f7a80ad48e1a27c54033522c0d179ea7
+++ nbody/src/nbody_cl.c 2c0bff7694f1a5ab98e398723db325f7d59ff0b6
@@ -713,7 +713,6 @@
-
@@ -722,6 +721,13 @@
+ return CL_FALSE;
+ }
+
+ /* if TAHITI and < 12.3 driver bug requires additional clFinishes */
+ if (di->calTarget >= MW_CAL_TARGET_TAHITI && !mwCALVersionMin(di, 1, 4, 1720))
+ {+ mw_printf("Tahiti driver bug requires Catalyst 12.3 or newer\n");