2016-07-14 2 views
0

私は並列プログラミングを学び始め、パフォーマンスを計算するために、プログラムが求める正確な時間を知っておく必要があります。プログラムが他のバックグラウンドプロセスなしで与える正確な時間を計算する

私は自分のCプログラムがLinuxの下で求める時間を測定したいと思っていますが、それはちょっとした解答を示してくれます。

私の意見では、それは他のプロセスに関連する必要がありますが、私はこの命令を使用しています方法で、時間を取得:

double start ,end; 
start = omp_get_wtime(); 
. 
. 
. 
end = omp_get_wtime(); 
result = end- start; 

事前にありがとうございます。

+0

実際に測定したい「時間」を明確にしてください。ウォールタイムとCPU時間の違いに精通していますか?本質的には、具体的な結果と、それが期待した結果とどのように異なるかを示すことです。 「何らかの発散的な答え」が何を意味するかは完全には不明です。 – Zulan

答えて

-1

なぜクロックを使用しないのですか?

clock_t start = clock(); 

/* do whatever you like here */ 

clock_t end = clock(); 
double total_time = (double)(end - start)/CLOCKS_PER_SEC; 

または機能

getrusage(...) 

...

+1

Linuxで 'clock'を使用するだけでなく、以下の引数があります - http://stackoverflow.com/questions/13351396/c-timing-in-linux-using-clock-is-out-of-sync-due-to -openmp –

+0

明確にするために@inzanez tanx – pooria

1

正確なベンチマークを行うために、外部の影響を極力抑制していることが不可欠です。システムに十分なCPUコアを持っている場合は、カーネル・パラメータを使用してそれらのいくつかを隔離するため、それらのコア使用してから他のプロセスおよび/またはカーネルタスクを防ぐことができます。

... isolcpus=3,4,5 nohz_full=3,4,5 rcu_nocbs=3,4,5 ... 

これらのパラメータを意志ほぼ完全に分離株のCPU 3、4 (isolcpus)、カーネルRCUシステムがそのタスク(rcu_nocbs)を実行していないこと、および定期スケジューラタイマーティック(nohz_full)を防ぐことによって、OSスケジューラがデフォルトでプロセスを実行しないようにします。すべてのCPUを分離しないようにしてください!

あなたは今、明示的taskset -c 3-5 ...を使用して、これらのコアまたはOpenMPランタイムに組み込まれたメカニズム、例えば、GCCのためのexport GOMP_CPU_AFFINITY="3,4,5"にプロセスを割り当てることができます。専用の独立CPUを使用しない場合でも、export OMP_PROCBIND=trueでスレッド固定を有効にするか、GOMP_CPU_AFFINITY(Intelの場合はKMP_AFFINITY)を設定するだけで、実行時間の相違が減少するはずです。

関連する問題