Использование OpenCL и Embree одновременно

Я хочу использовать библиотеку Intel в сочетании с OpenCL, но у меня это не работает. Чтобы показать вам проблему, я создал небольшой код для всех устройств OpenCL:

#include <stdio.h>
#include <stdlib.h>
#include <CL/cl.h>

int main() { 
    int i, j;
    char* value;
    size_t valueSize;
    cl_uint platformCount;
    cl_platform_id* platforms;
    cl_uint deviceCount;
    cl_device_id* devices;
    cl_uint maxComputeUnits;

    // get all platforms
    clGetPlatformIDs(0, NULL, &platformCount);
    platforms = (cl_platform_id*) malloc(sizeof(cl_platform_id) * platformCount);
    clGetPlatformIDs(platformCount, platforms, NULL);
    printf("Found PLatform :%i\n",platformCount);
    for (i = 0; i < platformCount; i++) {

        // get all devices
        clGetDeviceIDs(platforms[i], CL_DEVICE_TYPE_ALL, 0, NULL, &deviceCount);
        devices = (cl_device_id*) malloc(sizeof(cl_device_id) * deviceCount);
        clGetDeviceIDs(platforms[i], CL_DEVICE_TYPE_ALL, deviceCount, devices, NULL);

        // for each device print critical attributes
        for (j = 0; j < deviceCount; j++) {

            // print device name
            clGetDeviceInfo(devices[j], CL_DEVICE_NAME, 0, NULL, &valueSize);
            value = (char*) malloc(valueSize);
            clGetDeviceInfo(devices[j], CL_DEVICE_NAME, valueSize, value, NULL);
            printf("%i.%i Device: %sn\n", i+1,j+1, value);
            free(value);
        } 
        free(devices); 
    } 
    free(platforms);
    return 0;
}

Если я скомпилирую этот код с:

g++ --std=c++11 -march=native -o test test.c -lOpenCL

Я получаю следующий вывод:

Found PLatform :2
1.1 Device: GeForce GTX 670n
2.1 Device: Intel(R) Xeon(R) CPU E5-2670 0 @ 2.60GHzn

Если я скомпилирую тот же код с:

g++ --std=c++11 -march=native -o test test.c -lOpenCL -l:libembree.so.2

Я больше не могу найти свой процессор как доступное устройство OpenCL, так как получаю следующий вывод:

Found PLatform :1
1.1 Device: GeForce GTX 670n

Может кто-нибудь помочь мне снова получить мой процессор в качестве устройства OpenCL?

1 ответ

Решение

Я нашел решение этой проблемы:

Программа была связана с символической ссылкой, а не с реальным библиотечным путем. Связывая реальный путь к библиотеке, проблема решается с помощью LD_LIBRARY_PATH,

Другие вопросы по тегам