OpenMP优化不起作用
Inoperative OpenMP optimisation
作为一名初学者,我正在尝试使用OpenMP优化贪婪函数。
不幸的是,我尝试了好几次都没有成功。我只是在搜索向量中每对的第一个元素,它作为同一向量中第二个元素出现的索引(唯一)。这是我的代码:
std::vector<int> function(std::vector<std::pair<int, int> >& pair_vector)
{
unsigned int size = pairVector.size();
std::vector<int> resVector(size);
#pragma omp parallel
{
#pragma omp for
for(unsigned int i = 0; i < size; ++i)
{
resVector[i] = -pairVector[i].first;
for (unsigned int j = i; j < size; ++j)
{
if(pairVector[i].first == pairVector[j].second)
{
resVector[i] = size - j;
break;
}
}
}
}
return resVector;
}
有人看到这是怎么回事吗??
谢谢。
编辑:
矢量中的对数可以超过1.000.000。两种实现的结果是相同的。即使是这样大的数据,也没有速度(即使是不同的时间表类型)。
您使用的算法看起来是O(N^2),但在O(NlogN)中应该是可能的。即使O(NlogN)解决方案是串行的,它仍然应该提供净加速。
以下是您的问题的O(NlogN)解决方案。可以通过更好地使用STL来收紧代码。
#include <algorithm>
std::vector<int> function(std::vector<std::pair<int, int> >& pair_vector) {
unsigned int size = pair_vector.size();
std::vector<int> resVector(size);
std::vector<std::pair<int, int> > firsts(size);
std::vector<std::pair<int, int> > seconds(size);
for (int i=0; i<size; i++) {
firsts[i] = std::pair<int, int>(pair_vector[i].first, i);
seconds[i] = std::pair<int, int>(pair_vector[i].second, size-i);
}
std::sort(firsts.begin(), firsts.end());
std::sort(seconds.begin(), seconds.end());
int j=0;
for (int i=0; i<size; i++) {
while ((seconds[j].first < firsts[i].first)&&(j<size))
j++;
if (seconds[j].first == firsts[i].first)
resVector[firsts[i].second] = seconds[j].second;
else
resVector[firsts[i].second] = -firsts[i].first;
}
return resVector;
}
相关文章:
- 我的神经网络不起作用 [XOR 问题]
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- C++为什么尽管我调用了void函数,它却不起作用
- 为什么在保护模式下继承升级不起作用
- 循环在计数器中不起作用
- 在其他文件中创建类时在 c++ 项目中不起作用
- Visual studio代码重构似乎不起作用(例如,重命名符号-f2)
- 为什么二进制搜索在我的测试中不起作用
- 我的代码中有错误吗?使用BGI图形的C++代码对我不起作用
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- 带有指定长度字符* 参数的 std::regex_search 在 VS2017 中不起作用?
- Bjarne Stroustrup Book - std_lib_facilities.h - 不起作用(未知类型名称)
- 为什么简单的算术减法在"if"条件下不起作用?
- 为什么Stroustup书中的has_f不起作用
- 你能检查一下为什么在这个代码中从链接列表中删除项目不起作用吗
- 嵌套While循环不起作用(C++问题)
- 为什么 std::chrono 在测量循环和编译器优化的并行 OpenMP 的执行时间时不起作用?
- 为什么空基类优化(EBO)在MSVC中不起作用
- OpenMP优化不起作用