Xcode安装使用OpenMP

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lkj345/article/details/53148709

OpenMP是能让程序并行化的一个框架,在编写OpenCV程序的过程中,有很多关于图片的操作,非常耗时,但同时也存在大量可以并行的模块,我们在Xcode上集成OpenMP框架,并且通过简单的几行代码就可以实现并行化。

1.在Mac的命令行下通过Homebrew安装clang-omp,命令如下:

sudo brew install clang-omp

2.在Xcode中新建工程,选择Command Line Tool,语言选择C++。

3.在Xcode中点击工程名,选择Build Settings,在Build Settings下修改如下内容:

Header Search Paths中添加/usr/local/include
在Library Search Pahts中添加/usr/local/lib
在Other C Flags中添加-fopenmp
添加用户定义的设置,选择Add User-Defined Setting,名字为CC,内容是/usr/local/bin/clang-omp
将Enable Modules (C and Objective-C)设置为No

3.在与Build Settings同级的Build Phases中选择Link Binary With Libraries,添加/usr/local/lib/libiomp5.dylib

4.在命令行下输入以下命令来建立连接:

sudo ln -s /usr/local/bin/clang-omp++ /usr/local/bin/clang++-omp

5.通过以下程序测试OpenMP是否已经配置完毕:

#include <iostream>
#include <libiomp/omp.h>
using namespace std;

int main(int argc, const char * argv[]) {
    cout << omp_get_num_procs() << " kernels" << endl;

#pragma omp parallel for num_threads(omp_get_num_procs())
    for (int i = 0; i < 10; i++) {
        cout << i;
    }
    cout << endl;

#pragma omp parallel sections//并行计算
    {
#pragma omp section
        {
            cout << 0+1;
        }
#pragma omp section
        {
            cout << 3-1;
        }
#pragma omp section
        {
            cout << 1*3;
        }
#pragma omp section
        {
            cout << 8/2;
        }
    }
    cout << endl;
    return 0;
}

上面程序中首先要导入libiomp/omp.h头文件,omp_get_num_procs()函数表示机器有多少核,#pragma omp parallel for num_threads(omp_get_num_procs())表示对一个for循环进行并行化,当然要保证循环之间互不影响,#pragma omp parallel sections结合多个#pragma omp section表示多个可以并行化的模块。

上面的程序在我电脑上的运行结果是:

result

由结果可见无论是for循环还是四个并行的模块都进行了并行化。

猜你喜欢

转载自blog.csdn.net/lkj345/article/details/53148709