トップ 差分 一覧 Farm 検索 PDF RSS ログイン

GPUPCプロジェクト

GPUPCプロジェクト

GPUPC とはGPUを用いた並列計算(GPU Used Parallel Computation)を意味する造語です.

GPUで並列計算をするのみならず, GPUとCPUを同時に用いた並列計算 によって更なる性能向上を目指します.

現在は,GPUとCPUを用いて数値計算問題を高速に並列計算するためのソフトウェアを作成しています.

GPUPC GEMM LIBRARY では,GPUPCの技術を用いた並列行列積和計算(BLASのGEMM演算)およびそのライブラリ化を行っています。行列積和計算はデータ並列化に適した問題のため,GPUとCPUによる並列計算に適しており,高い性能向上が期待できます.また数値計算ライブラリの形にすることで,既存のCPU向けアプリケーションの高速化を容易に行うことができます.

GPUPC GEMM LIBRARY

概要

GPUとCPUを利用することで、行列積和計算を高速に行うライブラリです。BLASのGEMMインタフェースに対応しています。

ライブラリのダウンロード

GPUPC GEMM LIBRARY 本体

GPUPC GEMM LIBRARYそのものです。

WindowsおよびLinux(Linux以外の各種UNIX系OSでの動作は確認できていませんが、OpenGLおよびGLSL/Cgの実行環境が整っていれば動作すると思われます)に対応したソースコード類が一式同梱されています。

現在のところ、バイナリファイルの配布は行っておりません。バイナリファイルの生成にはVisualStudioやgccなどの開発環境が必要です。

  • 既知のバグなど
    • 20070301版
      • 今のところありません
    • 20070214版
      • 今のところありません
    • 20070123版
      • 今のところありません
    • 20070117版
      • dgemm系が動かない→現在実装中.ただし,GPUの担当する演算はsgemm相当になります.
      • config.sample.ini内ではgpuratioと書かれているが,実際はgpu_ratioでないと効果をなさない.make testbench*にも影響が出ている.→gpuratioに統一したバージョンを作成中.

GPUPC GEMM LIBRARY 本体 同梱readmeファイル

GPUPC GEMM LIBRARY : MPIを用いて複数PCを利用するテストプログラム

問題設定が現実的なアプリケーションで有用であるかが主題ではなく、どちらかというとgpupcgemmをMPIプログラムから使えることを確認することが主題です。

いずれの問題も、gpupcgemm_libraryがインストールされていることが前提です。

また、Windows向けバイナリファイルが同梱されていますが、全ての環境で動作する保障はありません。お手元での実行ファイルの生成にはslnファイル、vcprojファイル、Makefileが同梱されているのでご利用ください。config.iniおよびmpiconfig.iniについてはgpupcgemm_libraryのconfig.iniや同梱のmpiconfigi.sample.iniを参考に、必要に応じて作成してください。

問題設定1

  • 概要

PC2台を用いて、行列積和計算を分割し並列に計算します。各PCが大きな行列積和計算の半分ずつを持ち、互いに送りあって計算するという問題設定です。

ただし、答え合わせを行うため、初期状態では各PCに同一の大きな行列データを持ち、そのうちの半分を転送して計算する構造になっています。

問題設定2

  • 概要

PC2台を用いて、行列積和計算を分割し並列に計算します。初期状態ではPC1が全問題を持っていて、PC2に部分問題を転送し、並列に計算し、データを戻すという問題設定です。

GPUPC GEMM +mgc : 複数GPUに対応したバージョン

概要

GPUPC GEMMの複数GPU/複数CPUに対応したバージョンです

ダウンロード

実装のアイディアなど

SLIやCrossFireを使わずに複数GPUを使う実装方法についてはこちらを参照。

複数GPUの利用に関するetc(注意:半分は想像で書いています)

SLIやCrossFireを使えばいいだろう、という意見に対する考え。スタンス。

SLIやCrossFireを使う利点は、1GPU向けプログラムをそのまま2GPUに適用できることだと思う。ドライバレベル(ユーザプログラムより下のレベル)で最適化をしてくれるなら、それにまかせればユーザの負担が軽減される。一方で、いくつもの欠点がある。SLIやCrossFireが性能を確実に2倍にするものではなく、対象アプリケーションによっては全く性能向上が行えないというのは周知の事実である。更に、見かけのVRAMが2倍にならないこと、性能が異なるGPUを利用すると弱い方にひきずられてしまうなど、複数GPUの全ての性能を活用することは困難である。当然ながら、GeForceとRadeonを併用することはできない。

一方、複数GPUを複数GPUとして扱う場合は上記の利点・欠点が逆転する。欠点は、1GPU向けのプログラムをそのまま2GPUに適用することは不可能であり、実装に手間がかかることである。一方で、GPUを独立して叩けるためVRAM容量が本当に2倍使える、性能が異なるGPUでも全て活用できる可能性がある、もしかしたらGeForceとRadeonを同時に使える可能性もある。

複数GPUの方は半分くらいが想像の範囲を超えていないのだが、あながち間違ってはいないだろう。

ある意味では自動並列化と並列プログラミングのような関係なのではないだろうか?

その他

その他のテストプログラム

繰り返し計算を行う単純なサンプル

ライセンス

20070301版現在、ライセンス関係のテキストが同梱されていません。ソースコードの利用などに厳しい条件を設けない予定であり、BSD-style licenceを検討していますが、詳細については検討中です。

ひとまず、再配布は不許可でお願いします。

Windows用ATLAS/CBLAS

readme.txt中で言及しているATLAS/CBLASのバイナリはこちら:atlascblas.zip(219)

20070123版にて更新:atlas.lib, cblas.lib, cblas.hが入っています。