Browse Source

de-parallelize opencl compilation and adapting mvg tables

Nicolas Winkler 4 years ago
parent
commit
b5445b0506
3 changed files with 29 additions and 11 deletions
  1. 1 1
      libmandel/src/Mandel.cpp
  2. 7 1
      mandelvid/src/Util.cpp
  3. 21 9
      mandelvid/src/run.cpp

+ 1 - 1
libmandel/src/Mandel.cpp

@@ -233,7 +233,7 @@ std::vector<std::unique_ptr<MandelDevice>> MandelContext::createDevices(void)
 
             auto supportsDouble = md.supportsDouble();
 
-#pragma omp parallel
+//#pragma omp parallel
 #pragma omp sections
             {
 #pragma omp section

+ 7 - 1
mandelvid/src/Util.cpp

@@ -16,10 +16,16 @@ void printTable(const Table& t)
         }
     }
 
+    bool header = true;
     for (const auto& arr : t) {
+        if (header) {
+            std::cout << "\033[1m";
+            header = false;
+        }
+
         for (int i = 0; i < arr.size(); i++) {
             std::cout << std::setw(maxLenghts[i] + 3) << std::left << arr[i];
         }
-        std::cout << std::endl;
+        std::cout << "\033[m" << std::endl;
     }
 }

+ 21 - 9
mandelvid/src/run.cpp

@@ -15,23 +15,33 @@
 
 void listGenerators(mnd::MandelContext& context)
 {
-    Table table;
+    Table cputable;
+    cputable.push_back({ "Data Type", "Extension", "Precision" });
     for (const auto& [type, extension] : context.getSupportedTypes()) {
-        table.push_back({ context.getCpuInfo().getBrand(), mnd::toString(type), mnd::toString(extension), mnd::toLegibleString(mnd::getPrecision(type)) });
+        cputable.push_back({ mnd::toString(type), mnd::toString(extension), mnd::toLegibleString(mnd::getPrecision(type)) });
     }
 
+    std::cout << "CPU: " << context.getCpuInfo().getBrand() << std::endl;
+    printTable(cputable);
+
     for (auto& device : context.getDevices()) {
+        Table devtable;
+        devtable.push_back({ "Data Type", "Extension", "Precision" });
         for (const auto& type : device->getSupportedTypes()) {
-            table.push_back({ device->getName(), mnd::toString(type), "", mnd::toLegibleString(mnd::getPrecision(type)) });
+            devtable.push_back({ mnd::toString(type), "", mnd::toLegibleString(mnd::getPrecision(type)) });
         }
+        std::cout << std::endl;
+        std::cout << "Device: [" << device->getVendor() << "] " << device->getName() << std::endl;
+        printTable(devtable);
     }
 
-    printTable(table);
 }
 
+
 void benchGenerators(mnd::MandelContext& context)
 {
     Table table;
+    table.push_back({ "Device", "Data Type", "Extension", "Precision", "Performance [MI/s]" });
     std::map<size_t, mnd::MandelGenerator*> generators;
     for (const auto& [type, extension] : context.getSupportedTypes()) {
         generators[table.size()] = context.getCpuGenerator(type, extension);
@@ -53,15 +63,17 @@ void benchGenerators(mnd::MandelContext& context)
                 maxLenghts[i] = arr[i].size();
         }
     }
-
+    std::cout << "\033[1m";
     for (int i = 0; i < table.size(); i++) {
         const auto& arr = table[i];
         for (int i = 0; i < arr.size(); i++) {
             std::cout << std::setw(maxLenghts[i] + 3) << std::left << arr[i];
         }
-        double iterPerNanos = mnd::benchmark(*generators[i]);
-        std::cout << std::fixed << std::setprecision(2) << (iterPerNanos * 1000);
-        std::cout << std::endl;
+        if (i > 0) {
+            double iterPerNanos = mnd::benchmark(*generators[i]);
+            std::cout << std::fixed << std::setprecision(2) << (iterPerNanos * 1000);
+        }
+        std::cout << "\033[m" << std::endl;
     }
 }
 
@@ -89,4 +101,4 @@ void renderImage(const std::string& xmlPath, const std::string& outPath)
     exportImage(iei, [] (float progress) {
         std::cout << progress << "% completed" << std::endl;
     });
-}
+}