【发布时间】:2025-12-04 03:10:02
【问题描述】:
我正在尝试并行化由第三方编写的大型程序。我不能透露代码,但我会尝试给出我想做的最接近的例子。 基于下面的代码。如您所见,由于“并行”子句位于 while 循环内部,因此每次迭代都会完成线程的创建/销毁,这是昂贵的。 鉴于我无法将 Initializors...等移到“while”循环之外。
--基础代码
void funcPiece0()
{
// many lines and branches of code
}
void funcPiece1()
{
// also many lines and branches of code
}
void funcCore()
{
funcInitThis();
funcInitThat();
#pragma omp parallel
{
#pragma omp sections
{
#pragma omp section
{
funcPiece0();
}//omp section
#pragma omp section
{
funcPiece1();
}//omp section
}//omp sections
}//omp parallel
}
int main()
{
funcInitThis();
funcInitThat();
#pragma omp parallel
{
while(1)
{
funcCore();
}
}
}
我想要做的是避免每次迭代的创建/销毁,并在程序的开始/结束时进行一次。我对“并行”子句的置换尝试了许多变化。我基本上具有相同的本质如下:(每个程序运行只有一个线程创建/销毁) --我尝试过,但在初始化函数中“非法访问”失败。
void funcPiece0()
{
// many lines and branches of code
}
void funcPiece1()
{
// also many lines and branches of code
}
void funcCore()
{
funcInitThis();
funcInitThat();
//#pragma omp parallel
// {
#pragma omp sections
{
#pragma omp section
{
funcPiece0();
}//omp section
#pragma omp section
{
funcPiece1();
}//omp section
}//omp sections
// }//omp parallel
}
int main()
{
funcInitThis();
funcInitThat();
while(1)
{
funcCore();
}
}
--
任何帮助将不胜感激! 谢谢!
【问题讨论】:
-
请注意,OpenMP 网站有一个论坛,您可以在其中发布有关 OpenMP 的问题——请访问openmp.org/forum
标签: c multithreading openmp