Open MP是一组编译器指令,也是用C、c++或FORTRAN编写的程序的API,它为共享内存环境中的并行编程提供支持。Open MP将并行区域( parallel regions)标识为可并行运行的代码块。应用程序开发人员在他们代码的并行区域中插入编译器指令,这些指令会指示OpenMP的运行时库并行的执行该区域。

下面的C程序演示了一个包含printf()语句的并行区域:

#include < omp.h >
#include < stdio.h >
int main(int argc, char *argv[])
{
    /* sequential code */
    #pragma omp parallel
    {
        printf("I am a parallel region.");
    }
    /* sequential code */
    return 0;
}

当OpenMP遇到该命令时:

#pragma omp parallel

它创建了与系统处理器核心数相同的数量的线程。因此,对于双核系统,创建了两个线程,对于四核系统,创建了四个线程;等等。然后所有的线程同时执行并行区域。当每个线程退出并行区域时,它将被终止。

Open MP为并行运行代码区域提供了几个额外的指令,包括并行循环。例如,假设我们有两个大小是N的数组a和b,我们希望对它们的内容进行求和并将结果放置在数组c中。我们可以使用以下代码并行地运行这个任务 段,其中包含了用于并行for循环的编译器指令:

#pragma omp parallel for
for (i = 0; i < N; i++) {
    c[i] = a[i] + b[i];
}

Open MP将for循环中包含的工作划分到作为作为对指令的回应而创建的线程组中:

#pragma omp parallel for

除了提供并行的指示外,Open MP还允许开发人员在多个并行级别的中进行选择。例如,他们可以手动设置线程数。它还允许开发人员识别数据是在线程之间共享还是在线程私有的。

Open MP在多个开源和商业编译器上使用,用于Linux、Windows和Mac OS X系统。

results matching ""

    No results matching ""