並行化兩個嵌套的for-loops,我遇到了我無法解釋的行爲。我已經在i7 860和Xeon E5540上嘗試了三種使用OpenMP的並行化,我期望代碼在兩個平臺上的行爲或多或少相同,這意味着其中一個平臺在所有三種不同情況下都應該更快我測試過了。但是,這不是這種情況:使用OpenMP在i7和Xeon上出現意外的結果
- 對於情況1,至強是〜10%的速度,
- 對於情況2中,I7是通過因子2和
- 更快殼體3,至強再次快於因子1,5
你知道什麼可能導致這種情況嗎?
請註明您何時需要更多信息或澄清!
爲了進一步澄清,我的問題是更一般的。如果我在i7和xeon系統上運行相同的代碼,那麼不應該使用OpenMP來獲得可比較的結果嗎?
僞代碼:
for 1:4
for 1:1000
vector_multiplication
end
end
的情況下:
殼體1: 沒有pramga OMP沒有parallelzation
殼體2: 編譯OMP對於第一for循環
case 3:第二for循環
結果
這裏 編譯OMP是從time
命令的實際數字:
殼體1
Time Xeon i7
real 11m14.120s 12m53.679s
user 11m14.030s 12m46.220s
sys 0m0.080s 0m0.176s
殼體2
Time Xeon i7
real 8m57.144s 4m37.859s
user 71m10.530s 29m07.797s
sys 0m0.300s 0m00.128s
殼體3
Time Xeon i7
real 2m00.234s 3m35.866s
user 11m52.870s 22m10.799s
sys 0m00.170s 0m00.136s
[更新]
感謝所有的提示。我仍在研究可能的原因。
這些單插座系統還是雙插座系統?你打開了超線程嗎?你能告訴我們更多關於'vector_multiplication'的信息嗎 - 這是一個標量向量積,一個點積,一個外積或者一列數字c [i] = a [i] * b [i]的乘法? – 2010-11-03 21:24:30