首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有什么合理的替代办法吗?

有什么合理的替代办法吗?
EN

Stack Overflow用户
提问于 2014-04-02 04:46:41
回答 1查看 677关注 0票数 2

我有一个内循环的程序,由于它执行的迭代次数,它需要非常快。为了分析这段代码,我一直在使用val差制/回调。我觉得它是个很棒的工具。不幸的是,我在优化方面的努力使我不得不使用较新的指令集,如fma (英特尔)/ fma4 (amd),每当我使用这些回调时,它就会爆炸,因为它不支持这些指令。

我知道一种解决方案是简单地不使用这些本质,并让编译器发出不包含这些指令的代码,但老实说,我认为这没有任何意义,我想分析一下代码的原貌,而不是valgrind能够处理的代码。

这就引出了我的问题。是否有任何开源的或者免费的分析器,可以做得和val差制/回调一样好?我知道gprof,但据我理解,它实际上只是隔一段时间停止程序,看它在哪里,并计数它看到每件事情的次数,这就像撕开一只眼睛,而不是给我打电话。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-02 09:00:07

我很可能会坚持坚持“英勇/无情”:

在不同的处理器上尝试编译标志mavxmfma4也会给我带来问题: FMA4主要是一个AMD功能,虽然对它的支持是对英特尔芯片的过滤,而AVX主要是英特尔的一个特性(支持被过滤到AMD芯片中),但是在支持的情况下,实际上比使用SSE5 1/2/3/4 (FMA4填充SSE5123.)的性能要慢。

使用这两种优化可能不是最好的方法,很可能导致您正在经历的行为,因为它们实际上是对立的,主要是为特定品牌的处理器设计的。如果您正在为支持AVX的Intel进行编译,则尝试删除FMA4;如果为支持FMA4的进行编译,则使用FMA4。

话虽如此,编译器将不允许将乘法和添加到FMA中的组合,因为这将使FMA中的2次循环减少到1次四舍五入,因此,您需要使用一个轻松的浮点模型(类似于-ffast-数学*),或者通过转换一个简单的浮点模型并将其添加到FMA,从而使IEEE浮点遵从性失败。当您具体地调用本质时,不确定它是如何工作的,但是编译器可能不会根据标志来优化它们,因为它们是非常具体的指令。

我的英特尔CPU上的FMA标志(mfma4)可靠地产生了相同的结果,与您发布的相同的结果相似,但是它在AMD机器上的性能很好(我认为您的处理器是Intel?):

代码语言:javascript
复制
vex amd64->IR: unhandled instruction bytes: 0xC4 0x43 0x19 0x6B 0xE5 0xE0 0xF2 0x44
vex amd64->IR:   REX=0 REX.W=0 REX.R=1 REX.X=0 REX.B=1
vex amd64->IR:   VEX=1 VEX.L=0 VEX.nVVVV=0xC ESC=0F3A
vex amd64->IR:   PFX.66=1 PFX.F2=0 PFX.F3=0

这是来自下面的测试代码。

FMA3 Intrinsics:(AVX2 - Intel Haswell)

代码语言:javascript
复制
_mm_fmadd_pd(), _mm256_fmadd_pd()
_mm_fmadd_ps(), _mm256_fmadd_ps()

除了.还有更多的。

FMA4 Intrinsics:(XOP - AMD推土机)

代码语言:javascript
复制
_mm_macc_pd(), _mm256_macc_pd()
_mm_macc_ps(), _mm256_macc_ps()

除了.还有更多的。

备注

FMA提供了对计划成为SSE5一部分的特性的支持,例如:

XOP:整数向量多积指令,整数向量水平加法,整数向量比较,移位和旋转指令,字节置换和条件移动指令,浮点数提取。FMA4:浮点向量多重累加。F16C:半精度浮点转换.

测试代码

代码语言:javascript
复制
float vfmaddsd_func(float f1, float f2, float f3){
  return f1*f2 + f3;
}


int main() {
  float f1,f2,f3;
        f1 = 1.1;
        f2 = 2.2;
        f3 = 3.3;
        float f4 = vfmaddsd_func(f1,f2,f3);
        printf("%f\n", f4);
        return 0;
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22801787

复制
相关文章

相似问题

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