# CUDA ## 定義 CUDA(Compute Unified Device Architecture)は、[[NVIDIA]] の GPU を汎用並列処理に使うためのプラットフォーム・プログラミングモデルである。ホスト(CPU)がデバイス(GPU)へメモリを割り当て、データを転送し、カーネル(kernel)と呼ばれる並列関数を多数のスレッドで起動し、結果をホストへ返すという実行モデルが基本となる。(Source: [[@2026__eunomia.dev__CUDA Events - eBPF-based CUDA API Tracing]]) ## 主要な CUDA ランタイム API - `cudaMalloc` / `cudaFree` — デバイスメモリの割当と解放 - `cudaMemcpy` — ホスト・デバイス間・デバイス内のデータ転送 - `cudaLaunchKernel` — GPU カーネルの起動 - `cudaStreamCreate` / `cudaStreamSynchronize` — 非同期実行ストリームの管理と同期 - `cudaEventCreate` / `cudaEventRecord` / `cudaEventSynchronize` — イベントによるタイミング計測 - `cudaGetDevice` / `cudaSetDevice` — GPU デバイスの選択 ## 横断的知見 - **CUDA API は GPU 利用の「入口」として観測可能**: CUDA ランタイムライブラリ `libcudart.so` の関数呼び出しを eBPF uprobe で傍受することで、ソース改変なしに GPU 利用のマクロ視図を得られる。ただしこれは CPU 側のリクエスト単位であり、カーネル内部のスレッド動作までは届かない。(Source: [[@2026__eunomia.dev__CUDA Events - eBPF-based CUDA API Tracing]]) - **非同期実行がトレースとデバッグを難しくする**: CUDA API 呼び出しは多くの場合非同期であり、CPU が GPU への作業投入後も処理を継続する。これが従来の逐次デバッグツールでは追えない境界を生んでいる。(Source: [[@2026__eunomia.dev__CUDA Events - eBPF-based CUDA API Tracing]]) ## 未解決の問い - CUDA API トレースで得られた enter/exit イベントを、分散トレーシングのスパンや ML フレームワークの演算子イベントと時系列で相関させるにはどのような識別子・タイムスタンプ同期が必要か。 - CPU 側 API トレースの情報だけで、GPU 内部のメモリアクセスパターンや分岐ダイバージェンスをどこまで推定できるか。 ## 関連 - 概念: [[CUDA API トレース]] / [[GPU観測性]] / [[eBPF]] / [[動的計装]] - エンティティ: [[NVIDIA]] / [[eunomia-bpf]] - ソース: [[@2026__eunomia.dev__CUDA Events - eBPF-based CUDA API Tracing]]