ConcurrentReal-Time-Logo

リアルタイムテクニカルドキュメント(CUDA/VSIPL編)最終更新 2021.12.08

外部リンクを除く、以下のドキュメントの著作権は、特に記載の無い限りConcurrent Realtime Inc社に帰属します。
下記ドキュメントの弊社を除く営利目的の利用は禁じますが、ウィキペディアからの参照や社内教育、
大学等の非営利の目的であれば、ご自身の責任において自由に利用して頂いてかまいません。
ドキュメントの内容は予告無く変更する事がありますが、出来る限りリンクが消滅しないように保存しています。
ここに、記載した商品名は、一般に各社の商標または登録商標です。
外部リンク先の著作権は、各サイトの著作権表示をご覧ください。弊社著作権についてのポリシーは こちらをご覧ください。
外部サイトへのリンクはで示されています。


[hand.right] CUDA Compute Capabilityについて

CUDA Compute Capability は、GPUのアーキテクチャのバージョンです。

[hand.right] RedHawkのCUDA公式サポートバージョン(xは、すべてのマイナー版を示します)
なお、Compute capability 2.xはFermi、3.xはKepler、5.xはMaxwell、6.xはPascal 、7.xはVolta、7.5はTuring、8.0はAmpere アーキテクチャを表しています。

CUDAの互換性に関しては、下記のNvidia社公式ドキュメントをご参照ください。
CUDA_Compatibility.pdf

NVIDIA CUDA Cコンパイラ、(nvcc)は、各CUDAアーキテクチャー固有のcubinファイルと前方互換性バージョンPTXの両方を生成するために使用できます。
各cubinファイルは、特定のcompute capabilitバージョンを対象とし、同じメジャーバージョン番号のGPUアーキテクチャとの間でのみ前方互換性があります。
たとえば、コンピューティング機能3.0(sm_30)をターゲットとするcubinファイルは、すべてのコンピューティング機能3.x(Kepler)デバイスでサポートされていますが、コンピューティング機能5.x(Maxwell)デバイスではサポートされていません。
CUDA Cアプリケーションに埋め込まれたPTX(Parallel Thread eXecution)コードから実行するためには、下記手順に従ってください。

なお、CUDA CアプリケーションにPTXコードが埋め込まれていなければロードに失敗します。


