最終更新: mikk_ni3_92 2010年03月03日(水) 14:06:16履歴
現在地 >> メニュー >> CUDA >> CUDA編01
INDEX: CUDA編00 << CUDA編01 >> CUDA編02
CUTILはCUDAツールキットの一部ではないし、NVIDIAによるサポートがあるわけでもない。
プラットホームに依存しない開発を行うためのSDKのサンプル付属品。
CUTILは以下のような機能が用意されている
まずは、GPUの情報を取得してみる。
デバイスプロパティを取得するデータ構造として次のようなものがある。
【driver_types.h】より
これらの情報を取得するには「cudaGetDeviceProperties関数」を使う。
【例】
INDEX: CUDA編00 << CUDA編01 >> CUDA編02
CUTILはCUDAツールキットの一部ではないし、NVIDIAによるサポートがあるわけでもない。
プラットホームに依存しない開発を行うためのSDKのサンプル付属品。
CUTILは以下のような機能が用意されている
- コマンドラインの解析
- PPM形式のファイルを読み書きできる
- 配列データの比較
- タイマー
- 各種エラーチェック
かならず必要な「libファイル」は
- cudart.lib → cudaライブラリ
- cutil32.lib or cutil32D.lib → CUTILライブラリ(「D」が付いているのはデバッグ用)
CUTILを使ったプログラムでは
【例】:CUTILの使い方
「cudaSetDevice関数」などで初期化してもよい。
このマクロを使うとエラーチェックもしてくれる。
- デバイスの初期化(GPUの初期化)
- CUTILの終了
【例】:CUTILの使い方
#include <cutil_inline.h> #pragma comment (lib,"cudart.lib") #ifdef _DEBUG #pragma comment (lib,"cutil32D.lib") #else #pragma comment (lib,"cutil32.lib") #endif int main(int argc, char **argv) { CUT_DEVICE_INIT(argc,argv); … … CUT_EXIT(argc, argv);//終了 return 0; }【解説】
「cudaSetDevice関数」などで初期化してもよい。
このマクロを使うとエラーチェックもしてくれる。
いくつかあるが代表的なものをあげておく
…等々
CUT_DEVICE_INIT(ARGC, ARGV) | デバイスの初期化 |
CUT_EXIT(argc, argv) | プログラムを終了する |
CUDA_SAFE_CALL(call) | cudaランタイムAPIのエラーチェック |
CUT_SAFE_CALL(call) | CUTILライブラリのエラーチェック |
まずは、GPUの情報を取得してみる。
デバイスプロパティを取得するデータ構造として次のようなものがある。
【driver_types.h】より
struct cudaDeviceProp { char name[256]; ///< ASCII string identifying device size_t totalGlobalMem; ///< Global memory available on device in bytes size_t sharedMemPerBlock; ///< Shared memory available per block in bytes int regsPerBlock; ///< 32-bit registers available per block int warpSize; ///< Warp size in threads size_t memPitch; ///< Maximum pitch in bytes allowed by memory copies int maxThreadsPerBlock; ///< Maximum number of threads per block int maxThreadsDim[3]; ///< Maximum size of each dimension of a block int maxGridSize[3]; ///< Maximum size of each dimension of a grid int clockRate; ///< Clock frequency in kilohertz size_t totalConstMem; ///< Constant memory available on device in bytes int major; ///< Major compute capability int minor; ///< Minor compute capability size_t textureAlignment; ///< Alignment requirement for textures int deviceOverlap; ///< Device can concurrently copy memory and execute a kernel int multiProcessorCount; ///< Number of multiprocessors on device int kernelExecTimeoutEnabled; ///< Specified whether there is a run time limit on kernels int integrated; ///< Device is integrated as opposed to discrete int canMapHostMemory; ///< Device can map host memory with cudaHostAlloc/cudaHostGetDevicePointer int computeMode; ///< Compute mode (See ::cudaComputeMode) int __cudaReserved[36]; };
これらの情報を取得するには「cudaGetDeviceProperties関数」を使う。
【例】
cudaDeviceProp devInfo; CUDA_SAFE_CALL(cudaGetDeviceProperties(&devInfo, 0)); //0番目のGPUの情報を取得 std::cout<<"ビデオカード名 : "<< devInfo.name <<"\n"; std::cout<<"GPUの総メモリ数 : "<<devInfo.totalGlobalMem/1024/1024<<" MB\n"; std::cout<<"各ブロックに割り当てられる最大 shared memory : "<<devInfo.sharedMemPerBlock/1024<<" KB\n"; std::cout<<"1ブロックあたりの最大スレッド数:"<<devInfo.maxThreadsPerBlock<<"\n";