我是并行化的新手,我希望我不浪费任何人的时间.我已经问了一些已经使用过openMP的朋友,但他们无法帮助我.所以我猜我的情况对其他人来说也很有意思,至少在教育方面是这样,我试着把它记录得尽可能好.这是两个例子,其中一个100%来自Tim Mattson在youtube上的教程,另一个以某种方式简化,但我认为仍然是一种标准方法.在这两种情况下,计算时间与几次迭代的线程数量成比例,但是对于非常大量的迭代,计算时间似乎收敛到相同的数量.这当然是错误的,因为我希望计算时间在几次迭代中是相似的,并且真正针对大量迭代进行了优化.
这里有两个例子,都是用编译的
g -fopenmp main.cpp -o out
线程模型:posix
gcc版本4.8.4(Ubuntu 4.8.4-2ubuntu1~14.04),在Ubuntu 14.04上
并使用以下标题:
#include
#include
#include
#include
#include
using namespace std;
#define NUMBER_OF_THREADS 2
static long num_steps = 1000000000;
现在,我正在使用的计算机上的核心数量是8(intel i7),所以在2到4之间的任何线程数我都希望在计算时间方面带来一些很大的优势.
例1:
int main() {
omp_set_num_threads(NUMBER_OF_THREADS);
double step = 1.0/(double) num_steps, pi=0.0;
auto begin = chrono::high_resolution_clock::now();
<