費用について教えてく機能電話のかけ方は?
-
01-07-2019 - |
質問
比
- 簡単なメモリアクセス
- ディスクアクセス
- メモリアクセスを他のコンピュータを同一ネットワーク)
- ディスクアクセスを他のコンピュータを同一ネットワーク)
C++ではwindows上でしか利用できません。
解決
相対タイミング(なによりの要因100;-)
- メモリアクセスにはキャッシュ=1
- 関数呼び出/返却のキャッシュ=2
- メモリアクセスのキャッシュ=10..300
- ディスクアクセス=1000..1e8(償却によってバイト数を譲渡)
- によって主権を回
- に譲渡することができるユーティリティを
- る少なくとも数千opsは、ユーザー-システムすることを渡少なくとも回I/Oの申請が必要にな予定は、結果を記載する必要があ背;あるバッファを割り当て...
- ネットワーク通話=1000..1e9(償却によってバイト数を譲渡)
- 同じ引数としてディスクi/o
- 原転送速度はかなり高いものの、一部のプロセスのその他のコンピュータをしなければならな実務
他のヒント
機能呼び出しは、単にシフトのフレームにポインタをメモリーのスタックは、かかるフレームます。機能パラメータの移転によって地域のレジスタをご利用の際はスタックポインタは、新しいトップのスタック関数の実行.
と比較し時間
関数呼び出し~シンプルなメモリアクセス
関数呼び出し < ディスクアクセス
関数呼び出し < メモリアクセスを他のコンピュータ
関数呼び出し < ディスクアクセスを他のコンピュータ
に比べて簡単なメモリアクセスが若干あり、無視できる。
と比べても、他の上場-桁ます。
本当にちょうど約あらゆる言語で任意のOS.
一般的には、関数呼び出しではやや遅メモリアクセスで実際して複数のメモリへのアクセスを実行してから通報してください。例えば、複数の押し、ポスタックの必要なほとんどの機能を使用__stdcall x86.ただし、ご自分のメモリアクセスのページには、できる限り少ないものL2キャッシュ関数の呼び出しで行う場合、先のスタックはすべて、CPUのメモリのキャッシュの
であり、機能の呼び出しは多くの(多くの)影響度が速くなります。
難しい質問が多くの要因が関与する。
まず、"シンプルメモリアクセスいのではないか"というシンプルです。以来、現代のクロック速度、CPUの追加二番号を高速で取得しますから片側のチップのその他の光速--なければいけないのは良い考えで、法)
では、関数が呼ばれることのCPUメモリキャッシュ?のメモリアクセスだけと比較することもあるのですか?
そして、機能の呼び出しのCPUの命令パイプラインこれにより、速度は非決定論的です。
というオーバーヘッドの呼び出しのそのものではなく、相手先がレコード店ディスクユニオンのときのすべてが、"シンプルメモリアクセス。
あるんじゃないでしょうかより遅くなるメモリアクセスが合のコンパイラでinlining,関数呼び出しオーバーヘッドがゼロになります。なくても、少なくとも可能で一部のアーキテクチャの一部との通話をコード済みの命令キャッシュするよりも迅速にアクセスメ(uncached)。にもよく登録する必要がこぼれスタックの前に呼び出し、そういうことも得意なんですね。ご相談のコンパイラおよび呼び出し規約文書、がんができるのでよりも速く解体をコードする。
また、"シンプル"メモリアクセスがない場合は、OSのページからディスクそのまま。も同じではない場合に飛び込コードを現在のページごとに区切出しの速度で処理が行われます。
この場合は、この問題は"しいただいてもかまいません私の最適化コードを最小限に留めるための総数関数呼び出しですか?", その答えは"近い".
このリンクが登場で多くいます。今後の参考にしながら、走りの短いプログラムをC#のコスト関数を呼び出し、その答えは:"についての倍のコストをインライン".以下、//出力を行います。更新:により比較りんごぱんClass1.を示します。'無効"とい:public void Method1(){//return0;}
まだ、インライン化2x:インライン(avg)610ms;関数呼び出し(平均):1380ms.その答えは、更新では、"約"です。
利用システム利用システム。ョンにします。汎用;利用システム。Linq;利用システム。テキスト;利用システム。診断;
名前空間FunctionCallCost { クラスのプログラム { かつstaticなvoid Main(string[]args) { Debug.WriteLine("stop1");int iMax=100000000;//100M DateTime funcCall1=DateTime.今;ストップウォッチsw=ストップウォッチをスタート。StartNew();
for (int i = 0; i < iMax; i++)
{
//gives about 5.94 seconds to do a billion loops,
// or 0.594 for 100M, about 6 times faster than
//the method call.
}
sw.Stop();
long iE = sw.ElapsedMilliseconds;
Debug.WriteLine("elapsed time of main function (ms) is: " + iE.ToString());
Debug.WriteLine("stop2");
Class1 myClass1 = new Class1();
Stopwatch sw2 = Stopwatch.StartNew();
int dummyI;
for (int ie = 0; ie < iMax; ie++)
{
dummyI = myClass1.Method1();
}
sw2.Stop();
long iE2 = sw2.ElapsedMilliseconds;
Debug.WriteLine("elapsed time of helper class function (ms) is: " + iE2.ToString());
Debug.WriteLine("Hi3");
}
}
//クラス1はこちら 利用システム利用システム。ョンにします。汎用;利用システム。Linq;利用システム。テキスト;
名前空間FunctionCallCost { クラスClass1 {
public Class1()
{
}
public int Method1 ()
{
return 0;
}
}
}
//出力:stop1 経過時間の主な機能(ms)は:595 stop2 経過時間のヘルパークラスの機能(ms)は:3780
stop1 経過時間の主な機能(ms)は:592 stop2 経過時間のヘルパークラスの機能(ms)は:4042
stop1 経過時間の主な機能(ms)は:626 stop2 経過時間のヘルパークラスの機能(ms)は:3755
のコストは、実際に機能が実行でもらえないのでしょうか?または、コストの実際の実行機能しているのでしょうか。簡単設定機能の呼び出しないコストのかかる運転を更新す。).が明らかにコスト関数の実行フのように機能しています。
そうであることを忘れてはならないC++は仮想通話(大幅に高価な、x10)、WIndowsが期待できVSへのインライン通話(0コストの定義となりますので左のバイナリ)
によって異なりその機能は、秋に2回のリストにないロジックのオブジェクトです。◆さらに、リストの場合で含むディスク-ネットワークです。
機能通話、通常は単にカップルでのメモリにコピーでも入り登録しないようになっているので取りに時間)後にジャンプ動作します。この遅れは、メモリアクセスがよりも早くその他業務上必要とするからであるコミュニケーションのハードウェア同じ一般に公開して任意のOS/言語の組み合わせです。
この機能はinlinedコンパイル時に、コストの機能になりequivelant0です。
0はもちろん、どのように頂いていない機能を有し、ie:inlinedください。
このコースの音を過度に明らかな場合を書き込んでそのようにしています。
のコスト関数呼び出に依存することができる。x86が大幅に遅くなりに数時計をプラスクロックで均関数の引数を64ビットはるかにインパクトは小さいものが関数の引数に渡されたレジスタの代わりに、スタックです。
機能の呼び出しが実際のコピーをパラメーターのスタック(複数のメモリアクセス)の登録保存し、実際のコードを実行し結果をコピーおよびレジスタの回復の登録を保存-復元システムに依存する).
いです。といえば比較的:
- 関数呼び出>プメモリアクセス。
- 関数呼び出し << ディスクアクセスに比べてメモリーできる数百倍を超える価格です。
- 関数呼び出し << メモリアクセスを他のコンピュータ-ネットワーク帯域幅およびプロトコルのグランド時間の殺し屋。
- 関数呼び出し <<< ディスクアクセスを他のコンピューター上記以:)
メモリアクセスよりはるかに高機能。
ものを避けることができコンパイラのインライン最適化(GCCコンパイラ(s)のみでは活性がレベル3の最適化-O3)).