如何让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"
是否有任何建议的解决方法?
答案 0 :(得分:37)
在mac上,命令gcc是Clang的符号链接。因此,通过调用gcc -fopenmp -o your_program your_program.c
,您实际上正在使用Clang,直到现在还没有内置的OpenMP支持。
较新版本的Clang根据this帖子确实支持OpenMP(您还可以在其中找到有关如何设置它的说明)。
另一方面,如果您仍想使用gcc,我可以引导您完成适合我的步骤。
使用brew安装gcc。您使用的命令应该有效:brew install gcc --without-multilib
或者,如果brew表示您已经安装了gcc,则可以尝试brew reinstall gcc --without-multilib
您可能已经注意到,如果您未指定--without-multilib
brew警告您OpenMP可能无法正常工作。
找到新安装的gcc的位置。 Brew将版本号附加到gcc,以便它不与命令行工具安装的版本号冲突。您将在usr/local/bin
中找到符号链接。就我而言,它是usr/local/bin/gcc-5
。如果右键单击并选择“显示原始”,则应在/usr/local/Cellar/gcc/5.3.0/bin/gcc-5
中显示gcc-5可执行文件(版本号可能不同)。
现在您需要告诉您的系统。在调用编译器时,bash默认情况下会查看/usr/bin
而不是/usr/local/bin
。您需要将此目录添加到 $ PATH 。使用以下命令可以轻松完成此操作:
PATH=/usr/local/bin:$PATH
现在您应该能够使用以下方法编译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)
>>> 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]])
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 示例如下所示:
brew install gcc
brew install libomp
酿造信息 gcc
gcc:稳定 10.2.0(瓶装),HEAD
GNU 编译器合集
导出 OMP_NUM_THREADS=8
创建 hello.c
#include <stdio.h>
#include <omp.h>
int main(void){
#pragma omp parallel
{
printf("Hello World! \n");
}
return 0;
}
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
答案 4 :(得分:1)
使用brew安装gcc。
brew install gcc
检查gcc已安装。
$which g++-7
/usr/local/bin/g++-7
更改cmake cxx编译器。
cmake -DCMAKE_CXX_COMPILER=g++-7
make
也许这会对你有帮助。
答案 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,或者其他什么。