CUDA

CUDA
原作者イアン・バック
ジョン・ニコルズ
開発者エヌビディア
初回リリース2007年2月16日; 18年前[1] (2007年2月16日
安定版リリース
13.0.0 [2] / 2025年8月6日; 3か月前 (2025年8月6日
書かれたC
オペレーティング·システムWindowsLinux
プラットフォームサポートされているGPU
タイプGPGPU
ライセンス独自の
Webサイトdeveloper.nvidia.com/cuda-zone

CUDA ( Compute Unified Device Architecture ) は、独自の[3] 並列コンピューティングプラットフォームおよびアプリケーションプログラミングインターフェイス(API) であり、ソフトウェアが特定の種類のグラフィックス処理装置(GPU) を高速化された汎用処理に使用できるようにすることで、科学計算や高性能計算における有用性を大幅に高めます。CUDA は、2004 年にNvidiaによって作成され、2007 年に正式にリリースされました。[4]最初に導入されたとき、この名前はCompute Unified Device Architectureの頭字語でしたが、[5] Nvidia は後にこの頭字語の一般的な使用をやめ、現在ではほとんど拡張されていません。 [6]

CUDAは、必要に応じてGPUとCPUに直接アクセスできるようにデータを管理するソフトウェア層であると同時に、さまざまなニーズに合わせて並列計算を可能にするAPIライブラリでもあります。[7] [8] CUDAプラットフォームには、ドライバーとランタイムカーネルに加えて、プログラマがアプリケーションを高速化するのに役立つコンパイラ、ライブラリ、開発者ツールが含まれています。

CUDAはC言語で記述されていますが、 C++FortranPythonJuliaなど、幅広いプログラミング言語で動作するように設計されています。このアクセシビリティにより、 Direct3DOpenGLといった従来のAPIでは高度なグラフィックスプログラミングスキルが求められましたが、CUDAを利用することで並列プログラミングの専門家でもGPUリソ​​ースを容易に利用できるようになります。[9] CUDA搭載GPUは、OpenMPOpenACCOpenCLといったプログラミングフレームワークもサポートしています。[10] [7]

背景

グラフィックス・プロセッシング・ユニット(GPU)は、特殊なコンピュータ・プロセッサとして、リアルタイムの高解像度3Dグラフィックスといった計算負荷の高いタスクの要求に応えます。2012年までに、GPUは高度に並列化されたマルチコア・システムへと進化し、大規模なデータブロックを効率的に操作できるようになりました。この設計は、次のような大規模なデータブロックを並列処理する必要があるアルゴリズムにおいて、汎用の中央処理装置(CPU)よりも効果的です。

CUDAの起源は2000年代初頭に遡ります。当時、スタンフォード大学でコンピュータサイエンスの博士課程に在籍していたイアン・バック氏が、グラフィックスのレンダリング以外の目的でGPUを使用する実験を始めたのです。バック氏が初めてGPUに興味を持ったのは、プリンストン大学在学中にビデオゲームがきっかけでした。卒業後はNVIDIAでインターンシップを行い、GPUアーキテクチャへの理解を深めました。スタンフォード大学では、32枚のGeForceグラフィックスカードを使って8Kゲーミングリグを構築し、当初はQuakeDoomなどのゲームのグラフィックス性能の限界に挑戦しました。しかし、その後、彼の興味は汎用並列コンピューティングにおけるGPUの可能性を探ることに移っていきました[11]

バック氏は、GPU上で汎用コンピューティングを可能にするプログラミング言語Brookを開発しました。彼の研究は、NVIDIAと国防高等研究計画局(DARPA)の両方から支援を受けました。2004年、NVIDIAはバック氏を雇用し、GPUコンピューティングのアーキテクチャ担当ディレクターであるジョン・ニコルズ氏とペアを組みました。二人はBrookをCUDAへと発展させ始めました。[11] CUDAは2007年にNVIDIAによって正式にリリースされました。

NvidiaのCEO、ジェンスン・フアンのリーダーシップの下、CUDAはGPUを科学アプリケーション向けの汎用ハードウェアとして位置付けるという同社の戦略の中核を担うようになりました。2015年までに、CUDAの開発は機械学習人工ニューラルネットワークのワークロードの高速化に重点を置くようになりました。[12]

オントロジー

次の表は、CUDA フレームワークのオントロジーの正確ではない説明を示しています。

CUDAフレームワークのオントロジー
メモリ
(ハードウェア)
メモリ(コード、または変数のスコープ計算
(ハードウェア)
計算
(コード構文)
計算
(コードセマンティクス)
ラムCUDA以外の変数ホストプログラム1回の定期的な通話
VRAM
GPU L2キャッシュ
グローバル、定数、テクスチャデバイスグリッド複数のプロセッサ上で同じサブルーチンを同時に呼び出す
GPU L1キャッシュローカル、共有SM(ストリーミングマルチプロセッサ)ブロック個別のサブルーチン呼び出し
縦糸 = 32 スレッドSIMD命令
GPU L0キャッシュ、
レジスタ
スレッド(別名「SP」、「ストリーミングプロセッサ」、「CUDAコア」ですが、これらの名前は現在非推奨です)ベクトル演算内の個々のスカラー演算に類似

プログラミング能力

CUDA処理フローの例
  1. メインメモリからGPUメモリにデータをコピーする
  2. CPUがGPU計算カーネルを開始する
  3. GPUのCUDAコアはカーネルを並列に実行する
  4. 結果のデータをGPUメモリからメインメモリにコピーする

ソフトウェア開発者は、CUDAプラットフォームに、CUDAアクセラレーションライブラリ、OpenACCなどのコンパイラディレクティブ、 CC++FortranPythonなどの業界標準プログラミング言語の拡張機能を通じてアクセスできます。C/C++プログラマは、nvcc NvidiaのLLVMベースのC/C++コンパイラ)[13]またはclang自体PTXにコンパイルされた「CUDA C/C++」を使用できます。 [14] Fortranプログラマは、 The Portland GroupのPGI CUDA Fortranコンパイラでコンパイルされた「CUDA Fortran」を使用できます[更新が必要] Pythonプログラマは、cuNumericライブラリを使用して、Nvidia GPU上のアプリケーションを高速化できます。

CUDAプラットフォームは、ライブラリ、コンパイラディレクティブ、CUDA C/C++、CUDA Fortranに加えて、Khronos GroupOpenCL[15]、 MicrosoftのDirectComputeOpenGL Compute Shader、C++ AMP [16]などの他の計算インターフェースもサポートしています。 また、 PythonPerl、Fortran、JavaRubyLuaCommon LispHaskellRMATLABIDLJulia、およびMathematicaのネイティブサポート用のサードパーティラッパーも利用できます

コンピュータゲーム業界では、GPUはグラフィックスレンダリングやゲーム物理演算(破片、煙、火、流体などの物理効果)に使用されています。例としては、PhysXBulletなどが挙げられます。CUDAは、計算生物学暗号学などの分野における非グラフィカルアプリケーションを1桁以上高速化するためにも使用されています[17] [18] [19] [20] [21]

CUDAは、低レベルAPI(CUDAドライバAPI、非シングルソース)と高レベルAPI(CUDAランタイムAPI、シングルソース)の両方を提供します。最初のCUDA SDKは、2007年2月15日にMicrosoft WindowsLinux向けに公開されました。その後、バージョン2.0でMac OS Xのサポートが追加されました。[22]これは、2008年2月14日にリリースされたベータ版に取って代わります。[23] CUDAは、G8xシリーズ以降のすべてのNvidia GPU(GeForceQuadroTeslaシリーズを含む)で動作します。CUDAは、ほとんどの標準オペレーティングシステムと互換性があります。

CUDA 8.0 には、次のライブラリ (コンパイルおよびランタイム用、アルファベット順) が付属しています。

  • cuBLAS – CUDA基本線形代数サブルーチンライブラリ
  • CUDART – CUDAランタイムライブラリ
  • cuFFT – CUDA高速フーリエ変換ライブラリ
  • cuRAND – CUDA乱数生成ライブラリ
  • cuSOLVER – CUDAベースの密および疎直接ソルバーのコレクション
  • cuSPARSE – CUDA スパース行列ライブラリ
  • NPP – NVIDIA パフォーマンスプリミティブライブラリ
  • nvGRAPH – NVIDIA グラフ分析ライブラリ
  • NVML – NVIDIA 管理ライブラリ
  • NVRTC – CUDA C++ 用 NVIDIA ランタイムコンパイルライブラリ

CUDA 8.0 には、次のソフトウェア コンポーネントが付属しています。

  • nView – NVIDIA nView デスクトップ管理ソフトウェア
  • NVWMI – NVIDIA エンタープライズ管理ツールキット
  • GameWorks PhysX – マルチプラットフォームのゲーム物理エンジンです

CUDA 9.0~9.2 には、以下のコンポーネントが付属しています。

  • CUTLASS 1.0 – カスタム線形代数アルゴリズム、
  • NVIDIA ビデオデコーダーは CUDA 9.2 で廃止されましたが、現在は NVIDIA ビデオコーデック SDK で利用可能です。

CUDA 10 には、以下のコンポーネントも付属しています。

  • nvJPEG – ハイブリッド(CPU と GPU)JPEG 処理

CUDA 11.0~11.8には以下のコンポーネントが付属している: [24] [25] [26] [27]

  • CUBは、サポートされるC++ライブラリの1つです。
  • MIG マルチインスタンス GPU サポート
  • nvJPEG2000 – JPEG 2000エンコーダーとデコーダー

利点

CUDA には、グラフィックス API を使用した従来の GPU 上の汎用計算 (GPGPU) に比べていくつかの利点があります。

  • 分散読み取り - コードはメモリ内の任意のアドレスから読み取ることができます。
  • 統合仮想メモリ(CUDA 4.0以上)
  • 統合メモリ(CUDA 6.0以上)
  • 共有メモリ – CUDAは、スレッド間で共有できる高速な共有メモリ領域を公開します。これはユーザー管理のキャッシュとして使用でき、テクスチャルックアップよりも高い帯域幅を実現します。[28]
  • GPUへのダウンロードとリードバックが高速化
  • 整数テクスチャ検索を含む整数およびビット演算の完全サポート

制限事項

  • ホストコンピュータ用でもGPUデバイス用でも、CUDAのソースコードはすべてC++の構文規則に従って処理されるようになりました。[29]これは常にそうだったわけではありません。CUDAの以前のバージョンはCの構文規則に基づいていました。[30]そのため、C++コンパイラでCコードをコンパイルするより一般的なケースと同様に、古いCスタイルのCUDAソースコードはコンパイルに失敗したり、本来の意図どおりに動作しなかったりする可能性があります。
  • OpenGL などのレンダリング言語との相互運用性は一方向であり、OpenGL は登録された CUDA メモリにアクセスできますが、CUDA は OpenGL メモリにアクセスできません。
  • ホストとデバイスのメモリ間でコピーすると、システム バスの帯域幅と遅延によりパフォーマンスが低下する可能性があります (この問題は、GPU の DMA エンジンによって処理される非同期メモリ転送によって部分的に軽減できます)。
  • 最高のパフォーマンスを得るには、スレッドは少なくとも32個のグループで実行され、合計で数千個のスレッドが必要です。32個のスレッドのそれぞれが同じ実行パスをたどる限り、プログラムコード内の分岐はパフォーマンスに大きな影響を与えません。一方、SIMD実行モデルは、本質的に分岐するタスク(例えば、レイトレーシング中に空間分割データ構造を走査するなどでは大きな制限となります。
  • 最新リビジョンではエミュレーションまたはフォールバック機能は利用できません。
  • コンパイラがターゲット GPU デバイスの制限に合わせて最適化を行う方法により、有効な C++ でもフラグが立てられ、コンパイルが妨げられる場合があります。[引用が必要]
  • C++ランタイム型情報(RTTI) と C++ スタイルの例外処理は、デバイス コードではなくホスト コードでのみサポートされます。
  • 第一世代CUDA Compute Capability 1.xデバイスの単精度演算では、非正規数はサポートされておらず、代わりにゼロにフラッシュされます。また、除算と平方根演算の精度はIEEE 754準拠の単精度演算よりもわずかに低くなります。Compute Capability 2.0以上をサポートするデバイスは非正規数をサポートし、除算と平方根演算はデフォルトでIEEE 754に準拠しています。ただし、ユーザーは必要に応じて、コンパイラフラグを設定して正確な除算と正確な平方根を無効にし、非正規数をゼロにフラッシュするようにすることで、Compute Capability 1.xデバイスの以前のより高速なゲームグレードの演算を実現できます。[31]
  • OpenCLとは異なり、CUDA対応のGPUは独自のものであるため、Nvidiaからのみ入手可能です。[32] [3]他のGPUにCUDAを実装する試みには以下が含まれます。
    • プロジェクトコリアンダー:CUDA C++11ソースをOpenCL 1.2 Cに変換する。TensorFlowを実行することを目的としたCUDA-on-CLのフォーク[33] [34] [35]
    • CU2CL: CUDA 3.2 C++をOpenCL Cに変換する。[36]
    • GPUOpen HIP: AMDおよびNvidia GPU向けに設計された、CUDAおよびROCmを基盤とした薄い抽象化レイヤーです。CUDA C++ソースをインポートするための変換ツールを備えています。CUDA 4.0、C++11、float16をサポートしています。
    • ZLUDAは、AMD GPUおよび旧Intel GPUにおいて、CUDAの代替として、ほぼネイティブに近いパフォーマンスを実現するドロップイン方式の代替ソフトウェアです。[37]開発者のAndrzej Janik氏は、IntelとAMDの両社からそれぞれ2021年と2022年にソフトウェア開発の契約を個別に締結していました。しかし、ビジネスユースケースが不足していたため、どちらの社も正式リリースを決定しませんでした。AMDとの契約には、Janik氏がAMD向けに独自にコードをリリースすることを許可する条項が含まれており、AMD GPUのみをサポートする新バージョンをリリースすることが可能でした。[38]
    • chipStarは、高度なOpenCL 3.0またはLevel Zeroプラットフォーム上でCUDA/HIPプログラムをコンパイルして実行することができます。[39]
    • SCALEは、AMD GPU上でCUDAソースコードを事前にコンパイルするためのCUDA互換プログラミングツールキットであり、将来的には他のGPUのサポートを拡大することを目指しています。[40]

このC++のサンプル コードは、画像からテクスチャを GPU 上の配列に読み込みます。

テクスチャ< float , 2 , cudaReadModeElementType > tex ;   void foo () { cudaArray * cu_array ;     // 配列を割り当てますcudaChannelFormatDesc description = cudaCreateChannelDesc < float > (); cudaMallocArray ( & cu_array , & description , width , height );         // 画像データを配列にコピーしますcudaMemcpyToArray ( cu_array , image , width * height * sizeof ( float ), cudaMemcpyHostToDevice );     // テクスチャパラメータを設定する(デフォルト)tex . addressMode [ 0 ] = cudaAddressModeClamp ; tex . addressMode [ 1 ] = cudaAddressModeClamp ; tex . filterMode = cudaFilterModePoint ; tex . normalized = false ; // 座標を正規化しない              // 配列をテクスチャにバインドしますcudaBindTextureToArray ( tex , cu_array );   // カーネルを実行dim3 blockDim ( 16 , 16 , 1 ); dim3 gridDim ( ( width + blockDim . x - 1 ) / blockDim . x , ( height + blockDim . y - 1 ) / blockDim . y , 1 ); kernel <<< gridDim , blockDim , 0 >>> ( d_data , height , width );                           // テクスチャから配列をアンバインドしますcudaUnbindTexture ( tex ); } __global__ void kernel ( float * odata , int height , int width ) { unsigned int x = blockIdx . x * blockDim . x + threadIdx . x ; unsigned int y = blockIdx . y * blockDim . y + threadIdx . y ; if ( x < width && y < height ) { float c = tex2D ( tex , x , y ); odata [ y * width + x ] = c ; } }                                         

以下は、GPU上で2つの配列の積を計算するPythonの例です。非公式のPython言語バインディングはPyCUDAから入手できます。[41]

numpyをインポートし、pycuda.autoinitをインポートします。  numpy.typingからNDArray float32をインポートします。pycuda.compilerからSourceModuleをインポートします。pycuda.driverからFunction In Out をインポートします。            mod :  SourceModule  =  SourceModule ( """ __global__ void multiply_them(float* dest, float* a, float* b) {  const int i = threadIdx.x;  dest[i] = a[i] * b[i]; } """ ) multiply_them :  Function  =  mod . get_function ( "multiply_them" )a :  NDArray [ float32 ]  =  numpy ランダムランドン( 400 ) astype ( numpy.float32 ) b : NDArray [ float32 ] = numpy.float32ランダムランドン( 400 ) astype ( numpy . float32 )   dest :  NDArray [ float32 ]  =  numpy.zeros_like ( a ) multiply_them ( Out ( dest ), In ( a ), In ( b ) , block = ( 400 , 1 , 1 ) )     print (宛先 -  a  *  b )

行列乗算演算を簡素化する追加のPythonバインディングは、プログラムpycublasにあります。[42]

 numpyをインポートする pycublasからCUBLASMatrixをインポート   A :  CUBLASMatrix  =  CUBLASMatrix ( numpy . mat ([[ 1 ,  2 ,  3 ],  [ 4 ,  5 ,  6 ]],  numpy . float32 )) B :  CUBLASMatrix  =  CUBLASMatrix ( numpy . mat ([[ 2 ,  3 ],  [ 4 ,  5 ],  [ 6 ,  7 ]],  numpy . float32 )) C :  CUBLASMatrix  =  A  *  B print ( C . np_mat ())

CuPyはNumPyを直接置き換える:[43]

輸入カップ cupy.typingからNDArrayをインポートしfloat64で保存します。    a :  NDArray [ float64 ]  = キューピーランダムrandn ( 400 ) b :  NDArray [ float64 ]  = キューピーランダムランドン( 400 )dest :  NDArray [ float64 ]  = キューピーゼロのような( a )print (宛先 -  a  *  b )

サポートされているGPU

表記に関する注意: 計算能力XYは、プロフェッショナル向けNvidiaソフトウェアおよびNvidiaがLLVMに貢献したコードでは、SMXYまたはsm_XY(例:10.3はSM103またはsm_103)とも表記されます。[44]

以下は、CUDA SDK バージョンとマイクロアーキテクチャに基づいてサポートされている CUDA コンピューティング機能をコード名順に示します。

注意: CUDA SDK 10.2 は macOS の最後の公式リリースです。新しいリリースでは macOS はサポートされません。

CUDA のコンピューティング能力と、それに関連する GPU 半導体および GPU カード モデルのバージョン別 (さまざまなアプリケーション領域別)

* – OEM専用製品

  1. ^ CUDA Toolkit 13.0 では、Thor GPU の SM101 の名前が SM110 に変更されました。

バージョンの機能と仕様

注:より高い計算能力を持つGPUは、より低い計算能力を持つGPU向けのPTXコードを実行できます。ただし、CUDAコードを特定のGPUファミリー(同じ「X」)でのみ動作する形式にコンパイルすることは可能です。既存のコードをこのようにコンパイルした場合、新しいGPUで動作させるには再コンパイルが必要になります。[44]

機能のサポート(リストされていない機能はすべてのコンピューティング機能でサポートされています)コンピューティング能力(バージョン)
1.0、1.11.2、1.32.x3.03.23.5、3.7、5.x、6.x、7.0、7.27.58.x9.0、10.x、12.x
ワープ投票関数 (__all(), __any())いいえはい
ワープ投票関数 (__ballot())いいえはい
メモリフェンス関数 (__threadfence_system())
同期関数 (__syncthreads_count(), __syncthreads_and(), __syncthreads_or())
表面関数
スレッドブロックの3Dグリッド
ワープシャッフル機能いいえはい
統合メモリプログラミング
ファネルシフトいいえはい
動的並列処理いいえはい
ユニフォームデータパス[64]いいえはい
ハードウェアアクセラレーションによる非同期コピーいいえはい
ハードウェアアクセラレーションによる分割到着/待機バリア
削減オペレーションのワープレベルのサポート
L2キャッシュ常駐管理
加速動的プログラミングのためのDPX命令いいえはい
分散共有メモリ
スレッドブロッククラスター
テンソルメモリアクセラレータ(TMA)ユニット
機能のサポート(リストされていない機能はすべてのコンピューティング機能でサポートされています)1.0、1.11.2、1.32.x3.03.23.5、3.7、5.x、6.x、7.0、7.27.58.x9.0、10.x、12.x
コンピューティング能力(バージョン)

[65]

データ型

浮動小数点型

データ型サポートされているベクタータイプストレージ長ビット
(完全ベクトル)
使用された長さビット
(単一の値)
符号ビット指数ビット仮数ビットコメント
E2M1 = FP4e2m1x2 / e2m1x48月16日4121
E2M3 = FP6バリアントe2m3x2 / e2m3x416 / 326123
E3M2 = FP6バリアント3m2x2 / 3m2x416 / 326132
UE4M3ue4m387043スケーリングに使用(E2M1のみ)
E4M3 = FP8バリアントe4m3 / e4m3x2 / e4m3x48 / 16 / 328143
E5M2 = FP8バリアント5m2 / 5m2x2 / 5m2x48 / 16 / 328152FP16の指数/範囲は8ビットに収まる
UE8M0ue8m0x2168080スケーリングに使用(FP4、FP6、FP8形式)
FP16f16 / f16x216 / 32161510
BF16bf16 / bf16x216 / 3216187FP32の指数/範囲は16ビットに収まる
TF32tf3232191810FP32の指数/範囲、FP16の仮数/精度
FP32f32 / f32x232 / 64321823
FP64f64646411152

バージョンサポート

データ型基本操作サポート開始
アトミックオペレーション
グローバルメモリ用にサポートされています

共有メモリ用にサポートされています
8ビット整数
(符号付き/符号なし)
読み込み、保存、変換1.0
16ビット整数
(符号付き/符号なし)
一般的な操作1.0アトミックCAS()3.5
32ビット整数
(符号付き/符号なし)
一般的な操作1.0アトミック関数1.11.2
64ビット整数
(符号付き/符号なし)
一般的な操作1.0アトミック関数1.22.0
任意の128ビットの自明にコピー可能な型一般的な操作いいえアトミックエクスチェンジ、アトミックCAS9.0
16ビット浮動小数点
FP16
加算、減算、
乗算、比較、
ワープシャッフル関数、変換
5.3half2原子付加6.0
原子付加7.0
16ビット浮動小数点
BF16
加算、減算、
乗算、比較、
ワープシャッフル関数、変換
8.0原子付加8.0
32ビット浮動小数点一般的な操作1.0アトミックExch()1.11.2
原子付加2.0
32ビット浮動小数点float2とfloat4一般的な操作いいえ原子付加9.0
64ビット浮動小数点一般的な操作1.3原子付加6.0

注:欠落した行や空白のエントリは、その項目に関する情報が不足していることを反映しています。[66]

テンソルコア

テンソルコアあたりのサイクルあたりのFMA [67]サポート開始7.07.27.5 ワークステーション7.5 デスクトップ8.08.6 ワークステーション8.78.6 デスクトップ8.9 デスクトップ8.9 ワークステーション9.010.010.112.0
データ型密行列の場合疎行列の場合第1世代(8倍速/SM)1世代目?(8倍/SM)第2世代(8倍速/SM)第3世代(4倍/SM)第4世代(4倍/SM)第5世代(4倍/SM)
1ビット値(AND)8.0
実験 版
いいえいいえ40962048速度未定
1ビット値(XOR)
実験的に7.5~8.9
いいえ1024非推奨または削除されましたか?
4ビット整数8.0~8.9(
実験的)
2561024512
4ビット浮動小数点FP4(E2M1)10.0いいえ4096未定512
6ビット浮動小数点FP6(E3M2およびE2M3)10.0いいえ2048未定
8ビット整数7.28.0いいえ12812851225610242048256
8ビット浮動小数点FP8(E4M3およびE5M2)、FP16累算付き8.9いいえ256
FP32累算機能付き8ビット浮動小数点FP8(E4M3およびE5M2)128128
16ビット浮動小数点FP16(FP16累算付き)7.08.06464642561285121024128
16ビット浮動小数点FP16とFP32累算326412864
FP32累算機能付き16ビット浮動小数点BF167.5 [68]8.0いいえ64 [69]
32ビット(19ビット使用)浮動小数点TF32速度未定(32?)[69]128326425651232
64ビット浮動小数点8.0いいえいいえ16速度未定3216未定

注:欠落した行や空白のエントリは、その項目に関する情報が不足していることを反映しています。[70] [71] [72] [73] [74] [75]

テンソルコア構成7.07.2、7.58.0、8.68.78.99.0
FP16単位でのドット積単位幅(バイト単位)[76] [77] [78] [79]4 (8)8 (16)4 (8)16 (32)
テンソルコアあたりのドット積単位1632
SM パーティションあたりの Tensor コア数21
SMパーティションあたりのフルスループット(バイト/サイクル) [ 80] [81]2565122561024
FP テンソル コア: ワープ全体の行列計算の最小サイクル数848
FPテンソルコア:フルスループットのための最小行列形状(バイト)[82]2048
INT Tensor Cores: ワープ全体の行列計算の最小サイクル数いいえ4
INT テンソル コア: フル スループットを実現する最小のマトリックス形状 (バイト)いいえ102420481024

[83] [84] [85] [86]

FP64 Tensor コア構成8.08.68.78.99.0
FP64単位でのドット積単位幅(バイト単位)4 (32)未定4 (32)
テンソルコアあたりのドット積単位4未定8
SM パーティションあたりの Tensor コア数1
SMパーティションあたりのフルスループット(バイト/サイクル) [ 80] [81]128未定256
ワープ全体の行列計算の最小サイクル16未定
フルスループットのための最小マトリックス形状(バイト)[82]2048

技術仕様

技術仕様コンピューティング能力(バージョン)
1.01.11.21.32.x3.03.23.53.75.05.25.36.06.16.27.07.27.58.08.68.78.99.010.x12.x
デバイスあたりの常駐グリッドの最大数
(同時カーネル実行、特定のデバイスでは少なくなる場合があります)
11643216128321612816128
スレッドブロックのグリッドの最大次元23
スレッドブロックのグリッドの最大x寸法655352 31 − 1
スレッドブロックのグリッドの最大 y 次元または最大 z 次元65535
スレッドブロックの最大次元3
ブロックの最大xまたはy寸法5121024
ブロックの最大Z次元64
ブロックあたりの最大スレッド数5121024
ワープサイズ32
マルチプロセッサあたりの常駐ブロックの最大数816321632162432
マルチプロセッサあたりの常駐ワープの最大数243248643264486448
マルチプロセッサあたりの常駐スレッドの最大数76810241536204810242048153620481536
マルチプロセッサあたりの32ビット通常レジスタの数8K16K32K64K128キロ64K
マルチプロセッサあたりの32ビットユニフォームレジスタの数いいえ2K [87]

[88]

スレッドブロックあたりの32ビットレジスタの最大数8K16K32K64K32K64K32K64K32K64K
スレッドあたりの32ビット通常レジスタの最大数12463255
ワープあたりの32ビットユニフォームレジスタの最大数いいえ63 [87]

[89]

マルチプロセッサあたりの共有メモリ量
(全体の共有メモリ + L1 キャッシュ(該当する場合)のうち)
16 KB16 / 48 KiB (64 KiB のうち)16 / 32 / 48 KiB(64 KiBのうち)80 / 96 / 112 KiB (128 KiB のうち)64 KB96 KB64 KB96 KB64 KB0 / 8 / 16 / 32 / 64 / 96 KiB (128 KiB のうち)32 / 64 KiB (96 KiB のうち)0 / 8 / 16 / 32 / 64 / 100 / 132 / 164 KiB (192 KiB中)0 / 8 / 16 / 32 / 64 / 100 KiB (128 KiB のうち)0 / 8 / 16 / 32 / 64 / 100 / 132 / 164 KiB (192 KiB中)0 / 8 / 16 / 32 / 64 / 100 KiB (128 KiB のうち)0 / 8 / 16 / 32 / 64 / 100 / 132 / 164 / 196 / 228 KiB (256 KiB のうち)0 / 8 / 16 / 32 / 64 / 100 KiB (128 KiB のうち)
スレッドブロックあたりの共有メモリの最大量16 KB48 KB96 KB48 KB64 KB163 KB99 KB163 KB99 KB227 KB99 KB
共有メモリバンクの数1632
スレッドあたりのローカルメモリの量16 KB512 キロバイト
CUDA C/C++ でアクセス可能な定数メモリ サイズ
(1 バンク、PTX は 11 バンクにアクセス可能、SASS は 18 バンクにアクセス可能)
64 KB
一定のメモリのためのマルチプロセッサごとのキャッシュワーキングセット8 KB4 KB8 KB
テクスチャメモリ用のマルチプロセッサごとのキャッシュワーキングセットTPC あたり 16 KiBTPC あたり 24 KiB12 KB12~48 KiB [90]24 KB48 KB32 KB [91]24 KB48 KB24 KB32~128 KB32~64 KB28 – 192 KB28~128 KB28 – 192 KB28~128 KB28 – 256 KB
CUDA
配列 にバインドされた1Dテクスチャ参照の最大幅
819265536131072

線形メモリにバインドされた 1D テクスチャ参照の最大幅
2 272 282 272 282 272 28
1D レイヤー
テクスチャ参照 の最大幅とレイヤー数
8192 × 51216384 × 204832768×2048

CUDA配列にバインドされた2Dテクスチャ参照の最大幅と高さ
65536 × 3276865536 × 65535131072 x 65536

線形メモリにバインドされた 2D テクスチャ参照の最大幅と高さ
65000 x 6500065536 x 65536131072 x 65000

テクスチャギャザーをサポートする CUDA 配列にバインドされた 2D テクスチャ参照の最大幅と高さ
16384 x 1638432768 x 32768

2Dレイヤー テクスチャ参照の最大幅、高さ、およびレイヤー数
8192 × 8192 × 51216384 × 16384 × 204832768 x 32768 x 2048

線形メモリまたは CUDA 配列にバインドされた3D テクスチャ参照の最大幅、高さ、深さ
2048 34096 316384 3
キューブマップテクスチャ参照の最大幅(および高さ)1638432768

キューブマップのレイヤー化テクスチャ参照の最大幅(および高さ)とレイヤー数
16384 × 204632768 × 2046

カーネルにバインドできるテクスチャの最大数
128256

CUDA配列にバインドされた1Dサーフェス参照の最大幅

サポートされていません
655361638432768

1D 層状サーフェス参照の最大幅と層数
65536 × 204816384 × 204832768 × 2048

CUDA配列にバインドされた2Dサーフェス参照の最大幅と高さ
65536 × 3276816384 × 65536131072 × 65536

2D階層化サーフェス参照の最大幅、高さ、およびレイヤー数
65536 × 32768 × 204816384 × 16384 × 204832768 × 32768 × 2048

CUDA配列にバインドされた3Dサーフェス参照の最大幅、高さ、深さ
65536 × 32768 × 20484096 × 4096 × 409616384 × 16384 × 16384
CUDA配列にバインドされたキューブマップサーフェス参照の最大幅(および高さ)327681638432768

キューブマップのレイヤー化サーフェス参照の最大幅とレイヤー数
32768 × 204616384 × 204632768 × 2046

カーネルにバインドできるサーフェスの最大数
81632
カーネルあたりの最大命令数200万5億1200万
スレッドブロッククラスターあたりのスレッドブロックの最大数[92]いいえ168
技術仕様1.01.11.21.32.x3.03.23.53.75.05.25.36.06.16.27.07.27.58.08.68.78.99.010.x12.x
コンピューティング能力(バージョン)
[93] [94]

マルチプロセッサアーキテクチャ

アーキテクチャ仕様コンピューティング能力(バージョン)
1.01.11.21.32.02.13.03.23.53.75.05.25.36.06.16.27.07.27.58.08.68.78.99.010.x12.x
INT32演算演算用のALUレーン数83248192 [95]12812864128128646464128
INT32またはFP32演算演算用のALUレーンの数
FP32演算処理用のALUレーン数6464128128
FP16x2演算用のALUレーン数いいえ1128 [96]128 [97]64 [98]
FP64演算用のALUレーン数いいえ1FP32による16 [99]FP32による4 [100]88 / 64 [101]644 [102]324322322642
ロード/ストアユニットの数2 SMあたり4個2 SMあたり8個2SM/3SMあたり8個[101]3 SMあたり8個163216321632
単精度浮動小数点超越関数の特殊関数ユニットの数2 [103]4832163216
テクスチャマッピングユニット(TMU)の数2 SMあたり4個2 SMあたり8個2 / 3SMあたり8個[101]3 SMあたり8個44 / 8 [101]1681684
均一INT32演算演算用のALUレーン数いいえ2 [104]
テンソルコアの数いいえ8(第1世代)[105]0 / 8 [101] (第2世代)4(第3世代)4(第4世代)
レイトレーシングコアの数いいえ0 / 1 [101] (第1世代)いいえ1(第2世代)いいえ1(第3世代)いいえ
SMパーティションの数 = 処理ブロック数[106]1424
SMパーティションあたりのワープスケジューラの数1241
単一スケジューラが各サイクルで発行する新規命令の最大数[107]2 [108]12 [109]21
データキャッシュと共有メモリの統合メモリのサイズ16 KiB [110]16 KiB [110]64 KB128 KB64 KiB SM + 24 KiB L1 (個別) [111]96 KiB SM + 24 KiB L1 (個別) [111]64 KiB SM + 24 KiB L1 (個別) [111]64 KiB SM + 24 KiB L1 (個別) [111]96 KiB SM + 24 KiB L1 (個別) [111]64 KiB SM + 24 KiB L1 (個別) [111]128 KB96 KiB [112]192 キロバイト128 KB192 キロバイト128 KB256 キロバイト
GPUあたりのL3命令キャッシュのサイズ32 KiB [113]L2データキャッシュを使用する
テクスチャ プロセッサ クラスタ (TPC) あたりの L2 命令キャッシュのサイズ8 KB
SMあたりのL1.5命令キャッシュのサイズ[114]4 KB32 KB32 KB48 KiB [91]128 KB32 KB128 KB約46 KiB [115]128 KiB [116]
SMあたりのL1命令キャッシュのサイズ8 KB8 KB
SMパーティションあたりのL0命令キャッシュのサイズSMごとに1つのパーティションのみいいえ12 KB16 KiB? [117]32 KB
命令幅[114]32ビット命令と64ビット命令[118]64ビット命令 + 7命令ごとに64ビット制御ロジック64ビット命令 + 3命令ごとに64ビット制御ロジック128ビットの命令と制御ロジックの組み合わせ
メモリパーティションあたりのメモリバス幅(ビット)64 ((G)DDR)32 ((G)DDR)512(HBM)32 ((G)DDR)512(HBM)32 ((G)DDR)512(HBM)32 ((G)DDR)512(HBM)32 ((G)DDR)
メモリパーティションあたりのL2キャッシュ16 KiB [119]32 KiB [119]128 KB256 キロバイト1 MiB512 キロバイト128 KB512 キロバイト256 キロバイト128 KB768 キロバイト64 KB512 キロバイト4 MiB512 キロバイト8 MiB [120]5 MiB6.25 MiB8 MiB [121]
メモリパーティションあたり(または後期モデルでは GPC あたり)のレンダリング出力ユニット(ROP)の数48481681284162816GPCあたり16GPCあたり3GPCあたり16
アーキテクチャ仕様1.01.11.21.32.02.13.03.23.53.75.05.25.36.06.16.27.07.27.58.08.68.78.99.010.x12.x
コンピューティング能力(バージョン)

詳細については、Nvidia CUDA C++プログラミングガイドをご覧ください。[122]

CUDAアーキテクチャの使用法

競合他社との比較

CUDA は、 Intel OneAPIAMD ROCmなどの他の GPU コンピューティング スタックと競合します

Nvidia の CUDA はクローズドソースですが、Intel の OneAPI と AMD の ROCm はオープンソースです。

インテル OneAPI

oneAPIは、オープンスタンダードに基づいたイニシアチブであり、複数のハードウェアアーキテクチャ向けのソフトウェア開発をサポートするために作成されました。[125] oneAPIライブラリは、特別利益団体によって公開されているオープン仕様を実装する必要があり、あらゆる開発者や組織が独自のバージョンのoneAPIライブラリを実装する可能性を提供します。[126] [127]

もともとインテルが開発したハードウェアですが、富士通や Huawei なども採用しています。

統合アクセラレーション財団(UXL)

Unified Acceleration Foundation(UXL)は、OneAPIイニシアチブの継続に取り組む新しい技術コンソーシアムであり、ワーキンググループと特別利益団体(SIG)を通じて、新しいオープンスタンダードのアクセラレータソフトウェアエコシステム、関連するオープンスタンダード、および仕様プロジェクトの構築を目指しています。NvidiaのCUDAに代わるオープンな選択肢を提供することを目指しています。主な支援企業は、Intel、Google、ARM、Qualcomm、Samsung、Imagination、VMwareです。[128]

AMD ROCm

ROCm [129]は、 Advanced Micro Devices(AMD) のグラフィックスプロセッシングユニット(GPU)プログラミング用のオープンソースソフトウェアスタックです。

参照

参考文献

  1. ^ 「NVIDIA® CUDA™、GPUコンピューティングのパワーを解き放つ - プレスリリース」nvidia.com。2007年3月29日時点のオリジナルよりアーカイブ2025年1月26日閲覧。
  2. ^ 「CUDAツールキット13.0の新機能と重要点」。2025年8月6日。 2025年10月7日閲覧
  3. ^ ab Shah, Agam. 「NvidiaはサードパーティによるCUDAチップの製造に完全に反対しているわけではない」www.theregister.com . 2024年4月25日閲覧
  4. ^ 「Nvidia CUDAホームページ」2017年7月18日。
  5. ^ Shimpi, Anand Lal; Wilson, Derek (2006年11月8日). 「NvidiaのGeForce 8800 (G80): DirectX 10向けに再設計したGPU」AnandTech. 2010年4月24日時点のオリジナルよりアーカイブ。 2015年5月16日閲覧
  6. ^ 「Introduction — nsight-visual-studio-edition 12.6 ドキュメント」. docs.nvidia.com . 2024年10月10日閲覧
  7. ^ ab Abi-Chahla, Fedy (2008年6月18日). 「NvidiaのCUDA:CPUの終焉か?」Tom's Hardware . 2015年5月17日閲覧
  8. ^ Jones, Stephen (2025-04-22). What is CUDA? (ビデオ). Computerphile . 2025年7月24日閲覧– YouTube経由。
  9. ^ Zunitch, Peter (2018年1月24日). 「CUDA vs. OpenCL vs. OpenGL」. Videomaker . 2018年9月16日閲覧。
  10. ^ "OpenCL". NVIDIA Developer . 2013年4月24日. 2019年11月4日閲覧
  11. ^ ab コスグローブ、エマ. 「イアン・バックはNVIDIAの秘密兵器を開発した。彼は残りのキャリアをそれを守ることに費やすかもしれない」. Business Insider . 2025年7月24日閲覧。
  12. ^ Witt, Stephen (2023年11月27日). 「Jensen HuangのNvidiaがAI革命をいかに推進しているか」. The New Yorker . ISSN  0028-792X . 2023年12月10日閲覧
  13. ^ 「CUDA LLVM コンパイラ」. 2012年5月7日.
  14. ^ 「clangを使用したCUDAのコンパイル — LLVM 22.0.0gitドキュメント」。llvm.org
  15. ^ YouTubeの GPU 上の最初の OpenCL デモ
  16. ^ YouTubeで Nvidia CUDA 対応 GPU 上で実行される DirectCompute Ocean デモ
  17. ^ Vasiliadis, Giorgos; Antonatos, Spiros; Polychronakis, Michalis; Markatos, Evangelos P.; Ioannidis, Sotiris (2008年9月). 「Gnort: グラフィックスプロセッサを用いた高性能ネットワーク侵入検知」(PDF) .侵入検知における最近の進歩. コンピュータサイエンス講義ノート. 第5230巻. pp.  116– 134. doi :10.1007/978-3-540-87403-4_7. ISBN 978-3-540-87402-7
  18. ^ Schatz, Michael C.; Trapnell, Cole; Delcher, Arthur L.; Varshney, Amitabh (2007). 「グラフィックス・プロセッシング・ユニットを用いたハイスループット・シーケンス・アライメント」BMC Bioinformatics . 8 474. doi : 10.1186/1471-2105-8-474 . PMC 2222658 . PMID  18070356. 
  19. ^ Manavski, Svetlin A.; Giorgio, Valle (2008). 「CUDA互換GPUカードはSmith-Waterman配列アライメントのための効率的なハードウェアアクセラレータとして役立つ」BMC Bioinformatics . 10 (Suppl 2): S10. doi : 10.1186/1471-2105-9-S2-S10 . PMC 2323659 . PMID  18387198. 
  20. ^ 「Pyrit – Google Code」。
  21. ^ 「Nvidia GPUを科学計算に活用する」boinc.berkeley.edu . Berkeley Open Infrastructure for Network Computing (BOINC). 2008年12月18日. 2008年12月28日時点のオリジナルよりアーカイブ。 2017年8月8日閲覧
  22. ^ 「Nvidia CUDAソフトウェア開発キット(CUDA SDK)– MAC OS X用リリースノート バージョン2.0」。2009年1月6日時点のオリジナルよりアーカイブ。
  23. ^ “CUDA 1.1 – Now on Mac OS X”. 2008年2月14日. 2008年11月22日時点のオリジナルよりアーカイブ。
  24. ^ 「CUDA 11の機能が公開されました」。2020年5月14日。
  25. ^ 「CUDA Toolkit 11.1でGeForce RTX 30シリーズおよびQuadro RTXシリーズGPUのサポートが導入されました」。2020年9月23日。
  26. ^ 「NVIDIA CUDA 11.2の新機能によるメモリ割り当ての強化」2020年12月16日。
  27. ^ 「CUDA 11.3の新機能を探る」2021年4月16日。
  28. ^ シルバースタイン, マーク;シュスター, アッサフ; ガイガー, ダン; パトニー, アンジュル; オーウェンズ, ジョン D. (2008). 「ソフトウェア管理キャッシュによるGPU上での積和演算の効率的な計算」(PDF) . 第22回国際スーパーコンピューティング会議(ICS '08)の議事録(PDF) . 第22回国際スーパーコンピューティング会議(ICS '08)の議事録. pp.  309– 318. doi :10.1145/1375527.1375572. ISBN 978-1-60558-158-3
  29. ^ 「CUDA C プログラミングガイド v8.0」(PDF) . nVidia Developer Zone . 2017年1月. p. 19. 2017年3月22日閲覧
  30. ^ 「NVCCは.cuファイルのC++コンパイルを強制します」2011年11月29日。
  31. ^ Whitehead, Nathan; Fit-Florea, Alex. 「精度とパフォーマンス:Nvidia GPUの浮動小数点およびIEEE 754準拠」(PDF) . Nvidia . 2014年11月18日閲覧
  32. ^ 「CUDA対応製品」CUDAゾーン. Nvidia Corporation . 2008年11月3日閲覧
  33. ^ 「Corianderプロジェクト:CUDAコードをOpenCLにコンパイルしてどこでも実行」Phoronix。
  34. ^ Perkins, Hugh (2017). 「cuda-on-cl」(PDF) . IWOCL . 2017年8月8日閲覧
  35. ^ 「hughperkins/coriander: OpenCL™ 1.2デバイス用NVIDIA® CUDA™コードの構築」GitHub。2019年5月6日。
  36. ^ 「CU2CLドキュメント」chrec.cs.vt.edu .
  37. ^ 「GitHub – vosen/ZLUDA」。GitHub
  38. ^ Larabel, Michael (2024-02-12)、「AMDがROCm上に構築されたドロップインCUDA実装に静かに資金提供:オープンソース化」、Phoronix2024年2月12日閲覧
  39. ^ 「GitHub – chip-spv/chipStar」。GitHub
  40. ^ 「新しいSCALEツールにより、CUDAアプリケーションをAMD GPUで実行可能」。Tom's Hardware。2024年7月17日。
  41. ^ 「PyCUDA」。
  42. ^ “pycublas”. 2009年4月20日時点のオリジナルよりアーカイブ2017年8月8日閲覧。
  43. ^ "CuPy". cupy.dev . 2025年9月23日閲覧
  44. ^ ab 「NVPTXバックエンドのユーザーガイド — LLVM 22.0.0gitドキュメント」。llvm.org
  45. ^ 「NVIDIA CUDAプログラミングガイド バージョン1.0」(PDF) 2007年6月23日。
  46. ^ 「NVIDIA CUDAプログラミングガイド バージョン2.1」(PDF)。2008年12月8日。
  47. ^ 「NVIDIA CUDAプログラミングガイド バージョン2.2」(PDF)。2009年4月2日。
  48. ^ 「NVIDIA CUDAプログラミングガイド バージョン2.2.1」(PDF)。2009年5月26日。
  49. ^ 「NVIDIA CUDAプログラミングガイド。バージョン2.3.1」(PDF)。2009年8月26日。
  50. ^ 「NVIDIA CUDAプログラミングガイド バージョン3.0」(PDF) 2010年2月20日。
  51. ^ 「NVIDIA CUDA C プログラミングガイド。バージョン3.1.1」(PDF)。2010年7月21日。
  52. ^ 「NVIDIA CUDA C プログラミングガイド バージョン3.2」(PDF) 2010年11月9日。
  53. ^ 「CUDA 11.0 リリースノート」。NVIDIA Developer
  54. ^ 「CUDA 11.1 リリースノート」。NVIDIA Developer
  55. ^ 「CUDA 11.5 リリースノート」。NVIDIA Developer
  56. ^ 「CUDA 11.8 リリースノート」。NVIDIA Developer
  57. ^ 「サポートマトリックス — NVIDIA cuDNNバックエンド」. docs.nvidia.com . 2025年8月20日閲覧
  58. ^ 「NVIDIA Quadro NVS 420の仕様」。TechPowerUp GPUデータベース。2023年8月25日。
  59. ^ Larabel, Michael (2017年3月29日). 「NVIDIA、NouveauでTegra X2 GPUのサポートを開始」. Phoronix . 2017年8月8日閲覧
  60. ^ TechPowerUp の Nvidia Xavier の仕様 (暫定版)
  61. ^ 「ようこそ — Jetson Linux開発者ガイド 34.1 ドキュメント」。
  62. ^ 「NVIDIA が Xavier SoC 向けにオープンソースの Volta GPU サポートを開始」。
  63. ^ 「NVIDIA Ada Lovelace アーキテクチャ」。
  64. ^ マイクロベンチマークによるチューリング GPU アーキテクチャの分析
  65. ^ 「H.1. 機能と技術仕様 – 表13. コンピューティング能力ごとの機能サポート」. docs.nvidia.com . 2020年9月23日閲覧
  66. ^ 「CUDA C++ プログラミング ガイド」。
  67. ^ 実際に実行された Fused-Multiply-Add、密行列
  68. ^ 7.5 以降は SASS、8.0 以降は PTX
  69. ^ SASSでの非公式サポート
  70. ^ “技術概要。NVIDIA Jetson AGX Orin シリーズ” (PDF) . nvidia.com 2023 年9 月 5 日に取得
  71. ^ 「NVIDIA Ampere GA102 GPUアーキテクチャ」(PDF) . nvidia.com . 2023年9月5日閲覧
  72. ^ ルオ、ウェイル;ファン、ルイボ。リー、ゼユ。ドゥ、ダヨウ。王、強。チュー、シャオウェン(2024)。 「Nvidia Hopper GPU アーキテクチャのベンチマークと分析」。arXiv : 2402.13499v1 [cs.AR]。
  73. ^ 「データシート NVIDIA A40」(PDF) . nvidia.com . 2024年4月27日閲覧
  74. ^ 「NVIDIA AMPERE GA102 GPUアーキテクチャ」(PDF) 2024年4月27日。
  75. ^ 「データシート NVIDIA L40」(PDF) . nvidia.com . 2024年4月27日.
  76. ^ ホワイトペーパーでは、Tensor Coreの立方体図は、ドット積ユニットの幅を高さで割った値(VoltaとTuringでは4 FP16、A100では8 FP16、GA102では4 FP16、GH100では16 FP16)を表しています。他の2つの次元はドット積ユニットの数を表しています(VoltaとTuringでは4x4 = 16、AmpereとHopperでは8x4 = 32)。結果として得られる灰色のブロックは、1サイクルあたりのFP16 FMA演算です。Tensor CoreなしのPascalは速度比較のためのみ示されており、FP16以外のデータ型を持つVolta V100も同様です。
  77. ^ 「NVIDIA Turingアーキテクチャホワイトペーパー」(PDF) . nvidia.com . 2023年9月5日閲覧
  78. ^ 「NVIDIA Tensor Core GPU」(PDF) . nvidia.com . 2023年9月5日閲覧
  79. ^ 「NVIDIA Hopper アーキテクチャの詳細」。2022年3月22日。
  80. ^ ab 形状 x 変換されたオペランド サイズ、例: 2 つのテンソル コア x 4x4x4xFP16/サイクル = 256 バイト/サイクル
  81. ^ ab = 製品の最初の3つのテーブル行
  82. ^ ab = 前の2つの表の行の積; 形状: 例: 8x8x4xFP16 = 512 バイト
  83. ^ Sun, Wei; Li, Ang; Geng, Tong; Stuijk, Sander; Corporaal, Henk (2023). 「マイクロベンチマークによるTensorコアの解析:レイテンシ、スループット、数値挙動」. IEEE Transactions on Parallel and Distributed Systems . 34 (1): 246– 261. arXiv : 2206.02874 . Bibcode :2023ITPDS..34..246S. doi :10.1109/tpds.2022.3217824. S2CID  249431357.
  84. ^ 「並列スレッド実行 ISA バージョン 7.7」。
  85. ^ Raihan, Md Aamir; Goli, Negar; Aamodt, Tor (2018). 「ディープラーニングアクセラレータ対応GPUのモデリング」arXiv : 1811.08309 [cs.MS].
  86. ^ 「NVIDIA Ada Lovelace アーキテクチャ」。
  87. ^ ab Jia、Zhe;マッジョーニ、マルコ。スミス、ジェフリー。ダニエレ・パオロ・スカルパッツァ (2019) 「マイクロベンチマークによる NVidia Turing T4 GPU の分析」。arXiv : 1903.07486 [cs.DC]。
  88. ^ バージェス、ジョン (2019). 「RTX ON – NVIDIA TURING GPU」. 2019 IEEE Hot Chips 31 シンポジウム (HCS) . pp.  1– 27. doi :10.1109/HOTCHIPS.2019.8875651. ISBN 978-1-7281-2089-8. S2CID  204822166。
  89. ^ バージェス、ジョン (2019). 「RTX ON – NVIDIA TURING GPU」. 2019 IEEE Hot Chips 31 シンポジウム (HCS) . pp.  1– 27. doi :10.1109/HOTCHIPS.2019.8875651. ISBN 978-1-7281-2089-8. S2CID  204822166。
  90. ^ デバイスによって異なります
  91. ^ ab "Tegra X1". 2015年1月9日.
  92. ^ NVIDIA H100 Tensor コア GPU アーキテクチャ
  93. ^ H.1. 機能と技術仕様 – 表14. コンピューティング能力ごとの技術仕様
  94. ^ NVIDIA Hopper アーキテクチャの詳細
  95. ^ プログラミングガイドによると160個の整数命令しか実行できない
  96. ^ [1]によれば128。FP32からの64 + 64の個別ユニット?
  97. ^ 64 個の FP32 コアと 64 個の柔軟な FP32/INT コア。
  98. ^ 「CUDA C++ プログラミングガイド」. docs.nvidia.com .
  99. ^ 32 個の FP32 レーンを合計 16 個の FP64 レーンに統合します。モデルによってはこれより少なくなる場合があります。
  100. ^ 16 個の FP32 レーンのみでサポートされ、4 個の FP64 レーンに統合されます
  101. ^ abcdef モデルによって異なります
  102. ^ 実効速度はおそらくFP32ポート経由です。実際のFP64コアについては説明がありません。
  103. ^ 整数の加算や比較にも使えます
  104. ^ 各SMパーティションにつき2クロックサイクル/命令Burgess, John (2019). 「RTX ON – The NVIDIA TURING GPU」. 2019 IEEE Hot Chips 31 Symposium (HCS) . pp.  1– 27. doi :10.1109/HOTCHIPS.2019.8875651. ISBN 978-1-7281-2089-8. S2CID  204822166。
  105. ^ Durant, Luke; Giroux, Olivier; Harris, Mark; Stam, Nick (2017年5月10日). 「Inside Volta: The World's Most Advanced Data Center GPU」. Nvidia開発者ブログ.
  106. ^ Fermi や Kepler とは異なり、スケジューラとディスパッチャには専用の実行ユニットがあります。
  107. ^ ディスパッチは、1サイクル以上かかる場合、同時にオーバーラップできます(実行ユニットが32/SMパーティションより少ない場合)。
  108. ^ MADパイプとSFUパイプを二重発行可能
  109. ^ 一度に2つの命令を発行できるスケジューラは1つだけです。最初のスケジューラは奇数IDのワープを担当し、2番目のスケジューラは偶数IDのワープを担当します。
  110. ^ ab 共有メモリのみ、データキャッシュなし
  111. ^ abcdef 共有メモリは別ですが、L1にはテクスチャキャッシュが含まれます
  112. ^ 「H.6.1. アーキテクチャ」. docs.nvidia.com . 2019年5月13日閲覧
  113. ^ Wong, Henry; Papadopoulou, Misel-Myrto; Sadooghi-Alvandi, Maryam; Moshovos, Andreas (2010年3月). マイクロベンチマーキングによるGPUマイクロアーキテクチャの解明(PDF) . 2010 IEEE International Symposium on Performance Analysis of Systems & Software (ISPASS). White Plains, NY, USA: IEEE Computer Society. doi :10.1109/ISPASS.2010.5452013. ISBN 978-1-4244-6023-6
  114. ^ ab Jia、Zhe;マッジョーニ、マルコ。スタイガー、ベンジャミン。スカルパッツァ、ダニエレ P. (2018)。 「マイクロベンチマークによる NVIDIA Volta GPU アーキテクチャの分析」。arXiv : 1804.06826 [cs.DC]。
  115. ^ 賈、浙;マッジョーニ、マルコ。スミス、ジェフリー。ダニエレ・パオロ・スカルパッツァ (2019) 「マイクロベンチマークによる NVidia Turing T4 GPU の分析」。arXiv : 1903.07486 [cs.DC]。
  116. ^ 「マイクロベンチマークによる Ampere GPU アーキテクチャの分析」。
  117. ^ Jia、Zheに注意してください。マッジョーニ、マルコ。スミス、ジェフリー。ダニエレ・パオロ・スカルパッツァ (2019) 「マイクロベンチマークによる NVidia Turing T4 GPU の分析」。arXiv : 1903.07486 [cs.DC]。これに反対し、SMパーティションあたり2 KiBのL0命令キャッシュとSMあたり16 KiBのL1命令キャッシュを主張する。
  118. ^ 「asfermi オペコード」。GitHub
  119. テクスチャエンジンのみでアクセスする場合は^ ab
  120. ^ RTX 4060、RTX 4070、RTX 4070 Ti、RTX 4090では25%が無効
  121. ^ RTX 5070 TiとRTX 5090では25%が無効
  122. ^ 「CUDA C++プログラミングガイド、コンピューティング機能」. docs.nvidia.com . 2025年2月6日閲覧
  123. ^ 「nVidia CUDAバイオインフォマティクス:BarraCUDA」BioCentric 2019年7月19日. 2019年10月15日閲覧
  124. ^ 「パートV:物理シミュレーション」。NVIDIA Developer . 2020年9月11日閲覧
  125. ^ 「oneAPIプログラミングモデル」。oneAPI.io 2024年7月27日閲覧
  126. ^ “仕様 | oneAPI”. oneAPI.io . 2024年7月27日閲覧
  127. ^ 「oneAPI仕様 — oneAPI仕様1.3-rev-1ドキュメント」。oneapi -spec.uxlfoundation.org 。 2024年7月27日閲覧
  128. ^ Cherney, Max A.; Cherney, Max A. (2024年3月26日). 「独占記事:ソフトウェアを標的にNvidiaのAI支配を打ち破る陰謀の背後」ロイター. 2024年4月5日閲覧
  129. ^ 「質問:ROCmは何の略ですか? · Issue #1628 · RadeonOpenCompute/ROCm」. Github.com . 2022年1月18日閲覧

さらに読む

  • Buck, Ian; Foley, Tim; Horn, Daniel; Sugerman, Jeremy; Fatahalian, Kayvon; Houston, Mike; Hanrahan, Pat (2004-08-01). 「GPU向けBrook:グラフィックスハードウェアによるストリームコンピューティング」 . ACM Transactions on Graphics . 23 (3): 777– 786. doi :10.1145/1015706.1015800. ISSN  0730-0301.
  • Nickolls, John; Buck, Ian; Garland, Michael; Skadron, Kevin (2008-03-01). 「CUDAによるスケーラブルな並列プログラミング:CUDAはアプリケーション開発者が待ち望んでいた並列プログラミングモデルか?」ACM Queue . 6 (2): 40– 53. doi :10.1145/1365490.1365500. ISSN  1542-7730.
  • 公式サイト
「https://en.wikipedia.org/w/index.php?title=CUDA&oldid=1320883497」から取得