Linux* 上でインテル® C++ コンパイラーとインテル® MKL を使用して R-3.0.1 をビルドする

同カテゴリーの次の記事

組込み開発におけるガイド付き自動並列化の利用

この記事は、インテル® デベロッパー・ゾーンに掲載されている「Build R-3.0.1 with Intel® C++ Compiler and Intel® MKL on Linux*」の日本語参考訳です。


  1. CRAN (Comprehensive R Archive Network) から R をダウンロードします。CRAN は、最新の R のコードとドキュメントのダウンロードを提供する Web サーバーです。世界中にミラーが存在します。ネットワークの負荷を最小限に抑えるため、最寄りの CRAN ミラー (http://cran.r-project.org/mirrors.html) を利用してください。

  2. ソースの tar ファイルを展開します。

  3. デフォルトの gcc ツールではなく、インテル® C++ コンパイラーのツール (icc、icpc、xiar、xild) を使用して R プロジェクトをビルドするには、次の手順を行います。

    $ source /opt/intel/composerxe/bin/compilervars.sh intel64
    $ export CC="icc"
    $ export CXX="icpc"
    $ export AR="xiar"
    $ export LD="xild"

  4. パフォーマンスを向上させたい場合は、次のオプションをコマンドラインに追加します。

    $ export CFLAGS="-O3 -ipo -openmp -xHost"
    $ export CXXFLAGS="-O3 -ipo -openmp -xHost"

  5. Linux* オペレーティング・システムの場合、R でインテル® マス・カーネル・ライブラリー (インテル® MKL) のマルチスレッド・バージョンを使用するには、次のコマンドを実行し、コマンドを入力したときに正しいインテル® MKL ライブラリーの場所が表示されることを確認します。

    $ MKL="-lmkl_gf_lp64 -lmkl_intel_thread -lmkl_core -liomp5 -lpthread"
    $ echo $MKL

  6. R プログラミング言語用のビルド環境を設定して、R オブジェクトを関連ディレクトリーにインストールします。

    $ sudo ./configure --with-blas="$MKL" --with-lapack
    $ sudo make && sudo make install

  7. R ディレクトリーに移動して R 実行ファイルを起動し、基本的なコマンドを入力して最小限のプログラムの正当性を検証します。

    $ file bin/R
    $ . bin/R
    $ > y <- log(5)
    $ > y

    R で log(5) 関数を実行して値を内部値 ‘y’ に割り当てると、結果が stdout に表示されます。値は ‘[1] 1.609438’ になります。

  8. インテル® コンパイラーを使用して R をコンパイルします。ここでは、「Extending R with Intel MKL」(http://software.intel.com/en-us/articles/extending-r-with-intel-mkl) の記事と同じ R ラッパーコード (pow_wrp.c) を使用します。

    $ export LD_LIBRARY_PATH=/opt/intel/composerxe/lib/intel64/:./lib:./:$LD_LIBRARY_PATH
    $ icc -O2 -fPIC -I/home/qiaominq/R-3.0.1/include -c pow_wrp.c -o pow_wrp.o
    $ icc -shared -liomp5 -L/opt/intel/composerxe/mkl/lib/intel64 -lmkl_rt -o pow_wrp.so pow_wrp.o -L./lib -lR

    インテル® 64 プラットフォームでは ‘-fPIC’ オプションが必要です。これを指定しないと、一部の ELF スタンドアロン・オブジェクトを関連する最終 ELF 共有オブジェクトにリンクしたときに、次のエラー・メッセージが表示されます。

    ld: pow_wrp.o: relocation R_X86_64_PC32 against undefined symbol `Rf_coerceVector' can not be used when 
    making a shared object; recompile with -fPIC .ld: final
    link failed: Bad value

  9. インテル® コンパイラーのツール (icc、icpc、xiar、xild) とインテル® MKL の BLAS/LAPACK 関数を用いた R プログラムおよび R ランタイム実行環境のパフォーマンス向上率を測定します。

    最初に、数学関数を呼び出す R テストスクリプトを使って、上記でコンパイルした R 環境で R プログラムの実行時間を出力します。

    dyn.load("pow_wrp.so")
    mkl_pow <- function(n, x, y) .Call("mkl_vdpow", n, x, y)
    n <- 1000000
    x <- runif(n, min=2, max=10)
    y <- runif(n, min=-2, max=-1)
    start <- proc.time()
    z <- mkl_pow(n, x, y)
    end1 <- proc.time() - start
    end1
    ##n <-1000000
    i <- n
    start <- proc.time()
    repeat{ z[i] <- x[i]^y[i]
    i <- i - 1
    if (i==0) break() }
    end2 <- proc.time() - start
    end2

    結果は、インテル® MKL を使用することで約 25 倍、R プログラムと R ランタイム・フレームワークをインテル® コンパイラーのツール (icc、icpc、xiar、xild、ライブラリー、その他) でコンパイルして最適化することでさらに 5 倍、パフォーマンスが向上しました。テスト・ベンチマークは、Linux* ホスト (4 コア インテル® Core™ i7 プロセッサー 3770K (3.50GHz)、4GB メモリー、Red Hat* Enterprise Linux* Server リリース 6.3) 上で実行されました。

    ////// 1. デフォルトの R フレームワーク/環境でプログラムを実行

       user  system elapsed
      3.842   0.020   2.913

    ////// 2. デフォルトの R フレームワーク/環境 + インテル® MKL で R を拡張してプログラムを実行

       user  system elapsed
      0.115   0.019   0.337

    ////// 3. デフォルトの R フレームワーク/環境 + インテル® MKL で R を拡張 + インテル® コンパイラーで R をコンパイルおよび最適化してプログラムを実行

       user  system elapsed    
      0.019   0.008   0.015

コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

関連記事

  • インテル® System Studio – インテル® Cilk™ Plus による信号処理向けマルチコア・プログラミングインテル® System Studio – インテル® Cilk™ Plus による信号処理向けマルチコア・プログラミング この記事は、インテル® デベロッパー・ゾーンに掲載されている「Intel® System Studio - Multicore Programming with Intel® Cilk™ Plus」の日本語参考訳です。 はじめに インテル® System Studio […]
  • HPL 向けアプリケーション・ノートHPL 向けアプリケーション・ノート この記事は、インテル® ソフトウェア・ネットワークに掲載されている「HPL application note」の日本語参考訳です。 ステップ 1 - 概要 このガイドは、現在 HPL を使用しているユーザーが、より優れたベンチマーク結果を得られるように、インテル® マス・カーネル・ライブラリー (インテル® MKL) の […]
  • インテル® MKL を Numpy/Scipy に実装インテル® MKL を Numpy/Scipy に実装 この記事は、インテル® デベロッパー・ゾーンに公開されている「Numpy/Scipy with Intel® MKL」の日本語参考訳です。 *著者注: この記事は 2014 年 8 月 27 日更新されました。 NumPy/SciPy アプリケーション・ノート ステップ 1 - 概要 このガイドは、現在 […]
  • インテル® MKL におけるインテル® AVX2 向け最適化インテル® MKL におけるインテル® AVX2 向け最適化 この記事は、インテル® デベロッパー・ゾーンに掲載されている「Intel® AVX2 optimization in Intel® MKL」の日本語参考訳です。 第 4 世代インテル® Core™ プロセッサー (開発コード名: Haswell) は、2013 年にリリースされた新しい世代の x86 […]
  • インテル® Xeon Phi™ コプロセッサー向けにインテル® MKL の利用モデルを選択する方法インテル® Xeon Phi™ コプロセッサー向けにインテル® MKL の利用モデルを選択する方法 この記事は、インテル® デベロッパー・ゾーンに掲載されている「Recommendations to choose the right MKL usage model for Xeon Phi」の日本語参考訳です。 インテル® マス・カーネル・ライブラリー (インテル® MKL) はインテル® Xeon Phi™ […]