现在的位置: 首页 > 综合 > 正文

连载:编写高效代码(5)——选用合适的指令

2018年05月07日 ⁄ 综合 ⁄ 共 646字 ⁄ 字号 评论关闭

     处理器除了一些常用的加法、移位、乘法等指令外,还有一些完成复杂功能的指令,例如:DSP中的乘累加指令、求绝对值指令,x86中的SIMD指令等等。在用高级语言编程时,编译器常常不会使用到这些指令,而是用多条简单的指令去实现它们,这时就需要程序员自己去使用它们。
     使用这些复杂指令,最直接的方式当然是写汇编语言,不过汇编语言编程难度太大,还好,编译器提供了一种方便使用汇编指令的方式:Intrinsic function。例如,SSE3中的指令addsubps,它对应的Intrinsic function为_mm_addsub_ps,Intrinsic function的使用方式和普通函数一样:
w = _mm_addsub_ps ( u , v);
     虽然它看起来像个函数调用,不过它不是真正的函数,它会被编译器翻译成对应的汇编指令。u和v也不是函数的参数,u是指令addsubps的第一个操作数,v是指令addsubps的第二个操作数。数据类型是128bit。
     手工优化过的纯汇编,性能当然是最高的,不过也是最不易编程和可移植性最差的,使用标准C语言编程,易编程,可移植性高,不过性能也差,Intrinsic function是介于它们中间的一种产物。对于调用次数非常多,非常影响性能的模块,可以使用汇编对其优化,对于一般影响程序的模块,可以使用Intrinsic function对其优化,其他模块,使用标准C即可。

汇编、
Intrinsic function
、标准
C
在性能和可移植性关系

 

抱歉!评论已关闭.