2016-03-14 3 views
1

Я пытался получить 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 Точка входа не может быть расположенным в библиотеке динамической связи

Error

Я рассматривал DLL, используя dll export viewer и функция действительно, как представляется, в OpenCL.dll.

DLL

EDIT

Я думаю Маты Петерсона правильно я сделал поиск файлов на моем компьютере и обнаружил множественные OpenCL.dll файлы

Я не уверен, как это исправить в разумный путь ....

openCLs

EDIT

Возможно, также стоит отметить, что программа работает нормально, когда я удаляю вызов до clCreateCommandQueueWithProperties.

+0

Я пытался переустановить AMD SDK несколько раз, но это не имело никакого значения. Это похоже на то, что моя программа каким-то образом использует неправильную dll/версию ... – sav

+1

Я предполагаю, что ваш компилятор/компоновщик найдет другую библиотеку CL (например, драйвер ICD), которая не является драйвером CL2.0. Я не уверен, но это было бы моим предположением (совершив эту ошибку при создании нашего драйвера для 1.x или 2.0) –

+0

@MatsPetersson Я пробовал проверять процесс с помощью Process Explorer, но я не мог найти ничего, что указывало, какая DLL использовалась. – sav

ответ

2

Некоторые мои друзья предложили скопировать файл OpenCL.DLL в каталог проекта.

Это работало достаточно хорошо.

Возможно, моя программа загружалась в неправильный файл dll.

0

Я заменил C: \ Windows \ System32 \ OpenCL.dll с одной расположенной в C: \ Program Files (x86) \ AMD APP SDK \ 3.0 \ Bin \ x86 \ OpenCL.dll

И

я заменил C: \ Windows \ SysWOW64 \ OpenCL.dll с одной расположенной в C: \ Program Files (x86) \ AMD APP SDK \ 3.0 \ Bin \ x86_64 \ OpenCL.dll

Это работает для меня.

Смежные вопросы

 Смежные вопросы