甲府方重信Blog

...Shigenobu Koufugatas Blog

  • Increase font size
  • Default font size
  • Decrease font size
Error
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
  • Unable to load Cache Storage: database
Home 業務日誌 Adaプログラミング Adaチュートリアル セクション17.3 - 効率性

Adaチュートリアル セクション17.3 - 効率性

E-mail Print PDF

セクション17.3 - 効率性

多くの環境において、プログラムの効率性を最大化するのは重要です。例えば、プログラムの実行時間や、メモリーの利用率などです。

効率性を高めるため(性能と呼ばれます)に、ちょっとした方法はコンパイラーオプションを設定することによって、プログラムの最適化を使うことです。これは、効率性を得る方法として、容易な方法です。なぜなら、ちょっとした時間ですみますし、ソースコードを一切変更せずに済むからです。そして、ほとんどのコンパイラーはプログラマーが要求しなければ、もっとも積極的な最適化を有効にはしていません。

これ以外の効率化テクニックを使用する前に、現在のリソースの何が使用されているかを計測してください。ほとんどのプログラムは、全体のプログラムの非常に小さな部分においてほとんどの時間を消費しています。このように、もしプログラマーが実行時間を改善したい場合、プログラマーはこれらの小さな部分において実行時間を小さくしなくてはなりません。プログラマーはしばしば、実行時間がどこに費やされているか、不正確な推測をしていることがあるので、計測が重要なのです。

もっとも有効な効率性改善の手段は、通常、問題を解くために使われるアルゴリズムの変更です。

Jon Bentleyは、一般的な効率性改善テクニックのための二冊の良書を書いています。Writing Efficient Programs [Bentley 1982]Programming Pearls [Bentley 1986]です。

ここでは、Ada特有の効率性改善(性能)のための機能を示しています。:

  1. Pragma Inline は、特定のサブプログラムでは、通常のサブプログラム呼び出し(これは若干のオーバーヘッドがあるので)、インラインでそこに含めるべきコードを記述します。これは、コードが数行であるシンプルなサブプログラムでは有益でしょう。
  2. Pragma Optimize は、速度の最適化、メモリ空間の最適化をしたい場合に選択します。
  3. Pragma Suppress lは、さまざまな実行時チェックを抑制します。これは実行時チェックを抑制する前に、プログラムがきちんと動くことを確認した上で行うのがベストです。プログラマーは、選択された型もしくは、サブプログラムに対する選択されたチェックを抑制するだけです。これは、プログラマーにAdaの安全性機能のほとんどを維持することができます。Pragma Suppressを使用する前に、実行時チェックに依存したプログラムになっていないことを確認してください。例えば、もし実行時のチェック、を抑制したために、ゼロによる割り算に対する例外を取り扱おうと試さないでください。その代わりに、割り算に使われる値がゼロかどうかをチェックすべきです。
  4. Pragma Restrictions は、選択されたAdaの機能の使用から、Adaプログラムを制限します。ある場合においては、この機能を知っていると、Adaコンパイラーは、より速い、もしくは小さいコードを生成するかもしれません。 これについてはAda Rationale part III, D.7で議論しています。
  5. Pragma Pack は、コンパウンド型によって使用される空間の量を減らすために使用することができます。(例えば、配列やレコードなど). しかしながら、特定のマシン上ではPragma Packはプログラムの速度低下を引き起こすことがあるので注意が必要です。(ビット・ストリングの圧縮と展開のためです)
  6. Fortranを除いたすべての言語と同じように、多次元配列の使用時、最後の次元が最速となります。もし、最初の次元を最速としたいのであれば、 (もし、プログラマーがFortranのコードを書き直しているのであれば、 「pragma Convention(Fortran, X)」を使ってください。ここでXは配列の型です。
  7. コンパイル時にそのサイズが分かっている型(制限型と呼ばれます)は、そのサイズが分かっていない型(非制限型と呼ばれます)よりもより速く渡すことができます。これは、非制限型に対してはAdaコンパイラーがそれらのデータと同じように、データの境界を渡さなければならないためです。これは、関数が値を返す際に、非制限型を返す際に特に重要となります。 技術的な理由のため、これは相対的に実行が相対的に高コストとなります。非制限型の例には、文字列型、コンパイル時に境界が明示されていない配列などが含まれます。制限型の例には、整数型、浮動小数点型、すべてのアクセス型、固定長配列、固定長レコードが含まれます。

性能改善についてのいくつかの示唆は、 the "Ada Programmer Frequently-Asked Questions (FAQ)" のファイルで見つけることができます。より多くの示唆が、Performance chapter of the AQ&S guideに示されています。

出展: http://www.adahome.com/Tutorials/Lovelace/s17s3.htm

Last Updated on Wednesday, 23 January 2013 12:39  

ニュース速報

リナックスアカデミー新宿アネックス校舎で、LPIC2の資格対策講座を開催した

 

受講生は、12名。

1日目の演習で、研修室の半分のネットワークが動かないトラブルが発生。

システム部の人に、調査してもらった。教務部に、連絡しておく必要がある。

企業からの研修生が多かったため、演習の進度が速く、時間が若干余った。

別途、サーバー構築で作成していた演習課題を追加して、時間を調整した。

20代、30代の若手社員が多かった。