微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

构造 sycl::queue

如何解决构造 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 举报,一经查实,本站将立刻删除。