AM5728 高性能计算(并行计算)OpenCL/OpenMP简介及测试

2023-05-16

一、OpenCL/OpenMP简介

OpenCL (Open Computing Language) 是一个为异构平台编写程序的框架,属于API,和OpenGL架构类似,此异构平台可由CPU,GPU或其他类型的处理器组成。

最近花了点时间,对OpenMP,OpenCL,MPI(有多种实现,如Open MPI)等,关于高性能计算的技术,做了一下简单的浏览,我把这次简单浏览所学习到的一点东西记录在此。这些总结和记录都比较半吊子,还需要更深入的学习和研究。

       首先,时下越来越热的GPU计算,随着中国天津的大型计算机拿到国际头把运算力交椅,不得不让人重视。现有的技术,从阵营上分,有NVidia的CUDA,AMD(ATI)的stream。还有一个开放标准:OpenCL。我是比较看好OpenCL的,因为他可以支持同时对不同品牌,不同核心CPU和GPU的优化和加速,特别适合异构环境。他的基本原理就是系统里边内置一个类似编译器,好像llvm,API的东西,软件写完的代码只有到最后的硬件执行的时候进行最终编译,这个编译过程似乎是通过系统里边的硬件驱动Driver,现在都还需要另外安装,intel,nvidia,amd提供的sdk中都分别包含有自己Driver,得以执行。所以OpenCL的程序主线程,会根据系统中是几个核的多核CPU,那种架构的CPU(arm或者x86),有没有GPU,哪种GPU? 来决定最后生成的工作线程的代码传递给哪个Driver编译执行。系统会自动保存编译后的二进制代码以备后用。这个过程看起来好像是一个动态语言的过程,但是实际上现在OpenCL还主要是底层的,经过扩展的c语言来写。不同硬件的Driver充当了runtime的角色。

       intel,nvidia,amd等多家硬件厂商支持OpenCL,但是同时也有自己的小九九,比如nvidia的cuda,就提供了针对自己的更多的功能,而且函数上据说也更为高级。所以说,如果是专门针对特定硬件环境下,比如开发大运算量的科学程序的话,最好使用专门硬件自己的GPU加速sdk开发。只有在要求通用性,比如商业软件上,才使用OpenCL开发。

      其次,OpenMP和MPI,这两个都是已经被广泛使用的并行程序开发库。他们的区别是:OpenMP是针对多核处理器,使用的是共享内存的并行方式,可以说更为线程一些;MPI是针对服务器中,多个对称并行CPU或者集群服务器的情况,内容共享方式是混合的,更为进程一些。

       从某种角度上说,OpenCL有代替OpenMP的可能和趋势,里边会包含针对多核心CPU的处理。现在的环境下,还是OpenMP更合适——可以直接发挥多核心处理器的能力,而且不需要图形开发的知识。这里是一篇关于OpenMP和OpenCL性能的测试。

    现在的并行开发,主要就是MPI+OpenMP,前者负责将运算通过进程分布到不同服务器的不同CPU上去,后者负责通过多线程,有效利用CPU中每个核心的效能。

       再次,有文章显示,为了最好的发挥线程的效能,在同样算法条件下,最好程序使用的线程和cpu提供的最大线程数一致,而且最好能够绑定程序执行线程和CPU核心。GPU对某些计算加速效果特别好,效率也不错,但是由于必须通过PCI用CPU进行调度,所以,实际程序设计的时候,要考虑这个通信过程的延时。

       最后,现有的几种并行计算技术:

1、系统层面,使用进程迁移技术,从而让所有支持多进程的程序,实现并行,如openmosix,这需要经过patch过的操作系统;

2、硬件层面,也就是OpenCL等GPU加速技术,需要相应的硬件支持;

3、开发语言方面,现在erlang这种动态语言,就提供了对集群环境的支持,他会自动向加入集群的服务器分布运算进程。google Go语言可能也是类似的。

二、AM5728 OpenCL/OpenMP测试

2 OpenMP 例程编译

在 Ubuntu 下执行如下指令,安装 gawk 查找替换文本工具:

Host# sudo apt-get install gawk

 

图1

输入 Y 确认安装,安装成功如下图所示:

 

图2

确认已正确安装对应版本 Linux Processor-SDK 包,进入 SDK 安装包根目录执行如下

指令编译 OpenMP 例程:

Host# make openmpacc-examples

 

图3

 

图4

将编译生成的可执行文件拷贝到开发板文件系统。便于客户测试,我司提供经过验证的 OpenMP 可执行文件位于光盘 Demo\OpenMP\bin\openmp.tar.gz”路径下,将其拷贝

到开发板文件系统。进入文件系统该文件所在路径,执行如下指令将其解压:

Target#  tar xvf openmp.tar.gz

 

图5

