前提・実現したいこと
【https://tech.io/playgrounds/48226/introduction-to-sycl/hello-worldにあるサンプルコードを実行し環境構築が完了したことを確認したい。】
Surfacelaptop3 13インチに
VirtualBoxを入れ
Ubuntu18.04を入れ
POCLのOpenCLを入れ
ComputeCppのSYCL環境を構築しようとしています。
https://developer.codeplay.com/products/computecpp/ce/guides/getting-started#bottom
のチュートリアルを参考に環境構築を行いました。
https://tech.io/playgrounds/48226/introduction-to-sycl/hello-world
にあるサンプルコードを試しにビルドしてみたところどうやらビルドできたようですが
実行してみると後述するエラーが出て実行できません。実行しSYCLの環境構築が完了したことを確認したい。
発生している問題・エラーメッセージ
virtualbox: /home/tokyo/ComputeCpp-CE-1.3.0-Ubuntu-16.04-x86_64/bin/compute++ -std=c++11 -I/home/tokyo/ComputeCpp-CE-1.3.0-Ubuntu-16.04-x86_64/include/ -L/home/tokyo/ComputeCpp-CE-1.3.0-Ubuntu-16.04-x86_64/lib -lComputeCpp -I/home/tokyo/computecpp-sdk-master/include -L/home/tokyo/pocl-1.5/build/lib/CL -lpocl hello_world.cpp -o hello_world virtualbox:~/SYCL sample code$ ./hello_world Running on pthread-Intel(R) Core(TM) i5-1035G7 CPU @ 1.20GHz terminate called after throwing an instance of 'cl::sycl::invalid_object_error' Aborted (core dumped)
該当のサンプルコード
C++
1#include <iostream> 2#include <CL/sycl.hpp> 3 4class vector_addition; 5 6int main(int, char**) { 7 cl::sycl::float4 a = { 1.0, 2.0, 3.0, 4.0 }; 8 cl::sycl::float4 b = { 4.0, 3.0, 2.0, 1.0 }; 9 cl::sycl::float4 c = { 0.0, 0.0, 0.0, 0.0 }; 10 11 cl::sycl::default_selector device_selector; 12 13 cl::sycl::queue queue(device_selector); 14 std::cout << "Running on " 15 << queue.get_device().get_info<cl::sycl::info::device::name>() 16 << "\n"; 17 { 18 cl::sycl::buffer<cl::sycl::float4, 1> a_sycl(&a, cl::sycl::range<1>(1)); 19 cl::sycl::buffer<cl::sycl::float4, 1> b_sycl(&b, cl::sycl::range<1>(1)); 20 cl::sycl::buffer<cl::sycl::float4, 1> c_sycl(&c, cl::sycl::range<1>(1)); 21 22 queue.submit([&] (cl::sycl::handler& cgh) { 23 auto a_acc = a_sycl.get_access<cl::sycl::access::mode::read>(cgh); 24 auto b_acc = b_sycl.get_access<cl::sycl::access::mode::read>(cgh); 25 auto c_acc = c_sycl.get_access<cl::sycl::access::mode::discard_write>(cgh); 26 27 cgh.single_task<class vector_addition>([=] () { 28 c_acc[0] = a_acc[0] + b_acc[0]; 29 }); 30 }); 31 } 32 std::cout << " A { " << a.x() << ", " << a.y() << ", " << a.z() << ", " << a.w() << " }\n" 33 << "+ B { " << b.x() << ", " << b.y() << ", " << b.z() << ", " << b.w() << " }\n" 34 << "------------------\n" 35 << "= C { " << c.x() << ", " << c.y() << ", " << c.z() << ", " << c.w() << " }" 36 << std::endl; 37 38 return 0; 39}
試したこと
https://proc-cpuinfo.fixstars.com/2017/08/sycl/
に記載があるどちらでも動くサンプルコードを同様にビルド、実行したところちゃんと動いているように見えます。
また、下記サイトに
If the size does not match, a cl::sycl::invalid_object_error exception will be thrown.というような記述がありました。
https://codeplay.com/portal/03-09-18-buffer-reinterpret-viewing-data-from-a-different-perspective
またこのSYCLのチュートリアルサイトのSetup Device Storageの欄にも
The size argument is a range object, which has to have the same number of dimensions as the buffer and is initialized with the number of elements in each dimension.
と記載がありました。
https://tech.io/playgrounds/48226/introduction-to-sycl/hello-world
このあたりが関係するのではと考えましたがよくわかりません。
//上記『どちらでも動くサンプルコード』をビルドしたコマンドと実行結果 tokyo@ryota-virtualbox:~/SYCL sample code$ /home/tokyo/ComputeCpp-CE-1.3.0-Ubuntu-16.04-x86_64/bin/compute++ -std=c++11 -I/home/tokyo/ComputeCpp-CE-1.3.0-Ubuntu-16.04-x86_64/include/ -L/home/tokyo/ComputeCpp-CE-1.3.0-Ubuntu-16.04-x86_64/lib -lComputeCpp -I/home/tokyo/computecpp-sdk-master/include -L/home/tokyo/pocl-1.5/build/lib/CL -lpocl whichever.cpp -o whichever tokyo@ryota-virtualbox:~/SYCL sample code$ ls hello_world hello_world.cpp whichever whichever.cpp tokyo@ryota-virtualbox:~/SYCL sample code$ ./whichever 0 1 2 3 //省略 98 99
補足情報(FW/ツールのバージョンなど)
//clinfoの結果 tokyo@ryota-virtualbox:~/SYCL sample code$ clinfo Number of platforms 1 Platform Name Portable Computing Language Platform Vendor The pocl project Platform Version OpenCL 1.2 pocl 1.5, RelWithDebInfo, LLVM 6.0.0, RELOC, SPIR, SLEEF, POCL_DEBUG Platform Profile FULL_PROFILE Platform Extensions cl_khr_icd Platform Extensions function suffix POCL Platform Name Portable Computing Language Number of devices 1 Device Name pthread-Intel(R) Core(TM) i5-1035G7 CPU @ 1.20GHz Device Vendor GenuineIntel Device Vendor ID 0x6c636f70 Device Version OpenCL 1.2 pocl HSTR: pthread-x86_64-pc-linux-gnu-skylake Driver Version 1.5 Device OpenCL C Version OpenCL C 1.2 pocl Device Type CPU Device Profile FULL_PROFILE Device Available Yes Compiler Available Yes Linker Available Yes Max compute units 1 Max clock frequency 1497MHz Device Partition (core) Max number of sub-devices 1 Supported partition types equally, by counts Max work item dimensions 3 Max work item sizes 4096x4096x4096 Max work group size 4096 Preferred work group size multiple 8 //以下文字数制限のため省略
あなたの回答
tips
プレビュー