1
我已經編寫了計算某個數字的C++代碼。我正在嘗試使用OpenMP庫對其進行並行化。它有3個嵌套循環,並行化的是外部循環。我使用G ++編譯器在Linux上工作。 代碼有效,但問題是並行化並未提高性能。在我的雙核筆記本電腦(關閉多線程的英特爾i5處理器)中使用2個線程啓動它,需要更多的時間用一個執行它。使用OpenMP並行化C++代碼不會提高性能
這是代碼(與推出:克++ source.cpp -fopenmp):
#include <time.h>
clock_t tStart = clock();
#include <stdlib.h>
#include <iostream>
#include <iomanip>
#include <omp.h>
using namespace std;
int nThreads= 2; // switch to change the number of threads.
int main() {
int i, j, k, nz= 10;
double T= 1000, deltaT= 0.005, g= 9.80665, h=10, dz= h/nz, t, z, V, A;
int nT= T/deltaT;
#pragma omp parallel for private (j, k, t, z, V, A) num_threads(nThreads)
for (i=0; i<=nT; i++) {
t= i*deltaT;
for (j=0; j<=nz; ++j) {
z= dz*j;
for (k=0; k<=1000; k++) {
V= t*z*g*k;
A= z*g*k;
}
}
}
cout << "Time taken: " << setprecision(5) << (double)(clock() - tStart)/CLOCKS_PER_SEC << endl;
return 0;
}
可能重複的[OpenMP時間和時鐘()計算兩個不同的結果](http://stackoverflow.com/questions/10673732/openmp-time-and-clock-calculates-two-different-results) –
很難對這段代碼說些有意義的東西,如果你沒有得到0,你做錯了。沒有什麼可以並行化的,編譯器會刪除for循環,並簡單地計算V = nT * deltaT * dz * nz * g * 1000因爲這是所有需要的。 –
你如何衡量執行時間?如果你測量CPU時間,你會得到什麼。 openmp會增加一些開銷,並且您所做的計算大體上與在一個cpu上進行的計算大體相同。你應該測量實時。 – user463035818