メニエスの名のもとに

プログラミング関係を中心としたぐだぐだブログ

SFMTの256,512bit化への道その2

浮動小数点数版については前回の記事を参照してください。

 

manieth.hatenablog.com

 

整数版

整数版はすでにAVX2版が存在するけど、AVX512F版は存在しない。なので作ってもいいかもしれない。
実は、dSFMTで使用されているようなlungという変数を使った短いループを作る方法の方がゼロ過剰状態の回復などで優れている。なので浮動小数点版のSFMTではその方法を使っているのだが、整数版も同じようにしたらどうだろうという意見は、松本眞先生から当時出ていた。しかし、ちょっと試したところうまく行かなかったのであった。
これをもう一度試して、256bit, 512bit用の整数版SFMTを作るのも悪くはないだろう。
そんな感じで適当に考えたのがこの図である。

f:id:manieth:20160706140649p:plain

f:id:manieth:20160706140718p:plainの部分は32bit単位の置換(permutation)を表している。
パラメータp1の値によって、32bit単位のローテーションの回数を指定する。

512bit版を作るならこんな風になるだろう

f:id:manieth:20160706140941p:plain

w256.hpp

ちょっとコードを書こうかと思ったが、途中ではてな記法に変更することはできなかったようだ。あとまわし。