- Marquer comme nouveau
- Marquer
- S'abonner
- Sourdine
- S'abonner au fil RSS
- Surligner
- Imprimer
- Signaler un contenu inapproprié
It should be a stupid problem. Can any one please tell me what was happened .
The following is the problem code:
#include <sycl/sycl.hpp>
#include <vector>
#include <iostream>
#include <string>
#if FPGA_HARDWARE || FPGA_EMULATOR || FPGA_SIMULATOR
#include <sycl/ext/intel/fpga_extensions.hpp>
#endif
void exception_handler(sycl::exception_list exceptions) {
for (std::exception_ptr const& e : exceptions) {
try {
std::rethrow_exception(e);
}
catch (sycl::exception const& e) {
std::wcout << L"Caught asynchronous SYCL exception: ";
std::cout << e.what() << std::endl;
}
}
}
int wmain(int argc, char* argv[]) {
constexpr size_t dataSize = 10000;
std::vector<int> hostData;
hostData.resize(dataSize);
sycl::queue commandQueue(sycl::gpu_selector_v);
std::cout << "run in device: " << commandQueue.get_device().get_info<sycl::info::device::name>() << std::endl;
{
sycl::range<1> dataRange(dataSize);
sycl::buffer<int, 1> dataBuffer(hostData.data(), hostData.size());
commandQueue.submit([&](sycl::handler& handle) {
sycl::accessor<int, 1, sycl::access::mode::write, sycl::access::target::device> dataAccesor(dataBuffer, handle, sycl::write_only, sycl::no_init);
handle.parallel_for(dataRange, [=](auto index) {
dataAccesor[index] = (double)index;
});
});
}
return 0;
}
- Marquer comme nouveau
- Marquer
- S'abonner
- Sourdine
- S'abonner au fil RSS
- Surligner
- Imprimer
- Signaler un contenu inapproprié
Thanks all,
I name the Kernal and now it worked without conclude to a function. That final code is:
#include <sycl/sycl.hpp>
#include <vector>
#include <iostream>
#include <string>
#if FPGA_HARDWARE || FPGA_EMULATOR || FPGA_SIMULATOR
#include <sycl/ext/intel/fpga_extensions.hpp>
#endif
constexpr int dataSize = 1000;
void exception_handler(sycl::exception_list exceptions) {
for (std::exception_ptr const& e : exceptions) {
try {
std::rethrow_exception(e);
}
catch (sycl::exception const& e) {
std::wcout << L"Caught asynchronous SYCL exception: ";
std::cout << e.what() << std::endl;
}
}
}
int wmain(int argc, wchar_t* argv[]) {
auto selector = sycl::default_selector_v;
std::vector<float> dataSet_1;
dataSet_1.resize(dataSize);
try {
sycl::queue commandQueue(sycl::gpu_selector_v, exception_handler);
std::cout << "Running on device: "
<< commandQueue.get_device().get_info<sycl::info::device::name>() << std::endl;
std::cout << "Vector size: " << dataSet_1.size() << std::endl;
{
sycl::range<1> num_items{ dataSet_1.size() };
sycl::buffer<float, 1> sum_buf(dataSet_1.data(), num_items);
commandQueue.submit([&](sycl::handler& h) {
sycl::accessor<float, 1, sycl::access::mode::write> accessBuffer(sum_buf, h, sycl::write_only, sycl::no_init);
h.parallel_for<class MyKernal>(num_items, [=](sycl::id<1> i) {
accessBuffer[i] = 0.01F * (float)i;
});
});
}
// Wait until compute tasks on GPU done
commandQueue.wait();
sycl::buffer<float> bufferA(dataSet_1);
sycl::host_accessor readAccessor(bufferA, sycl::read_only);
for (auto item : readAccessor) {
std::cout << item << std::endl;
}
}
catch (sycl::exception const& e) {
std::cout << "An exception is caught: " << e.what() <<std::endl;
std::terminate();
}
return 0;
}
The point is I must name the kernal.
Lien copié
- Marquer comme nouveau
- Marquer
- S'abonner
- Sourdine
- S'abonner au fil RSS
- Surligner
- Imprimer
- Signaler un contenu inapproprié
Hello! A good first thing to check is: do you have a supported GPU? Because you're specifically requesting a GPU queue...
sycl::queue commandQueue(sycl::gpu_selector_v);
... if you don't have a GPU you'll get an exception when you try to use it.
If you aren't sure, can you please include your output if you run sycl-ls?
A few other helpful things to know would be: How are you compiling your program? What OS and what compiler version are you using? Is there any other information included in the abort() message?
- Marquer comme nouveau
- Marquer
- S'abonner
- Sourdine
- S'abonner au fil RSS
- Surligner
- Imprimer
- Signaler un contenu inapproprié
Thank @Ben_A_Intel for quick response.
I have a GPU, it is the result of sycl-ls
C:\Program Files (x86)\Intel\oneAPI>sycl-ls
[opencl:acc:0] Intel(R) FPGA Emulation Platform for OpenCL(TM), Intel(R) FPGA Emulation Device 1.2 [2023.16.6.0.28_042959]
[opencl:cpu:1] Intel(R) OpenCL, Intel(R) Core(TM) i7-10700K CPU @ 3.80GHz 3.0 [2023.16.6.0.28_042959]
[opencl:gpu:2] Intel(R) OpenCL Graphics, Intel(R) Arc(TM) A770 Graphics 3.0 [31.0.101.4669]
[ext_oneapi_level_zero:gpu:0] Intel(R) Level-Zero, Intel(R) Arc(TM) A770 Graphics 1.3 [1.3.26771]
C:\Program Files (x86)\Intel\oneAPI>
I use visual studio 2022 & DPC++ in windows.
The abort() occurs by memory access exception:
Unhandled exception at 0x00007FF8DAB24C3C in SyclRun.exe: Microsoft C++ exception: sycl::_V1::runtime_error at memory location 0x00000094D2739570.
if I comment out the "handle.parallel_for()" statement:
{
sycl::range<1> dataRange(dataSize);
sycl::buffer<int, 1> dataBuffer(hostData.data(), hostData.size());
commandQueue.submit([&](sycl::handler& handle) {
sycl::accessor<int, 1, sycl::access::mode::write, sycl::access::target::device> dataAccesor(dataBuffer, handle, sycl::write_only, sycl::no_init);
//handle.parallel_for(dataRange, [=](auto index) {
// dataAccesor[index] = index;
//});
});
}
the program exit normally.
- Marquer comme nouveau
- Marquer
- S'abonner
- Sourdine
- S'abonner au fil RSS
- Surligner
- Imprimer
- Signaler un contenu inapproprié
I did the following 2 changes and it works:
1.) use float instead of double in Kenerl function
** It seems Intel A770 GPU don't support FP64
2.) conclude the submit call to a seperate function.
** If I don't do it, it failed with "No kernel named was found -46 (PI_ERROR_INVALID_KERNEL_NAME)"
The worked code is:
#include <sycl/sycl.hpp>
#include <vector>
#include <iostream>
#include <string>
#if FPGA_HARDWARE || FPGA_EMULATOR || FPGA_SIMULATOR
#include <sycl/ext/intel/fpga_extensions.hpp>
#endif
constexpr int dataSize = 1000;
void vectorInitialize(sycl::queue& commandQueue, std::vector<float>& dataSet) {
sycl::range<1> num_items{ dataSet.size() };
sycl::buffer<float, 1> sum_buf(dataSet.data(), num_items);
commandQueue.submit([&](sycl::handler& h) {
sycl::accessor<float, 1, sycl::access::mode::write> accessBuffer(sum_buf, h, sycl::write_only, sycl::no_init);
h.parallel_for(num_items, [=](sycl::id<1> i) {
accessBuffer[i] = 0.01F * (float)i;
});
});
}
void exception_handler(sycl::exception_list exceptions) {
for (std::exception_ptr const& e : exceptions) {
try {
std::rethrow_exception(e);
}
catch (sycl::exception const& e) {
std::wcout << L"Caught asynchronous SYCL exception: ";
std::cout << e.what() << std::endl;
}
}
}
int wmain(int argc, wchar_t* argv[]) {
auto selector = sycl::default_selector_v;
std::vector<float> dataSet_1;
dataSet_1.resize(dataSize);
try {
sycl::queue commandQueue(sycl::gpu_selector_v, exception_handler);
std::cout << "Running on device: "
<< commandQueue.get_device().get_info<sycl::info::device::name>() << std::endl;
std::cout << "Vector size: " << dataSet_1.size() << std::endl;
vectorInitialize(commandQueue, dataSet_1);
// Wait until compute tasks on GPU done
commandQueue.wait();
sycl::buffer<float> bufferA(dataSet_1);
sycl::host_accessor readAccessor(bufferA, sycl::read_only);
for (auto item : readAccessor) {
std::cout << item << std::endl;
}
}
catch (sycl::exception const& e) {
std::cout << "An exception is caught: " << e.what() <<std::endl;
std::terminate();
}
return 0;
}
Thanks for @Ben_A_Intel for your help.
Now the new question is why I must conclude the vectorInitialize to a function.
- Marquer comme nouveau
- Marquer
- S'abonner
- Sourdine
- S'abonner au fil RSS
- Surligner
- Imprimer
- Signaler un contenu inapproprié
Thanks all,
I name the Kernal and now it worked without conclude to a function. That final code is:
#include <sycl/sycl.hpp>
#include <vector>
#include <iostream>
#include <string>
#if FPGA_HARDWARE || FPGA_EMULATOR || FPGA_SIMULATOR
#include <sycl/ext/intel/fpga_extensions.hpp>
#endif
constexpr int dataSize = 1000;
void exception_handler(sycl::exception_list exceptions) {
for (std::exception_ptr const& e : exceptions) {
try {
std::rethrow_exception(e);
}
catch (sycl::exception const& e) {
std::wcout << L"Caught asynchronous SYCL exception: ";
std::cout << e.what() << std::endl;
}
}
}
int wmain(int argc, wchar_t* argv[]) {
auto selector = sycl::default_selector_v;
std::vector<float> dataSet_1;
dataSet_1.resize(dataSize);
try {
sycl::queue commandQueue(sycl::gpu_selector_v, exception_handler);
std::cout << "Running on device: "
<< commandQueue.get_device().get_info<sycl::info::device::name>() << std::endl;
std::cout << "Vector size: " << dataSet_1.size() << std::endl;
{
sycl::range<1> num_items{ dataSet_1.size() };
sycl::buffer<float, 1> sum_buf(dataSet_1.data(), num_items);
commandQueue.submit([&](sycl::handler& h) {
sycl::accessor<float, 1, sycl::access::mode::write> accessBuffer(sum_buf, h, sycl::write_only, sycl::no_init);
h.parallel_for<class MyKernal>(num_items, [=](sycl::id<1> i) {
accessBuffer[i] = 0.01F * (float)i;
});
});
}
// Wait until compute tasks on GPU done
commandQueue.wait();
sycl::buffer<float> bufferA(dataSet_1);
sycl::host_accessor readAccessor(bufferA, sycl::read_only);
for (auto item : readAccessor) {
std::cout << item << std::endl;
}
}
catch (sycl::exception const& e) {
std::cout << "An exception is caught: " << e.what() <<std::endl;
std::terminate();
}
return 0;
}
The point is I must name the kernal.
- Marquer comme nouveau
- Marquer
- S'abonner
- Sourdine
- S'abonner au fil RSS
- Surligner
- Imprimer
- Signaler un contenu inapproprié
Hi,
We can see that your issue got resolved. Could you please confirm whether we can close this thread from our end?
Thanks and Regards,
Pendyala Sesha Srinivas
- Marquer comme nouveau
- Marquer
- S'abonner
- Sourdine
- S'abonner au fil RSS
- Surligner
- Imprimer
- Signaler un contenu inapproprié
- Marquer comme nouveau
- Marquer
- S'abonner
- Sourdine
- S'abonner au fil RSS
- Surligner
- Imprimer
- Signaler un contenu inapproprié
Hi,
Thanks for the confirmation. If you need any additional information, please post a new question as this thread will no longer be monitored by Intel.
Thanks and Regards,
Pendyala Sesha Srinivas

- S'abonner au fil RSS
- Marquer le sujet comme nouveau
- Marquer le sujet comme lu
- Placer ce Sujet en tête de liste pour l'utilisateur actuel
- Marquer
- S'abonner
- Page imprimable