お世話になります。
大量の四則演算をする必要が出てきて処理時間が足りるか不安になってきました。
アセンブラ言語は速いと言われますが、マイコンが演算器を持っている場合はC言語で書いても同じなのでしょうか。
使っているのはRL78です。
初歩的な質問で本当に申し訳ありません。教えていただけたら幸いです。
よろしくお願いいたします。
ルネサスの超エキスパートがコンパイラーを作っているのでC言語でもアセンブラでもあまり差が無いと感じることが多くあります。検証や発展を無視してよほどの裏技を使わないとスピード重視の最適化にくらべてさほど速くできないと思います。また、ルネサスのコンパイラーは優秀との見解も良く聞きます。C言語の方がかえって良いのではと思います。 チョット話がずれますが、ターゲットリンク(Simulink/Stateflowモデルからの自動コード生成ツール)の評価で手作業が実行時間は圧倒的に勝ったもののフラッシュおよびRAMサイズで負けた事があります。検証や変更などを意識してコーディングしますが、さすがにガックリきます。超天才でも先発完投20勝&三冠王なんてのはあり得ないので、凡人の私はお客様のご要求をSimulink/Stateflowに入れ込むところに集中してアセンブラどころかC言語コーディングも止めてSimulink/Stateflow+ターゲットリンク+ルネサスコンパイラにしようと思うこの頃です。
チョコです。
追加で,コメントします。
RL78のレジスタ・バンクをうまいこと使い(データアクセス用のポインタで使用するレジスタを通常の処理用と独立させる),データの構造をよく考えれば,アセンブラでの高速化は可能性がありますが,どの程度速くなるかは分かりません。
なお,RL78にはS1~S3コアの3種類があり,S1コア(RL78/G10)には,そのようなハードは内蔵されていないので問題外です。RL78/G13のようなS2コアのデバイスがハードウェアを制御用のレジスタを介して制御するものです。RL78/G14以降のS3コアは入出力がレジスタ渡しの命令でのサポートになっています。使用予定のデバイスで異なることがあります。
まずは,Cで評価してから対応を考えるのがいいでしょうね。
はるのうらら さん、こんにちは。NoMaYです。ひとくちに、アセンブラ言語でプログラムが書けるようになるといっても、さまざまなレベルがあると思います。(英語、独語、仏語、露語、中国語、とかもそうですよね。)(A) マニュアルを一切見ずに、数万行のアセンブラプログラムを書いて、更に、自力で機械語へ変換出来てしまう。嘘か真か分かりませんが、アセンブラ全盛時代にはそんな人がいた、という話も見掛けたような気がします。。。。途中のランクを省略(というか実際にランク分けの内容まで考えていませんが)。。。(E) マニュアルを見なくてもコンパイラが生成したコードが何となく分かる(最適化が掛かっていても)。また、コンパイラが生成したアセンブラソースをベースにしてマニュアルを見ながら多少の追加/変更/削除が出来る(多少時間が掛かっても)。脱線しますが、私はEランクですね。ただ、「多少の追加/変更/削除」という部分で、パズルを解くような追加/変更/削除を行うことが出来るというのが、ランクの枠外の私の特技かな、とも思っていますが、、、(C言語のマクロでもパズル的なものを考えたりしますし、、、)話を戻しますと、Eランクでも充分に昇進/昇給の助けに成るのではないかと思う反面、もう今だと、Aランクであること自体が昇進/昇給の助けになることは無いだろうなとも思うのです。あと、自分の経験で言うと(プログラムの性能向上はわりと私の得意な業務だったりします)、それなりの規模のプログラムでは、けっこう無駄な処理/効率の悪い処理、というのがあったりしますので、それを見つけて、削除する/処理を見直す、とかしてました。(C言語レベルで。)自分ではやったことがなかった(と思う)のですが、アルゴリズムの変更(例えばバブルソートをバイナリソートにする)とか、数学的な性質を利用した演算量の削減(乗除算回数が少なくなるようにうまくカッコで括るとか多項式の直交性から値が0になることが分かっている部分は計算しない)とか、そういうのも有効かな、と思います。アセンブラ化したのは、(数十行レベルの)割り込み処理の高速化とか、(フラッシュメモリのブロックサイズの事情で)270バイトのコードを256バイトに収める(パズル脳をフル回転させて1週間とか掛けて([追記]←これはもともとアセンブラプログラムだったものを更にというものでしたのでテーマが少し違いますかね))とか、そういうところだったですね(と思う)。
はるのうららさんがノンエグゼンプトなら、"全部"を上司に聞いてみてはいかがでしょうか? ビル・アトキンソンがハードウエアを勉強していたらQuickDrawは存在していないし、松永真理さんが理科女子でコンピュータに詳しかったらiモードも無かったと思います。こだわりが過ぎると新しい視点に気が付かずに世間から遅れを取ることもあります。情報端末や家電などの開発エンジニアでやっていくならアセンブラやCさえも知らなくて良いと思います。その代わりに情報端末や家電などの勉強に力を割くべきです。まぁ、角が立つので十分に考えて判断してください。