09/09/27 02:10:05 7x2FVNtX
>896
>ところで、処理中に多重割込が発生する状況を考えれば、仮に関数レベルでの
>静的なスタック消費量が判ったところで、どれほどの意味があるの?
MRやHi(ITRON)のマニュアル見てみたらどうですか?
call wakerの値をベースにスタックをどれだけ設定すればよいか書かれて
いるよ。
確かに多重割り込みが起こる場合には、何重になるかまでを考慮する必要
がある。 MRのある意味隠れ機能だと思うけど、多重割り込みしない
使い方があるので、それにするとスタックを少なく設定することが可能には
なるよ。
9FUORgahさんも指摘しているけど、静的なスタックサイズをわからないまま
どうやってそれぞれのスタックサイズを決めるというのでしょうか?
まさか、スタック領域に固定コードを書いて、実行後にどこまで使われた
かを見て、そのサイズ+αという方法ですか?
904:774ワット発電中さん
09/09/27 02:28:20 Vde8y+bS
そんなに厳しい条件なら、俺はスタックチェックのコードを埋め込むこと、考えるな
使用メモリ(スタックとか)の見積りは仕様である程度は判断できると思うけど
905:774ワット発電中さん
09/09/28 10:48:22 K7ACvINK
話を切ってしまい、すみません。教えてください。
例えばH8の3069で、
数値の計算は、bit幅の長短で速度が変わるものでしょうか。
906:774ワット発電中さん
09/09/28 11:21:35 HqL20XZQ
>>905
アセンブラというか、命令セットのレベルでの話よね?
とりあえず
ルネサスのサイトいって、H8ファミリーのソフトウェアマニュアルの
ところにあるドキュメントに、命令実行ステート数が書いてある。
内蔵RAM上だけの演算ならほとんど変わらないのでなかろか。
907:774ワット発電中さん
09/09/28 16:41:50 K7ACvINK
ありがとうございました。
と言うことは、ロングイントもバンバン使っても大丈夫そうですね。
僕自身がセコいためか、高速化のためにと、チャーばかり使っていました。
908:774ワット発電中さん
09/09/28 19:38:39 zyYYHaep
>907
データサイズによっては、演算に使うデータのロードやストアの速度差が多少は響くこともあるかもしれない。
命令単体じゃなく、プログラム全体では。
と、役に立たないかもしれない横槍。(もしくは混乱させるだけでまったく役に立たないゴミ情報かも?)
909:774ワット発電中さん
09/09/28 20:29:41 fzvx5u8m
俺も以前は「bit数が少ないほうが高速になる」と信じていた。
だから変数は極力charで取って・・・・などね。
しかし一番早いのは、そのマイコンに合ったbit幅を使うことだとわかっいからはも
on/offフラグでもunsigned int (16bit)で、贅沢に使っている。castの手間も省けるし。
signed も素直に使う。昔はsignedも遅くなると思って、unsigned で工夫したけど、
疲れる。H8なら速いので、気にせずにバンバンやろう。
ただ注意しているのは、なるべくfloatを使わないようにするだけ。
910:774ワット発電中さん
09/09/28 20:50:55 EZxJcGqb
ADDとSUBで直値だとB=1,W=2,L=3っていうステートのズレがあるが、それでも2ステートしか変わらんしねえ。
いちお、16bitコアだから、16bitで納めるってのが基本かしら。
911:774ワット発電中さん
09/09/28 21:41:16 YnpUUr5t
これだからCしか出来ない奴は…
912:774ワット発電中さん
09/09/28 23:24:08 83tIY6ou
RXとかになると、たとえば足し算(ADD)
LONGしかなかったりしますね。
速度は、データ長ではなく、なにとなにの演算かに
よりますね。マニュアルにはパイプラインのDステージ以降の
マイクロオペレーション数によるものらしい。
913:774ワット発電中さん
09/09/29 02:58:28 1qaqdGkK
>910
>ADDとSUBで直値だとB=1,W=2,L=3っていうステートのズレがあるが、それでも2ステートしか変わらんしねえ。
その速度差だと、命令フェッチ時間の差が実行時間に直結してるんじゃない?
914:774ワット発電中さん
09/09/29 05:57:07 I1SY7+Pw
>>907
>ロングイントもバンバン使っても大丈夫そうですね。
はぁ?
あくまでも、ウェイトに無関係の内部RAMを使う場合を言うが・・・
特にサイズを意識する必要がない限り
コンピュータは語長サイズで扱うのが最も高速
つまり3069なら16bit
データバスが何ビットか考えてミロ
>>909
>だから変数は極力charで取って・・・・などね
8bitコンピュータなら正しい。
>昔はsignedも遅くなると思って、unsigned で工夫したけど、
昔の情報処理の2種。今はなんて言うか知らんが、なんのために補数を使ってるかっていう一から勉強し直せ
>なるべくfloatを使わないようにするだけ。
それはH8でデータバスが16bitだからだ。32ビットデータバスなら32ビットfloatを使うことは少しもおかしくない。
ただし数値演算ユニット)搭載のプロセッサで64ビット演算にしか対応してなくてdouble よりも、
floatを明示すると速度低下するプロセッサもある。
915:774ワット発電中さん
09/09/29 06:36:03 1LKlHEn3
>>914
> 32ビットデータバスなら32ビットfloatを使うことは少しもおかしくない。
バスが32ビットだからといって32ビットfloatがハードで扱えるとは限らないから整数演算で済ます事は良くある。
そもそも、バスが32ビットだからといって最適な語長が32ビットとも限らない。
916:774ワット発電中さん
09/09/29 07:01:28 I1SY7+Pw
>>915
>バスが32ビットだからといって32ビットfloatがハードで扱えるとは限らないから整数演算で済ます事は良くある。
お前はアホか。
整数で済むダイナミックレンジの計算になんでfloat使うんだ。
>>909が心底バカでも無い限り、なるべくfloatを使わないのはdoubleに対してだろうが。
常識持てや。お前が何の修飾詞も書かず"バス"と書いてるところをこちらが"データバス"と察してやってるのと同じようによ。
>バスが32ビットだからといって最適な語長が32ビットとも限らない。
ハーバードアーキの場合かよ。しょーもない揚げ足取りしてんなカス
設計デフォルトのデータサイズにあわせてレジスタサイズ、バスサイズを決めてハードウェア設計しないことには
CPUの設計ができないんだよマヌケ。
語長==ワードサイズというのはそのCPUが最も効率よく扱える情報量の長さだ。
バスが32bitで32bitが最も効率よくないCPUなんてのは欠陥設計だ。
もっと言えば、こんなものを32bitコンピュータとして販売してるなら誇大広告だ。
917:774ワット発電中さん
09/09/29 07:21:32 1LKlHEn3
>>916
> 整数で済むダイナミックレンジの計算になんでfloat使うんだ。
> >>909が心底バカでも無い限り、なるべくfloatを使わないのはdoubleに対してだろうが。
ハードで32ビットfloatを計算出来ない場合、32ビットや64ビットの整数の方が圧倒的に早い場合が多いから
整数の方がダイナミックレンジが狭いとは言えない。目的次第だ。
>ハーバードアーキの場合かよ。しょーもない揚げ足取りしてんなカス
それしか思いつかないのかよw
>バスが32bitで32bitが最も効率よくないCPUなんてのは欠陥設計だ。
>もっと言えば、こんなものを32bitコンピュータとして販売してるなら誇大広告だ。
お前の頭の中ではなw
バス幅と語長を合わせなきゃいかんなんて制限はお前の頭の中だけだ。
語長より大きいバスや小さいバスを持つCPUは幾らでもあるし
お前の頭より欠陥は少ないと思うぞw
918:774ワット発電中さん
09/09/29 08:20:46 m6XJFmhb
お前ら朝から元気ですね
919:774ワット発電中さん
09/09/29 08:57:11 I1SY7+Pw
>>917
>整数の方がダイナミックレンジが狭いとは言えない。目的次第だ。
お前ホントばかか。高校の普通科の情報処理とやらからやり直せ。
32bit int の数値精度を犠牲にして、指数部を設けてダイナミックレンジを大きくしてるのがfloatなんだよマヌケ。
笑わせんなアホが。朝から寝ぼけてんのか。
>バス幅と語長を合わせなきゃいかんなんて制限はお前の頭の中だけだ。
これをいうならデータバス幅とレジスタ長さだろうが。
語長というのはCPUがもっとも効率的に扱えるデータ長のことだ。
一番都合がいいとメーカが主張してるんだからそのデータサイズでアクセスする場合最も速度が速い
上でも言ったが、アドレスバスなのかデータバスなのかちゃんと書けよ。アホ学生
>語長より大きいバスや小さいバスを持つCPUは幾らでもあるし
メーカ xx bit プロセッサと命名してる場合、標準レジスタサイズ、データバス幅、語長はxx bit。
語長より大きいデータサイズアクセスは、所用クロックにおいてペナルティがあるのが一般的だ。
いくらでもあるというならx86のように拡張につぐ拡張を重ねたcpuや、ハーバード以外の、組み込み限定で上げてミロや
920:774ワット発電中さん
09/09/29 09:10:28 d+GbESAA
>>ID:1LKlHEn3 コイツってスタックサイズも見積もらずにKPITだのgccつかうだの戯言ほざいてたシングルタスク限定コードした書いたことのない >>ID:9FUORgahじゃねーのか?
gccでもcall walker早く動かせよ。それともトンズらのチキン野郎か?よかったねぇネットじゃ誰か特定されなくて、なぁチキン野郎
921:774ワット発電中さん
09/09/29 09:19:11 EgT3g/g+
基地外に水をやらんでくれよ・・・せっかく静かになってたのに
922:774ワット発電中さん
09/09/29 10:23:45 n+gKxBT4
なんで逐一、バカだカスだと宣言するのだろうか。定型文かマクロなのだろうか。
さておき、符号付きの場合、符号ビットを抜いて符号付き31bitデータとかいうのかしら?
923:774ワット発電中さん
09/09/29 14:58:39 1qaqdGkK
浮動小数点演算を使うと、高速なFPUを内蔵するチップでない限り、整数演算より大幅に遅くなるだろ。
floatを使わないってのは、そういう意味だと思うんだ。
doubleよりfloatが遅くなる場合が云々、って意味じゃないと思う。
>915
即値を扱う場合、レジスタ長なみのデータサイズを扱えば命令長が長くなるか命令数を増やすしかないから、最低でも1ステップは遅くなるな。
SHのごとく、即値を扱えないようにして必ずレジスタ間接を強要するアーキテクチャなら無関係だが。
即値以外の、レジスタ直接なら916の言うとおりだろうが...
32ビット固定長命令のMIPSやPowerあたりだと、32ビット即値を一命令では扱えないから
命令を分割して2命令にする分だけ遅くなる、とかな。
>917
ダイナミックレンジと演算速度を混同してない? 全然違う意味でしょ。
>バス幅と語長を
32ビットアーキテクチャながら16ビット固定長命令のCPUだってあるし、
32ビットアーキテクチャでデータバスが64ビット幅ってCPUは数多くあるからねえ。
それどころか、16ビットアーキテクチャで最小命令長16ビット、データバス16ビットでレジスタだけ32ビットってのもあったしなあ。