Я пытался получить OpenCL, работая с визуальной студией.Точка входа процедуры clCreateCommandQueueWithProperties не может быть расположена в динамической библиотеке ссылок
Я следовал this руководство по настройке AMD OpenCL SDK.
Вот мой краткий пример программы
#include "stdafx.h"
#include <CL/cl.h>
#include <stdio.h>
#include <iostream>
using namespace std;
const char *source =
"__kernel void memset(__global uint *dst) \n"
"{ \n"
" dst[get_global_id(0)] = get_global_id(0); \n"
"} \n";
int main()
{
cl_platform_id platform;
clGetPlatformIDs(1, &platform, NULL);
cl_device_id device;
clGetDeviceIDs(platform, CL_DEVICE_TYPE_GPU, 1, &device, NULL);
cl_context context = clCreateContext
(
NULL,
1,
&device,
NULL,
NULL,
NULL
);
cl_command_queue queue = clCreateCommandQueueWithProperties
(
context,
device,
0,
NULL
);
return 0;
}
Но когда я запускаю его я получаю эту ошибку времени выполнения
Процедура, clCreateCommandQueueWithProperties Точка входа не может быть расположенным в библиотеке динамической связи
Я рассматривал DLL, используя dll export viewer и функция действительно, как представляется, в OpenCL.dll
.
EDIT
Я думаю Маты Петерсона правильно я сделал поиск файлов на моем компьютере и обнаружил множественные OpenCL.dll файлы
Я не уверен, как это исправить в разумный путь ....
EDIT
Возможно, также стоит отметить, что программа работает нормально, когда я удаляю вызов до clCreateCommandQueueWithProperties
.
Я пытался переустановить AMD SDK несколько раз, но это не имело никакого значения. Это похоже на то, что моя программа каким-то образом использует неправильную dll/версию ... – sav
Я предполагаю, что ваш компилятор/компоновщик найдет другую библиотеку CL (например, драйвер ICD), которая не является драйвером CL2.0. Я не уверен, но это было бы моим предположением (совершив эту ошибку при создании нашего драйвера для 1.x или 2.0) –
@MatsPetersson Я пробовал проверять процесс с помощью Process Explorer, но я не мог найти ничего, что указывало, какая DLL использовалась. – sav