【问题标题】:cuda intrinsic functions sqrtf and powf performance issuescuda 内在函数 sqrtf 和 powf 性能问题
【发布时间】:2013-04-07 09:05:52
【问题描述】:

当我从 powf 转换为 __powf 时,它会提高我的性能。但是如果我将sqrtf 转换为其中__fsqrt_[rn,rz,ru,rd] 之一,它会减慢速度。我认为它们的运行速度至少应该和 sqrtf 一样快。可能是什么问题?

问候

【问题讨论】:

  • 您使用的是单精度(float)还是双精度(double)?
  • sqrtf( powf( int, 2 ) );像这样
  • 认真的吗?为什么要这么做 ?您将整数值传递给双精度函数,然后将原始值作为双精度值返回?
  • =) 这只是一个例子。当然,我不这样做。这就像 sqrtf( powf( int, 2 ) + ... );
  • 但是你为什么还要调用 powf 来对一个整数值求平方——这太低效了?

标签: performance math cuda device intrinsics


【解决方案1】:

如果您需要对整数求平方(或浮点数),那么您可以将值与自身相乘,即代替;

y = powf(x, 2);

使用:

y = x * x;

这避免了使用昂贵的超越函数(连同其相关的函数调用开销),并且在大多数情况下只生成一条乘法指令。

平方根可能无法避免,但如果您只需要单精度,则可以使用 fsqrtf 而不是 sqrtf - 这通常要快得多。

【讨论】:

    猜你喜欢
    • 2011-07-11
    • 2016-05-22
    • 2013-06-08
    • 2012-10-15
    • 2014-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多