Error:: SYCL объекты все еще живы, пока среда выполнения закрыта
Я пытаюсь реализовать простой пример сложения векторов на SYCL с Visual Studio. Он успешно строится, но при выполнении он дает мне объекты SYCL, все еще живые, пока время выполнения закрывается., Что это значит и как я могу это решить, ниже приведен пример кода. заранее спасибо
#include <CL/sycl.hpp>
using namespace cl::sycl;
#include <vector>
using std::vector;
vector<int> add_vectors(const vector<int>& a, const vector<int>& b);
int main() {
vector<int> a{ 1, 2, 3, 4, 5 };
vector<int> b{ 6, 7, 8, 9, 10 };
auto c = add_vectors(a, b);
return 0;
}
vector<int> add_vectors(const vector<int>& a, const vector<int>& b) {
const auto N = a.size();
buffer<int, 1> bufA(a.data(), range<1>{N});
buffer<int, 1> bufB(b.data(), range<1>{N});
vector<int> c(N);
buffer<int, 1> bufC(c.data(), range<1>{N});
queue myQueue;
myQueue.submit([&](handler& cgh) {
auto A = bufA.get_access<access::mode::read>(cgh);
auto B = bufB.get_access<access::mode::read>(cgh);
auto C = bufC.get_access<access::mode::write>(cgh);
cgh.parallel_for<class add>(
range<1>{N},
[=](id<1> i) {
C[i] = A[i] + B[i];
}
);
});
return c;
}
1 ответ
Можно написать код SYCL, который включает обработку ошибок и исключений. На веб-сайте разработчика ComputeCpp есть руководство. Кроме того, использование gdb для сбора обратной трассировки может дать некоторые подсказки о том, где что-то идет не так.
В этом случае код выполняется для нас успешно, поэтому проблема, скорее всего, в драйверах OpenCL.