# #c #dpc
Вопрос:
Эта проблема действительно сбивает меня с толку. Я хочу использовать DPC для чтения группы изображений, поэтому использовался образ sycl::, ниже приведен мой код.
#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([amp;](handler amp;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 amp;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)?
И кажется, что третье измерение зависит только от второго измерения, независимо от того, какая буква «Л». Кто-нибудь может мне ответить?
Ответ №1:
Интересное явление, в режиме компиляции релиза все будет в порядке ,и выходные данные также будут другими. это странно