我正在学习如何使用 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,但我没有找到任何东西
指针
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);
}