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

UE5网络模块实战:属性复制、RPC与联机开发踩坑指南 多人联机开发中,网络同步是核心难题。UE5网络模块以服务器权威为基础,通过Actor复制、RPC和所有权机制实现多端状态一致。理解属性复制与OnRep回调、区分Server/Client/Multicast RPC的适用场景,是构建稳定联机架构的关键。本文结合数字孪生与多端协作场景,探讨如何将渲染与逻辑分离,并针对打包后网络失效、端口防火墙、崩溃排查等工程实践问题给出解决方案。通过蓝图接口解耦表现层,利用C++创建StaticMesh组件实现服务器逻辑与客户端表现分离,同时注意专用服务器不加载渲染依赖(如D 阅读详情

相关推荐

GoPro官方API实战:从蓝牙配对到Wi-Fi流媒体,构建跨平台控制应用

本文详细解析了GoPro官方API的开发实践,涵盖蓝牙配对、Wi-Fi流媒体控制等关键技术。通过实战案例,指导开发者如何构建跨平台控制应用,解决设备发现、指令解析、视频流传输等核心问题,并分享Android平台迁移经验与常见问题排查方法。

weixin_30727835的博客 397

OpenMP使用方法

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

qq_43673118的博客 1209

高通410刷OpenWRT后网络共享配置全攻略

本文详细解析了在高通410设备刷入OpenWRT后,因基带文件丢失导致无法上网的常见问题。核心解决方案是通过SMB网络共享,将备份的原厂基带文件传输至OpenWRT系统并正确还原,从而恢复移动网络连接。文章提供了从备份基带、刷机到配置共享和文件替换的完整操作指南。

grafana6viz的博客 572

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

openwrt编译及第一个安装包教程

Date: 2017.03.14 Made:SuperDeverloper Email: na1206@live.com Target: For mt7688 based board说明:本人在学习过程中走了不少弯路,希望本文档能为后来者提供便利。欢迎复制和使用本文档。本文档记录了搭建openwrt编译环境以及快速创建ipk包(openwrt上的安装程序)。本文档在实际应用中做过几次修改,以帮

SuperDevloper的博客 1万+

YOLOv8知识蒸馏实战:用BCKD和LD在自制数据集上分别提点1.63%和1.69%的保姆级教程

本文详细介绍了在YOLOv8模型上应用知识蒸馏技术(BCKD和LD方法)的实战教程,通过自制数据集实现性能提升1.63%和1.69%。内容涵盖环境配置、模型选择、BCKD和LD的具体实现及调参技巧,适合目标检测领域的开发者和研究者。

weixin_29082143的博客 245

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

secureCRT 破解方法

3、输入注册信息打开keygen.exe,点击path,选择SecureCRT的安装目录(例如D:\VanDykeSoftware\Clients)的securecrt.exe打开,继续下一步打开LicenseHelper.exe,如下。1、注册SecureCRT9.1打开keygen.exe,出现以下问题(没有关掉安全防护,一双击打开,Windows会自动识别keygen.exe为bingdu并删除)打开桌面SecureCRT,此界面不输入内容,直接点击下一步。2、存储配置文件夹(可以默认安装)

逆水行舟 1万+
上一篇: 认识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、付费专栏及课程。

余额充值