0

2 つの異なる部分でプログラムを実行すると、ページ フォールトが発生しようとしています。

私が行っているのは、2 つの行列乗算メソッドを使用したいくつかの操作であり、どちらがより多くのページ フォールトを引き起こしているかを突き止めようとしています。

/Operations for method 1

getrusage (RUSAGE_SELF, &usage);
fault1=usage.ru_minflt;

/operations for Method 2


getrusage (RUSAGE_SELF, &usage);
fault2=usage.ru_minflt-fault1;

しかし、fault2=0 のようで、正しくないと思います。2 つの異なる変数 usage と usage2 を使用すると、どちらも機能しないようです。各乗算方法のフォルトのカウントを開始するコマンドはありますか? コードが間違っていますか?

答えてくれてありがとう

4

1 に答える 1

0

ページ フォールトの数ゼロである可能性は十分にあります。データをロードする方法、使用している共有ライブラリ (およびそれらが既にメモリ内にあるかどうか)、コピー オン ライトの使用など、アルゴリズムよりも多くのことが関係しています。 .

代わりにプロセッサ キャッシュ ミスの数を探しているのではないですか? 大きな行列の行列乗算の場合、単純なアルゴリズムでは、最適なアルゴリズムよりもキャッシュの使用率が大幅に低下する可能性があります。ツールで使っvalgrindてみてください。cachegrind

于 2009-12-15T21:59:03.867 に答える