CH3COOH(酢酸)のさくっと393

VB.NET(VS2003)でお仕事中.Windows Mobile大好きです。

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  413  : 記事  0  : コメント  7803  : トラックバック  93

ニュース

CH3COOH(酢酸)の実験室 or SOFTBUILD

書庫

日記カテゴリ

なんか白熱してますが^^;

を見て、ついつい昔を思い出しました。 とある組込み機器での開発をしていた時の話です。

関数funcBをCOUNT回分コールする関数funcAがありました。
仕様上、これを2~3ms削らないといけなくて、

void funcA(void)
{
	for (int i = 0; i < COUNT; i++)
	{
	    funcB();
	}
}


void funcA(void)
{
	funcB();
	funcB();
	(ry
	funcB();
	funcB();
}

みたいにfor文を使わない様に書いた事があります(本当はもっと複雑な処理をしてましたので飽くまでもイメージです)。

2~3msよか、もっと削れて結構効果が大きかった気がしますが、もう昔の事なので結果まで覚えてないです。

今だったらもう少しマシな解決策を提示出来ると思いますが、若さゆえのなんとやらでした……

......
:.... . ∧∧   ∧∧  ∧∧   ∧∧ .... .... .. .:.... .... ..... .... .. .
... ..:(   )ゝ (   )ゝ(   )ゝ(   )ゝ無茶しやがって… ..........
....  i⌒ /   i⌒ /  i⌒ /   i⌒ / .. ..... ................... .. . ...
..   三  |   三  |   三  |   三 |  ... ............. ........... . .....
...  ∪ ∪   ∪ ∪   ∪ ∪  ∪ ∪ ............. ............. .. ........ ...
  三三  三三  三三   三三
 三三  三三  三三   三三

投稿日時 : 2008年3月5日 22:52

コメント

# re: [C/C++]なんというか仕様が満たせなかったので仕方がなったのですよ 2008/03/05 22:55 CH3COOH(酢酸)
あ。タイトルの日本語がオカシイ……

×:仕方がなったのですよ
○:仕方がなかったのですよ

# re: [C/C++]なんというか仕様が満たせなかったので仕方がなったのですよ 2008/03/05 23:03 myugaru
CH3COOH(酢酸)さん、トラックバックありがとうございます!はじめまして!ですねw

あー昔そういうコードいっぱい見ましたよー。
速度を追い求めるっていうトッテモ”漢”な目的なら応援しちゃいますけどお。
なんかですね、ステップ数でお金もらってた時代なんてわざわざループ展開してコード増やしてたなんていうトッテモダサイ事実も本当にあった怖い話らしいですよww

・・・ではまたイヂってくださいm(_)m


# re: [C/C++]なんというか仕様が満たせなかったので仕方がなったのですよ 2008/03/05 23:23 スーパーあんどちん
X68000の某ゲームでは使用していないText VRAMにVRAMへの描画用のコードがループ展開されてましたが。

最近のCPUではそんなことするとキャッシュから外れるから逆に遅くなる悪寒。

因みにx86(否8086)の場合プリフェッチキュー(今もあるのか?)に収まるループならとても速く実行できたとか聞いたことがあります。



# re: [C/C++]なんというか仕様が満たせなかったので仕方がなったのですよ 2008/03/05 23:30 CH3COOH(酢酸)
>myugaru さん
はじめましてです!

>速度を追い求めるっていうトッテモ”漢”な目的なら
”漢”じゃ無いですよー。その関数で高速化しか考えていなかった愚か者です。もっと全体を巻き込んで、速度改善するべきでしたね(´;ω;`)ブワッ

>ステップ数でお金もらってた時代
業務系の経験が無いので、ステップ数幾ら云々の契約は今まで幸いにしてありません。ステップ数でお金貰えたらメチャクチャ頑張って、それこそRAMが溢れるギリギリまで処理を捏造しますww

# re: [C/C++]なんというか仕様が満たせなかったので仕方がなったのですよ 2008/03/05 23:33 melt
まあ画像処理なら8ループ展開とか普通にやりますから、最適化としてはありなんじゃないかと。

COUNT が定数だったら...

template<int Count, int MaxCount>
inline void funcB(typename boost::enable_if_c<Count == MaxCount>::type* = 0) { }

template<int Count, int MaxCount>
inline void funcB(typename boost::disable_if_c<Count == MaxCount>::type* = 0)
{
  funcB<Count + 1, MaxCount>();
}

void funcA()
{
  funcB<0, COUNT>();
}

こんなんとか。
末尾最適化するコンパイラなら大丈夫なはず。

# re: [C/C++]なんというか仕様が満たせなかったので仕方がなったのですよ 2008/03/05 23:56 CH3COOH(酢酸)
2人とも職人気質を感じますよ((;゚Д゚)ガクガクブルブル

>スーパーあんどちんさん
最近のCPUで1msを削る為に必死になるシーンがあるんですね。

>meltさん
boost恐るべし……


Post Feedback

タイトル
名前
Url:
コメント