簡體   English   中英

OpenMP 不產生額外的線程

[英]OpenMP not spawning additional threads

我是 OpenMP 的新手,無法終生使用多線程。 我設置了環境變量。 這是一段代碼,它應該只是遍歷 mandelbrot 集:

#include <omp.h>
#include <limits>

#define WIDTH 10000
#define HEIGHT 10000
#define INFINITY 2.0f
#define ITERATIONS 1000

using namespace std;


int main()
{

    #pragma omp parallel for
    for (size_t py = 0; py < HEIGHT; py++) {
        for (size_t px = 0; px < WIDTH; px++) {

            float x0 = -2.5f + (px * (1.0f - -2.5f) / WIDTH);
            float y0 = 1.0f + (py * (-1.0f - 1.0f) / HEIGHT);

            unsigned short iteration;
            float x = 0.0f;
            float y = 0.0f;
            for (iteration = 0; iteration < ITERATIONS; iteration++) {
                float xn = x * x - y * y + x0;
                y = 2 * x * y + y0;
                x = xn;
                if (x * x + y * y > INFINITY) {
                    break;
                }
            }
        }
    }
}

每當我運行它時,它都不會產生額外的線程。 我覺得我做錯了什么。 任何幫助將不勝感激,謝謝。

我需要將標志-fopenmp添加到我的編譯器 arguments。現在可以正常工作了。

補充一下缺少的-fopenmp標志,OpenMP 支持不同的工作調度模式,對於像 Mandelbrot-Set 生成這樣的不平衡工作負載,簡單的平均工作分配可能無法在運行時最小化上達到高效率。

#pragma omp parallel for schedule(dynamic)
for(...){}

對於每個像素未知的工作強度,加速取決於像素之間的不平衡,可以更快。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM