2013-06-25 6 views
0

Je ATI Radeon HD 5470, dans mon Dell 1558, et le SDK 2.8 AMDAPP installé sur mon win7-64 le problème est quand j'utilise le code OpenCL pour affiner le dispositif, il dit que:OpenCL Device not Exist

« n'a pas pu trouver un appareil: aucune erreur »

je sais que je l'ai installé le dernier pilote de catalyseur & tous mes autres programmes fonctionnent bien avec GPU, mais je ne sais pas pourquoi il fais ce rapport. voici le code que j'ai utilisé pour trouver l'appareil: merci à tous de m'aider à trouver quel est le problème?

#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; 
} 
+0

Veuillez donner le code d'erreur de l'API OCL pour une analyse plus approfondie. Parce que vous avez votre propre phrase d'erreur codée en dur dans le programme! – DarkZeros

Répondre

0

Le premier appel à clGetDeviceIDs() retourne une erreur sur ma machine parce que le troisième argument est 1. Changement de 1 à 0 obtient passé. Le problème suivant est que l'appel à clGetDeviceInfo échoue. C'est parce que name_data est trop petit. Je ne sais pas si opencl a un moyen direct de trouver la taille requise, mais en passant un tampon plus grand contourne le problème. Le dernier problème est que le deuxième appel à clGetDeviceInfo a une erreur de frappe où sizeof (addr_data) est prévu mais sizeof (ext_data) est utilisé. Pour mon test, cela provoque l'écrasement de la variable locale i, ce qui entraîne une boucle infinie. Une fois que est fixe, l'imprimante de code:

NOM: ATI RV710 ADDRESS_WIDTH: 32 PROROGATIONS: cl_khr_gl_sharing cl_amd_device_attribute_query cl_khr_d3d10_sharing NOM: 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_s haring

+0

Salut, merci beaucoup, j'ai utilisé votre avis et cela a bien fonctionné –

Questions connexes