提升计算(opencl 包装器)、初始设置问题(qt、g++)
boost compute (opencl wrapper), initial setup problems (qt, g++)
一直在尝试编译此示例代码:https://github.com/boostorg/compute/blob/master/README.md
我使用mingw530安装了QT Creator 5.7
我使用
编译了 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\User\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
对 main.cpp 中的每个包含项执行 -I(见下文)
理想情况下,我想知道如何编译他们页面上给出的示例,包含和所有(以及相关的 amd sdk and/or 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.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.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;
}
如果我取消对包含 cl.hpp 的注释,我会更进一步
C:/Dev/Boost/compute-master/include/boost/compute/allocator/buffer_allocator.hpp:91: undefined reference to `clReleaseMemObject@4'
"slew of errors" 是 link 错误,因为缺少 AMP APP SDK
库(在本例中为 libOpenCL.a
)的位置。
例如link 到 MinGw
的 32 位版本,-lOpenCL
变为:
-L"C:\Program Files (x86)\AMD APP SDK.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.9-1\
一直在尝试编译此示例代码:https://github.com/boostorg/compute/blob/master/README.md
我使用mingw530安装了QT Creator 5.7
我使用
编译了 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\User\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
对 main.cpp 中的每个包含项执行 -I(见下文)
理想情况下,我想知道如何编译他们页面上给出的示例,包含和所有(以及相关的 amd sdk and/or 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.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.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;
}
如果我取消对包含 cl.hpp 的注释,我会更进一步
C:/Dev/Boost/compute-master/include/boost/compute/allocator/buffer_allocator.hpp:91: undefined reference to `clReleaseMemObject@4'
"slew of errors" 是 link 错误,因为缺少 AMP APP SDK
库(在本例中为 libOpenCL.a
)的位置。
例如link 到 MinGw
的 32 位版本,-lOpenCL
变为:
-L"C:\Program Files (x86)\AMD APP SDK.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.9-1\