(toppers-users 2276) 雑談:割り算と条件分岐
酔漢
suikan7 @ yahoo.co.jp
2006年 1月 31日 (火) 20:57:51 JST
こんにちは。
JSP 1.4.2 カーネルのソースを眺めていて面白いコードを見つけたので、皆さん
の息抜きになればと思い投稿しました。忙しい方は飛ばしてください。すみません。
当のコードはkernel/time_event.cのisg_tim()です。このルーチンはタイマー割
込みを受けて内部のティックを更新します。その更新部分は次のようになってい
ます。
/*
* next_time,next_subtime を更新する.
*/
#if TIC_DENO == 1
next_time = current_time + TIC_NUME;
#else /* TIC_DENO == 1 */
next_subtime += TIC_NUME;
next_time = current_time + next_subtime / TIC_DENO;
next_subtime %= TIC_DENO;
#endif /* TIC_DENO == 1 */
TIC_DENO != 1の場合、分数加算をするためにnext_timeとnext_subtimeを累積し
ています、そのときの両者の計算に割り算と剰余算使われています。コンパイラ
によっては一度の割り算で商と余を得ると思いますが、それでも一般には割り算
のコストは大きいです。
けちですみません。しかし、移植を考えていたシステムは、ティックに使いたい
タイマーが32768の1/n周期で割り込みを発生するので考えがよろめいていたのです。
もし次のリリースがありましたら、
/*
* next_time,next_subtime を更新する.
*/
#if TIC_DENO == 1
next_time = current_time + TIC_NUME;
#else /* TIC_DENO == 1 */
next_subtime += ( TIC_NUME % TIC_DENO );
next_time = current_time + ( TIC_NUME / TIC_DENO )
if ( next_subtime >= TIC_DENO )
{
next_subtime -= TIC_DENO
next_time ++;
}
#endif /* TIC_DENO == 1 */
といったコードもご検討ください。コンパイラがきちんとしていれば、割り算を
使わないコードを生成してくれます。
--
酔漢
Blackfin 空挺団 http://adsp2191.hp.infoseek.co.jp/
TOPPERS/JSP for Blackfin http://sourceforge.jp/projects/toppersjsp4bf/
Blog http://blackfin.g.hatena.ne.jp/suikan/
--------------------------------------
GANBARE! NIPPON!
Yahoo! JAPAN JOC OFFICIAL INTERNET PORTAL SITE PARTNER
http://pr.mail.yahoo.co.jp/ganbare-nippon/