OpenMP采用fork-join的执行模式。开始的时候只存在一个主线程,当需要进行并行计算的时候,派生出若干个分支线程来执行并行任务。当并行代码执行完成之后,分支线程会合,并把控制流程交给单独的主线程。
形式1
#pragma omp parallel for
{
function();
}
//parallel和for指令的结合,也是用在for循环语句之前,
//表示for循环体的代码将被多个线程并行执行,
//它同时具有并行域的产生和任务分担两个功能;
形式2
#pragma omp parallel sections
{
#pragma omp section
{
function1();
}
#pragma omp section
{
function2();
}
}
//用在可被并行执行的代码段之前,用于实现多个结构块语句的任务分担,
//可并行执行的代码段各自用section指令标出
形式3
#pragma omp parallel for
{
#pragma omp critical
{
function();
}
}
//CRITICAL指令指定一块同一时间只能被一条线程执行的代码区域,
//如果一条线程正在一个CRITICAL区域执行而另一个线程到达这个区域,
//并企图执行,那么它将会被阻塞,直到第一个线程离开这个区域.
形式4
#pragma omp parallel for reduction
{
function();
}
形式4
omp_get_num_procs()函数来获取处理器个数