limon_spb
@limon_spb

Азы OpenCL( C++, Qt 5). Как собрать простейшую программу?

Коллеги, не удается полноценно запустить элементарную программку.
Что есть:
Windows 7 64
Qt 5.5.1 Desktop MSVC2013 64bit (тестил и с MinGW 32 bit)
Nvidia GeForce 540
Драйвера CUDA установлены для 64 bit.
В Visual Studio 2013 CUDA примеры компилятся и работают.

Вот эта программка, тоже собирается из QtCreator и запускается, выводя на экран "Using platform: NVIDIA CUDA"

Pro файл:
QT += core
QT -= gui

TARGET = QtTestCuda
CONFIG += console
CONFIG -= app_bundle

TEMPLATE = app

SOURCES += main.cpp

QMAKE_CXXFLAGS += -std=c++0x

LIBS += -L$$PWD/ -L"C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v7.5/lib/x64" -lOpenCL
INCLUDEPATH += $$PWD/ "C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v7.5/include"

DEPENDPATH += $$PWD/ "C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v7.5/include"


main.cpp:
#include <CL/cl.hpp>

#include <iostream>
#include <vector>
//#define __NO_STD_VECTOR

int main(int argc, char *argv[])
{
    //get all platforms (drivers)
     std::vector<cl::Platform> all_platforms;
     cl::Platform::get(&all_platforms);
     if(all_platforms.size()==0){
         std::cout<<" No platforms found. Check OpenCL installation!\n";
         exit(1);
     }
     cl::Platform default_platform=all_platforms[0];
     std::cout << "Using platform: "<<default_platform.getInfo<CL_PLATFORM_NAME>()<<"\n";

     //get default device of the default platform     
     std::vector<cl::Device> all_devices;
     default_platform.getDevices(CL_DEVICE_TYPE_ALL, &all_devices);//!!!!!!!!!!!!!!
     return 0;
}


но как только раскомментирую предпоследнюю строчку с "!!!!!!!!" - то вылезает
"Не удалось получить идентификатор подчинённого процесса: Параметр задан неверно.", либо
"..../QtTestCuda.exe завершился с кодом -1073741511"

Буду благодарен за подсказки. Измучился уже.

UPD:
В студии 2013 ситуация похожая - без строчки "!!!!!" все работает, а с ней - вылезает сообщение
d6c17989ef5a4e6982a404aa95a93dc6
  • Вопрос задан
  • 3639 просмотров
Решения вопроса 2
@vilgeforce
Раздолбай и программист
Судя по сообщению об ошибке рискну предположить что у вас старый/плохо установленный OpenCL. Насколько я помню, перечисление платформ возможно сделать только через реестр, сам OpenCL не нужен. А вот получение устройств уже требует OpenCL и тут-то ошибка и вываливается. Файл с именем opencl.dll вообще есть у вас?
Ответ написан
Nipheris
@Nipheris Куратор тега C++
limon_spb пожалуй не все так просто с OpenCL.DLL и видимо ее все-таки не нужно распространять со своим приложением. Однако, как и было сказано ранее, ее интерфейс универсален и ваше приложение не придется перекомпилить под каждое устройство. Вопрос только в том, кто ее должен поставлять.

Вот на форуме Кроноса: https://forums.khronos.org/showthread.php/6299-Ope... господин pcchen утверждает, что OpenCL.dll и ICD-либа должны устанавливаться при установке драйверов на видяху. Видимо все-таки не должны вы класть OpenCL.dll со своей программой.

Тогда мы возвращаемся к вопросу, почему программа не запустилась у вас на машине. Случайно наткнулся на ваш вопрос 1-в-1 на SO: stackoverflow.com/questions/22098210/deploying-ope... . Я думаю у вас была та же проблема - DLL в системных папках реализует API версии 1.1, а вы разрабатываете под API версии 1.2 (что определяется теми хедерами, которые вы подключили в проект). Поэтому правильно все-таки сначала решить проблему конкретно на вашей машине. Возможно, стоит обновить драйвера, и они обновят системные библиотеки.

В той теме на форуме так и не пришли к единому мнению относительно того, откуда должна браться OpenCL.dll. Я склоняюсь к тому, что ставить ее должны драйвера. Кстати, Dithermaster в ответах на SO говорит то же самое. Погуглите еще "deploying opencl application".
Вот еще одна тема с обсуждением (также не советуют деплоить OpenCL.dll самому): https://forums.khronos.org/showthread.php/11392-Ye...
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Vladusch
@Vladusch
540-й ГеФорс должен держать OpenCL 1.1. Первое что приходит в голову - поставить актуальные и стабильные драйвера для видеокарты. Так же советую поставить Intel OpeCL SDK и/или AMD APP SDK (от AMD поддерживает и свои процессоры и графику, и процы от Intel) - тогда как минимум одна платформа с как минимум одним устройством поддерживающим OpenCL у Вас будет.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы