|
@@ -72,7 +72,7 @@ MandelContext::MandelContext(void)
|
|
if (cpuInfo.hasAvx512()) {
|
|
if (cpuInfo.hasAvx512()) {
|
|
auto fl = std::make_unique<CpuGenerator<float, mnd::X86_AVX_512, true>>();
|
|
auto fl = std::make_unique<CpuGenerator<float, mnd::X86_AVX_512, true>>();
|
|
//auto db = std::make_unique<CpuGenerator<double, mnd::X86_AVX_512, true>>();
|
|
//auto db = std::make_unique<CpuGenerator<double, mnd::X86_AVX_512, true>>();
|
|
- cpuGenerators.insert({ { Precision::FLOAT, CpuExtension::X86_AVX_512 }, std::move(fl) });
|
|
|
|
|
|
+ cpuGenerators.insert({ std::pair{ Precision::FLOAT, CpuExtension::X86_AVX_512 }, std::move(fl) });
|
|
//cpuGenerators.insert({ { Precision::DOUBLE, CpuExtension::X86_AVX_512 }, std::move(db) });
|
|
//cpuGenerators.insert({ { Precision::DOUBLE, CpuExtension::X86_AVX_512 }, std::move(db) });
|
|
}
|
|
}
|
|
# endif
|
|
# endif
|
|
@@ -81,26 +81,26 @@ MandelContext::MandelContext(void)
|
|
auto db = std::make_unique<CpuGenerator<double, mnd::X86_AVX, true>>();
|
|
auto db = std::make_unique<CpuGenerator<double, mnd::X86_AVX, true>>();
|
|
auto ddb = std::make_unique<CpuGenerator<DoubleDouble, mnd::X86_AVX, true>>();
|
|
auto ddb = std::make_unique<CpuGenerator<DoubleDouble, mnd::X86_AVX, true>>();
|
|
auto tdb = std::make_unique<CpuGenerator<TripleDouble, mnd::X86_AVX, true>>();
|
|
auto tdb = std::make_unique<CpuGenerator<TripleDouble, mnd::X86_AVX, true>>();
|
|
- cpuGenerators.insert({ { Precision::FLOAT, CpuExtension::X86_AVX }, std::move(fl) });
|
|
|
|
- cpuGenerators.insert({ { Precision::DOUBLE, CpuExtension::X86_AVX }, std::move(db) });
|
|
|
|
- cpuGenerators.insert({ { Precision::DOUBLE_DOUBLE, CpuExtension::X86_AVX }, std::move(ddb) });
|
|
|
|
- cpuGenerators.insert({ { Precision::TRIPLE_DOUBLE, CpuExtension::X86_AVX }, std::move(tdb) });
|
|
|
|
|
|
+ cpuGenerators.insert({ std::pair{ Precision::FLOAT, CpuExtension::X86_AVX }, std::move(fl) });
|
|
|
|
+ cpuGenerators.insert({ std::pair{ Precision::DOUBLE, CpuExtension::X86_AVX }, std::move(db) });
|
|
|
|
+ cpuGenerators.insert({ std::pair{ Precision::DOUBLE_DOUBLE, CpuExtension::X86_AVX }, std::move(ddb) });
|
|
|
|
+ cpuGenerators.insert({ std::pair{ Precision::TRIPLE_DOUBLE, CpuExtension::X86_AVX }, std::move(tdb) });
|
|
}
|
|
}
|
|
if (cpuInfo.hasAvx2() && cpuInfo.hasFma()) {
|
|
if (cpuInfo.hasAvx2() && cpuInfo.hasFma()) {
|
|
auto favxfma = std::make_unique<CpuGenerator<float, mnd::X86_AVX_FMA, true>>();
|
|
auto favxfma = std::make_unique<CpuGenerator<float, mnd::X86_AVX_FMA, true>>();
|
|
auto davxfma = std::make_unique<CpuGenerator<double, mnd::X86_AVX_FMA, true>>();
|
|
auto davxfma = std::make_unique<CpuGenerator<double, mnd::X86_AVX_FMA, true>>();
|
|
auto ddavxfma = std::make_unique<CpuGenerator<DoubleDouble, mnd::X86_AVX_FMA, true>>();
|
|
auto ddavxfma = std::make_unique<CpuGenerator<DoubleDouble, mnd::X86_AVX_FMA, true>>();
|
|
auto qdavxfma = std::make_unique<CpuGenerator<QuadDouble, mnd::X86_AVX_FMA, true>>();
|
|
auto qdavxfma = std::make_unique<CpuGenerator<QuadDouble, mnd::X86_AVX_FMA, true>>();
|
|
- cpuGenerators.insert({ { Precision::FLOAT, CpuExtension::X86_AVX_FMA }, std::move(favxfma) });
|
|
|
|
- cpuGenerators.insert({ { Precision::DOUBLE, CpuExtension::X86_AVX_FMA }, std::move(davxfma) });
|
|
|
|
- cpuGenerators.insert({ { Precision::DOUBLE_DOUBLE, CpuExtension::X86_AVX_FMA }, std::move(ddavxfma) });
|
|
|
|
- cpuGenerators.insert({ { Precision::QUAD_DOUBLE, CpuExtension::X86_AVX_FMA }, std::move(qdavxfma) });
|
|
|
|
|
|
+ cpuGenerators.insert({ std::pair{ Precision::FLOAT, CpuExtension::X86_AVX_FMA }, std::move(favxfma) });
|
|
|
|
+ cpuGenerators.insert({ std::pair{ Precision::DOUBLE, CpuExtension::X86_AVX_FMA }, std::move(davxfma) });
|
|
|
|
+ cpuGenerators.insert({ std::pair{ Precision::DOUBLE_DOUBLE, CpuExtension::X86_AVX_FMA }, std::move(ddavxfma) });
|
|
|
|
+ cpuGenerators.insert({ std::pair{ Precision::QUAD_DOUBLE, CpuExtension::X86_AVX_FMA }, std::move(qdavxfma) });
|
|
}
|
|
}
|
|
if (cpuInfo.hasSse2()) {
|
|
if (cpuInfo.hasSse2()) {
|
|
auto fl = std::make_unique<CpuGenerator<float, mnd::X86_SSE2, true>>();
|
|
auto fl = std::make_unique<CpuGenerator<float, mnd::X86_SSE2, true>>();
|
|
auto db = std::make_unique<CpuGenerator<double, mnd::X86_SSE2, true>>();
|
|
auto db = std::make_unique<CpuGenerator<double, mnd::X86_SSE2, true>>();
|
|
- cpuGenerators.insert({ { Precision::FLOAT, CpuExtension::X86_SSE2 }, std::move(fl) });
|
|
|
|
- cpuGenerators.insert({ { Precision::DOUBLE, CpuExtension::X86_SSE2 }, std::move(db) });
|
|
|
|
|
|
+ cpuGenerators.insert({ std::pair{ Precision::FLOAT, CpuExtension::X86_SSE2 }, std::move(fl) });
|
|
|
|
+ cpuGenerators.insert({ std::pair{ Precision::DOUBLE, CpuExtension::X86_SSE2 }, std::move(db) });
|
|
}
|
|
}
|
|
#elif defined(__arm__) || defined(__aarch64__) || defined(_M_ARM)
|
|
#elif defined(__arm__) || defined(__aarch64__) || defined(_M_ARM)
|
|
if (cpuInfo.hasNeon()) {
|
|
if (cpuInfo.hasNeon()) {
|
|
@@ -115,34 +115,34 @@ MandelContext::MandelContext(void)
|
|
{
|
|
{
|
|
auto fl = std::make_unique<CpuGenerator<float, mnd::NONE, true>>();
|
|
auto fl = std::make_unique<CpuGenerator<float, mnd::NONE, true>>();
|
|
auto db = std::make_unique<CpuGenerator<double, mnd::NONE, true>>();
|
|
auto db = std::make_unique<CpuGenerator<double, mnd::NONE, true>>();
|
|
- cpuGenerators.insert({ { Precision::FLOAT, CpuExtension::NONE }, std::move(fl) });
|
|
|
|
- cpuGenerators.insert({ { Precision::DOUBLE, CpuExtension::NONE }, std::move(db) });
|
|
|
|
|
|
+ cpuGenerators.insert({ std::pair{ Precision::FLOAT, CpuExtension::NONE }, std::move(fl) });
|
|
|
|
+ cpuGenerators.insert({ std::pair{ Precision::DOUBLE, CpuExtension::NONE }, std::move(db) });
|
|
|
|
|
|
auto fx64 = std::make_unique<CpuGenerator<Fixed64, mnd::NONE, true>>();
|
|
auto fx64 = std::make_unique<CpuGenerator<Fixed64, mnd::NONE, true>>();
|
|
auto fx128 = std::make_unique<CpuGenerator<Fixed128, mnd::NONE, true>>();
|
|
auto fx128 = std::make_unique<CpuGenerator<Fixed128, mnd::NONE, true>>();
|
|
- cpuGenerators.insert({ { Precision::FIXED64, CpuExtension::NONE }, std::move(fx64) });
|
|
|
|
- cpuGenerators.insert({ { Precision::FIXED128, CpuExtension::NONE }, std::move(fx128) });
|
|
|
|
|
|
+ cpuGenerators.insert({ std::pair{ Precision::FIXED64, CpuExtension::NONE }, std::move(fx64) });
|
|
|
|
+ cpuGenerators.insert({ std::pair{ Precision::FIXED128, CpuExtension::NONE }, std::move(fx128) });
|
|
}
|
|
}
|
|
|
|
|
|
#ifdef WITH_BOOST
|
|
#ifdef WITH_BOOST
|
|
auto quad = std::make_unique<CpuGenerator<Float128, mnd::NONE, true>>();
|
|
auto quad = std::make_unique<CpuGenerator<Float128, mnd::NONE, true>>();
|
|
auto oct = std::make_unique<CpuGenerator<Float256, mnd::NONE, true>>();
|
|
auto oct = std::make_unique<CpuGenerator<Float256, mnd::NONE, true>>();
|
|
- cpuGenerators.insert({ { Precision::FLOAT128, CpuExtension::NONE }, std::move(quad) });
|
|
|
|
- cpuGenerators.insert({ { Precision::FLOAT256, CpuExtension::NONE }, std::move(oct) });
|
|
|
|
|
|
+ cpuGenerators.insert({ std::pair{ Precision::FLOAT128, CpuExtension::NONE }, std::move(quad) });
|
|
|
|
+ cpuGenerators.insert({ std::pair{ Precision::FLOAT256, CpuExtension::NONE }, std::move(oct) });
|
|
#endif // WITH_BOOST
|
|
#endif // WITH_BOOST
|
|
|
|
|
|
auto dd = std::make_unique<CpuGenerator<DoubleDouble, mnd::NONE, true>>();
|
|
auto dd = std::make_unique<CpuGenerator<DoubleDouble, mnd::NONE, true>>();
|
|
auto td = std::make_unique<CpuGenerator<TripleDouble, mnd::NONE, true>>();
|
|
auto td = std::make_unique<CpuGenerator<TripleDouble, mnd::NONE, true>>();
|
|
auto qd = std::make_unique<CpuGenerator<QuadDouble, mnd::NONE, true>>();
|
|
auto qd = std::make_unique<CpuGenerator<QuadDouble, mnd::NONE, true>>();
|
|
auto hd = std::make_unique<CpuGenerator<HexDouble, mnd::NONE, true>>();
|
|
auto hd = std::make_unique<CpuGenerator<HexDouble, mnd::NONE, true>>();
|
|
- cpuGenerators.insert({ { Precision::DOUBLE_DOUBLE, CpuExtension::NONE }, std::move(dd) });
|
|
|
|
- cpuGenerators.insert({ { Precision::TRIPLE_DOUBLE, CpuExtension::NONE }, std::move(td) });
|
|
|
|
- cpuGenerators.insert({ { Precision::QUAD_DOUBLE, CpuExtension::NONE }, std::move(qd) });
|
|
|
|
- cpuGenerators.insert({ { Precision::HEX_DOUBLE, CpuExtension::NONE }, std::move(hd) });
|
|
|
|
|
|
+ cpuGenerators.insert({ std::pair{ Precision::DOUBLE_DOUBLE, CpuExtension::NONE }, std::move(dd) });
|
|
|
|
+ cpuGenerators.insert({ std::pair{ Precision::TRIPLE_DOUBLE, CpuExtension::NONE }, std::move(td) });
|
|
|
|
+ cpuGenerators.insert({ std::pair{ Precision::QUAD_DOUBLE, CpuExtension::NONE }, std::move(qd) });
|
|
|
|
+ cpuGenerators.insert({ std::pair{ Precision::HEX_DOUBLE, CpuExtension::NONE }, std::move(hd) });
|
|
|
|
|
|
|
|
|
|
auto fix512 = std::make_unique<CpuGenerator<Fixed512, mnd::NONE, true>>();
|
|
auto fix512 = std::make_unique<CpuGenerator<Fixed512, mnd::NONE, true>>();
|
|
- cpuGenerators.insert({ { Precision::FIXED512, CpuExtension::NONE }, std::move(fix512) });
|
|
|
|
|
|
+ cpuGenerators.insert({ std::pair{ Precision::FIXED512, CpuExtension::NONE }, std::move(fix512) });
|
|
|
|
|
|
devices = createDevices();
|
|
devices = createDevices();
|
|
|
|
|