GNU MP(GMP)マニュアル翻訳日記(最終)

 

 「GMP」だと全然関係ない分野の略語と被ることが多いようなので,「GNU MP」も併記して書くことにしようっと。そういえば「gmp_ja」で検索するとこちらの方のページが既にあったことに気づかされたのでご紹介しておく。GNU MPを全然知らん方は目通ししてから拙訳(HTMLPDFソース)を読むことをお勧めします。

 さて,翻訳完了から日が経つと忘れそうなことを書きつけておく。

1.GMPの開発チーム
 って表紙(PDF)に書いてあるんだもんな,誰だか知りたくなるってもんであるが,これについてはAppendix Aにまとめてある。ズラズラ時系列的に並べてあるけど,Tröbjorn以外の主要人物を抜き出すと,Paul Zimmermann(仏,MPFR開発陣の一人でもある),Kevin Ryde(豪,Perl ModuleやEmacsスクリプト著作多数),Niels Möller(瑞),Marco Bodrato(伊,Toom-Cookアルゴリズムに詳しい),Marc Glisse(仏,最近ではmini-gmpの提唱と実装)あたりが主要開発者ということになる。今でもGMPのMLでお見かけするメンツで,保守管理もマメにやり,中核人物の狷介さを和らげるクッションにもなっているわけで,実力もさることながら人間的も優れている(MLを見る限りだけど)貴重な人材である。

2.イマイチ理解できてない部分
 やっぱり最後の「アルゴリズム」の章が難物で,ここについては数論アルゴリズムと各CPUのアーキテクチャに通じている方(つーたら日本だとかなり稀少な部類な絶滅危惧種)にリライトか再翻訳をお願いしたい。特にアセンブラで書かなきゃいけなくなった理由である「桁上がり・桁借り上げ処理」(素直に「キャリー操作」の方が良かったかな・・・),「ループ展開」,「アセンブラコードの書き方」なんて,実際にアセンブラ職人になってシコシコとマイクロ秒単位のチューニングを体験しないことにはスッキリ訳せないよ! GMPマニュアルの翻訳は十数年来挫折しまくってきたけど,原因はこの辺りの解読に自信が持てないからだったりする。とはいえ,もういい加減イイ歳なので恥だろうが何だろがやっておかないと後悔するとばかりにえいやっと直訳してみたのである。とゆーことでリライトをやってくれる貴重な人材求む!

3.Texinfoとmakeinfo
 TexinfoについてはTrueRoadさんのパッケージを一部利用させて頂いたが,W32Tex環境では通らない部分があって,結局,Ubuntu 16.04にtexlive2016をフルで突っ込んでxetex使ったら何とかPDFは生成できた。この辺,最近のTeX環境に疎いのでよー分からん。HTML化もUbuntuのmakeinfo –helpで生成。こちらはスムーズにできた。今時デカい文書をTexinfo使う方が珍しいのかしらん?
 次はMPFR 4.0のTexinfoを処理する予定なんだが,まぁ当面は上記のように処理することになりそうである。TexnicianじゃないのであまりTexinfo辺で苦労したくないんで,本来ゴシックにすべき部分も明朝になってたりするけど,この辺でご勘弁を。

4.翻訳の意義
 今時は「ない」と断言してもいいんじゃないのかな。既に古いMPFRQDの翻訳やってみたけど,ワシの場合は完全に自己満足,オナニー的なものである。Web公開しているのはGoogleという世界最高の検索ツールが使いたいからであって,備忘録以上の意味はない。ワシの業績リストにも一切入れてないし(何人かの方からお褒めの言葉は頂いたけど)。ただ,「一通り読んでみましたよ」ぐらいの意思表示はできるかなと。多倍長数値計算の基本ライブラリであるMPFR,QD,GMPぐらいはマニュアルぐらい一通り読んでおかないとこの辺の専門家でございなんて言えないし,この辺の後追いをやるにしても,先人の業績を参考文献に使うぐらいの節度は欲しいし,参考文献に入れるなら「全部読んだ」ぐらいのことは言いたいしねぇ。
 GMPについては,もう当分これを超える多倍長自然数演算カーネルは出てこないだろうなと思うし,GPUではカーネルでmalloc/freeを繰り返すと覿面に遅くなるんで,MPNカーネルそのままの移植は向いてないだろうと感じる。CUMPは今んとこbasecase演算にとどまっているし,テンポラリメモリは固定で取ってるので,これそのままだとKaratsubaやToom-Cookの移植は大変そうである(割算だけ移植して挫折した奴がここにいる)。何にせよ,多倍長精度を素直にサポートするライブラリとしてはエベレスト的存在がGMPなので,当面この方向での進化もさしてなさそうに思える。
 GMP自体,Version 4以降はアーキテクチャの進化に追随しているだけで(それだけでも大したもんなんだけど),アルゴリズム的な大幅改善はない。Version 5はあっという間にVersion 6になっちゃったけど,メジャーバージョンアップの割には新規性はかなり薄い(だもんで不満も多少でてた)。どん詰まりっぽい状況だから,マニュアル翻訳も今やっておけばさほど古びずに済みそうという予想があってやっている訳である。オナニーなら性欲のあるうちじゃないと詰まらんしねぇ。

 とりあえず,こんなもんかしら? 後はどなたかに(翻訳する人がいれば)お任せする。

