首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何阻止取消程序破坏实时进程(如音频应用程序或即插即用)

如何阻止取消程序破坏实时进程(如音频应用程序或即插即用)
EN

Software Engineering用户
提问于 2016-12-01 01:14:11
回答 1查看 776关注 0票数 5

因此,有一个关于如何处理denorms的英特尔页面。(顺便说一句,我很清楚什么是正态分布,我对IEEE-754浮点标准相当熟悉。)

我有两个问题:

  1. 打开这些FTZDAZ位的系统调用(在Visual中)的名称是什么,以便denorms不会导致异常?
  2. FTZ (刷新为零)和DAZ (Denorms为零)位之间有什么区别?DAZ位只是一种解释吗?

可控硅被认为是如此罕见,以至于没有必要在硅上进行适当的数字处理吗?为什么这些都有例外呢?(我想这是第三个问题。)

EN

回答 1

Software Engineering用户

回答已采纳

发布于 2016-12-01 02:26:16

在Windows上,您可以执行以下操作:

代码语言:javascript
复制
#include <mmintrin.h>
#define DISABLE_DENORMALS   \
        int oldMXCSR = _mm_getcsr();        /*read the old MXCSR setting  */    \
        int newMXCSR = oldMXCSR |= 0x8040;  /* set DAZ and FZ bits        */    \
        _mm_setcsr( newMXCSR );             /* write the new MXCSR setting to the MXCSR */

    #define RESTORE_DENORMALS   \
        _mm_setcsr( oldMXCSR );

在Mac (或任何Posix系统)上,您可以这样做

代码语言:javascript
复制
#include <fenv.h>
#define DISABLE_DENORMALS   \
    fenv_t fenv;                \
        fegetenv(&fenv);        \
        fesetenv(FE_DFL_DISABLE_SSE_DENORMS_ENV);

#define RESTORE_DENORMALS   \
        fesetenv(&fenv);

你可以用任何一个作为

代码语言:javascript
复制
processing_function(...)
{
DISABLE_DENORMALS

// signal processing code

RESTORE_DENORMALS
}

对于没有反馈的计算,Denorms是非常罕见的;它们是相当退化的。你必须记住,它们对应的值非常小。对于任何计算,您实际上关心的是那些值不会被刷新为零,您可能也不关心处理的效率。

对于音频来说,将Denormals刷新为零是正确的做法;由于音频算法中的反馈结构趋于衰变,它们的出现频率也比人们预期的要高。

FTZ使得计算的结果被设置为零,如果结果是正态的;它确保你不生成正态。

DAZ使得你的计算的输入被视为零,如果它们是正态的;它确保如果传递给你的输入包含正态,你的计算不会慢下来。

票数 7
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/337246

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档