我的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如何得到这个简单的情况下所做的工作。我应该说我是并行计算的初学者。
谢谢!