c – 使用#pragma omp parallel使程序变慢
发布时间:2020-12-16 07:10:52 所属栏目:百科 来源:网络整理
导读:我的C程序需要大约300秒才能运行. 在我的程序中,我需要cwis划分我的向量. VS分析仪告诉我这需要大约15%的运行时间.这是代码: template class T myVectorT cWisDivide(myVectorT vec1,myVectorT vec2){ try { if (vec1._rows == vec2._rows) { myVectorT re
我的C程序需要大约300秒才能运行.
在我的程序中,我需要cwis划分我的向量. VS分析仪告诉我这需要大约15%的运行时间.这是代码: template <class T> myVector<T> cWisDivide(myVector<T> &vec1,myVector<T> &vec2) { try { if (vec1._rows == vec2._rows) { myVector<T> result(vec1._rows); //#pragma omp parallel for for (int r = 1; r <= vec1._rows; r++) { if (vec2(r) != 0) { result(r) = vec1(r) / vec2(r); } else { throw std::runtime_error(""); } } return result; } } catch (const exception &e) { .... } } 这个功能被多次调用. 如果有人能帮我解决这个问题,我将不胜感激. 解决方法
这可能在很多方面出错:
>在不知道结果类型的情况下,可能必须构建障碍以避免在修改时出现竞争条件 – 您可以通过使用之后合并的并行结果向量来避免这种情况. 总而言之,这是一个关于可并行化矢量类型的问题 – 请参阅您选择的openMP文档,以了解有关可并行访问类型的更多信息. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |