Re: Specialization (Static branch prediction and annotation)
新城@筑波大学情報です。こんにちは。
In article <m3znfl5383.fsf@maedapc.cc.tsukuba.ac.jp>
MAEDA Atusi <maeda@cc.tsukuba.ac.jp> writes:
> これは分かるんですけれど,g_10(), g_20(), g_4()とかがたくさんできるん
> じゃないか(だったらインライン展開の方が良いんじゃないか)ということです.
> あちこちからg(10, x, y)のように特定の引数だけで呼ばれるということが,
> そんなにあるものかどうか.あとは,specialize結果をちゃんと(同じインス
> タンスを呼ぶように)共有するのがそんなに簡単なのかどうか(色んなファイル
> から呼ばれてたり,とか).
specialization の結果のコードの共有をするような、specializer
は、見たことがないですね。研究レベルでは、誰かがやっていそう
な気もするんだけれど。specialization は、高速化が目的なので、
「やりすぎて遅くなったらやらない」というスタンスです。そすい
う意味では、必ずうまく行くことになっているんだけど、うまくいっ
たかどうか誰が確かめるかという問題が残る、ということですかね。
逆に、コードの共有が本当に得なら、specialization の逆をすれ
ばいいんですよね。仮に generalization と呼ぶことにします。
(←正式の用語があれば、教えてください。) 簡単にできる
generalization は、inline の逆に outline というか、わざと関
数呼出しにするものです。
前に、Tempo の開発元の一人に、inline の逆をしてみたらとは言っ
てはみたんだけど、そんなことを specializer に求められても、、、
みたいな反応でした。それはそうです。
In article <3989159news.pl@insigna.ie.u-ryukyu.ac.jp>
kono@ie.u-ryukyu.ac.jp (Shinji KONO) writes:
> 河野真治 @ 琉球大学情報工学です。
> 自明な例だと、
> inline fd(struct handle hd) { return hd.hoge->hage->fugo->fd; }
> みたいな奴。で、これが、
> fd(hd0) = fd(hd0) + 3;
> みたいな形で呼ばれるわけだな。(おっと左側には置けないが...)
C++の参照型を使えば、置けるんでしたっけ。C++の参照型は、
ソースが読めなくなるから一般的には使いたくはないんだけど。
OSの特権モードのような所なら許してもいいかな。
> そのあたりは色んな技術があるわけなんだけど... 何故、inline
> だけが使われているのかと言うと、呼び出し側だけ見れば良いから
> なんだろうな。でも、最適化という観点から見れば、全体を見なけ
> ればだめなのは当然なんですけどね。
C言語だと inline は、マクロよりははるかに見やすいので、そう
いう意味では許すかなあ。register と同じように、そのうちコン
パイラが無視するんじゃないかなあ。
inline で意味的に違うのは、オブジェクトにシンボルが残らない
ことです。昔の Linux (2.2) なんか、この機能に頼っていて、
inline を外す、つまり、コンパイル・オプション -O2 を取ると、
リンク時にエラーになります。デバッグしたいだけなのに。今でも
そうなんでかかね。
In article <septgh95e3.fsf@astec.co.jp>
Takuya KUDO <kudo@astec.co.jp> writes:
> 組み込み向けだとコードサイズが無視できなくてキャッシュに入る
> きるかどうかでパフォーマンスに大きな影響がでます。
メモリ使用量を減らすなら、インタプリタにするといいんですよね。
昔は2段階のインタプリタもあった思いました。でも、全部インタ
プリタというわけにもいかなくて、展開というかコンパイルという
か specialize すべき所もあるのでしょうけれど、誰がどうやって
判断するんでしょうね。
\\ 新城 靖 (しんじょう やすし) \\
\\ 筑波大学 電子・情報 \\
Fnews-brouse 1.9(20180406) -- by Mizuno, MWE <mwe@ccsf.jp>
GnuPG Key ID = ECC8A735
GnuPG Key fingerprint = 9BE6 B9E9 55A5 A499 CD51 946E 9BDC 7870 ECC8 A735