GMPマニュアル翻訳日記(2)

 つーことで,GMPマニュアルの下訳が完了した。3月中にできなきゃ一生できない気がしていたので,分からないところは適当にすっ飛ばしつつ,とりあえず意味が通りそうな日本語で埋めたというレベル。

 以降は,この下訳を直しながらの作業になるので,読みながら気になるところを紹介する日記になりそうである。

 通読して感じたのは,ほぼ独力でGMPを引っ張ってきたTrobjörn Granlundの個性だ。GNUの精神に共鳴して最初期からGNU Projectに参加し,ちょろっとでも商用ソフトにコードを流用しようもんなら激烈な批判を行う。多分批判の対象はIntel Math KernelとMathematicaのようだが,Microsoftにも嫌悪感をあらわにしていた時期も長かった。最近は老成したのか丸くなった感じもあるけど,20年以上も多様なCPU, OSに対応してきた,バリバリのアセンブラ&アルゴリズムマニアにして高速化に執念を燃やし続けてきた頑固職人ってのは,全世界探してもかなり希少な存在だ。ワシはご本人に会ったことはないけど,GMPのMLに流れてくる文面をチラ見している限りはかなりのトンがったお人のようである。遠目から敬しておきたい方である。

 しかしまぁ,長年に渡ってサポートを続けてきただけのことはあって,CPUの博物館みたいなことになっているのは,貴重かつ生きたソフトウェアの文化財といえるだろう。GMPよりさらに古い歴史を持つLAPACK/BLASがCPUアーキテクチャに依存した高速化の部分を他の研究チームや企業に丸投げしているのとは対照的である。

「現在は下記のCPU用のアセンブラコードが用意されています。
 ARM Cortex-A9, Cortex-A15, 汎用ARM,DEC Alpha 21064, 21164, 21264,AMD K8 と K10 (Athlon64, Phenom, Opteron等々,いろんなブランド名で販売展開されています),BulldozerとBobcat,Intel Pentium, Pentium Pro/II/III, Pentium 4, Core2, Nehalem, Sandy bridge, Haswell, 汎用x86,Intel IA-64,Motorola/IBM PowerPC 32 と 64 (POWER970, POWER5, POWER6, POWER7),MIPS 32-bit と 64-bit,SPARC 32-bit と 全てのUltraSPARC向けサポート付きのSPARC 64-bit。
 廃止されてしまったCPU用のアセンブラコードもそのまま残っています。」(1 GMPについて)

 コンピュータ博物館に収めたいコードも一緒に配布しているってのは貴重ではあるけれど,サポート面では厄介な問題もはらむ。mini-gmpなんてプロジェクトが提唱されるのも,レガシー化しちゃって分かりずらいコードを一部だけでもスッキリさせようということだろう。

 つーことで,4月一杯ゴソゴソ修正しながら愚痴とメモをここに書きつけていく次第である。

GMPマニュアル翻訳日記(1)

 GMPのマニュアルの翻訳を思い立ってから3年目,ようやっとあとひと月ほどで終える目途が付いたのでここで「後戻りできないように」そのプロジェクトの報告を行うことのにするのである。つか,そのうち誰かやるだろうと放置していたんだが,利用者は潜在的に多いはずなのに誰も日本語訳をしようとはせなんだ。使うだけ使ってContributeもナシか非人情な・・・と思っても,英語で十分事足りる世の中だし,まぁ今時翻訳などしても詮無いことではあるんだけど,「多倍長数値計算入門(一応100ページほどできているけどまだ仮称)」を書くにあたって,これだけはやっておかないとダメだろう,という自分に課した「勉強」の一環として取り組んでいるので,世の流行り廃りはどーでもいいのである。

 つーことで,本日頑張ったおかげで,「第15章アルゴリズム」以外の部分の下訳は完成した次第である。

 何で最新版の6.1.2じゃないんだという向きには

文句言うならテメェがやれ!

と言っておく。ま,完成の暁にはdiff取って書き換えする予定だけれど,どーせそんなに変わっている部分はないし,それよりむしろ翻訳する側としては

もちっと饒舌な解説削れTrobjorn!

