ACML(AMD Core Math Library) 数学ライブラリ

対象 ACML BLAS LAPACK FFT Random number PGIコンパイラ オプション

 PGI 16.1 以降には ACML ライブラリはバンドルされていません。以下は、PGI 15.10 までのコンパイラで有効です。PGI 16.1 以降で、BLAS/LAPACK を使用したい場合は、OpenBLAS による BLAS ライブラリをご利用ください
 PGI コンパイラにて、SSE インストラクションを使用して性能最適化された BLAS ライブラリ、LAPACK ライブラリ、FFT ライブラリを使用したい場合は、製品にバンドルされた ACML ライブラリをお使いください。従来の 32bit の x86 システムでも 64bit の AMD64/Intel64 システム上でもお使いになれます。このページでは、ACMLライブラリのリンク方法について説明します。なお、このライブラリはLinux、Windows用のみ提供しております。OS X 版にはバンドルされていませんのでご注意ください。
Copyright © 株式会社ソフテック

高速数学ライブラリ ACML について

information

 AMD Core Math Library (ACML) は、32 ビットあるいは 64 ビット版 OS 上で動作する x64 アプリケーションの性能と機能性を最大化するための AMD 社で開発されたライブラリです。SSE/SSE2/SSE3/SSE4 インストラクションを使用し、高度にチューニングされた以下の数学ライブラリを提供します。なお、このライブラリは、AMDプロセッサだけではなく、インテルのプロセッサ上でも利用でき、OpenMP スレッド並列用のルーチンも具備しています。AMD プロセッサだけではなく、インテルのプロセッサに対してもご利用いただけます。

  • BLAS は、行列とベクトルの基本演算を行うルーチンを集めたLevel 1 BLAS(ベクトル‐ベクトル演算)、Level 2 BLAS (行列‐行列演算)、Level 3 BLAS(行列‐行列演算)で構成されています。
  • LAPACK は、米国エネルギー省の研究員を含む数値計算分野の専門家により開発された、線形代数ルーチンを集めたライブラリで、連立一次方程式、線形最小二乗問題、固有値問題、特異値分解の計算を行うことができます。LAPACKは計算の基本部分にBLASを利用しています。

PGI 製品にバンドルされた ACML の使用法

 一般的な 1CPU 用並びに OpenMP 用の ACML ライブラリのリンク方法は以下のとおりです。なお、OpenMP 版のライブラリは、PGI 6.2 以降でバンドルされております。この ACML ライブラリは、SSE/SSE2/SSE3 インストラクションを使用していますので、使用するハードウェア(MPU) がSSE ハードウェアをサポートしている必要があります。現在のハードウェアがサポートしているか否かを判別するには、Linux の場合、以下のコマンドを使用して、SSE/SSE2/SSE3 フラグが存在するか確認してください。

   $ cat /proc/cpuinfo

 ACMLライブラリをリンクするためのコンパイル・オプションは次のとおりです。オプション記述の順番に気をつけてください。なお、ライブラリは、SSE インストラクションを使用しているため、データ整列のために 32ビット環境では、-fastsse あるいは、-Mcache_align を必ず指定してください。(64ビット環境の場合は、デフォルトでデータ整列されています。) OpenMP 版の ACML ライブラリは、-mp オプション(OpenMP並列化のためのオプション)並びに、-lacml あるいは -lacml_mp を付加することにより、自動的にリンクされます。

 Windows 環境での ACML ライブラリの使用に関する記事が、こちらのページにもございます

 ACML の行列積のライブラリ(DGEMM)を使用する例題こちらのページに記載しています。

1 CPU シリアル版のACMLをリンクする場合

● Linux 版

  pgf77 -fastsse -Mcache_align test.f -lacml
  pgfortran -fastsse -Mcache_align test.f -lacml 
  pgcc -fastsse -Mcache_align test.c -lacml 
  ※バンドルされた ACML のバージョンによっては、「-lacml -lacml_mv」 の二つのオプションが
  必要な場合があります。リンクエラーが生じた場合は -lacml_mv オプションを追加して下さい。

● Windows 版

【32ビットWindows PGI 7.0 以降】
  pgf77 -fastsse -Mcache_align -Munix test.f -lacml
  pgfortran -fastsse -Mcache_align -Munix test.f -lacml 
  pgcc -fastsse -Mcache_align -Munix test.c -lacml 
 ※ 32ビット環境では、-Munix オプションを必ず付加して下さい

