并行化一系列独立的代码顺序线

| 如果它们彼此不依赖,则并行执行多行代码的最佳方法是什么? (我正在使用OpenMP) 伪代码:
database->connect()
openfile(\"stuff.txt\")
ping(\"stackoverflow.com\")
x = 2;
y = a + b;
我想出的唯一方法是:
#pragma omp parallel for
for(i = 0; i < 5; i++)
switch (i) {
case 0: database->connect(); break;
...
我还没有尝试过,但我也记得使用OpenMP时不建议您2英镑     
已邀请:
因此,我假设您列出的独立任务只是示例。如果它们确实像
y=a+b
之类的东西,则正如@chrisaycock和@ejd所说,它们对于这种并行性(例如基于线程,而不是ILP或诸如此类)太小,以至于无法真正利用并发性。间接费用。但是,如果它们是较大的操作,则在OpenMP中执行基于任务的并行性的方法是使用
task
指令:例如,
#include <stdio.h>
#include <omp.h>
#include <unistd.h>

void work(int *v) {
    *v = omp_get_thread_num();
    sleep(1);
}

int main(int argc, char **argv)
{
    int a, b, c;
    #pragma omp parallel
    {
        #pragma omp single
        {
            #pragma omp task shared(a) default(none)
            work(&a);

            #pragma omp task shared(b) default(none)
            work(&b);

            #pragma omp task shared(c) default(none)
            work(&c);
        }
    }
    printf(\"a,b,c = %d,%d,%d\\n\", a, b, c);

    return 0;
}
    

要回复问题请先登录注册