Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

C++ OpenCL konfiguracja środowiska CodeBlocks

Ostatnio zmodyfikowano 2016-04-21 21:37
Autor Wiadomość
jameson
Temat założony przez niniejszego użytkownika
C++ OpenCL konfiguracja środowiska CodeBlocks
» 2016-04-13 23:55:22
Wydaje mi się że wykonuje wszystko zgodnie z instrukcją lecz po próbie odpalenia testowego programu z wykorzystaniem OpenCL wyrzuca mi błąd w postaci:

fatal error: cl.h: No such file or directory

 
Ścieżki jakie używam :
C:\P rogram Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5\include
w której zawiera się folder CL a w nim plik cl.h

oraz

C:\P rogram Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5\lib\x64
w której zawiera się OpenCL.lib

W oknie "Other Linker Options" dopisuje również :
"-lOpenCL"

Testowy program który próbuje odpalić :
C/C++
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <CL/cl.h>

typedef struct DeviceDesc {
    cl_device_id deviceId;
    cl_device_type deviceType;
    char * deviceTypeString;
    char * deviceName;
} DeviceDesc;

int main( void )
{
    size_t i;
    size_t maxDevices = 5;
    cl_device_id * deviceIDs =( cl_device_id * ) malloc( maxDevices * sizeof( cl_device_id ) );
    cl_platform_id * platforms =( cl_platform_id * ) malloc( sizeof( cl_platform_id ) );
    cl_int err;
    cl_uint num_entries = 1;
    cl_uint available;
    cl_uint numDevices;
    DeviceDesc * devices;
   
    //Get available platforms (we will use the first result, I think most of the time we have
    //one platform on personnal computers)
    cl_int result = clGetPlatformIDs( num_entries, platforms, & available );
   
    err = clGetDeviceIDs( platforms[ 0 ], CL_DEVICE_TYPE_ALL, maxDevices, deviceIDs, & numDevices );
   
    devices =( DeviceDesc * ) malloc( numDevices * sizeof( DeviceDesc ) );
   
    for( i = 0; i < numDevices; i++ )
    {
        devices[ i ].deviceId = deviceIDs[ i ];
        size_t actualSize;
       
        //Getting the device type (processor, graphics card, accelerator)
        result = clGetDeviceInfo(
        deviceIDs[ i ],
        CL_DEVICE_TYPE,
        sizeof( cl_device_type ),
        & devices[ i ].deviceType,
        & actualSize );
       
        //Getting the human readable device type
        switch( devices[ i ].deviceType )
        {
        case CL_DEVICE_TYPE_CPU:
            devices[ i ].deviceTypeString = "Processor";
            break;
        case CL_DEVICE_TYPE_GPU:
            devices[ i ].deviceTypeString = "Graphics card";
            break;
        case CL_DEVICE_TYPE_ACCELERATOR:
            devices[ i ].deviceTypeString = "Accelerator";
            break;
        default:
            devices[ i ].deviceTypeString = "NONE";
            break;
        }
       
        //Getting the device name
        size_t deviceNameLength = 4096;
        char * tempDeviceName =( char * ) malloc( 4096 );
        result |= clGetDeviceInfo(
        deviceIDs[ i ],
        CL_DEVICE_NAME,
        deviceNameLength,
        tempDeviceName,
        & actualSize );
        if( result == CL_SUCCESS ) {
            devices[ i ].deviceName =( char * ) malloc( actualSize );
            memcpy( devices[ i ].deviceName, tempDeviceName, actualSize );
            free( tempDeviceName );
        }
       
        //If an error occured
        if( result != CL_SUCCESS )
        {
            printf( "Error while getting device info\n" );
            return;
        }
    }
   
    //And finally we print the information we wanted to have
    for( i = 0; i < numDevices; i++ ) {
        printf( "Device %s is of type %s\n", devices[ i ].deviceName, devices[ i ].deviceTypeString );
    }
   
    //Free memory
    free( deviceIDs );
    free( platforms );
}

Błąd wywala przy :
#include <CL/cl.h>
więc zdecydowanie coś z konfiguracją środowiska robię źle...
Dodam również iż mam 64-bitową wersje systemu
P-147240
j23
» 2016-04-14 11:10:26
Jeśli jesteś pewny, że poprawnie dodałeś ścieżki w opcjach projektu, to być może spacje w ścieżkach powodują problem. Spróbuj użyć zmiennej środowiskowej CUDA_ROOT, przypisz do niej
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5
, a w opcjach projektu dodaj odpowiednio
$(CUDA_ROOT)\include
 i
$(CUDA_ROOT)\lib\x64
. Jeśli to nic nie da, daj ścieżkę w cudzysłów.
P-147249
jameson
Temat założony przez niniejszego użytkownika
» 2016-04-21 21:37:58
Dzięki za odpowiedź j23 !
Sprawdziłem spacje w ścieżkach i przeinstalowałem SDK od Nvidi prosto na C:\ (dla pewności). Dzięki temu ruszyło o krok dalej. Lecz napotkałem kolejną ścianę ale po dłuższych poszukiwaniach udało mi się rozwiązać problem.

Należy również mimo 64 bitowego systemu wskazać lokalizacje biblioteki 32...

Jak znajdę może chwilę czasu postaram się zamieścić jakiś porządny temat z konfiguracją i przykładami poświęconymi OpenCL. Szukałem na forum lecz nie znalazłem.

Temat zamykam.
P-147514
« 1 »
  Strona 1 z 1