2

何かを誤解したかもしれませんが、エディターとコマンドウィンドウでのコードの実行は同じであると期待していました。

エディターに次のコードがあります

display('  ');
display('script');
fac = @(n) prod(1:n);

n=20;
display(['- use of anonymous function: fac = @(n) prod(1:n); with n = ' num2str(n)]);
tic; fac(n); toc;

display(['- use of build in MatLab function: factorial(); with n = ' num2str(n)]);
tic; factorial(n); toc;

実行する前に(コンパイルまたは実行と呼ばれますか?)コマンドウィンドウに同じコマンドをすばやく入力します。これは私にこれを与えます:

奇妙な演奏時間

それで、突然、エディターの階乗関数がパフォーマンスに関してブーストされました。何が起こったのでしょうか。

4

2 に答える 2

2

まず、測定しようとしている計算は速すぎて、正確な測定値のようなものを取得できません。これは、システム上の他のプロセスやアクティビティのために、tic/tocを使用するときに得られる測定ノイズをはるかに下回っています。より正確な測定値を取得するには、計算を何度も繰り返します...(計算を繰り返すので、10〜20秒かかります)。

第二に、インタラクティブに入力されたコードとスクリプトで入力されたコードには確かに違いがあります。JITは、スクリプトまたは関数のmファイルから実行されるコードに対してのみ実行され、インタープリターで実行されるものに対しては実行されないと思います(ただし、これの参照を見つけるのに苦労しています。見つかった場合は追加します)。

于 2012-05-09T07:05:42.090 に答える
1

コマンドウィンドウで実行する場合とスクリプトから実行する場合の実行時間の違いを意味しますか?それらは、コンピューター上で実行されている他のすべてのもの、matlab独自のメモリ管理、およびその他のいくつかの原因によって引き起こされていると思います...

詳細については、http://www.mathworks.com/matlabcentral/newsreader/view_thread/296850を参照してください。

CPUに費やされた時間を測定する別の方法は、関数cputimeです。ただし、精度は低くなります。したがって、cputimeで結果を確認するのに時間がかかるように、テストケースを拡張します(n = 2e7、たとえば階乗は171に制限されます)。

結論:1つのツバメは夏にはなりません

より多くのケースでテストを拡張します。

n=200;
tic;
for ii=1:1e4
    factorial(n);
end;
toc
于 2012-05-08T09:28:54.527 に答える