OpenMP并行程序设计(一)

多核程序&&OMP库学习(1)基础理论&&于C中使用OMP实现多线程并行 多核处理器的技术关键(necessity of technology) 核心结构选择 实现多核的硬件:多核处理器。 其核心结构主要有同构(简单的复制粘贴)&&异构(通过结合不同结构的处理器实现性能优化和降低功耗) 存储结构设计 考虑主存与CPU(处理器)间的速度差距。CPU是出了名的快枪手 片上通信 多核芯片上的多核间需要进行数据的共享和同步,影响着CPU性能 低功耗设计 对于处... 阅读详情

  OpenMP是一个支持共享存储并行设计的库,特别适宜多核CPU上的并行程序设计。今天在双核CPU机器上试了一下OpenMP并行程序设计,发现效率方面超出想象,因此写出来分享给大家。
  在VC8.0中项目的属性对话框中,左边框里的“配置属性”下的“C/C++”下的“语言”页里,将OpenMP支持改为“是/(OpenMP)”就可以支持OpenMP了。在其他VS中设置也是相同的。
  先看一个简单的使用了OpenMP程序

#include <stdio.h>

int main(int argc, char* argv[])
{
#pragma omp parallel for
    for (int i = 0; i < 15; i++)
    {
        printf("i = %d\n", i);
    }
    return 0;
}

  这个程序执行后打印出以下结果:
这里写图片描述
  可见for 循环语句中的内容被并行执行了。(每次运行的打印结果可能会有区别)
  这里要说明一下,#pragma omp parallel for 这条语句是用来指定后面的for循环语句变成并行执行的,当然for循环里的内容必须满足可以并行执行,即每次循环互不相干,后一次循环不依赖于前面的循环。

  有关#pragma omp parallel for 这条语句的具体含义及相关OpenMP指令和函数的介绍暂时先放一放,只要知道这条语句会将后面的for循环里的内容变成并行执行就行了。

   将for循环里的语句变成并行执行后效率会不会提高呢,我想这是我们最关心的内容了。下面就写一个简单的测试程序来测试一下:

#include <stdio.h>
#include <time.h>

void test()
{
    int a = 0;
    clock_t t1 = clock();
    for (int i = 0; i < 100000000; i++)
    {
        a = i + 1;
    }
    clock_t t2 = clock();
    printf("Time = %d/n", t2 - t1);
}

int main(int argc, char* argv[])
{
    clock_t t1 = clock();
#pragma omp parallel for
    for (int j = 0; j < 2; j++){
        test();
    }
    clock_t t2 = clock();
    printf("Total time = %d/n", t2 - t1);

    test();
    return 0;
}

  在test()函数中,执行了1亿次循环,主要是用来执行一个长时间的操作。在main()函数里,先在一个循环里调用test()函数,只循环2次,我们还是看一下在双核CPU上的运行结果吧:
这里写图片描述
  可以看到在for循环里的两次test()函数调用都花费了297ms, 但是打印出的总时间却只花费了297ms,后面那个单独执行的test()函数花费的时间也是297ms,可见使用并行计算后效率提高了整整一倍。

参考:http://blog.youkuaiyun.com/drzhouweiming/article/details/1131537

微信小程序scroll-view,点击menu,滚动到锚点;滚动到锚点,激活menu。 首先看看效果图1、首先是点击菜单,滚动列表,这个实现比较简单。直接使用scroll-view 的 scroll-into-view属性,小程序文档。&lt;view class='container'&gt; &lt;!-- 菜单 --&gt; &lt;view class='menu'&gt; &lt;ul&gt; &lt;!-- scrollList 修改cate --&g... 阅读详情

相关推荐

Zemax非序列模式新手入门:从零搭建一个抛物面反射镜系统(含灯丝光源与探测器设置)

本文详细介绍了如何在Zemax非序列模式下从零搭建抛物面反射镜系统,包括灯丝光源配置、反射镜建模和探测器设置等关键步骤。通过实战指南,帮助光学设计新手快速掌握非序列模式的应用技巧,特别适合处理复杂光线传播场景如反射镜系统和杂散光分析。

weixin_28717431的博客 436

OpenMP使用方法

本文转自 https://blog.51cto.com/jerrydai/1873471 OpenMP的基本要素: 1. 编译指导指令(Compiler Directive) 在C/C++程序中,OpenMP的编译指导指令以 #pragma omp开始 例如: #pargma omp 指令 [子句[, 子句]……] 子句的类型: 并行域控制类 任务分担类 同步控制类 数据环境类 运行库函数 (R...

qq_43673118的博客 1209

centos7 python3.12.1 报错 No module named _ssl,坑我几个小时

网上的教程很多,但几乎是无效的,跟着我这教程,可以完美解决。

Amio_的博客 1万+

OpenMP vcomp.dll problem

原文 http://social.msdn.microsoft.com/forums/en-US/vcgeneral/thread/171ccf2b-7219-4012-ac2c-1ca22ee6778b All VC Libs DLLs require manifests to load them. Manifest should be generated and embed

thinking_of_的专栏 874

基于CPCC_S_TASK_LIST_MAINTAIN的工艺路线组件批量分配实战与避坑指南

本文详细解析了SAP PP模块中基于CPCC_S_TASK_LIST_MAINTAIN函数实现工艺路线组件批量分配的实战技巧与避坑指南。针对批量分配的核心挑战,提供了参数配置、BAPI协同使用、Excel导入等解决方案,并分享了大容量数据处理优化经验,帮助用户高效完成工艺路线组件分配任务。

weixin_33563728的博客 306

555时基芯片的5种经典电路设计:从方波发生器到PWM调光实战

本文深入解析了555时基芯片的5种经典电路设计,从基础的无稳态方波发生器、单稳态触发器,到实用的占空比可调PWM信号源,并重点介绍了如何引入TVS保护电路增强系统鲁棒性。最后通过一个带保护的PWM LED调光台灯实战项目,综合展示了信号生成、功率驱动与电路保护的核心技术,是电子爱好者掌握模拟电路设计与应用的绝佳指南。

weixin_29207439的博客 491

openmp配置指南_Cython:OpenMP配置

在Cython中使用parallel、prange或者OpenMP时,除了添加/openmp编译参数,还需要将vcomp140.dll拷贝到输出目录。测试环境:Python3.7.4 + VS2019 + Cython0.29大致步骤如下:第一步:添加编译脚本。其中extra_link_args=['/openmp']可以去掉,在编译时该参数会被忽略掉。#!/usr/bin/env python3...

weixin_39890102的博客 495
上一篇: 认识OpenMP优点
下一篇: PCL-基本结构PointCloud
Linear_Luo
博客等级 码龄10年 88粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值