- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Good evening,
I'm new to the forum and the hole OpenCL development. i installed the intel sdk intelFPGA_lite v 18.1. I'm using VS 2019.
it gave me this error :
// ConsoleApplication3.cpp : This file contains the 'main' function. Program execution begins and ends there. // #define CL_USE_DEPRECATED_OPENCL_1_2_APIS #include <stdlib.h> #include <stdio.h> #include "CL/opencl.h" #define QTE_DONNEES 60 int main(int argc, const char* argv[]) { // Variables pour la Plateforme de travail cl_platform_id plateformeID; cl_uint qtePlateformes; cl_int codeErreur; // Variables pour les périphériques contenant des unités de calcul cl_device_id TOUS_peripheriqueID; cl_uint TOUS_qtePeripheriques; // Variables pour les contextes de travail cl_context contexte; cl_context_properties proprietes[3]; // Variable pour les files d'exécution des commandes cl_command_queue file_execution; // Variable pour la fonction à paralléliser cl_program programme; const char* maFonctionAuCarre = { "__kernel void auCarre(__global int *input, __global int *output)\n" "{\n""int id = get_global_id(0);\n" "output[id] = input[id] * input[id];" "}\n" }; // Variable pour le noyau qui exécutera // le programme contenant la fonction parallèle. cl_kernel noyau; // Variables qui contiendront les données. int* inputData; int* outputData; cl_mem input_buffer; cl_mem output_buffer; // Initialisation des variables de données inputData = (int*)malloc(QTE_DONNEES * sizeof(int)); outputData = (int*)malloc(QTE_DONNEES * sizeof(int)); for (int i = 0; i < QTE_DONNEES; i++) { inputData = i; outputData = 0; } // -------------------------------------------------------------------- // ----------------- Fin de la section des variables ------------------ // --------------------------------------------------------------------// Création de la plateforme de travail codeErreur = clGetPlatformIDs(1, &plateformeID, &qtePlateformes); // Rechercher les PÉRIPHÉRIQUES dans le système, tout type confondu. codeErreur = clGetDeviceIDs(plateformeID, CL_DEVICE_TYPE_ALL, 1, &TOUS_peripheriqueID, &TOUS_qtePeripheriques); // Création du contexte de travail proprietes[0] = (cl_context_properties)CL_CONTEXT_PLATFORM; proprietes[1] = (cl_context_properties)plateformeID; proprietes[2] = 0; contexte = clCreateContext(proprietes, TOUS_qtePeripheriques, &TOUS_peripheriqueID, NULL, NULL, &codeErreur); // Création de la file d'exécution pour le CPU file_execution = clCreateCommandQueue(contexte, TOUS_peripheriqueID, 0, &codeErreur); // Construire le programme avec la fonction auCarre pour le CPU programme = clCreateProgramWithSource(contexte, 1, (const char**)& maFonctionAuCarre, NULL, &codeErreur); // Compilation du programme codeErreur = clBuildProgram(programme, TOUS_qtePeripheriques, &TOUS_peripheriqueID, NULL, NULL, NULL); if (codeErreur != CL_SUCCESS) { // Si erreur de compilation, alors... Affichage du LOG de compilation char logErreurs[4096]; size_t longueur_Log; clGetProgramBuildInfo(programme, TOUS_peripheriqueID, CL_PROGRAM_BUILD_LOG, sizeof(logErreurs), logErreurs, &longueur_Log); printf("\n[IMPRESSION DU JOURNAL DE COMPILATION]\n\n"); printf("%s\n\n", logErreurs); printf("[FIN DU JOURNAL]\n\n"); return 1; } // Association des variables de données avec le tampon d'échange input_buffer = clCreateBuffer(contexte, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, sizeof(int) * QTE_DONNEES, inputData, &codeErreur); output_buffer = clCreateBuffer(contexte, CL_MEM_WRITE_ONLY | CL_MEM_COPY_HOST_PTR, sizeof(int) * QTE_DONNEES, outputData, &codeErreur); // Construire le noyau noyau = clCreateKernel(programme, "auCarre", &codeErreur); // Associer les tampons d'échanges avec // les arguments des fonctions à paralléliser codeErreur = clSetKernelArg(noyau, 0, sizeof(input_buffer), &input_buffer); codeErreur = clSetKernelArg(noyau, 1, sizeof(output_buffer), &output_buffer); // Mettre le noyau dans la file d'execution size_t dimensions_globales[] = { QTE_DONNEES, 0, 0 }; codeErreur = clEnqueueNDRangeKernel(file_execution, noyau, 1, NULL, dimensions_globales, NULL, 0, NULL, NULL); // Récupération des résultats dans le tampon clEnqueueReadBuffer(file_execution, output_buffer, CL_TRUE, 0, sizeof(int) * QTE_DONNEES, outputData, 0, NULL, NULL);// Affichage des résultats printf("\n\n\n>>>>> Affichage des resultats <<<<<"); printf("\n\nContenu de la variable --inputData--\n"); for (int i = 0; i < QTE_DONNEES; i++) { printf("%d; ", inputData); } printf("\n\nContenu de la variable --outputData--\n"); printf("Fonction --auCarre--\n"); for (int i = 0; i < QTE_DONNEES; i++) { printf("%d; ", outputData); } // Libération des ressources free(inputData); free(outputData); clReleaseMemObject(input_buffer); clReleaseMemObject(output_buffer); clReleaseProgram(programme); clReleaseKernel(noyau); clReleaseCommandQueue(file_execution); clReleaseContext(contexte); return 0; }
Error LNK1104 cannot open file 'OpenCl.lib'
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hello MarwenA,
OpenCL applications typically use the OpenCL ICD Loader Library (OpenCL.dll). The link time stub library used on Windows* OS is OpenCL.lib. It allows the Windows OS dynamic loader can use the selection capabilities of OpenCL.dll. In turn thet application can use OpenCL implementations available on the target system.
On my system, OpenCL.lib is located in C:\Program Files (x86)\IntelSWTools\OpenCL\sdk\lib\x64 or C:\Program Files (x86)\IntelSWTools\OpenCL\sdk\lib\x86 for 64bit and 32bit applicaitons respectively.
Check to make sure it's in the project->properties->linker->input tab underneath Additional Dependencies if you are using the gui to build.
Unfortunately, on my triage system I don't have disk space for the FPGA lite deployment right now to check it's directory structure to confirm OpenCL.lib location.
Can you share from where you've accessed that sample?
-MichaelC
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page