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

点云配准实战:用DGCNN+Transformer+SVD搞定3D模型对齐(附PyTorch代码) 本文详细介绍了基于深度学习的点云配准实战方法,重点解析了Deep Closest Point (DCP)模型。该模型融合了DGCNN、Transformer和可微分SVD三大核心模块,能够端到端地预测点云间的刚性变换,有效克服传统ICP算法对初始位置敏感、易陷入局部最优的缺点。文章提供了完整的PyTorch代码实现、ModelNet40数据集处理、训练策略及显存优化技巧,旨在帮助开发者在机器人、自动驾驶等领域实现精准的3D模型对齐。 阅读详情

相关推荐

别再死记硬背了!用Python可视化带你直观理解柯西收敛定理(附NumPy代码)

本文通过Python可视化技术,结合NumPy和Matplotlib,直观展示柯西收敛定理的动态过程。文章提供了完整的代码实现,帮助读者从抽象数学定义过渡到具象理解,特别适合数学学习者和Python开发者。通过热力图和交互式参数探索,读者可以清晰观察数列收敛特性,提升数学分析的学习效率。

weixin_28465009的博客 185

OpenMP使用方法

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

qq_43673118的博客 1209

多目标跟踪中使用trackeval评估dancetrack运行结果

trackeval使用

qq_46144849的博客 1783

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

linux redis7 完整的集群搭建过程

一。安装: 1.1 说明: Redis官方只提供了源码,并没有提供经过编译之后的安装包。 因此,安装Redis,要先编译、后安装。(即源码安装方式) 注意:需要联网安装 1.2 安装编译的工具: yum install gcc gcc-c++ -y 1.3 下载tar包,上传到linux服务器,解压配置环境变量 1.4 cd +解压的目录下:编译 make 注意:如果编译失败,请重新进行解压编译,...

m0_38028438的博客 719

从0到1,快速理清 | DeepSeek Harness

DeepSeek推出自研Harness开发平台,主打"一切皆插件"理念,将AI执行能力模块化为可自由组合的插件体系。带你从0到1,快速了解开发链路。

IT学习博客 685

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

S7-1500与WinCC GroupDisplay组显示的高效配置指南

本文详细介绍了S7-1500 PLC与WinCC GroupDisplay组显示功能的高效配置方法,涵盖报警状态配置、WinCC端组显示控件设置及常见问题排查。通过实战案例和优化建议,帮助工程师快速掌握工业自动化项目中报警信息可视化的关键技术,提升生产线监控效率。

weixin_29292535的博客 440
上一篇: 认识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、付费专栏及课程。

余额充值