[問題] OMP速度, 變數宣告位置
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
VC++
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
Eigen (本問題不會利用到)
問題(Question):
第一個問題:
omp的使用,為何速度有差異?
第一個是
int N = 200, n = 10;
int run = N / n;
int m[n][run]
#pragma omp parallel for
for(int i = 0; i < N; i++)
{
int p = i / run;
int q = i - p*q;
// do something
m[p][q] = //something
}
另外一種是
int N = 200, n = 10;
int run = N / n;
int m[n][run]
#pragma omp parallel for
for(int p = 0; p < n; p++)
{
for(int q = 0; q < run; q++)
{
// do something
m[p][q] = //something
}
}
我的直覺是第二種應該比較慢
因為每一個執行序都要再跑一個迴圈
這樣最後不是要等其他完成才會結束程式嗎?
但其實實際測的結果是第二種比較快
有沒有誰可以跟我討論為什麼嗎?
還是我在迴圈裡面做的事情會影響結果?
第二個問題:
有關記憶體的問題,我還是一個對C++不是很熟的programer
我想問記憶體要如何控制比較好?
同前一個問題,我有兩層的迴圈
而迴圈中,我每次都必須宣告一個區域變數供迴圈使用,
我在迴圈外先宣告,然後再讓迴圈執行是否會比較快?
我知道一般情況可以,可是omp之下會發生錯誤,想知道omp是否也可行?
最後還有一個很笨的問題:
我通常都在程式最前面直接使用
using namespace std;
這樣的指令,這樣是不是加入太多不必要的函數,而減慢速度?
補充說明(Supplement):
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 36.238.88.107
推
02/20 18:06, , 1F
02/20 18:06, 1F
private? 我試試看,謝謝。
※ 編輯: celestialgod 來自: 36.238.88.107 (02/20 18:10)
→
02/20 18:36, , 2F
02/20 18:36, 2F
→
02/20 19:14, , 3F
02/20 19:14, 3F
→
02/20 19:15, , 4F
02/20 19:15, 4F
推
02/20 21:57, , 5F
02/20 21:57, 5F