ZeroLoom

CUDA プログラミング - Runtime API

November 8, 2024
8 min read
Table of Contents

関数のカテゴリ


カテゴリ概要
デバイス管理デバイス(GPU)とのインターフェースを管理し、現在使用するデバイスの選択や、タスクの同期を行う
メモリ管理デバイスメモリの割り当てと解放、ホストメモリとのデータ転送などを管理
ストリーム管理CUDA ストリームを用いた非同期処理の管理で、複数のタスクを効率的に実行する
エラーハンドリングCUDA API 呼び出しで発生したエラーの取得や確認を行う
イベント管理非同期イベントの作成と管理、イベント間の経過時間の計測などに使用
ホスト管理ホスト側メモリの操作や、デバイスとのデータ転送の最適化のためのピン留めメモリを管理
アクセラレータ管理CUDA カーネルの実行や、カーネル固有のキャッシュ設定の変更を行う

主要な関数


カテゴリ関数名概要
デバイス管理cudaSetDevice指定したデバイスを現在のスレッドで使用する設定
cudaGetDevice現在のスレッドが使用しているデバイスを取得
cudaDeviceReset現在のデバイスをリセットし、全リソースを解放
cudaDeviceSynchronizeデバイス上のすべてのタスクが完了するまでブロック
cudaGetDevicePropertiesデバイスの特性情報(メモリ、コア数など)を取得
メモリ管理cudaMallocデバイスメモリを確保
cudaFreeデバイスメモリを解放
cudaMemcpyホストとデバイス間でメモリをコピー(同期型)
cudaMemcpyAsyncホストとデバイス間で非同期メモリコピーを行う
cudaMemsetデバイスメモリを特定の値で初期化
ストリーム管理cudaStreamCreate新しいストリームを作成
cudaStreamDestroyストリームを破棄し、リソースを解放
cudaStreamSynchronize指定したストリーム上のタスクが完了するまで待機
cudaStreamWaitEventイベントが発生するまで、ストリーム内の実行を待機
エラーハンドリングcudaGetLastError直前に発生したCUDAエラーコードを取得
cudaPeekAtLastError最後に発生したエラーコードを確認(リセットはされない)
cudaGetErrorStringエラーコードに対応するエラーメッセージを取得
イベント管理cudaEventCreate新しいイベントを作成
cudaEventRecordイベントを特定のストリーム上に記録
cudaEventSynchronizeイベントが完了するまで待機
cudaEventElapsedTime2つのイベント間の経過時間を計測
ホスト管理cudaHostAllocホスト側でデバイスと共有するためのピン留めメモリを確保
cudaHostFreeホスト側で確保したピン留めメモリを解放
アクセラレータ管理cudaLaunchKernelCUDAカーネルを非同期で実行
cudaFuncSetCacheConfigカーネルのキャッシュ設定を変更(キャッシュ/共有メモリ比率など)

索引


