ソフテック・トップページへ
ホーム 製品 セキュリティ・サービス HPCサービス ダウンロード 企業情報



PGI コンパイラ製品の購入をご検討の方は、こちらからお問い合わせください



PGI compiler TIPS
AMD ACML 数学ライブラリ
技術情報・TIPS > ACML


PGI コンパイラにて、SSE/SSE2インストラクションを使用して性能最適化された BLAS ライブラリ、LAPACK ライブラリ、FFT ライブラリをご利用になりたい場合は、製品にバンドルされた ACML ライブラリをお使いください。従来の 32bit の x86 システムでも 64bit の AMD64/EM64T システム上でもお使いになれます。


高速数学ライブラリ ACML

32ビット x86 及び 32ビット/64ビット版Linux OS上で動作する x86 アプリケーションの性能と機能性を最大化するための AMD 社で開発されたライブラリです。SSE/SSE2/SSE3インストラクションを使用し、高度にチューニングされた BLAS*1 カーネルを活用して、通常の Linear Algebra Package (LAPACK*2) 実装の場合よりもさらに高い性能を発揮するよう、LAPACKルーチンにはさらなる最適化が行われています。ACML は、また、FFT をシングル、ダブル、シングル・コンプレックス、ダブル・コンプレックスで提供します。AMD 社の ACML は PGI コンパイラ用にバンドルするため、Linux・Windows(R) 開発のための OpenMP と Non-OpenMP 用のライブラリも提供していますが、PGI 6.2以降の default installation においては、Non-OpenMP 版並びに OpenMP 版がバンドルされています。なお、ACML に関しては、弊社のサポート外となりますので予めご了承ください。

AMD プロセッサだけではなく、インテルのプロセッサに対してもご利用いただけます。

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

最新バージョン ACML 4.4 (2010年2月現在)

 AMD ACML 最新リリースノートは、こちらへ

ACML 4.0 (2007年12月)

  • New features in Version 4.0.0 include:
    • LAPACKを バージョン 3.1.1 にアップデートしました
    • 第三世代 AMD Opteron プロセッサのための最適化の対応をおこないました。

ACML 3.6 (2006年11月)

  • New features in Version 3.6 include:
    • LAPACK コードをアップデートしました
    • 多くの LAPACK ルーチンを新たに OpenMP マルチスレッディング対応としました。

ACML 3.5 (2006年8月)

  • New features in Version 3.5 include:
    • Level 1 BLAS SSE3 カーネルルーチンが SSE3 機構を実装したプロセッサで使用可能となります。(xDOT, xCOPY, xAXPY, and xSCAL routines)
    • complex-complex FFT ルーチンの中の CFFT3DY と ZFFT3DY インタフェース は、不定のメモリアクセスのストライドを持つ配列上の 3次元変換を可能とします。
    • 2 次元 complex-complex FFT ルーチンの性能向上
    • シングルプロセッサとマルチプロセッサ上での ACML の速度をデモンストレーションする事例を実行できます。
    • 乱数発生パッケージの性能向上
    • PGI 64ビット用のライブラリは、3.5 バージョンより、全て -Mlarge_arrays フラグを付して生成されていますので、2GB を超える配列のアクセスにも対応できます。

ACML 3.1 (2006年4月)

  • New features in Version 3.1 include:
    • 乱数発生パッケージの性能向上
    • INTEGER*8 互換ライブラリの提供
    • Solaris(R) Studio 10 ライブラリの提供
    • g77, gfortran, Pathscale, and PGI compilers に対する ScaLAPACK の更新

