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だと流れちゃってやっぱダメだ,自分なりのメモは分かりやすい場所に残しておかないとねぇ。

QDライブラリ文書の日本語訳

 QDライブラリの文書を日本語訳したので公開。Bailey先生にお伺い立てたら迅速なる対応を取って頂いてサクッと公開の許可が下りた。

 [PDF] http://na-inet.jp/na/qd_ja.pdf
 [TeX] http://na-inet.jp/na/qd_ja.zip

 どーも頭が固いもんで,一度日本語しないと頭に入った気がしないという年寄りの悪い癖。問題ありましたらお知らせ下さいませ。>QDに詳しい人

 以下はソースに同梱した文書(readme_ja.txt)。

%—————————————%
% qd_ja.tex tranlated by T.Kouya
% How to compile: platex qd_ja (in qd-2.3.x/docs directory)
% Translation Permission: 2016-02-02 (Tue)
% Translation Version: 0.1 2016-02-02 by T.Kouya
%—————————————%
1. 初めに
 本文書は,QDライブラリ (qd-2.3.17.tar.gz)のdocs/qa.texを日本語訳したものです。現著作権はQDライブラリに付属します。日本語訳は幸谷智紀(tkouya@cs.sist.ac.jp)が行いました。

2. 文書のコンパイル
 qd-2.3.17を解凍してできるdocsディレクトリにこのqd_ja.texを置いてplatexでコンパイルして下さい。図版は全てオリジナルのものを使っていますので,本文書の配布物には含まれていません。

3. 訳語について
 「double-double」については「倍々(倍倍)精度」という訳語が使われているケースが多いようですが,そうすると「quad-double」を「4倍々精度」とせねばならず,4倍精度と間違いやすい上に,「倍々」という語感が好きではないので(bye-byeに聞こえて仕方ない),本文書では「double-double」を「DD」に,「quad-double」を「QD」と簡略形を使って表記しています。

4. 謝辞
 本文書の公開に当たって関係各位に根回しして頂き,迅速なご許可を取りつけて頂いたDavid Bailey教授に感謝致します。

「多倍長数値計算入門」シラバス=目次予定

 次年度の後期に担当することになった「数値解析2」のためのテキストして下記のシラバス案を作ってこれに沿ったテキスト「多倍長数値計算入門(仮)」を書いてみることにした。

  1. 多倍長数値計算とは? 
  2. コンピュータの内部と演算の高速化手法
  3. 多倍長自然数演算
  4. 多倍長整数演算とその応用
  5. 多倍長浮動小数点演算
  6. 多倍長精度浮動小数点演算ライブラリの比較
  7. 並列化手法
  8. 初等関数の計算
  9. 円周率の計算
  10. 基本線型計算と並列化
  11. 連立一次方程式の求解
  12. StrassenのアルゴリズムとLU分解への応用
  13. 非線型方程式の求解
  14. Remez法による最良関数近似多項式の導出
  15. 補外法による常微分方程式の初期値問題の求解

 学部の講義だから「スタンダード」なものを講義する必要があるので,今までは多倍長計算については多少触れる程度にとどめていたのだけれど,QDもMPFR/GMPもすっかり定着したし,GMPに至ってはこれがないとLinuxのセキュリティも確保できないほど深くシステムに食い込んじゃっているので,こんだけスタンダードになっちゃったものを逆に講義しない方がおかしいという状況だからもう遠慮は要らんわな。一応整数演算とその応用についても触れるべく1章分ぐらいは雑多なものを入れる予定だが,そのほかの部分は数値計算の話題になる。

 こういう知識詰め込み型講義ってのは,漆塗り型の基礎教養的講義に比べて嫌われるらしい。受講生に言わせると,毎回講義内容もトーンもガラリと変わっちゃうので目まぐるしくて戸惑うとのこと。まぁこちらとしては「うるせぇガタガタぬかすな一度ぐらい目を回す経験ぐらいしておけ!」というつもりでやるのでアンケートはズタボロになりそうだし,ひょっとしたら受講生ゼロかなぁとも思うんだが(それはそれで一面ラッキーではある),こちらとしてはせっかく担当するのだから準備するのも「楽しみ」がないとツマランのよねぇ。

 演習はC++を主軸としつつ,ほとんどANSI Cでプログラミングという感じ。環境をWindows向けに整えるのがちと骨であるが,MPIRはあるし,QDは多分ネイティブVisual C++でも問題なくコンパイルできるだろうし,まぁ何とかなるのかなと楽観している。ダメならLinuxのCUI環境提供かCygwin使えばいいしね。

 つーことで今後LAPACK入門(仮)の校正作業と並行して準備を進めていく予定。さっさとこれ書いてワシのアカデミックキャリアの半分以上は終わったなぁという感慨を持ちたいのであります。〆切は来年8月上旬。さてどーなりますなら。