Je commence avec opencl dans VS en utilisant ce tutoriel:
https://opencl.codeplex.com/wikipage?title=OpenCL%20Tutorials%20-%201
J'ai du mal à configurer le programme hôte. Voici le code jusqu'à présent:
const char* clewErrorString(cl_int error) {
//stuff
}
int main(int argc, char **argv) {
cl_int errcode_ret;
cl_uint num_entries;
// Platform
cl_platform_id platforms;
cl_uint num_platforms;
num_entries = 1;
cout << "Getting platform id..." << endl;
errcode_ret = clGetPlatformIDs(num_entries, &platforms, &num_platforms);
if (errcode_ret != CL_SUCCESS) {
cout << "Error getting platform id: " << clewErrorString(errcode_ret) << endl;
exit(errcode_ret);
}
cout << "Success!" << endl;
// Device
cl_device_type device_type = CL_DEVICE_TYPE_GPU;
num_entries = 1;
cl_device_id devices;
cl_uint num_devices;
cout << "Getting device id..." << endl;
errcode_ret = clGetDeviceIDs(platforms, device_type, num_entries, &devices, &num_devices);
if (errcode_ret != CL_SUCCESS) {
cout << "Error getting device id: " << clewErrorString(errcode_ret) << endl;
exit(errcode_ret);
}
cout << "Success!" << endl;
// Context
cl_context context;
cout << "Creating context..." << endl;
context = clCreateContext(0, num_devices, &devices, NULL, NULL, &errcode_ret);
if (errcode_ret < 0) {
cout << "Error creating context: " << clewErrorString(errcode_ret) << endl;
exit(errcode_ret);
}
cout << "Success!" << endl;
// Command-queue
cl_command_queue queue;
cout << "Creating command queue..." << endl;
queue = clCreateCommandQueue(context, devices, 0, &errcode_ret);
if (errcode_ret != CL_SUCCESS) {
cout << "Error creating command queue: " << clewErrorString(errcode_ret) << endl;
exit(errcode_ret);
}
cout << "Success!" << endl;
return 0;
}
Cela ne compile pas, cependant: j'obtiens un error C4996: 'clCreateCommandQueue': was declared deprecated
quand j'essaye de compiler. Je ne comprends pas encore tout le processus de configuration, donc je ne sais pas si j'ai gâché quelque chose ou non. Selon chronos, la fonction ne semble pas être déconseillée cependant: https://www.khronos.org/registry/cl/sdk/1.0/docs/man/xhtml/clCreateCommandQueue.html
Si je supprime la partie de la file d'attente de commandes, le reste s'exécute sans problème. Comment puis-je faire fonctionner cela?
La fonction clCreateCommandQueue
a été déconseillée à partir d'OpenCL 2.0 et remplacée par clCreateCommandQueueWithProperties
. Si vous ne ciblez que les appareils prenant en charge OpenCL 2.0 (certains processeurs Intel et AMD récents au moment de la rédaction), vous pouvez utiliser cette nouvelle fonction en toute sécurité.
Si vous avez besoin que votre code s'exécute sur des périphériques qui ne prennent pas encore en charge OpenCL 2.0, vous pouvez continuer à utiliser la fonction clCreateCommandQueue
obsolète en utilisant les macros de préprocesseur fournies par les en-têtes OpenCL, par exemple:
#define CL_USE_DEPRECATED_OPENCL_1_2_APIS
#include <CL/cl.h>