【32ビットWindows PGI 7.1 以降】
  pgf77 -fastsse -Mcache_align -Munix test.f -lacml -Bdynamic
  pgfortran -fastsse -Mcache_align -Munix test.f -lacml -Bdynamic
  pgcc -fastsse -Mcache_align -Munix test.c -lacml -Bdynamic
 ※ PGI 7.1 以降は、Windowsデフォルトのリンク形式が static となった
   ため、ACMLライブラリの場合は、 明示的に -Bdynamic が必要です。
 ※ 32ビット環境では、-Munix オプションを必ず付加して下さい

【64ビットWindows PGI 6.2 以降】
  pgf77 -fastsse -Mcache_align test.f -lacml
  pgfortran -fastsse -Mcache_align test.f -lacml 
  pgcc -fastsse -Mcache_align test.c -lacml -pgf77libs

【64ビットWindows PGI 7.1 以降】
  pgf77 -fastsse -Mcache_align test.f -lacml -Bdynamic
  pgfortran -fastsse -Mcache_align test.f -lacml -Bdynamic
  pgcc -fastsse -Mcache_align test.c -lacml -pgf90libs -Bdynamic
  (PGI の旧バージョンでは、"-pgf90libs"の代わりに"-pgf77libs"とする場合がある)
  

OpenMP 版の ACML をリンクする場合

● Linux 版

【PGI6.2の場合】

  pgf77 -fastsse -Mcache_align -mp test.f -lacml 
  pgfortran -fastsse -Mcache_align -mp test.f -lacml 
  pgcc  -fastsse -Mcache_align -mp test.f -lacml 

【PGI7.0以降の場合】

  pgf77 -fastsse -Mcache_align -mp test.f -lacml_mp 
  pgfortran -fastsse -Mcache_align -mp test.f -lacml_mp 
  pgcc  -fastsse -Mcache_align -mp test.f -lacml_mp -pgf77libs -lm

● Windows 版

  PGI6.2の場合 【64ビットWindows版のみ】

  pgf77 -fastsse -Mcache_align -mp test.f -lacml 
  pgfortran -fastsse -Mcache_align -mp test.f -lacml 
  pgcc  -fastsse -Mcache_align -mp test.f -lacml 

 PGI7.0の場合 【32ビット、64ビットWindows版】

  pgf77 -fastsse -Mcache_align -mp test.f -lacml_mp 
  pgfortran -fastsse -Mcache_align -mp test.f -lacml_mp 
  pgcc  -fastsse -Mcache_align -mp test.f -lacml_mp -pgf77libs -lm -Bdynamic
 (注意)32bit Windows の場合は、さらに -Munix を付加して下さい。

 PGI7.1以降の場合 【32ビット、64ビットWindows版】

  pgf77 -fastsse -Mcache_align -mp test.f -lacml_mp -Bdynamic
  pgfortran -fastsse -Mcache_align -mp test.f -lacml_mp -Bdynamic
  pgcc  -fastsse -Mcache_align -mp test.f -lacml_mp -pgf90libs -lm -Bdynamic
   (PGI の旧バージョンでは、"-pgf90libs"の代わりに"-pgf77libs"とする場合がある)

(注意)32bit Windows の場合は、さらに -Munix を付加して下さい。
  ※ PGI 7.1 以降は、Windowsデフォルトのリンク形式が static となった
     ため、ACMLライブラリの場合は、 明示的に -Bdynamic が必要です。
  
  • PGI 7.1 リリース 以降の Linux 版での注意 (-fPIC or -mcmodel=medium を付加した場合)
    -fPIC or -mcmodel=medium オプションを使用してコンパイルし、-lacml (ACMLライブラリ)をリンクする際に、“error while loading shared libraries: libacml_mv.so: cannot open shared object file: No such file or directory.” と言うエラーメッセージが出力されます。その際は、"-lacml_mv" オプションをリンク時のコマンド列に追加してください。

OpenMP 並列実行の方法

 上記のコンパイルの方法において、-mp オプションを付加することにより、スレッド実行モードのモジュールが生成されます。ACML ライブラリの中で OpenMP 並列対応となっているサブルーチンは、このライブラリ・モジュールの中で自動的に並列実行されます(全てのライブラリ・ルーチンが並列対応とはなっていませんのでご注意ください)。
並列実行での環境変数 OMP_NUM_THREADS を予め、以下のように設定してから実行してください(4スレッドの例)。

 $ export OMP_NUM_THREADS=4 
 $ 実行
------------------------------------------------------------------------------------
スタックサイズの不足等のエラーがある場合、スタックサイズの指定を行います。
  $ export MPSTKZ=8M
  $ 実行