|  | @@ -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;
 | 
	
		
			
				|  |  |      });
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +}
 |