проблема измерения и чтения при использовании массивов изображений DPC

# #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:

Интересное явление, в режиме компиляции релиза все будет в порядке ,и выходные данные также будут другими. это странно