Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.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并行计算pi。我刚刚被允许使用omp并行。所以我想创建一个进程数大小的数组,然后并行计算部分和,然后一起计算和。但不幸的是,要在并行版本之前获得线程数是不可能的。那么,创建一个非常大的数组并用0.0初始化它,然后一起计算所有内容的最佳方法是什么呢?还是有更好的方法?我会很感激你的回答。提前谢谢你 幸运的是,提前获取线程数并非不可能。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