如何解决构造 sycl::queue
我正在尝试使用 VisualStudio 19 在 Windows 10 上使用 cmake 运行 Hello World program for sycl。我已经安装了最新版本的 ComputeCpp。我选择 cmake 是因为 ComputeCpp 的项目模板无法编译,而且我对 VisualStudio 构建系统 GUI 不太熟悉。
这是我的 CMakeLists.txt:
cmake_minimum_required (VERSION 3.8)
project (SyclCMake CXX)
set(CMAKE_CXX_STANDARD 17)
# Include sub-projects.
add_subdirectory ("Sycl CMake")
这是“Sycl CMake/”中的 CMakeLists.txt:
cmake_minimum_required (VERSION 3.8)
# Add source to this project's executable.
find_package(OpenCL required)
include_directories(${OpenCL_INCLUDE_Dirs})
link_directories(${OpenCL_LIBRARY})
add_executable (${PROJECT_NAME} "SyclCMake.h" "SyclCMake.cpp")
target_include_directories(${PROJECT_NAME} PUBLIC "C:\\Program Files\\Codeplay\\ComputeCpp\\include")
target_link_directories(${PROJECT_NAME} PUBLIC "C:\\Program Files\\Codeplay\\ComputeCpp\\lib")
target_link_libraries(${PROJECT_NAME} PUBLIC "ComputeCpp.lib")
set_target_properties(${PROJECT_NAME} PROPERTIES LINKER_LANGUAGE CXX)
target_link_libraries (${PROJECT_NAME} PUBLIC ${OpenCL_LIBRARY})
# Todo: Add tests and install targets if needed.
SyclCMake.cpp 已经从我在开头链接的 hello world 程序中获得了确切的代码。我的 OpenCL 实现由 CUDA 11.4 安装提供。
整个程序的输出是这样的:
'SyclCMake.exe' (Win32): Loaded 'C:\Users\gianl\source\C++\Sycl CMake\out\build\x64-Debug\Sycl CMake\SyclCMake.exe'. Symbols loaded.
'SyclCMake.exe' (Win32): Loaded 'C:\Windows\System32\ntdll.dll'.
'SyclCMake.exe' (Win32): Loaded 'C:\Windows\System32\kernel32.dll'.
'SyclCMake.exe' (Win32): Loaded 'C:\Windows\System32\KernelBase.dll'.
'SyclCMake.exe' (Win32): Loaded 'C:\Program Files\Codeplay\ComputeCpp\lib\ComputeCpp.dll'. Module was built without symbols.
'SyclCMake.exe' (Win32): Loaded 'C:\Windows\System32\ucrtbase.dll'.
'SyclCMake.exe' (Win32): Loaded 'C:\Windows\System32\msvcp140d.dll'.
'SyclCMake.exe' (Win32): Loaded 'C:\Windows\System32\vcruntime140d.dll'.
'SyclCMake.exe' (Win32): Loaded 'C:\Windows\System32\vcruntime140_1d.dll'.
'SyclCMake.exe' (Win32): Loaded 'C:\Windows\System32\ucrtbased.dll'.
'SyclCMake.exe' (Win32): Loaded 'C:\Windows\System32\OpenCL.dll'.
'SyclCMake.exe' (Win32): Loaded 'C:\Windows\System32\combase.dll'.
'SyclCMake.exe' (Win32): Loaded 'C:\Windows\System32\rpcrt4.dll'.
'SyclCMake.exe' (Win32): Loaded 'C:\Windows\System32\advapi32.dll'.
'SyclCMake.exe' (Win32): Loaded 'C:\Windows\System32\msvcrt.dll'.
'SyclCMake.exe' (Win32): Loaded 'C:\Windows\System32\sechost.dll'.
'SyclCMake.exe' (Win32): Loaded 'C:\Windows\System32\cfgmgr32.dll'.
'SyclCMake.exe' (Win32): Loaded 'C:\Windows\System32\ole32.dll'.
'SyclCMake.exe' (Win32): Loaded 'C:\Windows\System32\gdi32.dll'.
'SyclCMake.exe' (Win32): Loaded 'C:\Windows\System32\win32u.dll'.
'SyclCMake.exe' (Win32): Loaded 'C:\Windows\System32\gdi32full.dll'.
'SyclCMake.exe' (Win32): Loaded 'C:\Windows\System32\msvcp_win.dll'.
'SyclCMake.exe' (Win32): Loaded 'C:\Windows\System32\user32.dll'.
'SyclCMake.exe' (Win32): Loaded 'C:\Windows\System32\msvcp140.dll'.
'SyclCMake.exe' (Win32): Loaded 'C:\Windows\System32\vcruntime140.dll'.
'SyclCMake.exe' (Win32): Loaded 'C:\Windows\System32\vcruntime140_1.dll'.
'SyclCMake.exe' (Win32): Loaded 'C:\Windows\System32\imm32.dll'.
The thread 0x48e4 has exited with code 0 (0x0).
'SyclCMake.exe' (Win32): Loaded 'C:\Windows\System32\kernel.appcore.dll'.
'SyclCMake.exe' (Win32): Loaded 'C:\Windows\System32\bcryptprimitives.dll'.
'SyclCMake.exe' (Win32): Loaded 'C:\Windows\System32\clbcatq.dll'.
'SyclCMake.exe' (Win32): Loaded 'C:\Windows\System32\AppxDeploymentClient.dll'.
'SyclCMake.exe' (Win32): Unloaded 'C:\Windows\System32\AppxDeploymentClient.dll'
'SyclCMake.exe' (Win32): Loaded 'C:\Windows\System32\dxgi.dll'.
'SyclCMake.exe' (Win32): Loaded 'C:\Windows\System32\ResourcePolicyClient.dll'.
'SyclCMake.exe' (Win32): Unloaded 'C:\Windows\System32\ResourcePolicyClient.dll'
'SyclCMake.exe' (Win32): Loaded 'C:\Windows\System32\windows.storage.dll'.
'SyclCMake.exe' (Win32): Loaded 'C:\Windows\System32\wldp.dll'.
'SyclCMake.exe' (Win32): Loaded 'C:\Windows\System32\SHCore.dll'.
'SyclCMake.exe' (Win32): Loaded 'C:\Windows\System32\shlwapi.dll'.
'SyclCMake.exe' (Win32): Loaded 'C:\Windows\System32\DriverStore\FileRepository\nvami.inf_amd64_e1c005a6713cc50a\nvdlistx.dll'.
'SyclCMake.exe' (Win32): Loaded 'C:\Windows\System32\version.dll'.
'SyclCMake.exe' (Win32): Unloaded 'C:\Windows\System32\version.dll'
'SyclCMake.exe' (Win32): Unloaded 'C:\Windows\System32\DriverStore\FileRepository\nvami.inf_amd64_e1c005a6713cc50a\nvdlistx.dll'
'SyclCMake.exe' (Win32): Loaded 'C:\Windows\System32\DriverStore\FileRepository\nvami.inf_amd64_e1c005a6713cc50a\nvopencl64.dll'.
'SyclCMake.exe' (Win32): Loaded 'C:\Windows\System32\version.dll'.
'SyclCMake.exe' (Win32): Loaded 'C:\Windows\System32\msasn1.dll'.
'SyclCMake.exe' (Win32): Loaded 'C:\Windows\System32\cryptnet.dll'.
'SyclCMake.exe' (Win32): Loaded 'C:\Windows\System32\crypt32.dll'.
'SyclCMake.exe' (Win32): Loaded 'C:\Windows\System32\cryptbase.dll'.
'SyclCMake.exe' (Win32): Loaded 'C:\Windows\System32\dwmapi.dll'.
'SyclCMake.exe' (Win32): Loaded 'C:\Windows\System32\uxtheme.dll'.
'SyclCMake.exe' (Win32): Unloaded 'C:\Windows\System32\dwmapi.dll'
'SyclCMake.exe' (Win32): Loaded 'C:\Windows\System32\nvapi64.dll'.
'SyclCMake.exe' (Win32): Loaded 'C:\Windows\System32\setupapi.dll'.
'SyclCMake.exe' (Win32): Loaded 'C:\Windows\System32\bcrypt.dll'.
'SyclCMake.exe' (Win32): Loaded 'C:\Windows\System32\shell32.dll'.
'SyclCMake.exe' (Win32): Loaded 'C:\Windows\System32\DriverStore\FileRepository\u0365191.inf_amd64_e45cfa7df4bc12dc\B364938\amdocl64.dll'.
'SyclCMake.exe' (Win32): Loaded 'C:\Windows\System32\opengl32.dll'.
'SyclCMake.exe' (Win32): Loaded 'C:\Windows\System32\glu32.dll'.
'SyclCMake.exe' (Win32): Loaded 'C:\Windows\System32\DriverStore\FileRepository\u0365191.inf_amd64_e45cfa7df4bc12dc\B364938\atiadlxx.dll'.
'SyclCMake.exe' (Win32): Loaded 'C:\Windows\System32\psapi.dll'.
'SyclCMake.exe' (Win32): Loaded 'C:\Windows\System32\propsys.dll'.
'SyclCMake.exe' (Win32): Loaded 'C:\Windows\System32\devobj.dll'.
'SyclCMake.exe' (Win32): Loaded 'C:\Windows\System32\wintrust.dll'.
'SyclCMake.exe' (Win32): Loaded 'C:\Windows\System32\winmm.dll'.
'SyclCMake.exe' (Win32): Loaded 'C:\Windows\System32\dwmapi.dll'.
'SyclCMake.exe' (Win32): Loaded 'C:\Windows\System32\DriverStore\FileRepository\u0365191.inf_amd64_e45cfa7df4bc12dc\B364938\atig6txx.dll'.
'SyclCMake.exe' (Win32): Loaded 'C:\Windows\System32\DriverStore\FileRepository\u0365191.inf_amd64_e45cfa7df4bc12dc\B364938\amdocl12cl64.dll'.
'SyclCMake.exe' (Win32): Loaded 'C:\Windows\System32\dbghelp.dll'.
'SyclCMake.exe' (Win32): Loaded 'C:\Windows\System32\DriverStore\FileRepository\u0365191.inf_amd64_e45cfa7df4bc12dc\B364938\amd_comgr.dll'. Module was built without symbols.
'SyclCMake.exe' (Win32): Loaded 'C:\Windows\System32\oleaut32.dll'.
'SyclCMake.exe' (Win32): Unloaded 'C:\Windows\System32\wldp.dll'
'SyclCMake.exe' (Win32): Unloaded 'C:\Windows\System32\SHCore.dll'
'SyclCMake.exe' (Win32): Unloaded 'C:\Windows\System32\windows.storage.dll'
'SyclCMake.exe' (Win32): Unloaded 'C:\Windows\System32\dxgi.dll'
Exception thrown at 0x00007FFB44024ED9 in SyclCMake.exe: Microsoft C++ exception: std::bad_array_new_length at memory location 0x000000A5E2CFF600.
Unhandled exception at 0x00007FFB44024ED9 in SyclCMake.exe: Microsoft C++ exception: std::bad_array_new_length at memory location 0x000000A5E2CFF600.
调试器在 SyclCMake.cpp (cl::sycl::queue queue(device_selector);
) 的第 13 行处停止
编辑 SyclCMake.cpp(也在上面链接):
#include <iostream>
#include <CL/sycl.hpp>
class vector_addition;
int main(int,char**) {
cl::sycl::float4 a = { 1.0,2.0,3.0,4.0 };
cl::sycl::float4 b = { 4.0,1.0 };
cl::sycl::float4 c = { 0.0,0.0,0.0 };
cl::sycl::default_selector device_selector;
cl::sycl::queue queue(device_selector);
std::cout << "Running on "
<< queue.get_device().get_info<cl::sycl::info::device::name>()
<< "\n";
{
cl::sycl::buffer<cl::sycl::float4,1> a_sycl(&a,cl::sycl::range<1>(1));
cl::sycl::buffer<cl::sycl::float4,1> b_sycl(&b,1> c_sycl(&c,cl::sycl::range<1>(1));
queue.submit([&] (cl::sycl::handler& cgh) {
auto a_acc = a_sycl.get_access<cl::sycl::access::mode::read>(cgh);
auto b_acc = b_sycl.get_access<cl::sycl::access::mode::read>(cgh);
auto c_acc = c_sycl.get_access<cl::sycl::access::mode::discard_write>(cgh);
cgh.single_task<class vector_addition>([=] () {
c_acc[0] = a_acc[0] + b_acc[0];
});
});
}
std::cout << " A { " << a.x() << "," << a.y() << "," << a.z() << "," << a.w() << " }\n"
<< "+ B { " << b.x() << "," << b.y() << "," << b.z() << "," << b.w() << " }\n"
<< "------------------\n"
<< "= C { " << c.x() << "," << c.y() << "," << c.z() << "," << c.w() << " }"
<< std::endl;
return 0;
}
编辑 2
我刚刚尝试使用带有调试信息的 clang 在发布模式下运行它,但我遇到了另一个异常。这次在第 22 行的 cl::sycl::invalid_object_error
函数中抛出了一个 queue.submit
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。