LoginSignup
15
16

More than 5 years have passed since last update.

MacOS Sierraでclang+OpenMPを使う方法 2016.11

Last updated at Posted at 2016-11-04

自分のMacBookPro(MacOS Sierra 10.12.1)でopenMPを使うことになったので、その手順をまとめます。初めは公式ホームページを参照しながら試みたのですが、ビルドができず失敗しました。 そこでHomebrewで構築することにしました。 追記:LLVM 8.1から公式のclangがOpenMPに対応したため、以下で紹介するclang-ompを導入するより最新のLLVMを導入したほうがいいです。(追記参照)

Getting the source code, Building

Homebrewをつかってclang-ompをインストールします。

$ brew tap homebrew/boneyard
$ brew install clang-omp

Using

PATHを通すために.zshrc等に環境変数を設定します。!date!の部分はインストールされた最新のフォルダ名を入れてください。

export C_INCLUDE_PATH=/usr/local/Cellar/libiomp/!date!/include/libiomp:$C_INCLUDE_PATH
export CPLUS_INCLUDE_PATH=/usr/local/Cellar/libiomp/!date!/include/libiomp:$CPLUS_INCLUDE_PATH
export LIBRARY_PATH=/usr/local/Cellar/libiomp/!date!/lib:$LIBRARY_PATH

試しにサンプルを動かします。

test_omp.cpp
#include <iostream>
#include <omp.h>

int main() {
  #pragma omp parallel
  {
    // ここがコア数分だけ並列に実行される。1コアだと1つです。
    printf("Hello, World ! %d of %d\n", omp_get_thread_num(), omp_get_num_threads());
  }
  return 0;
}
$ clang-omp++ -fopenmp test_omp.cpp -o test_omp 
$ ./test_omp
Hello, World ! 3 of 4
Hello, World ! 0 of 4
Hello, World ! 2 of 4
Hello, World ! 1 of 4

成功です。ちなみに僕のMacBookProのコア数は

$  system_profiler SPHardwareDataType | grep Cores
      Total Number of Cores: 2

2つですが、4並列されているのはHyper-threadingが有効になっているかららしいです。無効にしたい方は、

$ sudo nvram SMT=0

で無効にできます。

追記:2016/11/09

EqualL2さんからより良い方法を教えていただきました。ありがとうございます!
LLVM 8.1から公式のclangがOpenMPに対応したため、clang-ompはこれ以上更新されないそうです。そのため最新のLLVMを導入したほうがいいです。僕のMac上でも動作を確認できました。

1.llvmをインストール

$ brew install llvm

2.(.bashrcなどに)エイリアスを設定

alias clang-omp='/usr/local/opt/llvm/bin/clang -fopenmp -L/usr/local/opt/llvm/lib -Wl,-rpath,/usr/local/opt/llvm/lib'
alias clang-omp++='/usr/local/opt/llvm/bin/clang++ -fopenmp -L/usr/local/opt/llvm/lib -Wl,-rpath,/usr/local/opt/llvm/lib'

参考

15
16
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
16