|
@@ -225,61 +225,96 @@ std::vector<std::unique_ptr<MandelDevice>> MandelContext::createDevices(void)
|
|
|
|
|
|
cl::Context context{ devices, nullptr, onError };
|
|
|
for (auto& device : devices) {
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
auto mandelDevice = std::make_unique<mnd::MandelDevice>(
|
|
|
ClDeviceWrapper{ device, context }, platformName);
|
|
|
MandelDevice& md = *mandelDevice;
|
|
|
|
|
|
auto supportsDouble = md.supportsDouble();
|
|
|
-
|
|
|
|
|
|
-
|
|
|
- try {
|
|
|
- md.mandelGenerators.insert({ Precision::FLOAT, std::make_unique<ClGeneratorFloat>(md) });
|
|
|
-
|
|
|
-
|
|
|
- }
|
|
|
- catch (const std::string& err) {
|
|
|
- printf("err: %s", err.c_str());
|
|
|
- }
|
|
|
- try {
|
|
|
- md.mandelGenerators.insert({ Precision::DOUBLE_FLOAT, std::make_unique<ClGeneratorDoubleFloat>(md) });
|
|
|
- }
|
|
|
- catch (const std::string& err) {
|
|
|
- printf("err: %s", err.c_str());
|
|
|
- }
|
|
|
- try {
|
|
|
- md.mandelGenerators.insert({ Precision::TRIPLE_FLOAT, std::make_unique<ClGeneratorTripleFloat>(md) });
|
|
|
- }
|
|
|
- catch (const std::string& err) {
|
|
|
- printf("err: %s", err.c_str());
|
|
|
- }
|
|
|
+#pragma omp parallel
|
|
|
+#pragma omp sections
|
|
|
+ {
|
|
|
+#pragma omp section
|
|
|
+ try {
|
|
|
+ md.mandelGenerators.insert({ Precision::FLOAT, std::make_unique<ClGeneratorFloat>(md) });
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+ catch (const std::string& err) {
|
|
|
+ printf("err: %s", err.c_str());
|
|
|
+ }
|
|
|
|
|
|
- if (supportsDouble) {
|
|
|
+#pragma omp section
|
|
|
try {
|
|
|
- md.mandelGenerators.insert({ Precision::DOUBLE, std::make_unique<ClGeneratorDouble>(md) });
|
|
|
- md.mandelGenerators.insert({ Precision::DOUBLE_DOUBLE, std::make_unique<ClGeneratorDoubleDouble>(md) });
|
|
|
- md.mandelGenerators.insert({ Precision::TRIPLE_DOUBLE, std::make_unique<ClGeneratorTripleDouble>(md) });
|
|
|
- md.mandelGenerators.insert({ Precision::QUAD_DOUBLE, std::make_unique<ClGeneratorQuadDouble>(md) });
|
|
|
- md.mandelGenerators.insert({ Precision::HEX_DOUBLE, std::make_unique<ClGeneratorHexDouble>(md) });
|
|
|
- md.mandelGenerators.insert({ Precision::OCTA_DOUBLE, std::make_unique<ClGeneratorOctaDouble>(md) });
|
|
|
+ md.mandelGenerators.insert({ Precision::DOUBLE_FLOAT, std::make_unique<ClGeneratorDoubleFloat>(md) });
|
|
|
}
|
|
|
catch (const std::string& err) {
|
|
|
printf("err: %s", err.c_str());
|
|
|
- fflush(stdout);
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- try {
|
|
|
-
|
|
|
- }
|
|
|
- catch (const std::string& ) {
|
|
|
-
|
|
|
+#pragma omp section
|
|
|
+ try {
|
|
|
+ md.mandelGenerators.insert({ Precision::TRIPLE_FLOAT, std::make_unique<ClGeneratorTripleFloat>(md) });
|
|
|
+ }
|
|
|
+ catch (const std::string& err) {
|
|
|
+ printf("err: %s", err.c_str());
|
|
|
+ }
|
|
|
+
|
|
|
+#pragma omp section
|
|
|
+ if (supportsDouble) {
|
|
|
+ try {
|
|
|
+ md.mandelGenerators.insert({ Precision::DOUBLE, std::make_unique<ClGeneratorDouble>(md) });
|
|
|
+ md.mandelGenerators.insert({ Precision::DOUBLE_DOUBLE, std::make_unique<ClGeneratorDoubleDouble>(md) });
|
|
|
+ }
|
|
|
+ catch (const std::string& err) {
|
|
|
+ printf("err: %s", err.c_str());
|
|
|
+ fflush(stdout);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+#pragma omp section
|
|
|
+ if (supportsDouble) {
|
|
|
+ try {
|
|
|
+ md.mandelGenerators.insert({ Precision::TRIPLE_DOUBLE, std::make_unique<ClGeneratorTripleDouble>(md) });
|
|
|
+ }
|
|
|
+ catch (const std::string& err) {
|
|
|
+ printf("err: %s", err.c_str());
|
|
|
+ fflush(stdout);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+#pragma omp section
|
|
|
+ if (supportsDouble) {
|
|
|
+ try {
|
|
|
+ md.mandelGenerators.insert({ Precision::QUAD_DOUBLE, std::make_unique<ClGeneratorQuadDouble>(md) });
|
|
|
+ }
|
|
|
+ catch (const std::string& err) {
|
|
|
+ printf("err: %s", err.c_str());
|
|
|
+ fflush(stdout);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+#pragma omp section
|
|
|
+ if (supportsDouble) {
|
|
|
+ try {
|
|
|
+ md.mandelGenerators.insert({ Precision::HEX_DOUBLE, std::make_unique<ClGeneratorHexDouble>(md) });
|
|
|
+ }
|
|
|
+ catch (const std::string& err) {
|
|
|
+ printf("err: %s", err.c_str());
|
|
|
+ fflush(stdout);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+#pragma omp section
|
|
|
+ if (supportsDouble) {
|
|
|
+ try {
|
|
|
+ md.mandelGenerators.insert({ Precision::OCTA_DOUBLE, std::make_unique<ClGeneratorOctaDouble>(md) });
|
|
|
+ }
|
|
|
+ catch (const std::string& err) {
|
|
|
+ printf("err: %s", err.c_str());
|
|
|
+ fflush(stdout);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
mandelDevices.push_back(std::move(mandelDevice));
|