我的CPU是具有2個核和4個螺紋的酷睿i3 330M。當我在終端執行命令cat /proc/cpuinfo
時,就像我有4個CPUS。當我使用OpenMP功能get_omp_num_procs()
我也得到4.OpenMP和核/線程
現在我有一個標準的C++向量類,我的意思是一個固定大小的雙數組類,不使用表達式模板。我仔細並行了我班的所有方法,並獲得了「預期」的加速。
的問題是:我可以猜測的預期增速在這樣一個簡單的例子?例如,如果我添加兩個沒有並行化for-loops的向量,我會花一些時間(使用shell time命令)。現在,如果我使用OpenMP,根據內核/線程的數量,我應該得到一個除以2還是4的時間?我強調,我只是要求這個特別簡單的問題,即數據中沒有相互依賴關係,並且所有內容都是線性的(向量添加)。
下面是一些代碼:
Vector Vector::operator+(const Vector& rhs) const
{
assert(m_size == rhs.m_size);
Vector result(m_size);
#pragma omp parallel for schedule(static)
for (unsigned int i = 0; i < m_size; i++)
result.m_data[i] = m_data[i]+rhs.m_data[i];
return result;
}
我已經閱讀這篇文章:OpenMP thread mapping to physical cores。
我希望有人會告訴我更多的OpenMP如何得到這個簡單的情況下所做的工作。我應該說我是並行計算的初學者。
謝謝!