- 171 名前: ◆znjnB.IJwZLU mailto:sage [2013/09/26(木) 23:28:01.94 ID:6DsB6fP10]
- >>151
お久しぶりです。 日々の仕事をこなしつつトリップ検索のための正規表現エンジンのためのJITコンパイラを作るという作業にエタってました。 DESのS-Boxですがmovdqaが2個あるくらいなら速度差は出ないでしょう。 AVXでターゲットをSandy以降とする場合、ベクタ整数Logicは3op/cycleです。 従って速度を稼ぐには常に3命令を供給できるようにコードを書かなければなりません。 命令フェッチが16Byte/cycle、デコードが4op/cycleなので2ByteVEX(レジスタ間で4Byte)、3ByteVEX(レジスタ間で5Byte) のどちらでも達成可能ですし、数個のメモリオペレーションはOoOのキューで隠蔽されます。 ただし、メモリオペレーションを含む場合はLodeポートが2本、Storeポートが1本で命令長が多くの場合4Byteほど長くなることを意識する必要があります。 これはメモリオペレーションを含む論理演算は2ByteVEXの場合で2op/cycle、3ByteVEXの場合は1op/cycleしか命令を供給できないということですので、 間にレジスタ間演算を入れて供給命令数を維持するかループにしてuOPキャッシュを当て込むか、そういうものだと諦めるかしなければなりません。 2ByteVEXにすること自体は簡単で、VEX prefixのフォーマットを見るとわかりますが AVXop dist,src1,src2 という場合src2をxmm0〜xmm7に制限するだけです。 distとsrc1にはxmm0〜xmm15までの全てのレジスタを指定可能です。 まあ、レジスタ割付は面倒になります。
|

|