gpt4 book ai didi

c++ - 使用 openMP 进行并行化 - 堆栈或堆变量

转载 作者:行者123 更新时间:2023-11-30 04:28:25 25 4
gpt4 key购买 nike

我有一个可行的并行化解决方案。但是,执行时间通过并行化得到了非常非常小的改善。我认为这是因为我在循环中新建和删除了一些变量。我希望它是堆栈创建的,但是 Command 类是抽象的,并且必须保持抽象。我该怎么做才能解决这个问题?如何改善花在这些非常长的循环上的时间???

#pragma omp parallel for  reduction(+:functionEvaluation)
for (int i=rowStart;i<rowEnd+1;i++)
{
Model model_(varModel_);
model_.addVariable("i", i);
model_.addVariable("j", 1);
Command* command_ = formulaCommand->duplicate(&model_);
functionEvaluation += command_->execute().toDouble();
delete command_;
}

问题也可能出在其他地方!欢迎指教!!

感谢和问候。

最佳答案

你可能想玩一下 private or firstprivate clauses .

您的 #pragma 将包含 ...private(varModel, formulaCommand)... 或类似内容,然后每个线程都会有自己的这些变量拷贝。使用 firstprivate 将确保线程特定变量具有复制的初始值,而不是未初始化。这将消除 newdelete 的需要,假设您可以为每个循环迭代修改实例。

这可能会或可能不会按预期工作,因为您没有提供很多细节。

关于c++ - 使用 openMP 进行并行化 - 堆栈或堆变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10174862/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com