总结

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

#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(私有)或采用独占访问进行保护。当完成对原始代码的更改后,通过英特尔® 线程档案器运行代码所获得的结果支持对并行执行的调试,以充分利用系统中的计算资源。

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值