BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #73322同步于 2013/8/23
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

[问题]使用汇编尽量高效地实现round操作

zx723
2013/8/23镜像同步19 回复
round function : round x(double) to the nearest integer, but round halfway cases away from zero (regardless of the current rounding direction) such as round(1.2) = 1.0 round(1.5) = 2.0 round(-1.5) = -2.0
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
zxsword机器人#1 · 2013/8/23
根据指数部分移位取出小数部分然后修正? 早都忘光光了IEEE的标准,随口乱说一下勿要介意。 我觉的gcc的实现必然是一个足够高效的实现吧,而且也应该再高效不到哪去了。
zx723机器人#2 · 2013/8/23
【 在 zxsword 的大作中提到: 】 : 根据指数部分移位取出小数部分然后修正? : 早都忘光光了IEEE的标准,随口乱说一下勿要介意。 : 我觉的gcc的实现必然是一个足够高效的实现吧,而且也应该再高效不到哪去了。 在做一些东西,不适合调用glibc的round函数,因为函数调用本身也有不小的开销
lifesider机器人#3 · 2013/8/23
SSE4.1提供了一些指令(ROUNDSD,ROUNDPD,ROUNDSS,ROUNDPS),可以完成你说的功能 楼主可以去查查 【 在 zx723 的大作中提到: 】 : round function : : round x(double) to the nearest integer, but round halfway cases away from zero (regardless of the current rounding direction) : such as : ...................
tonyjansan机器人#4 · 2013/8/23
既然你提到了汇编,那就不得不提芯片架构了~否则别人怎么知道你所处的工作平台呢~汇编想提高效率很大程度上也是依据硬件特性来做优化的~ 【 在 zx723 的大作中提到: 】 : 在做一些东西,不适合调用glibc的round函数,因为函数调用本身也有不小的开销
zxsword机器人#5 · 2013/8/23
那直接把gcc的实现给抄过来? 【 在 zx723 的大作中提到: 】 : 在做一些东西,不适合调用glibc的round函数,因为函数调用本身也有不小的开销
tonyjansan机器人#6 · 2013/8/23
拉gcc源码和自己写的途径是一样的~都是路径依赖,gcc的math库也是依据硬件标准(arch/***/math_emu/math.cpp)来进行实现的~ 所以我才说要先搞清楚工作平台~ 【 在 zxsword 的大作中提到: 】 : 那直接把gcc的实现给抄过来?
zx723机器人#7 · 2013/8/23
【 在 tonyjansan 的大作中提到: 】 : 既然你提到了汇编,那就不得不提芯片架构了~否则别人怎么知道你所处的工作平台呢~汇编想提高效率很大程度上也是依据硬件特性来做优化的~ : 把ARMV8中的frinta指令翻译成到x86,但是并不是直接用x86汇编来做,而是翻译成LLVM的IR。目前项目用的3.3版本。。。没有llvm.round这个intrinsic。自己想的要用10多条汇编(IR)才可以完成。
zx723机器人#8 · 2013/8/23
【 在 lifesider 的大作中提到: 】 : SSE4.1提供了一些指令(ROUNDSD,ROUNDPD,ROUNDSS,ROUNDPS),可以完成你说的功能 : 楼主可以去查查 把ARMV8中的frinta指令翻译成到x86,但是并不是直接用x86汇编来做,而是翻译成LLVM的IR。所以也不能直接使用这些指令。。。
zx723机器人#9 · 2013/8/23
【 在 zxsword 的大作中提到: 】 : 那直接把gcc的实现给抄过来? 谢谢,我去看看,也能扩展下思路