Я нахожусь на MSV C 2019 с компилятором по умолчанию. Код, над которым я работаю, представляет собой изображение Мандельброта. Соответствующие фрагменты моего кода выглядят так:
#pragma omp parallel for
for (int y = 0; y < HEIGHT; y++)
{
for (int x = 0; x < WIDTH; x++)
{
unsigned int retVal = mandel(x_val + x_incr * x, y_val + y_incr * y);
mtest.setPixels(x, y,
static_cast<unsigned char>(retVal / 6),
static_cast<unsigned char>(retVal / 5),
static_cast<unsigned char>(retVal / 4));
}
}
Все переменные вне l oop являются constexpr, исключая любые зависимости. Функция Манделя делает около 1000 итераций с каждым вызовом. Я ожидал бы, что внешний l oop будет работать в нескольких потоках, но каждый мой msv c записывает каждый запуск примерно по 5-6 секунд с или без директивы omp.
Edit (функция mandel):
unsigned int mandel(long double x, long double y)
{
long double z_x = 0;
long double z_y = 0;
for (int i = 0; i < ITER; i++)
{
long double temp = z_x;
z_x = (z_x * z_x) - (z_y * z_y) + x;
z_y = 2 * temp * z_y + y;
if ((z_x * z_x + z_y * z_y) > 4)
return i;
}
return ITER; //ITER is a #define macro
}