gpt4 book ai didi

matlab - 解释从输入到具有复杂结果的 GPU 计算的要求

转载 作者:太空宇宙 更新时间:2023-11-03 20:27:15 24 4
gpt4 key购买 nike

考虑这行代码:

gpuArray(-1)^0.5;

结果是:

ans =   0.0000 + 1.0000i

Now consider the following line of code:

gpuArray(-1).^0.5;

结果是:

Error using  .^ POWER: needs to return a complex result, but this is not supported for real input X and Y on the GPU. Use POWER(COMPLEX(X), COMPLEX(Y,0)) instead. 

问题显然与 GPU 上的 double -> complex double 转换有关,这是不允许的。事实上,当我应用解决方法(在 docs 中也提到)时,它解决了问题 - 但我不明白为什么。

有人能解释一下吗?这是 VRAM 的一些限制吗?我正在使用的特定卡(我的是 GTX 660,CC 为 3.0)? MATLAB 实现(我使用的是 R2018b)?操作系统的?

最佳答案

gpuArray 有几个方法是这样的,原因很简单:性能。

完全有可能编写一个实现,例如sqrt 在 GPU 上的行为方式与 MATLAB 的 CPU 实现工作方式相同(即计算真实结果,除非需要复杂结果 - 在这种情况下,返回复杂结果)。部分工作已经执行 - 否则 gpuArray 方法将不知道何时抛出错误。然而,昂贵的部分是重新分配(复杂的)输出,并再次执行操作。

还有一些与 gpuArray 和复数相关的其他轻微的怪癖 - 在 GPU 上,当 MATLAB CPU 实现删除它们时,全零虚部不会被删除。例如:

>> a = [1i, 2]; gA = gpuArray(a);
>> [isreal(a(2)), isreal(gA(2))]
ans =
1×2 logical array
1 0

(当然要记住,MATLAB 的 isreal 函数告诉您的是存储,而不是)。

编辑: 刚刚意识到有一个 specific doc reference对于以这种方式运行的 gpuArray 函数。

关于matlab - 解释从输入到具有复杂结果的 GPU 计算的要求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53091818/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com