boost compute (оболочка opencl), проблемы с начальной настройкой (qt, g++)
Попытка скомпилировать этот пример кода: https://github.com/boostorg/compute/blob/master/README.md
Я установил QT Creator 5.7 с помощью mingw530
Я скомпилировал библиотеки Boost, используя
bootstrap.bat gcc
b2 install --prefix="C:\Boostbuild" --toolset=gcc
bjam --build-dir=c:/Dev/Boost/Boost_lib toolset=gcc stage
Я установил AMD SDK 3.0, 2.9.1 и 2.9
Я даже скачал opencl 1.1, 1.2 и 2.1 cl.hpp и попытался включить это.
Компиляция начинается, но я получаю множество ошибок
C:\Dev\Boost\compute-master\include\boost\compute\device.hpp:80: ошибка: неопределенная ссылка на `clRetainDevice @ 4 '
C: \ Users \ Пользователь \Documents\Projects\build-console-test-Desktop_Qt_5_7_0_MinGW_32bit-Debug\debug\main.o:-1: В функции `ZN5boost7compute6deviceaSERKS1_':
Я попробовал простое консольное приложение qt, используя код, предоставленный boost compute
Примечание: это не относится к qt, я также попытался скомпилировать это, используя
g++ -I/path/to/compute/include sort.cpp -lOpenCL
делать -I для каждого из включаемых файлов в main.cpp (см. ниже)
В идеале я хотел бы знать, как скомпилировать пример, приведенный на их странице, с помощью include и всех (и соответствующих версий amd sdk и / или opencl) вместе с необходимыми включенными библиотеками.
Мои библиотеки файлов проекта qt
INCLUDEPATH += C:\Dev\Boost\compute-master\include
INCLUDEPATH += C:/Users/User/Downloads/dev/boost_1_61_0
INCLUDEPATH += "C:\Program Files (x86)\AMD APP SDK\2.9-1\include"
Мой main.cpp
#include <iostream>
#include <vector>
#include <algorithm>
#include <boost/compute.hpp>
//#define CL_USE_DEPRECATED_OPENCL_1_1_APIS
//#undef CL_VERSION_1_2
//#include <C:\Dev\OpenCL\2.1\cl.hpp>
namespace compute = boost::compute;
int main()
{
// get the default compute device
compute::device gpu = compute::system::default_device();
// create a compute context and command queue
compute::context ctx(gpu);
compute::command_queue queue(ctx, gpu);
// generate random numbers on the host
std::vector<float> host_vector(1000000);
std::generate(host_vector.begin(), host_vector.end(), rand);
// create vector on the device
compute::vector<float> device_vector(1000000, ctx);
// copy data to the device
compute::copy(
host_vector.begin(), host_vector.end(), device_vector.begin(), queue
);
// sort data on the device
compute::sort(
device_vector.begin(), device_vector.end(), queue
);
// copy data back to the host
compute::copy(
device_vector.begin(), device_vector.end(), host_vector.begin(), queue
);
return 0;
}
если я раскомментирую файл include cl.hpp, я получу еще больше
C:/Dev/Boost/compute-master/include/boost/compute/allocator/buffer_allocator.hpp:91: undefined reference to `clReleaseMemObject@4'
1 ответ
"Множество ошибок" - это ошибки ссылок, потому что расположение AMP APP SDK
библиотеки (libOpenCL.a
в данном случае) отсутствует.
Например, ссылка на 32-битную версию для MinGw
, -lOpenCL
будет выглядеть так:-L"C:\Program Files (x86)\AMD APP SDK\2.9-1\lib\x86" -lOpenCL
Или вы можете добавить следующее в свой QT .pro
файл:
# Ensure that the AMDAPPSDKROOT environment variable has been set
OPENCL_ROOT = $$(AMDAPPSDKROOT)
isEmpty(OPENCL_ROOT) {
error("Please set AMDAPPSDKROOT to the location of the AMD APP SDK")
} else {
message(Using Boost from: $$OPENCL_ROOT)
}
INCLUDEPATH += $$OPENCL_ROOT/include
LIBS += -L$${OPENCL_ROOT}/lib/x86
LIBS += -lOpenCL
Обратите внимание AMDAPPSDKROOT
Переменная окружения обычно создается при установке AMD APP SDK. В вашем случае это должно быть установлено на:
C:\Program Files (x86)\AMD APP SDK\2.9-1\