opencl カーネルが CPU ではなく GPU で実際に実行されていることを 100% 確実にするにはどうすればよいでしょうか。openCL カーネルも CPU 上で実行できるため、これを理解することはできません。ここに何かポインタはありますか?
4 に答える
OpenCL コンテキストを作成するときに、コンピューターで使用可能なプラットフォームとデバイスを選択する必要があります。clGetPlatformInfoとclGetDeviceInfoを使用して、プラットフォームとデバイスに関する情報を取得できます。NVIDIA および AMD SDK にサンプル コードがあり、プラットフォームとデバイスを一覧表示できます。
AMD (gDEBugger、Code XL)、NVIDIA (Visual Profiler)、および Intel (Intel GPA) デバイスの場合、プロファイリング ツールを使用できます。
コンテキストを作成するときは、GPU のみが必要であることを指定するフラグCL_DEVICE_TYPE_GPUを渡すことができるclCreateContextFromTypeを使用します。このようなものは、GPU の使用を保証します (100% 確信できます)。
cl_uint num_platforms = 0;
clGetPlatformIDs(0, NULL, &num_platforms);
cl_platform_id* platform = malloc(sizeof(cl_platform_id) * num_platforms);
cl_context_properties cprops[3] = { CL_CONTEXT_PLATFORM, (cl_context_properties)platform[0], 0 };
ctx = clCreateContextFromType(cprops, CL_DEVICE_TYPE_GPU, NULL, NULL, &err);
コンテキストとデバイスが既にセットアップされている場合は、次のようにデバイスのタイプを照会できます。
cl_device_type dev_type;
clGetDeviceInfo(my_device, CL_DEVICE_TYPE, sizeof(dev_type), &dev_type, NULL);
if (dev_type == CL_DEVICE_TYPE_GPU) {
printf("I'm 100%% sure this device is a GPU");
}
このデバイスで作成されたコマンド キューにエンキューするものはすべて、GPU で実行されます。
TechPowerUp GPU-Z を使用するだけで、GPU にワークロードがあるかどうかを確認できます。別の解決策: デバイス タイプ CL_Device_Type_GPU で GPU を使用しているかどうかを明示的に指定できます。
Macbook Pro と Mac Pro で MenuMeters を使用しています。CPU が使用されている場合は明らかです。(XCode で OpenCL を使用する場合、プロファイリング ツールが機能するかどうかはわかりません....)