と言いたくなる。まー,20年以上に渡って営々と開発し続けてきただけあって,CPUアーキテクチャやOSの博物館かこれはというぐらい古いシステムの話がごまんと残ってたりするのである。MMXってねぇ・・・懐かしいねぇ・・・と年寄りには訳してて感慨深いんだけど,不要だろうこれって記述が山ほどある。せめてForkしたMPIRはあっさり書いてほしいと思っているんだがその気はないらしい・・・だもんで,ワシの「多倍長数値計算入門(出版のあてもないけど仮称)」はごっそり削って骨だけにしてやると画策しているのである。

 つーことで,これからしばらくは「GMPマニュアル翻訳日記」を書きつけていくことにした。これやっておけば自慢(と言い訳)ができるので嫌でも翻訳が進むこと請け合いである(そうか?)。Twitterだと流れちゃってやっぱダメだ,自分なりのメモは分かりやすい場所に残しておかないとねぇ。

幸谷智紀「LAPACK/BLAS入門」森北出版

[ Amazon ] ISBN978-4-627-84881-8, \2600 + TAX

 データ出た出たやっとデータ。悪戦苦闘したと見せかけつつ怠惰に過ごしたこの2年,毎回怒涛の如く押し寄せる編集担当Fさんの問い合わせ要求にきりきり舞いさせられながらもとうとう完成致しました。未完成の原稿を押し付けられて辟易させられた諸先生におかれましてはお詫び申し上げますと共に要らないといっても献本送り付け差し上げますのでどうぞ当方になり替わりまして恨みつらみ晴らして頂きたくいかようにもお使い下さいませませ。薄いから普通の五寸釘で打ち込めると思います。

 しかし出来上がってみればA5版で135ページ足らずのうっすいテキストなのに定価2600円(+消費税)とは暴利ではないかと訝しむそこのあなた! これでも安くしたのですよ,なにせ初版部数を売り切れるとはとても保証いたしかねる代物だし,弱小理工系出版社としては誠にリスキーな物件であるからして3000円でもどーだろーという線を何とか踏みとどまって頂いてこの価格に抑えたのですよこれでも! いーじゃない紙だけデカくて分厚くて開きづらいどっかのICTマニュアル本に比べれば,LAPACKEとCBLASとIntel Math Kernel Libraryと疎行列とMAGMAとcuBLASの解説に加えてOpenMPやPthreadまで言及しちゃってるんだから勘弁して下さいよ旦那。テキスト本体は薄くても,こっちゃどんだけしんどい思いして大量(でもないか)のプログラムを書いたとお思いか!

 まぁ,前書きにも書いたけど,この本,Web情報だけでスラスラLAPACKE, CBLASを使いこなしてプログラムをジャカジャカ書けるよーなパワフルな人向けには一切書いてませんので,読むだけ無駄,買うだけ無駄。とっととGoogleってBingってお仕事に邁進して下さいな,こちとら「行優先ってなーに?」「LU分解って酵素パワーみたいだけど洗剤?」「GPUってお絵かきのどーぐ?」ってなド素人向けに商売しようってんでぇこのすっとこどっこい。連立一次方程式と固有値問題とBLAS活用だけに話題を絞ってどんだけのことができるかっていうHPC業界と数値解析業界からは蝙蝠野郎と白い目見られそーな類書がないテキストなんでいっ。お手本がないテキスト書くってホントしんどいもんなんだよ全く,迷路みたいで精神的に参った参った。人様が積み上げたライブラリにすがってプログラムと解説書くだけでこんだけしんどいのに,全く漫画家さんとか小説家さんは偉いよなぁ,毎回読者を引き込むストーリーをスクラッチから考えなきゃいかんのだから全く頭が下がります。

 つーことで,章立てとかバグ情報とかプログラム一覧はサポートページを見て下さいな。「あの膨大なLAPACK/BLASの全解説?」ってんなわきゃねーだろっての目次見て目次。詐欺だといわれないよーに予防線張っておきますんでその辺誤解のないように一つヨロシク。まぁ学部2~4年生辺りでCは触ったことあるけどボチボチ高速な線型計算を使わないとダメなんだけど自分で書くのはシンドイという状況にある学生さんにとっては導入用としてはそこそこお役に立つのでは?ってな内容でございます。書店や図書館で見かけたらお手に取ってご覧くださいませ。で,間違いあったらお知らせ下さいませ。

 で,心は既に「多倍長数値解析入門(希望的タイトル)」に飛んでたりするんで,もちっと本格的なLAPACK/BLAS本をお望みでしたらちゃんとした線型計算・HPC屋さんにご依頼して下さいまし。なにせこの界隈の方々が立派な解説書書かないからこっちにお鉢が回ってきちゃったんだからねっ!