总结

来源:互联网 发布:java 调用log4j 编辑:程序博客网 时间:2024/05/02 01:51

 当遵循以上全部建议后,实例代码的最终并行区域为:

#pragma omp parallel for schedule(dynamic,100) reduction(+:number_of_primes,number_of_41primes,number_of_43primes)
  for (i = start; i <= end; i += 2) {
    int limit, j, prime;  // locally declared for private

    limit = (int) sqrt((float)i) + 1;
    prime = 1; /* assume number is prime */
    j = 3;
    while (prime && (j <= limit)) {
      if (i%j == 0) prime = 0;
        j += 2;
    }
    if (prime) {
      if (print_primes) printf("%5d is prime/n",i);
      number_of_primes++;
      if (i%4 == 1) number_of_41primes++;
      if (i%4 == 3) number_of_43primes++;
    }
  }

 

 

为获得该最终代码,首先采用英特尔® 线程检查器判断串行代码中是否具有可并行执行的循环,以及需要将哪些变量设为 private(私有)或采用独占访问进行保护。当完成对原始代码的更改后,通过英特尔® 线程档案器运行代码所获得的结果支持对并行执行的调试,以充分利用系统中的计算资源。

英特尔® 线程工具常常被认为能够迅速找出代码中的线程错误,并指出不明显的性能错误。通过在开发阶段较早地采用这些工具,您能够使系统自动运行这些枯燥的任务,从而在串行应用中找出于何处能够有效实施并行。