C++ OpenMp:创建线程数大小的数组的最佳方法
具体来说,我必须用OpenMp并行计算pi。我刚刚被允许使用omp并行。所以我想创建一个进程数大小的数组,然后并行计算部分和,然后一起计算和。但不幸的是,要在并行版本之前获得线程数是不可能的。那么,创建一个非常大的数组并用0.0初始化它,然后一起计算所有内容的最佳方法是什么呢?还是有更好的方法?我会很感激你的回答。提前谢谢你 幸运的是,提前获取线程数并非不可能。OpenMP运行时不会简单地启动随机数目的线程,而无需程序员和程序用户的任何控制。相反,它遵循一个定义明确的机制来确定该数字,即。具体来说,除非您使用C++ OpenMp:创建线程数大小的数组的最佳方法,c++,openmp,C++,Openmp,具体来说,我必须用OpenMp并行计算pi。我刚刚被允许使用omp并行。所以我想创建一个进程数大小的数组,然后并行计算部分和,然后一起计算和。但不幸的是,要在并行版本之前获得线程数是不可能的。那么,创建一个非常大的数组并用0.0初始化它,然后一起计算所有内容的最佳方法是什么呢?还是有更好的方法?我会很感激你的回答。提前谢谢你 幸运的是,提前获取线程数并非不可能。OpenMP运行时不会简单地启动随机数目的线程,而无需程序员和程序用户的任何控制。相反,它遵循一个定义明确的机制来确定该数字,即。具体来
num_threads
提供了更高的固定线程数,否则OpenMP启动的线程数受特殊内部控制变量(简称ICV)的值限制调用nthreads-var。设置此ICV的方法是通过OMP\u NUM\u THREADS
环境变量或通过OMP\u set\u NUM\u THREADS()
调用(后一种方法覆盖前者)。通过调用omp\u get\u max\u threads()
可以访问nthreads var的值。有关其他ICV,请参阅
您只需调用
omp\u get\u max\u threads()
并使用返回值作为数组的大小,因为如果您没有调用omp\u set\u num\u threads(),线程数将不会超过该值
之后使用更大的值,并且没有将num\u threads
子句应用于parallel
构造。@HighPerformanceMark我相信您的意思是omp\u get\u max\u threads()
因为omp\u get\u num\u threads()
在并行区域之外调用时返回1
。