![](https://habrastorage.org/getpro/habr/post_images/cb8/2f2/62d/cb82f262d3742c77aca8fc8b66d7f03e.jpg)
これは、GPGPUとnVidia CUDAの使用に関する一連の記事の最初の記事です。 読者を飽きさせないために、あまり多くないが、しばしば十分に書くつもりです。
読者はCUDAが何であるかを知っていると思いますが、そうでない場合、紹介記事はHabréで見つけることができます。
仕事に必要なもの:
1. nVidia GeForce 8xxx / 9xxxシリーズ以上のビデオカード
2. CUDA Toolkit v.2.1(こちらからダウンロードできます: www.nvidia.ru/object/cuda_get_ru.html )
3. CUDA SDK v.2.1(ツールキットと同じ場所にダウンロードできます)
4. Visual Studio 2008
5. CUDA Visual Studio Wizard(こちらからダウンロード: sourceforge.net/projects/cudavswizard )
CUDAプロジェクトの作成:
VSに必要なものをすべてインストールすると、CU-DA WinAppという名前のC ++用の新しい種類のプロジェクトが表示されます。これがまさに必要なものです。 このタイプのプロジェクトでは、GPUのコンパイルオプションを構成できるCUDAの追加設定を使用できます。たとえば、GPUのタイプに応じた計算機能のバージョンなどです。
プリコンパイル済みヘッダーがCUDAに役立つ可能性は低いため、通常は空のプロジェクトを作成します。
CUDAアプリケーションの構築方法に注意することが重要です。 * .cpp拡張子を持つファイルはMS C ++コンパイラ(cl.exe)によって処理され、* .cu拡張子を持つファイルはCUDAコンパイラ(nvcc.exe)によって処理されます。 CPUで実行されている* .cuのコードはMS C ++コンパイルに転送されます。この機能は、計算にGPUを使用する関数をエクスポートする動的ライブラリの作成に便利です。
以下は、GPUのハードウェア機能に関する情報を表示する簡単なCUDAプログラムのリストです。
リスティング CudaInfoプログラム。
//FileName: cudaInfo.cu
#include <stdio.h>
#include <cuda_runtime_api.h>
int main()
{
int deviceCount;
cudaDeviceProp deviceProp;
// CUDA PC.
cudaGetDeviceCount(&deviceCount);
printf( "Device count: %d\n\n" , deviceCount);
for ( int i = 0; i < deviceCount; i++)
{
//
cudaGetDeviceProperties(&deviceProp, i);
//
printf( "Device name: %s\n" , deviceProp.name);
printf( "Total global memory: %d\n" , deviceProp.totalGlobalMem);
printf( "Shared memory per block: %d\n" , deviceProp.sharedMemPerBlock);
printf( "Registers per block: %d\n" , deviceProp.regsPerBlock);
printf( "Warp size: %d\n" , deviceProp.warpSize);
printf( "Memory pitch: %d\n" , deviceProp.memPitch);
printf( "Max threads per block: %d\n" , deviceProp.maxThreadsPerBlock);
printf( "Max threads dimensions: x = %d, y = %d, z = %d\n" ,
deviceProp.maxThreadsDim[0],
deviceProp.maxThreadsDim[1],
deviceProp.maxThreadsDim[2]);
printf( "Max grid size: x = %d, y = %d, z = %d\n" ,
deviceProp.maxGridSize[0],
deviceProp.maxGridSize[1],
deviceProp.maxGridSize[2]);
printf( "Clock rate: %d\n" , deviceProp.clockRate);
printf( "Total constant memory: %d\n" , deviceProp.totalConstMem);
printf( "Compute capability: %d.%d\n" , deviceProp.major, deviceProp.minor);
printf( "Texture alignment: %d\n" , deviceProp.textureAlignment);
printf( "Device overlap: %d\n" , deviceProp.deviceOverlap);
printf( "Multiprocessor count: %d\n" , deviceProp.multiProcessorCount);
printf( "Kernel execution timeout enabled: %s\n" ,
deviceProp.kernelExecTimeoutEnabled ? "true" : "false" );
}
return 0;
}
* This source code was highlighted with Source Code Highlighter .
プログラムでは、cuda_runtime_api.hライブラリを接続します。 これは必須ではありませんが、自動的に含まれますが、IntelliSenceは動作しません(ただし、それでも時折芝刈りが行われます)。
おわりに
これはCUDAプログラムを記述する最も簡単な方法だと思います。環境の構成と構成に最小限の労力しかかからないため、唯一の問題はIntelliSenceのみを使用することです。
次回は、数学的計算のためのCUDAの使用と、ビデオカードのメモリを操作する問題について検討します。
PS質問をします。