Kepler GPUのSIMD命令

KKeplerアーキテクチャ(Compute Capability 3.0)以降のNVIDIA GPUには、SIMD命令が新設されています。

ここでいうSIMDとは、(GPUの典型的な構造である)SMX内で各CUDA Coreが1つのデータに対し1つの処理を行う(広い意味での)SIMDではなく、1つのCUDA Coreが本当に複数のデータを一度に処理するSIMDです。x86におけるSSEのようなものですが、KeplerのSIMDはレジスタ長が32bitです。

続きを読む

広告

Xcode 4.6でOpenCLを使う

時間がないので簡易メモです。

【手順】

  1. Xcodeを起動して普通にプロジェクトを作る(例えば、コンソールアプリケーション、C++)
  2. Project Navigator(左画面)にあるプロジェクト名部分をクリック
  3. 中央画面上部にある”Build Phases”をクリック
  4. “Link Binary With Libraries”の左にある三角をクリック
  5. “+”をクリックし、ダイアログの中から”OpenCL.framework”を探してAddする
  6. 必要に応じてOpenCLカーネルを記述するためのソースコード(拡張子cl)を追加する

【注意点】

  • インクルードファイルは”OpenCL/opencl.h”。これはMac特有らしいので注意。必要に応じて”#ifdef __APPLE__”マクロなどを使う。
  • C++ APIは用意されていない様子。がっかり。
  • *.clファイルを追加すると、OpenCLカーネルをコンパイルしてバイナリ化する。コンパイルは、CPU x86、CPU x64、GPU 32bitの3種類がターゲットにされ、それぞれ”.i386.bc”、”.x86_64.bc”、”.gpu_32.bc”という接尾語がファイル名に追加される。格納場所は、実行バイナリのあるフォルダを基準に”OpenCL/[オリジナルのOpenCLファイル名][接尾語]”である。
  • このとき、コンパイルエラーもチェックされる。エラーがあれば、Issue Navigatorに表示される(画面左上の△に!のついたアイコンをクリック)。
  • IntelのGPUではOpenCLが実行できない。IvyBridgeのようにハードウェアがOpenCLに対応していても、ドライバが対応していない。がっかり。