如何使用 ISPC intel 编译器访问指向可变数据 (T**) 的指针

问题描述 投票:0回答:1

我正在学习如何使用 ISPC,我了解如何在公共数据上有效地使用统一和变化,但我很难找出如何使用指针(以及指向指针 T** 的指针)来使用统一和变化。

这是一个我想理解的例子:

export void functionA(uniform const int16** uniform imageList) {

uniform zu = ... ;
uniform const int16* image_zu = imageList[zu];
functionB(image_zu);
}

void functionB(uniform int16* image_zu) {
varying xy = ...
varying data = image_zu[xy] ;

print("xy: % ; data ------> %\n", xy, data );
print("\n");
}

输出是

[131072,((131073)),((131074)),((131075)),((131076)),((131077)),((131078)),((131079))] ------> [1083,((1083)),((1083)),((1083)),((1083)),((1083)),((1083)),((1083))]

以我的观点

uniform const int16** uniform imageList
imageList 是一个统一指针,指向指向不同数据的统一指针...... 似乎即使数据类型为变化,所有通道也具有相同的数据,这不是变化数据的行为。我不知道如何理解这一点,而且我在互联网上没有找到任何好的解决方案,所以我在这里

我在互联网上搜索,我什至要求GPT,但我没有找到任何东西

c intrinsics avx ispc
1个回答
0
投票

指针

image_zu
是统一的,这意味着所有通道访问相同的基本内存位置。您需要使指针变化,以便每个通道可以访问不同的内存位置。

void functionB(varying int16* image_zu) {
    varying xy = ...;
    varying data = image_zu[xy];
    print("xy: % ; data ------> %\n", xy, data);
    print("\n");
}

export void functionA(uniform const int16** uniform imageList) {
    uniform zu = ...;
    varying const int16* image_zu = imageList[zu];
    functionB(image_zu);
}
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.