Main Content

本页采用了机器翻译。点击此处可查看英文原文。

在 GPU 上处理复数

在 GPU 上处理复数的条件

如果在 GPU 上运行的函数的输出可能很复杂,则必须使用 complex 函数明确指定其输入参量为复杂。这适用于直接对 gpuArray 对象进行操作的函数,以及使用 arrayfungpuArray 数据进行操作的函数。

当创建含有负元素的 gpuArray 时,使用 G = gpuArray(complex(x)),则可成功执行 sqrt(G)。例如,

x = [-1 0 1];
G = gpuArray(complex(x));
rootG = sqrt(G)
   0.0000 + 1.0000i   0.0000 + 0.0000i   1.0000 + 0.0000i

如果结果是复数数据的 gpuArray,并且所有虚部都是零,则保留这些部分并且数据保持复数。这可能会导致在使用例如 sortisreal 操作数据时执行不必要的计算。

如果使用 arrayfun,则可以在 arrayfun 调用中将函数输入指定为复杂。例如,

x = [-1 0 1];
G = gpuArray(x);
A = arrayfun(@(p) sqrt(complex(p)), G)
   0.0000 + 1.0000i   0.0000 + 0.0000i   1.0000 + 0.0000i

返回复杂数据的函数

下表列出了可能返回复数数据的函数,以及输出保持实数的输入范围。

函数实际输出的输入范围
acos(x)abs(x) <= 1
acosh(x)x >= 1
acoth(x)abs(x) >= 1
acsc(x)abs(x) >= 1
asec(x)abs(x) >= 1
asech(x)0 <= x <= 1
asin(x)abs(x) <= 1
atanh(x)abs(x) <= 1
log(x)x >= 0
log1p(x)x >= -1
log10(x)x >= 0
log2(x)x >= 0
power(x,y)x >= 0
reallog(x)x >= 0
realsqrt(x)x >= 0
sqrt(x)x >= 0

另请参阅

|

相关主题