在Mac OS X 10.11上安装OpenMP

时间:2016-02-01 15:51:52

标签: c gcc openmp

如何让OpenMP在Mac OSX 10.11上运行,以便我可以通过终端执行脚本?

我已经安装了OpenMP:brew install clang-omp

当我跑步时,例如:gcc -fopenmp -o Parallel.b Parallel.c以下表达式返回:fatal error: 'omp.h' file not found

我也尝试过:brew install gcc --without-multilib但不幸的是,这最终返回了以下内容(在首次安装一些依赖项之后):

The requested URL returned error: 404 Not Found
Error: Failed to download resource "mpfr--patch"

是否有任何建议的解决方法?

7 个答案:

答案 0 :(得分:37)

在mac上,命令gcc是Clang的符号链接。因此,通过调用gcc -fopenmp -o your_program your_program.c,您实际上正在使用Clang,直到现在还没有内置的OpenMP支持。

较新版本的Clang根据this帖子确实支持OpenMP(您还可以在其中找到有关如何设置它的说明)。

另一方面,如果您仍想使用gcc,我可以引导您完成适合我的步骤。

  1. 使用brew安装gcc。您使用的命令应该有效:brew install gcc --without-multilib

    或者,如果brew表示您已经安装了gcc,则可以尝试brew reinstall gcc --without-multilib

    您可能已经注意到,如果您未指定--without-multilib brew警告您OpenMP可能无法正常工作。

  2. 找到新安装的gcc的位置。 Brew将版本号附加到gcc,以便它不与命令行工具安装的版本号冲突。您将在usr/local/bin中找到符号链接。就我而言,它是usr/local/bin/gcc-5。如果右键单击并选择“显示原始”,则应在/usr/local/Cellar/gcc/5.3.0/bin/gcc-5中显示gcc-5可执行文件(版本号可能不同)。

  3. 现在您需要告诉您的系统。在调用编译器时,bash默认情况下会查看/usr/bin而不是/usr/local/bin。您需要将此目录添加到 $ PATH 。使用以下命令可以轻松完成此操作:

    PATH=/usr/local/bin:$PATH

  4. 现在您应该能够使用以下方法编译OpenMP:

    gcc-5 -fopenmp -o your_program your_program.c

    备注:gcc-5是我安装的版本,您的版本可能会有所不同。

答案 1 :(得分:14)

  • 安装clang-omp

    brew install clang-omp
    
  • 确保xcode命令行工具

    xcode-select --install
    
  • 我在运行示例openmp代码时遇到了一个错误

    /usr/local/opt/libiomp/include/libiomp/omp.h:139:21: error: expected ';' after top level declarator extern void   __ KAI_KMPC_CONVENTION kmp_set_stacksize_s        (size_t);
    
  • 只需从文件中删除__和KAI之间的一个空格

  • 现在使用命令

    clang-omp -fopenmp helloopenmp.c
    

    并运行以下代码

    #include <omp.h>
    #include <stdio.h>
    int main() {
        #pragma omp parallel
        printf("Hello from thread %d, nthreads %d\n", omp_get_thread_num(), omp_get_num_threads());
    }
    
  • 您应该获得与此类似的输出

    Hello from thread 3, nthreads 4
    Hello from thread 2, nthreads 4
    Hello from thread 0, nthreads 4
    Hello from thread 1, nthreads 4
    
  • 使用OS X 10.11.3并于2016年2月18日进行brew更新

答案 2 :(得分:4)

macOS High Sierra版本10.13.6(17G65)

1。安装gcc

>>> df.values array([[1.1, 2.1, 3.1, 4.1, 5.1], [1.2, 2.2, 3.2, 4.2, 5.2], [1.3, 2.3, 3.3, 4.3, 5.3], [1.4, 2.4, 3.4, 4.4, 5.4], [1.5, 2.5, 3.5, 4.5, 5.5], [1.6, 2.6, 3.6, 4.6, 5.6], [1.7, 2.7, 3.7, 4.7, 5.7], [1.8, 2.8, 3.8, 4.8, 5.8]])

2。编译

brew reinstall gcc --without-multilib

请注意 gcc-8 注意版本酿造安装,您可能是 gcc-7 gcc-9

gcc-8 -Wall -fopenmp your-parallel-program.c

就是这样!

答案 3 :(得分:3)

默认情况下,GCC 使用 clang 发行版。 使用 Homebrew 安装 GCC。安装后,您可以编译由 Homebrew 安装的代码指定 GCC 版本添加 OpenMP 标志。 hello_world 示例如下所示:

  1. brew install gcc

  2. brew install libomp

  3. 酿造信息 gcc

    gcc:稳定 10.2.0(瓶装),HEAD

    GNU 编译器合集

  4. 导出 OMP_NUM_THREADS=8

  5. 创建 hello.c

#include <stdio.h>
#include <omp.h>
int main(void){
    #pragma omp parallel 
    {
        printf("Hello World! \n");
    }

    return 0;
}
  1. gcc-10 -fopenmp hello.c -o hello
  2. 执行:./hello
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!

答案 4 :(得分:1)

  1. 使用brew安装gcc。

    brew install gcc
    
  2. 检查gcc已安装。

    $which g++-7
    /usr/local/bin/g++-7
    
  3. 更改cmake cxx编译器。

    cmake -DCMAKE_CXX_COMPILER=g++-7
    make
    
  4. 也许这会对你有帮助。

答案 5 :(得分:0)

brew install cmake
brew install gcc --without-multilib
cmake -DCMAKE_CXX_COMPILER=g++-6 .. 
make -j 

答案 6 :(得分:0)

安装gcc后:

@Column

并导出路径:

brew install gcc --without-multilib

您可能需要导出CC,这对我有用:

export PATH=/usr/local/bin:$PATH

这可能是gcc-7,或者其他什么。