ACML 3.0 (2006/1月)

  • New features in Version 3.0 include:
    • 乱数生成スイートの実装(ACML 3.0)
    • FFTの性能向上(ACML 2.7)
    • Dual Core AMD64 サポート(ACML2.7)
    • Windows x64 サポート(ACML 2.7)
    • 小さなサイズでのLevel 3 BLAS の性能向上(ACML 2.7)
    • new fast scalar log10, pow, powf, and vector log10 and powf routines(ACML 2.7)
    • PGI SMP 並列用の ACML ライブラリ(64-bit and 32-bit )は、2D, 3D and multiple 1D FFTsの FFTルーチンの全てのデータタイプにおいて SMP 並列化が実装されました。これらのルーチンは、マルチプロセッサ上で著しい性能の向上が見られております。
    • キーとなる level 2 and level 3 BLAS routines に対して SMP 並列処理を実装しました。これによって、マルチプロセッサの SMP マシン上で、これらのルーチンに関わる全ての ACML ルーチン(LAPACK) の性能が向上しました。
    • AMD ScaLAPACK が提供されました。これは、分散メモリ並列計算環境での dense linear algebra calculations をサポートするものです。
    • ベクトル数学ライブラリ外部関数( exp, log, sin, cos, sincos)が追加されました。
    • LAPACKの全ての関数がサポートされました。BLAS ルーチンの更なる高速化と主要なLAPACKルーチンの高度な最適化により、標準の LAPACK よりも高速な実効性能を提供します。、


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

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

  • $ cat /proc/cpuinfo

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

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

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

  pgf77 -fastsse -Mcache_align test.f -lacml
  pgf95 -fastsse -Mcache_align test.f -lacml 
pgcc -fastsse -Mcache_align test.c -lacml

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

【32ビットWindows PGI 7.0 以降】
  pgf77 -fastsse -Mcache_align -Munix test.f -lacml
  pgf95 -fastsse -Mcache_align -Munix test.f -lacml 
pgcc -fastsse -Mcache_align -Munix test.c -lacml  ※ 32ビット版 PGI6.2は ACML をバンドルしてません  ※ 32ビット環境では、-Munixを必ず付加して下さい 【32ビットWindows PGI 7.1 以降】 pgf77 -fastsse -Mcache_align -Munix test.f -lacml -Bdynamic pgf95 -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 pgf95 -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 pgf95 -fastsse -Mcache_align test.f -lacml -Bdynamic
pgcc -fastsse -Mcache_align test.c -lacml -pgf77libs -Bdynamic

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

  PGI6.2の場合
pgf77 -fastsse -Mcache_align -mp test.f -lacml pgf95 -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 pgf95 -fastsse -Mcache_align -mp test.f -lacml_mp pgcc -fastsse -Mcache_align -mp test.f -lacml_mp -pgf77libs -lm

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

  PGI6.2の場合 【64ビットWindows版のみ】
pgf77 -fastsse -Mcache_align -mp test.f -lacml pgf95 -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 pgf95 -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 pgf95 -fastsse -Mcache_align -mp test.f -lacml_mp -Bdynamic pgcc -fastsse -Mcache_align -mp test.f -lacml_mp -pgf77libs -lm \ -Bdynamic (注意)32bit Windows の場合は、さらに -Munix を付加して下さい。  ※ PGI 7.1 以降は、Windowsデフォルトのリンク形式が static となった    ため、ACMLライブラリの場合は、 明示的に-Bdynamic が必要です。

※ PGI 7.1 リリース 以降の Linux 版での注意 (-fPIC or -mcmodel=medium を付加した場合)
-fPIC オプションを使用してコンパイルし、-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 並列対応となっているサブルーチンは、このライブラリ・モジュールの中で自動的に並列実行されます(全てのライブラリ・ルーチンが並列対応とはなっていませんのでご注意ください)。
並列実行での環境変数を予め、以下のように設定してから実行してください(2スレッドの例)。

 $ OMP_NUM_THREADS=2 ; export OMP_NUM_THREADS

スタックサイズの不足等のエラーがある場合、スタックサイズの指定を行います。

 $ MPSTKZ=8M;export MPSTKZ

 $ ./a.out


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

画面トップへ

AMD 社の ACML ページ
ACML リリース・ノート
LAPACK, BLAS, ScaLapack のドキュメント



 ※本ページに記載されている会社名、製品名は、各社の登録商標または商標です。
 ソフテックは、PGI 製品の公認正規代理店です

サイトマップ お問合せ
Copyright 2010 SofTek Systems Inc. All Rights Reserved.