GLX ドライババージョンとGPUアーキテクチャサポートの関係を以下に示します
  • Felmiアーキテクチャサポート
  • Keplerアーキテクチャサポート
  • CUDA Toolkitバージョン2.1から4.1を使用して構築されたCUDAアプリケーションは、カーネルのPTXバージョンを含むように構築されている限り、Keplerと互換性があります。
    このKepler互換の詳細は、付属 Kepler Compatibility Guide for CUDA Applicationsを参照してください。
  • Maxwellアーキテクチャサポート
  • CUDA Toolkitバージョン2.1から5.5を使用して構築されたCUDAアプリケーションは、カーネルのPTXバージョンを含むように構築されている限り、Maxwellと互換性があります。
    このMaxwell互換の詳細は、Maxwell Compatibility Guide for CUDA Applicationsを参照してください。
  • Pascalアーキテクチャサポート
  • CUDA Toolkitバージョン2.1から7.5を使用して構築されたCUDAアプリケーションは、カーネルのPTXバージョンを含むように構築されている限り、Pascalと互換性があります。
    このPascal互換の詳細は、Pascal Compatibility Guide for CUDA Applicationsを参照してください。
  • Voltaアーキテクチャサポート
  • CUDA Toolkitバージョン2.1から8.0を使用して構築されたCUDAアプリケーションは、カーネルのPTXバージョンを含むように構築されている限り、Voltaと互換性があります
    このVolta互換の詳細は、Volta Compatibility Guide for CUDA Applicationsを参照してください。
  • Turingアーキテクチャサポート
  • Turingアーキテクチャは、Voltaの命令セットアーキテクチャISA 7.0に基づいており、新しい命令で拡張されています。結果として、Voltaで実行されるバイナリはTuringで実行できますが(上位互換性)、TuringバイナリはVoltaで実行できません。64KBを超える共有メモリを使用するVoltaカーネル(明示的なオプトインを介して、CUDA C ++プログラミングガイドを参照)は、Turingの共有メモリ容量を超えるため、Turingで起動できないことに注意してください。
    このTuring互換の詳細は、Turing Compatibility Guide for CUDA Applicationsを参照してください。
  • Ampereアーキテクチャサポート
  • CUDA Toolkitバージョン2.1から10.2を使用して構築されたCUDAアプリケーションは、カーネルのPTXバージョンを含むように構築されている限り、Ampereと互換性があります
    このVolta互換の詳細は、Ampere Compatibility Guide for CUDA Applicationsを参照してください。

    [hand.right] VSI/Proについて

    VSI/Pro(外部PDF)は、 RunTime Computing Solutions社(外部HTML)が提供する商用のVSIPLです。
    VSI/Proは、VSIPLフォーラムで規定されているVSIPL(Vector、Signal、およびImage Processing Library)標準に完全に準拠しています。
    VSI/ProのGPU版は、RedHawk7.2で動作が確認されており、日本では、株式会社JEPICO(外部HTML)から購入することが出来ます。

    VSI / Pro(R)GPU 1.20リリースサポート(CUDA 7.5ドライバ、静的ライブラリ)
    対象:RedHawk7.2またはCentOS 7.2および互換機。
    x86-64 Linux用のCUDA 7.5ドライバのサポート。
    gcc(GCC)4.8.5 20150623(Red Hat 4.8.5-11)
    ldd:ldd(GNU libc)2.17
    ビルド対象のNVIDIAアーキテクチャは次のとおりです。
    -gencode arch = compute_30、code = sm_30 -gencode arch = compute_32、code = sm_32 -gencode arch = compute_35、code = sm_35 \
    -gencode arch = compute_50、code = sm_50 -gencode arch = compute_52、code = sm_52 -gencode = arch = compute_52、code = compute_52
    CUDA 7.5とNVIDIA GPUアーキテクチャとの互換性、および最大限のコード互換性と特定のターゲットパフォーマンスのためのビルドパラメータの理由については、 ここを参照してください。
    VSI/Proの場合:MT-1プログラミングでは、各スレッドは独立したマルチスレッドプログラミングのためにMT-1モデルに従ってvsip_init()とvsip_finalize()を使用します。
    特定の引数を指定したvsip_init()を使用すると、そのスレッドで使用するGPUをターゲットにすることができます。


    [hand.right] magmaについて

    magma は、CUDA 、OpenCL、およびIntel Xeon PhiのためのLAPACK実装を提供します。
    最新のリリースでは、それぞれ、MAGMA1.6clMAGMA1.3、 およびMAGMA MIC1.3 です。

    Redhawk6.5(x86_64)には、下記RPMがインストール済みですので、make.incをダウンロードし、以下のPATCHを行う事で、ご使用になれます。
    なお、TESLA アーキテクチャは将来サポートされない警告がでるためmake.incから削除し、 CMKAEを使用するとコンパイルに失敗します。
    ccur-nvidia-glx-337-25.20140813.x86_64
    ccur-nvidia-cuda-6.0.37-1.20140516.x86_64(CUDA6.0,cuBLAS,cuFFTを含む)
    atlas-sse3-3.8.4-2.el6.x86_64
    atlas-3.8.4-2.el6.x86_64
    lapack-3.2.1-4.el6.x86_64
    blas-3.2.1-4.el6.x86_64


    [hand.right] Thrust利用時のコンパイルエラーについて。

    RedHawkのCUDA5.5,CUDA6.0で、Thrust利用時にコンパイルエラーが発生する現象が確認されています。
    この問題は、/usr/bin/nvcc.profile ファイルのINCLUDES行に、-I/usr/local/cuda/include を挿入することで解消されます。
    TOP = $(_HERE_)/..
    NVVMIR_LIBRARY_DIR = $(TOP)/nvvm/libdevice
    LD_LIBRARY_PATH += $(TOP)/lib:
    PATH += $(TOP)/open64/bin:$(TOP)/nvvm/bin:$(_HERE_):
    INCLUDES += "-I$(TOP)/$(_TARGET_DIR_)/include" -I/usr/local/cuda/include $(_SPACE_)
    LIBRARIES =+ $(_SPACE_) "-L$(TOP)/$(_TARGET_DIR_)/lib$(_TARGET_SIZE_)"
    CUDAFE_FLAGS +=
    OPENCC_FLAGS +=
    PTXAS_FLAGS +=

    [hand.right] 「ジッターレスCUDAの実現」

    RedHawkのVersion 5.4以降には、標準でNVIDIAのCUDA(TM)がインストールされています。
    この報告書は、CUDAをXorgと同時に利用した場合の計算速度に対するジッターと、そのジッターの回避法を報告します。
    また、本報告書には示されていませんが、RedHawkのNVIDIAデバイスドライバは、リアルタイム用途に使用可能なように、エンハンスメントされています。

    [hand.right] RedHawk Realtime LinuxとCUDA による高解像度連続周波数解析デモプログラム

    GPU-VSIPLとSpectrum社の高速AD(50Msamples/sec)を組み合わせ、超高速FFTアナライザを試作致しました。
    ADの入力は14bit/50MHzで連続収録を行い、全てのデータに対して1メガポイントのFFTを行い、周波数の全点ピークサーチを行っています。


    [hand.right] nVidia CUDA Buffering use on RedHawk 5.4

    RedHawkTM 5.4では、標準でNVIDIA社のCUDATMがインストールされていますが、そのデバイスドライバはリアルタイム用に最適化されています。
    具体的には、メモリバッファをプリアロケートする様にエンハンスメントされていますので、標準のnVidiaデバイスドライバより高速に動作します。
    このドキュメントでは、このベンチマークテストの概要を報告します。(英語)
    以下は、動作確認済みのNvidiaのカードリストです。
    Quadro NVS 290/295,NVS 450 FX 4600 & 4800,FX 5500 & 5500G,FX 5600 & 5600G,FX 5800 & 5800G
    GeForce GTX 260,GTX 285/295,9800 GT
    Tesla 1060C


    [hand.right] CUDAを使ったVSIPL

    RedHawkTM 5.4以降には、標準でNVIDIA社のCUDATMがインストールされています。
    このドキュメントでは、このCUDA-VSIPLの概要を報告します。
     CUDAを直接的に利用する方法は、情報処理学会誌の2009年2月号 Vol.50 No2 に特集「アクセラレータ、再び-スパコン化の切り札-」として紹介されているほか、様々なサイトでも紹介されています。
     CUDAが今までのアクセラレータと異なるのは、コンピュータに内蔵されている表示用のグラフィクスチップを利用して、CPUより高速に並列処理する事です。
     しかも、OpenGLグラフィックスドライバとCUDAドライバを同時に使用することが可能です。
    つまり、追加費用無しに、高速計算が可能になると言うことです。
     しかし、CUDAのプログラミングは、難度が高い上、将来計画されているAMD社のGPU取り込み等に代表される、CPUのメニーコア化に対して資産が継承できないなどの懸念があることも事実です。
     これらの問題に対して、CUDAをVSIPLのAPIで利用するアプローチは、資産の継承と速度の向上という最適解が得られると考えています。


    [hand.right] GPU-VSIPL RPM for RedHawk

    GPU-VSIPLは無償で公開されていますが、CUDA tool kit 3の版でしか動作しません。
    本RPMファイルは、CUDA3のライブラリと共に供給される RedHawk 6.0 - 7.2 用のGPU版VSIPLのインストールパッケージです。
    コンパイルされたオブジェクトの実行には、
    export LD_LIBRARY_PATH=/usr/local/gpuvsipl_2009Aug11/linux64
    が必要になります。
    CUDAの版が古いため、最新のCUDAに比べて、速度は遅いことがあります。



    [hand.right] VSIPL Core Plus Plus for RedHawk

    [VSIPL]

    オープンソース信号処理ライブラリのディファクトスタンダードである、VSIPLライブラリをRedHawkに移植しました。
    移植した版は、最新のVSIPL Core Plus Plus 0p86 (R. Judd - 4/23/07)で、試験したのは、Test Suite version 1.03 (D. Campbell - 5/1/02)です。
    添付ファイルを、RedHawkマシンにコピーの上、下記手順で展開してください。

    # cd /usr/local
    # tar xvfz VSIPLPP.tar.gz
    なお、展開すると/usr/local/VSIPLディレクトリが作成され、その下に
    src        オリジナルソース
    tvcppOp86i    VSIPL
    Test_Suite_Lite 試験プログラム
    が展開されます。
    そのままでも利用できますが、再コンパイルが必要な場合には、各ディレクトリ のREADMEをご覧ください。makeだけで再コンパイルできます。

    なお、ライブラリ本体は /usr/local/VSIPL/tvcppOp86/lib下に
    libvsip.a libVU.a libVU_c.a libVUX.aが作成されていますので、/usr/libにリ ンクを張ってご利用ください。

    # cd /usr/lib
    # ln -s /usr/local/VSIPL/tvcppOp86/lib/libvsip.a .
    # ln -s /usr/local/VSIPL/tvcppOp86/lib/libVU.a .
    # ln -s /usr/local/VSIPL/tvcppOp86/lib/libVU_c.a .
    # ln -s /usr/local/VSIPL/tvcppOp86/lib/libVUX.a .

    また、インクルードファイルは、
    /usr/local/VSIPL/tvcppOp86/includeに作成されますので、同様に

    # ln -s /usr/local/VSIPL/tvcppOp86/include /usr/include/VSIPL

    とリンクを張ってお使いください。



    [back]Back