関数名概要
cudaAcquireSync
cudaArrayGetInfo
cudaBindTextureToArray
cudaBlockSize
cudaCalculateSlopeKernel
cudaCheckError
cudaConsumerAcquireFrame
cudaConsumerReleaseFrame
cudaConsumerTest
cudaCreateChannelDesc
cudaCreateSurfaceObject
cudaCreateTextureObject
cudaDestroyExternalMemory
cudaDestroyExternalSemaphore
cudaDestroySurfaceObject
cudaDestroyTextureObject
cudaDeviceCanAccessPeer
cudaDeviceCreateConsumer
cudaDeviceCreateProducer
cudaDeviceDisablePeerAccess
cudaDeviceEnablePeerAccess
cudaDeviceGetAttribute
cudaDeviceGetDefaultMemPool
cudaDeviceGetGraphMemAttribute
cudaDeviceGetNvSciSyncAttributes
cudaDeviceGetStreamPriorityRange
cudaDeviceGraphMemTrim
cudaDeviceId
cudaDeviceInit
cudaDeviceReset
cudaDeviceSetLimit
cudaDeviceSynchronize
cudaDriverGetVersion
cudaEventCreate
cudaEventCreateWithFlags
cudaEventDestroy
cudaEventElapsedTime
cudaEventQuery
cudaEventRecord
cudaEventSynchronize
cudaExtent
cudaExternalMemoryGetMappedBuffer
cudaExternalMemoryGetMappedMipmappedArray
cudaFree
cudaFreeArray
cudaFreeAsync
cudaFreeHost
cudaFreeMipmappedArray
cudaFuncGetAttributes
cudaFuncSetAttribute
cudaFuncSetCacheConfig
cudaGLInit
cudaGLMapBufferObject
cudaGLRegisterBufferObject
cudaGLUnmapBufferObject
cudaGLUnregisterBufferObject
cudaGenerateSpectrumKernel
cudaGetChannelDesc
cudaGetDevice
cudaGetDeviceCount
cudaGetDeviceProperties
cudaGetErrorEnum
cudaGetErrorName
cudaGetErrorString
cudaGetLastError
cudaGetMipmappedArrayLevel
cudaGetValueMismatch
cudaGraphAddHostNode
cudaGraphAddKernelNode
cudaGraphAddMemAllocNode
cudaGraphAddMemFreeNode
cudaGraphAddMemcpyNode
cudaGraphAddMemsetNode
cudaGraphAddNode
cudaGraphClone
cudaGraphConditionalHandleCreate
cudaGraphCreate
cudaGraphDestroy
cudaGraphExecDestroy
cudaGraphExecKernelNodeSetParams
cudaGraphExecUpdate
cudaGraphGetNodes
cudaGraphInstantiate
cudaGraphLaunch
cudaGraphSetConditional
cudaGraphUpload
cudaGraphicsGLRegisterBuffer
cudaGraphicsGLRegisterImage
cudaGraphicsMapResources
cudaGraphicsResourceGetMappedPointer
cudaGraphicsResourceSetMapFlags
cudaGraphicsSubResourceGetMappedArray
cudaGraphicsUnmapResources
cudaGraphicsUnregisterResource
cudaGraphsManual
cudaGraphsUsingStreamCapture
cudaGridSize
cudaHeightMap
cudaHostAlloc
cudaHostGetDevicePointer
cudaHostRegister
cudaHostUnregister
cudaImportExternalMemory
cudaImportExternalSemaphore
cudaImportKeyedMutex
cudaImportNvSciImage
cudaImportNvSciRawBuf
cudaImportNvSciSemaphore
cudaImportNvSciSync
cudaImportVertexBuffer
cudaInit
cudaIpcCloseMemHandle
cudaIpcGetEventHandle
cudaIpcGetMemHandle
cudaIpcOpenEventHandle
cudaIpcOpenMemHandle
cudaLaunchCooperativeKernel
cudaLaunchHostFunc
cudaMalloc
cudaMallocArray
cudaMallocAsync
cudaMallocHost
cudaMallocManaged
cudaMallocMipmappedArray
cudaMallocPitch
cudaMemAdvise
cudaMemGetInfo
cudaMemPoolCreate
cudaMemPoolDestroy
cudaMemPoolExportPointer
cudaMemPoolExportToShareableHandle
cudaMemPoolGetAccess
cudaMemPoolImportFromShareableHandle
cudaMemPoolImportPointer
cudaMemPoolSetAccess
cudaMemPoolSetAttribute
cudaMemPrefetchAsync
cudaMemcpy
cudaMemcpyAsync
cudaMemcpyFromSymbol
cudaMemcpyPeerAsync
cudaMemcpyToArray
cudaMemcpyToSymbol
cudaMemset
cudaMemsetAsync
cudaNvSci
cudaNvSciApp
cudaNvSciSignal
cudaNvSciWait
cudaOccupancyMaxActiveBlocksPerMultiprocessor
cudaOccupancyMaxPotentialBlockSize
cudaPeekAtLastError
cudaPitchedPtr
cudaPos
cudaProcess
cudaProducerDeinit
cudaProducerInit
cudaProducerPrepareFrame
cudaProducerPresentFrame
cudaProducerReadARGBFrame
cudaProducerReadYUVFrame
cudaProducerReturnFrame
cudaProducerTest
cudaProfilerStart
cudaProfilerStop
cudaReleaseSync
cudaRuntimeGetVersion
cudaSetDevice
cudaSetDeviceFlags
cudaSignalExternalSemaphoresAsync
cudaSignalSemaphore
cudaStreamAddCallback
cudaStreamAttachMemAsync
cudaStreamBeginCapture
cudaStreamBeginCaptureToGraph
cudaStreamCreate
cudaStreamCreateWithFlags
cudaStreamCreateWithPriority
cudaStreamDestroy
cudaStreamEndCapture
cudaStreamGetCaptureInfo
cudaStreamGetFlags
cudaStreamQuery
cudaStreamSetAttribute
cudaStreamSynchronize
cudaStreamWaitEvent
cudaTimelineSemaphore
cudaUnbindTexture
cudaUpdateHeightmapKernel
cudaUpdateVkImage
cudaVertMem
cudaVkImportImageMem
cudaVkImportSemaphore
cudaVkSemaphoreSignal
cudaVkSemaphoreWait
cudaWaitExternalSemaphoresAsync
cudaWaitSemaphore
cudaXtFree

