0

这个问题真的让我很困惑。我想使用 DPC++ 读取一组图像,所以使用了 sycl::image,下面是我的代码。

#define N 4   //dimensin
#define M 128 //dimension 
#define C 4   //4 channel
#define L 2   // 2 images
int * host_array3_2 = malloc_host<int>(N*M*C*L, Q);
image im3(host_array3_2, image_channel_order::rgba, image_channel_type::unsigned_int32, range{ M,N,L}); //the image format

内核代码如下,我使用带有 image_array 标签的访问器来读取数据:

Q.submit([&](handler &h) {
           auto out = sycl::stream(1024, 1024 * 2, h);
            accessor<int4, 2, access::mode::read, access::target::image_array> acs3(im3, h);//the accessor format
            h.parallel_for(nd_range{ range{ M ,N,L }, range{ N,N,L } }, [=](nd_item<3> it) {
            int idx = it.get_global_linear_id();
                if (idx == 0){
            confuse here:  out << acs3.get_count() << " " << acs3.get_range() << " \n";
                //const auto &ss = acs3[0];    no compile error
        confuse here:  //ss.read(int2(0, 1));         compiler error: "array subscript out of range"  "SYCL kernel cannot call a variadic function"}
            });
        });

除了读取问题,我发现范围是{128,4,4},为什么第三维是4?不是L(2)的值吗?

而且似乎第三维度只取决于第二维度,不管 L 是什么。有人可以回答我吗?

4

1 回答 1

0

一个有趣的现象,在release编译模式下是可以的,而且输出也不同。那很奇怪

于 2021-08-11T04:44:57.497 回答