OpenMP:并行运行两个函数,每个函数使用一半的线程池

发布于 2024-12-12 04:09:27 字数 350 浏览 0 评论 0原文

我有一个消耗 CPU 的函数 do_long,我需要在两个不同的数据集上运行。

do_long(data1);
do_long(data2);

do_long() {
#pragma omp for
    for(...) {
        // do proccessing
    }
}

我有 N 个可用线程(取决于机器)。如何告诉 OpenMP 我希望两者都 do_long 函数并行运行,N/2 个线程应该执行第一个 do_long 中的循环,另一个 N/2 个线程应该处理第二个 do_long

I have a CPU consuming function do_long that I need to run on two different datasets.

do_long(data1);
do_long(data2);

do_long() {
#pragma omp for
    for(...) {
        // do proccessing
    }
}

I have N threads available (depends on machine). How to tell OpenMP that I want that both do_long
functions are run in parallel, and N/2 threads should perform the loop in first do_long and another N/2 should process second do_long?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

愿得七秒忆 2024-12-19 04:09:27

一种方法是使用嵌套并行性来实现:

void do_long(int threads) {
#pragma omp parallel for num_threads(threads)
    for(...) {
        // do proccessing
    }
}


int main(){
    omp_set_nested(1);

    int threads = 8;
    int sub_threads = (threads + 1) / 2;

#pragma omp parallel num_threads(2)
    {
        int i = omp_get_thread_num();

        if (i == 0){
            do_long(data1, sub_threads);
        }
        if (i == 1 || omp_get_num_threads() != 2){
            do_long(data2, sub_threads);
        }
    }

    return 0;
}

One approach is to do it using nested parallelism:

void do_long(int threads) {
#pragma omp parallel for num_threads(threads)
    for(...) {
        // do proccessing
    }
}


int main(){
    omp_set_nested(1);

    int threads = 8;
    int sub_threads = (threads + 1) / 2;

#pragma omp parallel num_threads(2)
    {
        int i = omp_get_thread_num();

        if (i == 0){
            do_long(data1, sub_threads);
        }
        if (i == 1 || omp_get_num_threads() != 2){
            do_long(data2, sub_threads);
        }
    }

    return 0;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文