最終更新:
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";