3 OpenMP 例程测试

3.1 dspheap 例程

此例程演示如何在 OpenMP 目标区域内,在 DSP 上创建和使用堆。由 DSP 内置函数来创建在 MSMC、DDR 和本地内存区域中操作用户定义的堆。这些堆是永久的,只要它

们的底层内存被分配。在这个例子中,从连续的共享内存区域创建缓冲区,提供底层内存存储。堆是活跃的和持久的从它们被初始化直到缓冲区被解除分配。

开发板文件系统下执行如下指令,运行该例程:

Target#  cd openmp/dspheap/

Target#  ./dspheap

 

图6

3.2 vecadd 向量相加例程

本例程利用 OpenMP 进行两个元素个数为 8K 的一维向量的并行相加。开发板文件

系统下执行如下指令,运行该例程:

Target#  cd openmp/vecadd/

Target#  ./vecadd

 

图7

3.3 vecadd_complex 例程

本例程利用 OpenMP 进行两个元素个数为 8K 的复数向量的并行相加。开发板文件

系统下执行如下指令,运行该例程:

Target#  cd openmp/vecadd_complex/

Target#  ./vecadd_complex

 

图8

3.4 其他例程测试说明

其他程序测试方法跟以上一样,具体程序功能可以查看源码.C 文件的注释,路径在

Linux Processor-SDK安装包根目录“/example-applications/openmpacc-examples-1.4.0.2/”路径下。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AM5728 高性能计算(并行计算)OpenCL/OpenMP简介及测试 的相关文章

  • 用 mongodb + elasticsearch 实现中文检索

    而 elasticsearch 可以很好的支持各种语言的全文检索 xff0c 但我们暂时又不想切换到 elasticsearch 作为后端数据库 当然 xff0c 可以在 web 应用中存储数据的时候 xff0c 再主动写一份到 elast
  • 2023年团体程序设计天梯赛(含部分题解)

    目录 个人总结 L1 1 最好的文档 xff08 模拟 xff09 AC代码 xff1a L1 2 什么是机器学习 xff08 模拟 xff09 AC代码 xff1a L1 3 程序员买包子 xff08 模拟 xff09 AC代码 xff1
  • ProtoBuf 与 gRPC 你需要知道的知识

    ProtoBuf 是一套接口描述语言 xff08 IDL xff09 和相关工具集 xff08 主要是 protoc xff0c 基于 C 43 43 实现 xff09 xff0c 类似 Apache 的 Thrift xff09 用户写好
  • Hyperledger Fabric 1.0 安装和使用

    注意 xff1a 代码路径已更新 xff0c 可以直接参考 https github com yeasy docker compose files tree master hyperledger fabric Hyperledger Fab
  • go 依赖管理利器 -- govendor

    长期以来 xff0c golang 对外部依赖都没有很好的管理方式 xff0c 只能从 GOPATH 下查找依赖 这就造成不同用户在安装同一个项目适合可能从外部获取到不同的依赖库版本 xff0c 同时当无法联网时 xff0c 无法编译依赖缺
  • 1、ROS服务PID调试;

    首先查看代码内容 ub 64 ub span class token operator span span class token operator span span class token operator span omniWheel
  • 嵌入式之总线协议:1、UART

    嵌入式之总线协议 xff1a 1 UART 目录 第一章 UART 帧格式讲解 第二章 UART 寄存器讲解 第三章 UART 编程 第四章 输出重定向 第五章 RS232 RS485协议原理与应用 第一章 UART 嵌入式之总线协议 xf
  • Ubuntu18.04分辨率只有1024*768的多种解决办法

    文章目录 前言一 检查驱动1 1 检查驱动1 2 解决办法 二 其他解决办法2 1 修改Grub文件的方法2 2 通过xrandr指令操作 前言 关机 xff0c 再开机以后 xff0c 进入系统界面自动变成了1024x768的分辨率 xf
  • 梦想机器人实验室:第一节嵌入式学习指导

    参考资料 xff1a 实验室集训回放 嵌入式入门与进阶之旅 哔哩哔哩 bilibili 2条消息 单片机 嵌入式 最完整学习路线 单片机学习 嵌入式修行者的博客 CSDN博客 1 联合培训资料 大纲 电路设计训练营 xff08 四期 xff
  • java代码编写菜鸟心得(一)

    1 代码艺术之一 xff1a High Cohesion Low Coupling 函数功能要明确 xff0c 若此函数内部内容太多 xff0c 称其为大函数 xff0c 则可以从中抽取一些小函数 小函数的要求 xff1a 完成独立的功能
  • 在linux下真机调试android程序

    在linux里面 xff0c 模拟器可以直接识别 xff0c 使用adb也没有限制 xff0c 但是手机插上usb之后 xff0c adb并不识别 xff0c 显示的是问号 xff0c 在eclipse里面也是这样 解决方法如下 xff1a
  • 【号外】拳王阿里去世 头部一生遭受29000次重击

    74岁的一代拳王穆罕默德 阿里因病辞世 职业拳击生涯中 xff0c 阿里头部受到的29000多次的重击 新浪娱乐讯 6月4日消息 xff0c 据外国媒体报道 xff0c 74岁的一代拳王穆罕默德 阿里与美国菲尼克斯当地时间本周五 3日 去世
  • maven报错: ‘parent.relativePath‘ of POM xxx

    错误信息 xff1a 39 parent relativePath 39 of POM io renren renren fast 3 0 0 D renren fast pom xml points at com gwh gulimall
  • 嗯,春招两次腾讯面试都挂二面了,分享下我失败+傻傻的面试经历

    今天给大家转载一篇朋友的文章 xff0c 朋友是一位非常优秀的公众号作者 xff0c 也是一名在校生 文章讲述了他的春招面试经历 xff0c 很多东西值得大家学习 废话不多说 xff0c 下面开始正文 xff08 互联网侦察做了一些注释 x
  • 记一次Linux被入侵,服务器变“矿机”全过程

    周一早上刚到办公室 xff0c 就听到同事说有一台服务器登陆不上了 xff0c 我也没放在心上 xff0c 继续边吃早点 xff0c 边看币价是不是又跌了 不一会运维的同事也到了 xff0c 气喘吁吁的说 xff1a 我们有台服务器被阿里云
  • 二分搜索只能用来查找元素吗?

    预计阅读时间 xff1a 6 分钟 二分查找到底能运用在哪里 xff1f 最常见的就是教科书上的例子 xff0c 在有序数组中搜索给定的某个目标值的索引 再推广一点 xff0c 如果目标值存在重复 xff0c 修改版的二分查找可以返回目标值
  • 2020员工数将超阿里腾讯!字节创始人张一鸣说:当下更需专注,未来值得期待...

    刚刚 xff0c 有一家互联网公司宣布2020年员工人数要超过阿里 腾讯 xff0c 这就是字节跳动 xff01 张一鸣近日发了一封全员信 xff1a 字节跳动8周年 xff1a 往事可以回首 xff0c 当下更需专注 xff0c 未来值得
  • 字节跳动 前端面经(4轮技术面+hr面)

    作者 xff1a 甘先森 https juejin im post 5e6a14b1f265da572978a1d3 笔者读大三 xff0c 前端小白一枚 xff0c 正在准备春招 xff0c 人生第一次面试 xff0c 投了头条前端 xf
  • 就是你把所有代码全写在一个类里的?

    来源 https urlify cn 6jQRN3 最近 xff0c 在对已有项目进行扩展的时候 xff0c 发现要改动的一个类它长900行 xff0c 开放了近40个public接口 xff0c 我流着泪把它给改完了 为了防止这样的惨剧再
  • 如何实现一个高性能可渲染大数据的Tree组件

    作者 xff1a jayzou https segmentfault com a 1190000021228976 背景 项目中需要渲染一个5000 43 节点的树组件 xff0c 但是在引入element Tree组件之后发现性能非常差

