Migrating to SYCL
One-stop forum for getting assistance migrating your existing code to SYCL
43 Discussions

Discrepancy in sycl::nd_item<3> item_ct1.get_sub_group().get_local_range() Results between Debug and

-Light-
Novice
118 Views

我最近将一个 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,但输出在调试和发布模式之间仍然有所不同。

感谢您的帮助。

此致敬意

0 Kudos
0 Replies
Reply