Rensselaer Center for Open Source Software

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");
Milkyway@Home • 61 weeks ago