ぺんぎんさんのおうち

日記です。たまに日記じゃないこともあります。

GNU MP ver6.3のRelease Notes

GNU MPの最新版ver6.3が7月末に公開されてた。ver6.2.1が公開されたのが2020年11月なので約2年半ぶり。

gmplib.org

Release Notes(6.2.xと6.3との違い)にコメントしていきますね。

BUGS FIXED 
A possible overflow of type int is avoided for mpz_cmp on huge operands.

6.2.1のRelease Notesで同じ話をしていた気がする。バカでかい数値同士を比較すると判定が逆になるんだよね、たしか。 ykm11.hatenablog.com


A possible error condition when a malformed file is read with mpz_inp_raw is now correctly handled.

内容から察するに、mpz_class, mpz_tインスタンスに代入する値をファイルから読み込める関数があって、そのファイルに異常な値(具体的にはわかんない)があったら上手いこと処理するように変更したのかな。mpz_inp_rawの実装を見ない限りはわからん。後で見る。 mpz/inp_raw.c に実装がある。

FEATURES
New public function mpz_prevprime, companion of the existing mpz_nextprime.

与えた素数の次の素数を返す関数は前からあったんだけど、一個前の素数を返す関数が新たに追加された。実装はmpz/nextprime.cにある。 nextPrimeはSagemathにもあったはずだけど、prevPrimeはどうだっけな。

New documented pointer types mpz_ptr, mpz_srcptr, and similar for other GMP types.
Refer to the manual for full list and suggested usage. These types have been present in gmp.h at least since GMP-4.0, but previously not advertised to users.

documented pointerってなんだ?造語か?_ptr, _srcptrって前からなかったっけ。「mpz_tが__mpz_str[1]のtypedef」みたいなのあったよね。あんまり覚えてないや。

Support for 64-bit Arm under Macos.

これ今回の大きな変更点では?6.2.1以前では、GMPのビルドはできるけど使用する関数によってはエラーが発生する可能性あり、みたいな感じだった。M1 Macではreserve registerになってるレジスタ(ユーザは使っちゃダメなレジスタ)を使用するアセンブリを記述してる関数があるから〜、みたいなのを前のrelease notesで見た。

Support for the loongarch64 CPU family.

見ての通り。loongarch64 CPUがわかんね。

pc.watch.impress.co.jp

Support for building with LTO, link-time optimisations.

LTOを使ったビルドが可能になった?GNU MPのビルドが高速化されたのかな。

SPEEDUPS
New special code for base = 2 in mpz_powm reduces the average time for the functions that test primality.

「2を底とするmpz_powm(2, x, p) = 2x mod p によって、素数判定の平均時間が改善された。」うーん、意味わかんね。
2x mod pの計算が素数判定に使われるって・・コト!? すみませんミラーラビン等の判定法のアルゴリズムがパッと出てきません。x=p-1のフェルマー判定法なんて当てにならんしな。

Speedup for the function mpz_nextprime on large operands.

でっっっっっかい数を与えたときのnextPrimeが高速化された。素数かどうかのチェックが速くなったのか?「奇数に+2ずつしていく作業が、でっっっっっっかい数のときは+4ずつにできる」みたいなトリックがあるなら面白いよぬ。prevPrimeの追加に伴って改善したのかな。

Speedup for multiplications (some sizes only) thanks to new internal functions to compute small negacyclic products.

あるサイズ(sizeof mp_limb_t * N)の乗算が速くなった。negacyclic productsはわからないが、検索するとNegacyclic convolutionがヒットする。 Fast and Error-Free Negacyclic Integer Convolution using Extended Fourier Transform FastなTFHEって言ってるから関係ありそう。

Special assembly code for IBM z13 and later "mainframe" CPUs, resulting in a huge speedup.

IBM z13って大規模な計算を行うマシン?めっちゃ速くなったらしいで。

Improved assembly for several 64-bit x86 CPUs, Risc-V, 64-bit Arm.

汎用的なCPU向けのアセンブリをいじったらしい。どの程度改善されたとか、具体的な数値はどこかに転がってないのかな。

おしまい!