Masato Hashimoto
cabez****@gmail*****
2010年 5月 22日 (土) 18:40:30 JST
はじめまして、橋本と申します。 いつも M+ FONTS を使わせていただいています。 この度は、現状のフォントのビルドにおける問題の報告と、それへの対処や改善 について提案させていただきたく思い投稿させていただきました。 ちょっと長いメールになりますが、お暇な時に読んでください。 私はビルドに関して以下の2点の問題を感じておりました。 1) Makefile の問題 現状では、make -j4 というふうにジョブを並列実行させると make が失敗します。 これはルールの中に依存関係間で依存関係が存在するものがあるためです。 具体例をあげると、 all: split-svgs ttf の場合、ターゲット ttf の実行時には split-svgs が完了していなければいけ ないところが同時に実行されるため、ターゲット ttf は正常終了しません。 (実際にはそれ以前のところでエラーになります) 。 2) ビルド時間の問題 すべての処理がシーケンシャル前提なので時間がかかります。 これらの対処や改善を行うための修正を行ってみました。 修正したファイル (Makefile と split-svg.pl) を添付します。 1) Makefile への修正 並列実行に対応できるよう修正しました。 2) 時間短縮のための改善 Makefile において、各フォントのビルドをフォントごとに別ルールに分けて並列 に実行できるようにしました。 split-svg.pl において、スプリット処理をマルチスレッド化しました。 並列処理数を split-svgs.pl の第一引数に指定することでその数だけスレッドが 生成されます。現状第一引数が数値でない場合は 1 スレッドだけ生成するように しています (2 くらいでもいいかも)。 このために Makefile で変数 SPLIT_CONCURRENCY を用意しました。 make SPLIT_CONCURRENCY=4 のように指定すると、split-svg.pl への第一引数に 4 が渡されます。未指定なら 現状 1 が渡されます。 *nix な環境で環境変数 MAKEFLAGS に "-j4" などと日頃設定されている方なら、 make SPLIT_CONCURRENCY=`echo $MAKEFLAGS | sed -n "s/.*-j *\([0-9]\+\).*/\1/p"` でいけるはずです。 ※問題点というか積み残し事項 make rebuild-ttf にも依存関係問題があるのですが、こっちは手をつけていま せん (ちょっとややこしい)。ていうか rebuild-ttf って必要? ※注意点など 私はプログラマでもなんでもなく、日頃シェルスクリプトをいじる程度で Perl も素人同然なので、無駄のあるコードかもしれません。 Core i7 などでスレッド数を 8 とか 9 とかにしたら、ディスクアクセスが ボトルネックになるかも。 私のマシン (C2Q Q8200、Arch Linux x86_64) で make -j4、スレッド数 4 で ビルドした時の time の値は以下のようになりました (他のことしながらビルド した時間なので、あまり正確ではありません)。 ■現状 real 37m0.781s user 36m0.669s sys 0m28.308s ■修正後 real 12m55.003s user 38m26.623s sys 0m30.795s coz さんの現行機だとあまり効果がないかもしれませんが :-)、みなさんに内容を 確認していただき、ツッコミなどあればお聞きかせいただければと思います。 そして問題がなくなったら適用していただけたらと思います。 以上、よろしくお願いします。 -- HASHIMOTO, Masato -------------- next part -------------- テキスト形式以外の添付ファイルを保管しました... ファイル名: mplus-build-update.tar.bz2 型: application/octet-stream サイズ: 1915 バイト 説明: 無し Download