【问题标题】:How to turn off denormal number support in MATLAB?如何在 MATLAB 中关闭非正规数支持?
【发布时间】:2015-06-12 16:08:01
【问题描述】:

我正在尝试关闭 matlab 中的非正规数支持,因此基本上任何两个会导致非正规数的计算都只会导致零(DAZ,FTZ)

我研究了几个网站,包括以下网站,但我没有发现任何关于这样做的信息。

http://blogs.mathworks.com/cleve/2014/07/21/floating-point-denormals-insignificant-but-controversial-2/

【问题讨论】:

    标签: matlab floating-point


    【解决方案1】:

    我在 Matlab 中从未听说过这样的选项。它可能需要对大量浮点数学进行深度操作,如果要在 Matlab 中成为一个易于切换的选项,则实际上需要支持新的数据类型。您可以为单个函数编写自己的 mex C 代码(more herehere)。

    当然,你可以用一行 Matlab 得到类似的东西——这里有一个例子:

    a = [1e-300 1e-310 1e-310];
    b = [1e-301 1e-311 1e-310];
    x = a-b;
    x(abs(x(:)) < realmin(class(x))) = 0;
    

    其中realmin 是最小的normalized floating-point number。但是,浮点数学仍然使用a 中的扩展非正规/次正规值来执行。只是输出被剪裁为零。

    除非您这样做是为了有趣的实验,或者可能在嵌入式平台上运行代码,否则我真的建议您不要禁用非规范化作为一种​​优化形式。相反,请关注为什么您的值如此之小以及如何重新调整问题以完全避免该问题。

    【讨论】:

    • 谢谢,不过不是为了好玩。这是实验。基本上,如果 matlab 让用户能够控制浮点计算的所有方面,我会很高兴,但它们仍然不存在。
    • @starbox:我同意它会很好,有时甚至有助于调试或与 C 代码进行比较。我只是认为他们实施(和测试)这一点是非常令人望而却步的。这也是他们不希望用户不小心打开(或忘记它已启用)的选项。您可以随时尝试在 The MathWorks 中输入service request
    • @starbox:一个问题是禁用 denorm 会级联到 Matlab 使用的所有库函数中,在许多情况下,结果会影响这些库函数的非异常输入。这可能是您所希望的,但它不是一个普遍有用的计算模型。
    • @StephenCanon,同意在一般情况下它不会有用。但是将函数分解为算术运算是必要的,这是我愿意为我的目的而做的事情。那好吧。是否有比 MATLAB 更好的工具来控制浮点运算并配备用于显示图像和图形的 GUI? (例如枫树?)
    • 在我用于训练神经网络的定制反向传播代码中,当梯度变小时(使用 Adam SGD 变体)时,我达到了领域限制。因此,我的算法会产生性能成本。通常这发生在对性能非常关键的区域,因此手动检查低于 realmin 的数字的矩阵也是性能成本。我希望 Matlab 能在幕后有效地处理这个问题,并将这些元素设置为零。在 SGD 中,您无法始终避免梯度消失。
    猜你喜欢
    • 2018-02-26
    • 1970-01-01
    • 2012-06-10
    • 2014-12-23
    • 1970-01-01
    • 2015-08-23
    • 2016-11-18
    • 2021-05-24
    • 1970-01-01
    相关资源
    最近更新 更多