Help us understand the problem. What is going on with this article?

Macでclang+OpenMP 2016

More than 3 years have passed since last update.

2016年現在、OpenMPに対応したclangをビルドする方法をまとめます。ググると OpenMP®/Clang を使えという情報がいくつか見つかるのですが、llvm 3.7.0 から clang は OpenMP を公式サポートしているので、公式のclangを使いましょう。

現在のllvmの最新リリースバージョンは 3.7.1で、trunkは 3.8.0 になっています 1/14(この記事を書いた翌日)には 3.9.0 になっていました… (a07c74e)

clang ビルド手順まとめ

  1. llvm をクローン
  2. tools/ に clang をクローン
  3. projects/ に下記のプロジェクトをクローン
  4. 適当な場所に build ディレクトリを作成(この記事では、llvm の top-level ディレクトリとします)
  5. cd build
  6. cmake -DCMAKE_BUILD_TYPE=Release ..
  7. make -j4
  8. make -j4 install

安定版を使う場合は、適当にtagが付いたものを使えばOKだと思います。

clang+openmp が使えるかどうか確認

コード

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

int main() {
#pragma omp for simd
  for (int i = 0; i < 10; ++i) {
    std::cout << i << std::endl;
  }
  return 0;
}

Building the OpenMP Branch of LLVM/Clang で紹介されていたサンプルコードを拝借しました。

コンパイル

-v をつけた結果を貼っておきます。

% clang++ -fopenmp -v test.cpp
clang version 3.8.0 (https://github.com/llvm-mirror/clang.git 1f54fb1b5a76d0fa9d956baa523845b4861c0915) (https://github.com/llvm-mirror/llvm.git 805ea3283576c755fc1e8bf19872dbb1c8436fca)
Target: x86_64-apple-darwin14.4.0
Thread model: posix
InstalledDir: /usr/local/bin
 "/usr/local/bin/clang-3.8" -cc1 -triple x86_64-apple-macosx10.10.0 -Wdeprecated-objc-isa-usage -Werror=deprecated-objc-isa-usage -emit-obj -mrelax-all -disable-free -disable-llvm-verifier -main-file-name test.cpp -mrelocation-model pic -pic-level 2 -mthread-model posix -mdisable-fp-elim -masm-verbose -munwind-tables -target-cpu core2 -target-linker-version 242.2 -v -dwarf-column-info -debugger-tuning=lldb -resource-dir /usr/local/bin/../lib/clang/3.8.0 -stdlib=libc++ -fdeprecated-macro -fdebug-compilation-dir /Users/ryuyamamoto/Dropbox/llvm/clang -ferror-limit 19 -fmessage-length 205 -fopenmp -stack-protector 1 -fblocks -fobjc-runtime=macosx-10.10.0 -fencode-extended-block-signature -fcxx-exceptions -fexceptions -fmax-type-align=16 -fdiagnostics-show-option -fcolor-diagnostics -o /var/folders/ph/mss0_ys92f9fw0nt9c1qswy40000gq/T/test-727998.o -x c++ test.cpp
clang -cc1 version 3.8.0 based upon LLVM 3.8.0svn default target x86_64-apple-darwin14.4.0
ignoring nonexistent directory "/usr/include/c++/v1"
#include "..." search starts here:
#include <...> search starts here:
 /usr/local/bin/../include/c++/v1
 /usr/local/include
 /usr/local/bin/../lib/clang/3.8.0/include
 /usr/include
 /System/Library/Frameworks (framework directory)
 /Library/Frameworks (framework directory)
End of search list.
 "/usr/bin/ld" -demangle -dynamic -arch x86_64 -macosx_version_min 10.10.0 -o a.out /var/folders/ph/mss0_ys92f9fw0nt9c1qswy40000gq/T/test-727998.o -lomp -lc++ -lSystem /usr/local/bin/../lib/clang/3.8.0/lib/darwin/libclang_rt.osx.a

実行結果

% ./a.out
0
1
2
3
4
5
6
7
8
9

雑記

  • -DCMAKE_BUILD_TYPE=Release を指定しないとデバッグモードでビルドされるため、clang++ のコンパイル時間が激重になる。参考までに、上記のコードで約5秒(リリースだと0.4秒)。
  • libcxx/libcxxabi を一緒にビルド & インストールしないと、iosteam が見つかりません、のように標準ライブラリが見つからない旨のエラーがでる。Macでclang+OpenMP にあるように、include pathを追加することで解決可能だが、libcxx も一緒にインストールすることでも解決可能
  • OSX 10.10 で試しましたが、他の環境でも同じ方法で問題ないと思います。

参考

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away