прерывание вызывается после создания экземпляра ‘cl :: sycl :: detail :: exception_implementation & lt; (cl :: sycl :: detail :: exception_types) 9 & gt;’

Я новичок в SYCL / OpenCL / GPGPU. Я пытаюсь создать и запустить пример кода программа постоянного сложения,

#include <iostream>
#include <array>
#include <algorithm>

#include <CL/sycl.hpp>

namespace sycl = cl::sycl;

//<<Define ConstantAdder>>
template<typename T, typename Acc, size_t N>
class ConstantAdder {
public:
ConstantAdder(Acc accessor, T val)
: accessor(accessor)
, val(val) {}

void operator() () {
for (size_t i = 0; i < N; i++) {
accessor[i] += val;
}
}

private:
Acc accessor;
const T val;
};

int main(int, char**) {
std::array<int, 4> vals = {{ 1, 2, 3, 4 }};

sycl::queue queue(sycl::cpu_selector{});
std::cout << "Running on "<< queue.get_device().get_info<sycl::info::device::name>()
<< "\n";

{
sycl::buffer<int, 1> buf(vals.data(), sycl::range<1>(4));
queue.submit([&] (sycl::handler& cgh) {
auto acc = buf.get_access<sycl::access::mode::read_write>(cgh);

cgh.single_task(ConstantAdder<int, decltype(acc), 4>(acc, 1));
} );
}

std::for_each(vals.begin(), vals.end(), [] (int i) { std::cout << i << " "; } );
std::cout << std::endl;

return 0;
}

Я строю этот код, используя

$ g ++ constantAdder_backup.cpp -g -std = c ++ 11 -o constantAdder -I
/ usr / local / computecpp / include -I / usr / include / -L
/ usr / local / computecpp / lib -lComputeCpp -L / usr / lib / x86_64-linux-gnu
-lOpenCL

и получить ошибку

$ ./constantAdder
./constantAdder: /usr/local/cuda-8.0/lib64/libOpenCL.so.1: no version information available (required by /usr/local/computecpp/lib/libComputeCpp.so)
./constantAdder: /usr/local/cuda-8.0/lib64/libOpenCL.so.1: no version information available (required by /usr/local/computecpp/lib/libComputeCpp.so)\
./constantAdder: /usr/local/cuda-8.0/lib64/libOpenCL.so.1: no version information available (required by /usr/local/computecpp/lib/libComputeCpp.so)
Running on Intel(R) Core(TM) i7-4790 CPU @ 3.60GHz
terminate called after throwing an instance of 'cl::sycl::detail::exception_implementation<(cl::sycl::detail::exception_types)9, cl::sycl::detail::exception_implementation<(cl::sycl::detail::exception_types)6, cl::sycl::exception> >'
Aborted (core dumped)

Что такое

завершить вызов после броска экземпляра
«Сл :: sycl :: подробнее :: exception_implementation<(кл :: sycl :: подробно :: exception_types) 9,
сл :: sycl :: подробнее :: exception_implementation<(кл :: sycl :: подробно :: exception_types) 6,
cl :: sycl :: exception>> ‘Прервано (ядро сброшено)
ошибка значит? Как я могу это исправить? Пожалуйста, помогите мне.

Постскриптум
Системное оборудование

$ /usr/local/computecpp/bin/computecpp_info
/usr/local/computecpp/bin/computecpp_info: /usr/local/cuda-8.0/lib64/libOpenCL.so.1: no version information available (required by /usr/local/computecpp/bin/computecpp_info)
/usr/local/computecpp/bin/computecpp_info: /usr/local/cuda-8.0/lib64/libOpenCL.so.1: no version information available (required by /usr/local/computecpp/bin/computecpp_info)
********************************************************************************

ComputeCpp Info (CE 0.7.0)

********************************************************************************

Toolchain information:

GLIBC version: 2.19
GLIBCXX: 20150426
This version of libstdc++ is supported.