随机推荐

  • 白剽,2020年最牛AI技术,各个都有代码

    来源 xff1a Reddit 编辑 xff1a 科雨 2020年 xff0c 想必各国的人民都被新冠病毒支配得瑟瑟发抖 不过 xff0c 这并不影响科研工作者的工作态度和产出质量 疫情之下 xff0c 通过各种方式 xff0c 全球的研究
  • 图解:卷积神经网络数学原理解析

    原标题 Gentle Dive into Math Behind Convolutional Neural Networks 作 者 Piotr Skalski 编 辑 Pita 翻 译 通夜 xff08 中山大学 xff09 had in
  • 【第二弹】这可能是进达摩院最好的机会了!

    很长时间没有更新公众号了 xff0c 最近在准备一些其他节目 xff0c 和小伙伴们说声抱歉了 但是 xff0c 虽然近期没有文章 xff0c 福利是不能少的 早在半年前 xff0c 我发过一篇文章 xff1a 这可能是进达摩院最好的机会了
  • Hadoop入门-WordCount示例

    WordCount的过程如图 xff0c 这里记录下入门的过程 xff0c 虽然有很多地方理解的只是皮毛 Hadoop的安装 安装比较简单 xff0c 安装完成后进行单机环境的配置 hadoop env sh 指定JAVA HOME spa
  • Phaser入门教程

    入门教程 xff0c 我可不会讲什么概念 xff0c 我只会讲一个入门例子 xff0c 通过这个例子 xff0c 你就知道 phaser有多么强大 xff0c 而照着这个例子做 xff0c 你就能知道怎么使用 phaser了 需要说明的是
  • IDEA插件activiti工具actiBPM

    最新的IDEA中Marketplace搜索不到actiBPM xff08 2020 2 xff09 离线安装 下载https plugins jetbrains com 选择版本 导入jar 重启IDEA 验证 右键新建 表明添加成功 使用
  • 【内推找我】阿里社招面试16轮,终于拿到offer(2020年2月更新)

    内推私信我 xff0c 标题党了 xff0c 其实是这么回事 一 背景及原因 个人背景 xff1a 17年普本毕业Java开发 想换工作原因 xff1a 19年7月公司裁员了一波 xff0c 内部较动荡 xff0c 想看看外面机会 xff1
  • MPU6050介绍及姿态解算

    1 介绍 xff1a MPU6050 是 InvenSense 公司推出的全球首款整合性 6 轴运动处理组件 xff0c 相较于多组件方案 xff0c 免除了组合陀螺仪与加速器时之轴间差的问题 xff0c 减少了安装空间 xff08 1 x
  • 网络编程——Socket(套接字)

    网络编程 网络编程的目的就是指直接或间接地通过网络协议与其他计算机进行通讯 网络编程中 有两个主要的问题 xff0c 一个是如何准确的定位网络上一台或多台主机 xff0c 另一个就是找到主机后 如何可靠高效的进行数据传输 在TCP IP协议
  • 【Linux 驱动】netfilter/iptables (三) 注册和注销Netfilter hook

    继前面介绍了 netfilter hook xff0c 这里我们开始进行简单的实例讲解 xff0c 主要是Netfilter hook的注册与注销 xff1a wqlkp c xff1a span class hljs preprocess
  • Uboot网络设备驱动(一)---两种连接架构

    本系列将针对NXP的s32v234芯片及s32v234evb开发板讲解Uboot中网络相关的设备驱动程序 本文前提是你有基本的计算机网络知识 xff08 TCP IP协议及OSI ISO七层网络协议 xff09 一般BSP工程师涉及的主要工
  • ESP8266物联网远距离控制实现

    ESP8266物联网远距离控制实现 转载请注明出处 xff01 重要的事情放在前面源码在GitHub上面欢迎issue xff0c 如果可以的话Star一下也是表示对作者的支持 有很多不足 xff0c 希望可以得到指教 https gith
  • JACK报错(Ensure Jack server is installed and started)&多用户编译

    目录 报错内容 报错原因 解决方法 备注 报错内容 20 4823 23656 Ensure Jack server is installed and started FAILED bin bash c 34 prebuilts sdk t
  • linux常用命令

    linux常用命令 pwd 查看当前工作目录的绝对路径 cat input txt 查看input txt文件的内容 cat v input txt 查看input txt文件的编码格式 sed
  • UML中类的关系:关联关系、聚合关系、依赖关系、泛化关系、实现关系

    一 关联关系 关联关系是一种结构化的关系 xff0c 指一种对象和另一种对象有联系 给定关联的两个类 xff0c 可以从其中的一个类的对象访问到另一个类的相关对象 在UML图中 xff0c 关联关系用一条实线表示 另外 xff0c 关联可以
  • 互补滤波

    互补滤波 加速度计对小车的加速度比较敏感 xff0c 取瞬时值计算倾角误差比较大 xff1b 而陀螺仪积分得到的角度不受小车加速度的影响 xff0c 但是随着时间的增加积分漂移和温度漂移带来的误差比较大 所以这两个传感器正好可以弥补相互的缺
  • Linux 网络通讯 : smbclient 命令详解

    smbclient命令属于samba套件 xff0c 它提供一种命令行使用交互式方式访问samba服务器的共享资源 语法 smbclient 选项 参数 选项 B lt ip地址 gt xff1a 传送广播数据包时所用的IP地址 xff1b
  • 云计算的三种部署模式:公有云、私有云、混合云

    随着云时代的到来 xff0c 慢慢的演化出了更有针对性的产品服务 xff0c 公有云 xff0c 私有云 xff0c 混合云 那么这三者之间有什么区别呢 xff1f 我们用打比方的方式来说明 例如我们来到一个城市需要睡觉 xff0c 就要去
  • 机器学习之随机森林(sklearn)

    文章目录 1 概述1 1 集成算法的概述1 2 sklearn中的集成算法 2 RandomForestClassfier2 1 重要参数2 1 1 控制基评估器的参数2 1 2 n estimators2 1 3 random state
  • AM5728 高性能计算(并行计算)OpenCL/OpenMP简介及测试

    一 OpenCL OpenMP简介 OpenCL Open Computing Language 是一个为异构平台编写程序的框架 xff0c 属于API xff0c 和OpenGL架构类似 xff0c 此异构平台可由CPU xff0c GP