Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ openmp并行循环中的调用函数_C++_Openmp - Fatal编程技术网

C++ openmp并行循环中的调用函数

C++ openmp并行循环中的调用函数,c++,openmp,C++,Openmp,我是OpenMP新手,我有一个循环,我想与OpenMP并行。在并行循环中调用一个子例程。这是我的代码: #pragma omp parallel for shared(dir,utilitiespath,frequency,solvent,Method,dispersion) private(beginning,file_cp2k,file_geo,file_energy) for(i=1;i<=n_conformers;i=i+1) { time(&beginning)

我是OpenMP新手,我有一个循环,我想与OpenMP并行。在并行循环中调用一个子例程。这是我的代码:

#pragma omp parallel for shared(dir,utilitiespath,frequency,solvent,Method,dispersion)  private(beginning,file_cp2k,file_geo,file_energy)
for(i=1;i<=n_conformers;i=i+1)
{
    time(&beginning);
    file_cp2k="conformer"+ QString::number(i) +".inp";
    file_geo= "conformer" +  QString::number(i) + "_geoMM.sdf";
    file_energy=dir+ "conformer" + QString::number(i)  + "_enerSE";
    cout<<"loop "<<i<<" time "<<beginning<< endl;
    int n_atom=Makecp2kOptInput(file_geo, file_cp2k, dir,utilitiespath, frequency, solvent, Method,dispersion);
}
#pragma omp parallel for shared(dir,utilities path,frequency,solvent,Method,dispersion)private(start,file_cp2k,file_geo,file_energy)

对于(i=1;i启用OpenMP的循环执行的所有代码必须是线程安全的。您的子例程可能不是线程安全的。线程安全基本上意味着您同步对所有全局/共享对象的访问


这不是一个容易的主题,因此我建议您研究线程安全和基于互斥体的同步,以解决您的问题。

使您的子例程调用顺序化。此外,调用
时间
可能不会像您期望的那样工作。@erip这是一个很长的子例程,我希望有几个它的实例在列出每个变量的行为时,您还应该将
i
设置为私有,并将
n_一致性设置为共享。但是,如果我们不知道函数
Makecp2kOptInput
的功能以及它与这些变量的交互方式,我们将无法进一步帮助您。