********************************************************************************Device Info:

Discovered 3 devices matching:
platform    : <any>
device type : <any>

--------------------------------------------------------------------------------
Device 0:

Device is supported                     : NO - Device does not support SPIR
CL_DEVICE_NAME                          : GeForce GTX 750 Ti
CL_DEVICE_VENDOR                        : NVIDIA Corporation
CL_DRIVER_VERSION                       : 384.111
CL_DEVICE_TYPE                          : CL_DEVICE_TYPE_GPU
--------------------------------------------------------------------------------
Device 1:

Device is supported                     : UNTESTED - Device not tested on this OS
CL_DEVICE_NAME                          : Intel(R) HD Graphics
CL_DEVICE_VENDOR                        : Intel(R) Corporation
CL_DRIVER_VERSION                       : r5.0.63503
CL_DEVICE_TYPE                          : CL_DEVICE_TYPE_GPU
--------------------------------------------------------------------------------
Device 2:

Device is supported                     : YES - Tested internally by Codeplay Software Ltd.
CL_DEVICE_NAME                          : Intel(R) Core(TM) i7-4790 CPU @ 3.60GHz
CL_DEVICE_VENDOR                        : Intel(R) Corporation
CL_DRIVER_VERSION                       : 1.2.0.475
CL_DEVICE_TYPE                          : CL_DEVICE_TYPE_CPU

If you encounter problems when using any of these OpenCL devices, please consult
this website for known issues:
https://computecpp.codeplay.com/releases/v0.7.0/platform-support-notes

********************************************************************************

Постскриптум
Я обновил код, чтобы узнать устройство, на котором выполняется код.

фрагмент модификации

sycl::queue queue(sycl::cpu_selector{});

std::cout << "Running on "<< queue.get_device().get_info<sycl::info::device::name>()
<< "\n";

Сейчас беру cpu::selector (не аппаратное обеспечение NVIDIA), а печать устройства. Это ясно показывает, что он работает на Intel(R) Core(TM) i7-4790 CPU @ 3.60GHz, Выход из

couputecpp_info

шоу

Device is supported                     : YES - Tested internally by Codeplay Software Ltd

Но все же, он показывает ту же ошибку, что и

завершить вызов после броска экземпляра
«Сл :: sycl :: подробнее :: exception_implementation<(кл :: sycl :: подробно :: exception_types) 9,
сл :: sycl :: подробнее :: exception_implementation<(кл :: sycl :: подробно :: exception_types) 6,
cl :: sycl :: exception>> ‘
Прервано (ядро сброшено)

1

Решение

Существует исключение типа cl::sycl::detail::exception_implementation<(cl::sycl::detail::exception_types)9, cl::sycl::detail::exception_implementation<(cl::sycl::detail::exception_types)6, cl::sycl::exception> > быть брошенным и не быть пойманным.

Чтобы увидеть подробную информацию об исключении, либо добавьте try try в main, либо запустите код в отладчике. например.:

int main(int, char**) {
try
{
/*your code here*/
}
catch (std::exception& ex)
{
std::cerr << "exception caught: " << ex.what() << std::endl;
return 1;
}
return 0;
}
2

Другие решения

Вы не используете компилятор SYCL при сборке кода. Следующая команда может быть использована для этого.

/bin/compute++ constantAdder_backup.cpp -g -std=c++11 -o constantAdder -I /usr/local/computecpp/include -I/usr/include/ -L /usr/local/computecpp/lib -lComputeCpp -L /usr/lib/x86_64-linux-gnu -lOpenCL

Вам также необходимо убедиться, что LD_LIBRARY_PATH настроен так, чтобы указывать на папку lib вашей установки ComputeCpp при выполнении вывода.

0

Я вижу ту же ошибку при установке cuda 9.2, попробуйте удалить cuda и снова запустить ваш код

0
По вопросам рекламы [email protected]