- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
我最近将一个 CUDA 项目迁移到 SYCL,在 Visual Studio 中运行时遇到了调试模式和发布模式之间的不同结果。经过调查,我发现差异发生在“get_sub_group()”函数中。
下面是我用于测试的代码片段:
dpct::d evice_ext& dev_ct1 = dpct::get_current_device();//设备名称: Intel(R) Arc(TM) A370M Graphics
std::cout << “假设子组大小: ”;
for (const auto& s : dev_ct1.get_info<sycl::info::d evice::sub_group_sizes>()) {
std::cout << s << “ ”;
}
std::cout << std::endl;//假设子组大小:8 16 32
sycl::queue& q = dev_ct1.in_order_queue();
q.submit([&](sycl::handler& cgh) {
sycl::stream out(1024 * 1024, 256, cgh);
cgh.parallel_for(
sycl::nd_range<3>(sycl::range<3>(1, 1, 32) *
sycl::range<3>(1, 1, 256),
sycl::range<3>(1, 1, 256)),
[=](sycl::nd_item<3> item_ct1)
[[intel::reqd_sub_group_size(32)]] {
out << “使用的子组大小:” << item_ct1.get_sub_group().get_local_range() << sycl::endl;
});
});
在调试模式下运行(不进行代码优化)时,输出为 16。但是,在发布模式(代码优化级别为 O1 或 O2)下运行时,输出为 32。
尽管使用 [intel::reqd_sub_group_size(32)] 将所需的子组大小设置为 32,但输出在调试和发布模式之间仍然有所不同。
感谢您的帮助。
此致敬意
Link Copied

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page