主要内容

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

在 GPU 上处理复数

您可以利用 GPU 加速 MATLAB® 中许多对复数进行运算或返回复数的函数。本页介绍了在处理复数且数据类型为 gpuArray 时,您需要注意的情况。有关在 MATLAB 中运行的自定义 CUDA® 代码中处理复杂数据的详细信息,请参阅 运行包含 CUDA 代码的 MEX 函数

在 GPU 上处理复数的条件

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

例如,要成功计算 sqrt(G)(其中 G 是一个包含负元素的 gpuArray),请指定 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, acosdabs(x) <= 1
acoshx >= 1
acothabs(x) >= 1
acsc, acscdabs(x) >= 1
asec, asecdabs(x) >= 1
asech0 <= x <= 1
asin, asindabs(x) <= 1
atanhabs(x) <= 1
logx >= 0
log1px >= -1
log10x >= 0
log2x >= 0
powerx >= 0
sqrtx >= 0

另请参阅

|

主题