cudaDeviceProp


  • CUDA プログラムで使用するデバイス(GPU)の特性情報を取得するための構造体
  • この構造体には、GPUの性能やメモリに関する詳細な情報が含まれている
  • 構造体を利用してプログラムをデバイスに最適化したり、異なるデバイス間での動作を調整したりすることが可能
  • CUDA の各デバイスのプロパティを取得するために cudaGetDeviceProperties() 関数を使用して取得

構造体の主なフィールドとその役割


フィールド名説明
nameデバイス名(例: “Tesla V100”)
totalGlobalMemデバイスのグローバルメモリの合計量(バイト単位)
sharedMemPerBlock各ブロックあたりの共有メモリ量(バイト単位)
regsPerBlock各ブロックあたりのレジスタ数
warpSizeワープサイズ(通常32)
memPitchメモリピッチの最大値(バイト単位)
maxThreadsPerBlock各ブロック内で使用できる最大スレッド数
maxThreadsDim[3]ブロック内での各次元(x、y、z)の最大スレッド数
maxGridSize[3]グリッドの各次元(x、y、z)の最大サイズ
clockRateクロックレート(kHz単位)
multiProcessorCountマルチプロセッサ(SM)の数
computeCapabilityCUDAコンピュートキャパビリティ(例: 7.0)
major or minorコンピュートキャパビリティのメジャーおよびマイナー番号
textureAlignmentテクスチャメモリのアライメント
deviceOverlapデバイスのコピーとカーネル実行のオーバーラップの可否
integrated統合型デバイスかどうかのフラグ(0ならディスクリートGPU、1なら統合GPU)

使用例


#include <cuda_runtime.h>
#include <iostream>
 
int main() {
    int deviceCount;
    // 利用可能なデバイスの数を取得
    cudaGetDeviceCount(&deviceCount);
 
    for (int i = 0; i < deviceCount; ++i) {
        cudaDeviceProp prop;
        // 指定したデバイスのプロパティを取得し、cudaDeviceProp 構造体に格納
        cudaGetDeviceProperties(&prop, i);
 
        std::cout << "Device " << i << ": " << prop.name << "\n";
        std::cout << "  Total Global Memory: " << prop.totalGlobalMem / (1024 * 1024) << " MB\n";
        std::cout << "  Shared Memory per Block: " << prop.sharedMemPerBlock << " bytes\n";
        std::cout << "  Registers per Block: " << prop.regsPerBlock << "\n";
        std::cout << "  Warp Size: " << prop.warpSize << "\n";
        std::cout << "  Max Threads per Block: " << prop.maxThreadsPerBlock << "\n";
        std::cout << "  Max Threads Dimension: [" << prop.maxThreadsDim[0] << ", " << prop.maxThreadsDim[1] << ", " << prop.maxThreadsDim[2] << "]\n";
        std::cout << "  Max Grid Size: [" << prop.maxGridSize[0] << ", " << prop.maxGridSize[1] << ", " << prop.maxGridSize[2] << "]\n";
        std::cout << "  Clock Rate: " << prop.clockRate / 1000 << " MHz\n";
        std::cout << "  Multi Processor Count: " << prop.multiProcessorCount << "\n";
        std::cout << "  Compute Capability: " << prop.major << "." << prop.minor << "\n";
    }
 
    return 0;
}