oneapi-src / oneapi-src/oneAPI-samples

catch exception in main function

Đang mở
#2,292 1 bình luận 0 reaction 0 người được giao Xem trên GitHub

Chưa có ai nhận issue này.

question
Ngôn ngữ chính
C++
Star
1.2k
Fork
745
Chỉ số merge pull request
Không có pull request nào được merge trong 30 ngày

Mô tả

Many samples don't catch SYCL exceptions, e.g. https://github.com/oneapi-src/oneAPI-samples/blob/9fa0a0f79902fed87190a21ba64e37510ee3bc96/DirectProgramming/C%2B%2BSYCL/ParallelPatterns/histogram/src/main.cpp#L106-L121
For instance, when an OpenCL backend API clCreateKernel fails with error INVALID_PROGRAM_EXECUTABLE, current backtrace isn't intuitive for users:

Exception Code: 0xE06D7363
0x00007FFF7966F19C, C:\WINDOWS\System32\KERNELBASE.dll(0x00007FFF79630000) + 0x3F19C byte(s), RaiseException() + 0x6C byte(s)
0x00007FFF4DAF3859, C:\WINDOWS\SYSTEM32\MSVCP140D.dll(0x00007FFF4DAF0000) + 0x3859 byte(s), ?__ExceptionPtrRethrow@@YAXPEBX@Z() + 0x1B9 byte(s)
0x00007FFF4A90ED1B, \bin\sycl8d.dll(0x00007FFF4A900000) + 0xED1B byte(s), ?make_event@level_zero@oneapi@ext@_V1@sycl@@YA?AVevent@45@AEBVcontext@45@_K_N@Z() + 0x8EB byte(s)
0x00007FFF4AB74021, \bin\sycl8d.dll(0x00007FFF4A900000) + 0x274021 byte(s), ?flush@stream_impl@detail@_V1@sycl@@QEAAXXZ() + 0x4E941 byte(s)
0x00007FFF5B8C1060, C:\WINDOWS\SYSTEM32\VCRUNTIME140D.dll(0x00007FFF5B8C0000) + 0x1060 byte(s)
0x00007FFF5B8C7CAA, C:\WINDOWS\SYSTEM32\VCRUNTIME140D.dll(0x00007FFF5B8C0000) + 0x7CAA byte(s), _is_exception_typeof() + 0x3EDA byte(s)
0x00007FFF7BB13C06, C:\WINDOWS\SYSTEM32\ntdll.dll(0x00007FFF7BA70000) + 0xA3C06 byte(s), RtlCaptureContext2() + 0x4A6 byte(s)
0x00007FFF4AB73C11, \bin\sycl8d.dll(0x00007FFF4A900000) + 0x273C11 byte(s), ?flush@stream_impl@detail@_V1@sycl@@QEAAXXZ() + 0x4E531 byte(s)
0x00007FFF4AB724D5, \bin\sycl8d.dll(0x00007FFF4A900000) + 0x2724D5 byte(s), ?flush@stream_impl@detail@_V1@sycl@@QEAAXXZ() + 0x4CDF5 byte(s)
0x00007FFF4ABE6B10, \bin\sycl8d.dll(0x00007FFF4A900000) + 0x2E6B10 byte(s), ?finalize@handler@_V1@sycl@@AEAA?AVevent@23@XZ() + 0x3A60 byte(s)
0x00007FFF4AB0F6DE, \bin\sycl8d.dll(0x00007FFF4A900000) + 0x20F6DE byte(s), __sycl_unregister_lib() + 0x3331E byte(s)
0x00007FFF4AB0F377, \bin\sycl8d.dll(0x00007FFF4A900000) + 0x20F377 byte(s), __sycl_unregister_lib() + 0x32FB7 byte(s)
0x00007FFF4AB0F011, \bin\sycl8d.dll(0x00007FFF4A900000) + 0x20F011 byte(s), __sycl_unregister_lib() + 0x32C51 byte(s)
0x00007FFF4AC31EF7, \bin\sycl8d.dll(0x00007FFF4A900000) + 0x331EF7 byte(s), ?submit_impl@queue@_V1@sycl@@AEAA?AVevent@23@V?$function@$$A6AXAEAVhandler@_V1@sycl@@@Z@std@@AEBUcode_location@detail@23@@Z() + 0x37 byte(s)
0x00007FF6DE2227A3, \oneAPI-samples\DirectProgramming\C++SYCL\ParallelPatterns\histogram\histogram.run(0x00007FF6DE1A0000) + 0x827A3 byte(s), sycl::_V1::queue::submit<`lambda at \hetero\dpcpp\parallel_backend_sycl.h:232:46'>() + 0x83 byte(s), \include\sycl\queue.hpp, line 358 + 0x2F byte(s)
0x00007FF6DE2225F2, \oneAPI-samples\DirectProgramming\C++SYCL\ParallelPatterns\histogram\histogram.run(0x00007FF6DE1A0000) + 0x825F2 byte(s), oneapi::dpl::__par_backend_hetero::__parallel_for_submitter<oneapi::dpl::__par_backend_hetero::__internal::__optional_kernel_name<> >::operator()<oneapi::dpl::execution::__dpl::device_policy<oneapi::dpl::execution::__dpl::DefaultKernelName> &,oneapi::dpl::internal::custom_brick<oneapi::dpl::__internal::__pstl_less,const long long,1>,int,oneapi::dpl::__ranges::zip_view<oneapi::dpl::__ranges::all_view<unsigned long long,1024,2014,1>,oneapi::dpl::__ranges::guard_view<oneapi::dpl() + 0x102 byte(s), oneapi/dpl/pstl\hetero\..\hetero/dpcpp/parallel_backend_sycl.h, line 232 + 0x6C byte(s)
0x00007FF6DE2210DA, \oneAPI-samples\DirectProgramming\C++SYCL\ParallelPatterns\histogram\histogram.run(0x00007FF6DE1A0000) + 0x810DA byte(s), oneapi::dpl::__par_backend_hetero::__parallel_for<oneapi::dpl::execution::__dpl::device_policy<oneapi::dpl::execution::__dpl::DefaultKernelName> &,oneapi::dpl::internal::custom_brick<oneapi::dpl::__internal::__pstl_less,const long long,1>,int,0,oneapi::dpl::__ranges::zip_view<oneapi::dpl::__ranges::all_view<unsigned long long,1024,2014,1>,oneapi::dpl::__ranges::guard_view<oneapi::dpl::counting_iterator<int> >,oneapi::dpl::__ranges::all_view<unsigned long long,1026,2014,1> > &() + 0x6A byte(s), oneapi/dpl/pstl\hetero\..\hetero/dpcpp/parallel_backend_sycl.h, line 255 + 0x3C byte(s)
0x00007FF6DE22052E, \oneAPI-samples\DirectProgramming\C++SYCL\ParallelPatterns\histogram\histogram.run(0x00007FF6DE1A0000) + 0x8052E byte(s), oneapi::dpl::internal::upper_bound_impl<oneapi::dpl::execution::__dpl::device_policy<oneapi::dpl::execution::__dpl::DefaultKernelName> &,oneapi::dpl::__internal::sycl_iterator<1026,unsigned long long,sycl::_V1::detail::aligned_allocator<unsigned long long> >,oneapi::dpl::counting_iterator<int>,oneapi::dpl::__internal::sycl_iterator<1026,unsigned long long,sycl::_V1::detail::aligned_allocator<unsigned long long> >,oneapi::dpl::__internal::__pstl_less>() + 0x2EE byte(s), oneapi/dpl/internal/binary_search_impl.h, line 161 + 0x31 byte(s)
0x00007FF6DE1AF4B7, \oneAPI-samples\DirectProgramming\C++SYCL\ParallelPatterns\histogram\histogram.run(0x00007FF6DE1A0000) + 0xF4B7 byte(s), oneapi::dpl::upper_bound<oneapi::dpl::execution::__dpl::device_policy<oneapi::dpl::execution::__dpl::DefaultKernelName> &,oneapi::dpl::__internal::sycl_iterator<1026,unsigned long long,sycl::_V1::detail::aligned_allocator<unsigned long long> >,oneapi::dpl::counting_iterator<int>,oneapi::dpl::__internal::sycl_iterator<1026,unsigned long long,sycl::_V1::detail::aligned_allocator<unsigned long long> > >() + 0xF7 byte(s), oneapi/dpl/internal/binary_search_impl.h, line 228 + 0x82 byte(s)
0x00007FF6DE1ABDA9, \oneAPI-samples\DirectProgramming\C++SYCL\ParallelPatterns\histogram\histogram.run(0x00007FF6DE1A0000) + 0xBDA9 byte(s), dense_histogram() + 0x499 byte(s), \oneAPI-samples\DirectProgramming\C++SYCL\ParallelPatterns\histogram\src\main.cpp, line 41 + 0x18D byte(s)
0x00007FF6DE1AD226, \oneAPI-samples\DirectProgramming\C++SYCL\ParallelPatterns\histogram\histogram.run(0x00007FF6DE1A0000) + 0xD226 byte(s), main() + 0x106 byte(s), \oneAPI-samples\DirectProgramming\C++SYCL\ParallelPatterns\histogram\src\main.cpp, line 118 + 0x9 byte(s)
0x00007FF6DE25D509, \oneAPI-samples\DirectProgramming\C++SYCL\ParallelPatterns\histogram\histogram.run(0x00007FF6DE1A0000) + 0xBD509 byte(s), invoke_main() + 0x39 byte(s), \vctools\crt\vcstartup\src\startup\exe_common.inl, line 79 + 0x0 byte(s)
0x00007FF6DE25D3EE, \oneAPI-samples\DirectProgramming\C++SYCL\ParallelPatterns\histogram\histogram.run(0x00007FF6DE1A0000) + 0xBD3EE byte(s), __scrt_common_main_seh() + 0x12E byte(s), \vctools\crt\vcstartup\src\startup\exe_common.inl, line 288 + 0x5 byte(s)
0x00007FF6DE25D2AE, \oneAPI-samples\DirectProgramming\C++SYCL\ParallelPatterns\histogram\histogram.run(0x00007FF6DE1A0000) + 0xBD2AE byte(s), __scrt_common_main() + 0xE byte(s), \vctools\crt\vcstartup\src\startup\exe_common.inl, line 331 + 0x0 byte(s)
0x00007FF6DE25D59E, \oneAPI-samples\DirectProgramming\C++SYCL\ParallelPatterns\histogram\histogram.run(0x00007FF6DE1A0000) + 0xBD59E byte(s), mainCRTStartup() + 0xE byte(s), \vctools\crt\vcstartup\src\startup\exe_main.cpp, line 17 + 0x0 byte(s)
0x00007FFF7A7F4CB0, C:\WINDOWS\System32\KERNEL32.DLL(0x00007FFF7A7E0000) + 0x14CB0 byte(s), BaseThreadInitThunk() + 0x10 byte(s)
0x00007FFF7BAEE8AB, C:\WINDOWS\SYSTEM32\ntdll.dll(0x00007FFF7BA70000) + 0x7E8AB byte(s), RtlUserThreadStart() + 0x2B byte(s)

If the exception is caught and reported in the main function like below change:

diff --git a/DirectProgramming/C++SYCL/ParallelPatterns/histogram/src/main.cpp b/DirectProgramming/C++SYCL/ParallelPatterns/histogram/src/main.cpp
index b671d9a5..6371f477 100644
--- a/DirectProgramming/C++SYCL/ParallelPatterns/histogram/src/main.cpp
+++ b/DirectProgramming/C++SYCL/ParallelPatterns/histogram/src/main.cpp
@@ -115,7 +115,12 @@ int main(void) {
   // which shows the difference between sparse and dense algorithm output
   for (int i = 0; i < N; i++)
     if (input[i] == 4) input[i] = rand() % 3;
-  dense_histogram(input);
-  sparse_histogram(input);
+  try {
+    dense_histogram(input);
+    sparse_histogram(input);
+  } catch (std::exception &e) {
+    std::cout << "Exception caught: " << e.what() << "\n";
+    return -1;
+  }
   return 0;
 }

, we'll see following error which is easier to understand:

Exception caught: Native API failed. Native API returns: -45 (PI_ERROR_INVALID_PROGRAM_EXECUTABLE)

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Hướng nghiên cứu

Bắt đầu với DirectProgramming/C++SYCL/ParallelPatterns/histogram/src/main.cpp và kiểm tra main() xung quanh các lệnh gọi dense_histogram và sparse_histogram. Xem xét các sample tương tự để tìm cùng vấn đề thiếu xử lý ngoại lệ, sau đó chạy sample histogram với backend gây lỗi để xác minh rằng lỗi được báo cáo dưới dạng dễ đọc.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Đánh giá

Công nghệ
cpp
Lĩnh vực
developer-experience
Loại issue
Tính năng
Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức độ hoạt động
Đình trệ
Độ rõ ràng
Khá rõ ràng
Mức phù hợp với người mới
35/100

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.