0

Dell 1558にATI HD Radeon 5470があり、win7-64にAMDAPP SDK 2.8がインストールされていますが、openclコードを使用してデバイスを微調整すると、次のように表示されます。

「デバイスが見つかりませんでした: エラーはありません」

最新のCatalystドライバーをインストールしたことは知っていますが、他のすべてのプログラムはGPUで正常に動作しますが、なぜこのレポートが作成されるのかわかりません。デバイスを見つけるために使用したコードは次のとおりです。すべての人に感謝します。問題の原因を突き止めてください。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#ifdef MAC
#include <OpenCL/cl.h>
#else
#include <CL/cl.h>
#endif
int main() {
cl_platform_id platform;
cl_device_id *devices;
cl_uint num_devices, addr_data;
cl_int i, err;
char name_data[48], ext_data[4096];
err = clGetPlatformIDs(1, &platform, NULL);
if(err < 0) {
perror("Couldn't find any platforms");
exit(1);
}
err = clGetDeviceIDs(platform, CL_DEVICE_TYPE_ALL,
1, NULL, &num_devices);
if(err < 0) {
perror("Couldn't find any devices");
exit(1);
}
devices = (cl_device_id*)
malloc(sizeof(cl_device_id) * num_devices);
clGetDeviceIDs(platform, CL_DEVICE_TYPE_ALL,
num_devices, devices, NULL);
for(i=0; i<num_devices; i++) {
err = clGetDeviceInfo(devices[i], CL_DEVICE_NAME,
sizeof(name_data), name_data, NULL);
if(err < 0) {
perror("Couldn't read extension data");
exit(1);
}
clGetDeviceInfo(devices[i], CL_DEVICE_ADDRESS_BITS,
sizeof(ext_data), &addr_data, NULL);
clGetDeviceInfo(devices[i], CL_DEVICE_EXTENSIONS,
sizeof(ext_data), ext_data, NULL);
printf("NAME: %s\nADDRESS_WIDTH: %u\nEXTENSIONS: %s",
name_data, addr_data, ext_data);
}
free(devices);
return 0;
}
4

1 に答える 1

0

clGetDeviceIDs() への最初の呼び出しは、3 番目の引数が 1 であるため、マシンでエラーを返します。1 を 0 に変更すると、それを超えて取得されます。次の問題は、clGetDeviceInfo の呼び出しが失敗することです。これは、name_data が小さすぎるためです。opencl に必要なサイズを直接見つける方法があるかどうかはわかりませんが、より大きなバッファーを渡すと問題が回避されます。最後の問題は、clGetDeviceInfo への 2 番目の呼び出しに、sizeof(addr_data) が意図されているのに sizeof(ext_data) が使用されているタイプ エラーがあることです。私のテストでは、これによりローカル変数 i が上書きされ、無限ループが発生します。それが修正されると、コードは次のように出力されます。

NAME: ATI RV710 ADDRESS_WIDTH: 32 EXTENSIONS: cl_khr_gl_sharing cl_amd_device_attribute_query cl_khr_d3d10_sharing NAME: Intel(R) Core(TM) i7-2600K CPU @ 3.40GHz ADDRESS_WIDTH: 64 EXTENSIONS: cl_khr_fp64 cl_amd_fp64 cl_khr_global_int32_base_atomics cl_khr_global_int32_extended_atomics cl_khr_local_i nt32_base_atomics cl_khr_local_int32_extended_atomics cl_khr_int64_base_atomics cl_khr_int64_extended_atomics cl_khr_byt e_addressable_store cl_khr_gl_sharing cl_ext_device_fission cl_amd_device_attribute_query cl_amd_vec3 cl_amd_printf cl_a md_media_ops cl_amd_popcnt cl_khr_d3d10_sharing

于 2013-06-25T14:36:09.620 に答える