• godtrue
    2018-09-20
    小结一下
    1:向量化优化-本质是一次性多干一些活,免得来回折腾费时费力,通过减少来回折腾的工作量来提高性能。他是怎么实现的呢?他是借助CPU的SIMD指令,通过单条指令控制多组数据的运算,实现了CPU指令级别的并行。
    2:这么好为什么不大批量的使用哪?他有几种方式呢?
    使用向量化优化是有一些前提条件的,目前HotSpot 虚拟机运用向量化优化的方式有两种。第一种使用HotSpot intrinsic,在调用特定的方法的时候替换为使用了SIMD指令的高效实现。第二种是依赖即时编译器进行的自动向量化,自动向量化也有苛刻的使用前提条件。
    展开

    作者回复: 赞

    
     13
  • 罗布圆滚滚
    2018-09-19
    好棒哦!学到很多
    
     3
  • 饭粒
    2019-12-25
    dst[i:i+3] = src[i:i+3] 这是伪代码还是新版的 JDK 支持的写法?

    作者回复: 伪代码

    
    
  • 随心而至
    2019-10-29
    SIMD,寄存器每次存好几条数据,那么就一次性拿这么多数据放到寄存器中,统一用一个向量相关的指令来算。这样一下子就可以算了循环中的很多次,相当于我们在并行执行某个循环。
    另外从寄存器中读写数据比内存快了很多很多倍。
    
    
  • Joker
    2019-08-16
    666,学到了
    
    
  • 渡劫达摩
    2019-04-27

        dst[i:i+3] = src[i:i+3]还有这种写法?是大哥省略了部分代码吗?
    
    
  • Geek_488a8e
    2018-09-20
    之前用过TI的DSP芯片,里边有很多支持向量处理的计算指令,比如复数乘法,共轭相乘等,但是这些计算指令器不多,而且不能在一个指令周期完成计算,所以大量使用后会影响指令流水,反而不如能在一个指令周期完成计算的单数据加法器

    作者回复: 我们做自动向量化也会考虑值不值得的问题。

    比如说X86不能在通用寄存器上计算,有时候需要额外的mov指令移到XMM中(如果不是直接从内存中加载的话)。

    另外,某些reduce操作,比如求向量内所有元素的和,X86无法用单条指令实现,只有两两相加的指令,因此需要好几条向量指令协作完成。这种情况下,我们便会放弃自动向量化。

    
    
我们在线,来聊聊吧