高性能计算

2023-05-16

信息时代的硬件芯片和存储器价格以摩尔定律的形式下降,可是现在处理的数据量也越来越大。我们先以cocoa编程为例,然后再结合网格计算、云计算,综合对最新的高性能计算技术作介绍。

使用 runloop
在cocoa编程如果用NSThread开线程
[NSThread detachNewThreadSelect: @selector(run) toTarget:self withObject:nil]
也可以用runLoop的方式来取代
[self performSelector:@selector(run) withObject:nil afterDelay:0.0]
在runLoop里面的run函数要有循环调用
相比而言使用runLoop的方法效率更高。

Grand Central Dispatch
GCD是一项由苹果发展起来的技术,用多核处理器和其他多处理系统去优化应用对系统的支持。这是一个根据线程池模式的并行任务的实现。它首先发布在mac os x10.6上,也可以用在ios 4上。
GCD是一个替代诸如NSThread等技术的很高效和强大的技术。GCD完全可以处理诸如数据锁定和资源泄漏等负责的异步编程问题。
在开始之前,需要理解是要提供给GCD队列的是代码块,用于在系统或者用户创建的的队列上调度运行。
如下会返回一个用户创建的队列:
dispatch_queue_t myQueue = dispatch_queue_create("com.iphonedevblog.post", NULL);

执行一个队列
如下会异步执行传入的代码:
dispatch_async(myQueue, ^{ [self doSomething]; }); 其中,首先传入之前创建的队列,然后提供由队列运行的代码块。
声明并执行一个队列
如果不需要保留要运行的队列的引用,可以通过如下代码实现之前的功能:
dispatch_async(dispatch_queue_create ("com.iphonedevblog.post", NULL), ^{ [self doSomething]; });

从队列中在主线程运行代码
有些操作无法在异步队列运行,因此必须在主线程(每个应用都有一个)上运行。UI绘图以及任何对NSNotificationCenter的调用必须在主线程长进行。
在另一个队列中访问主线程并运行代码的示例如下:
dispatch_sync(dispatch_get_main_queue(), ^{ [self dismissLoginWindow]; });
注意,dispatch_suspend (以及dispatch_resume)在主线程上不起作用。

SETI@home
at Home,在家搜寻外星智慧(地外文明---也就是我们常说的“外星人”)),是一个通过互联网利用家用个人计算机处理天文数据的分布式计算项目。该项目试图通过分析阿雷西博射电望远镜采集的无线电信号,搜寻能够证实外星智能生物存在的证据。该项目由美国加州大学伯克利分校的空间科学实验室主办。

网格 计算: Xgrid
Xgrid是一组Mac OS X应用套件,它使管理人员可以将本地和远程计算机连接起来形成网格,从而使本地和远程用户可以随时使用整个网格提供的计算资源。当用户将一项工作(Job)提交给系统后,Xgrid将为每项工作创建多个任务(Task)并且将它们分配给网格上的多个节点去并行地执行。Xgrid产生的目的是为了解决复杂耗时的计算问题,诸如蒙特卡洛计算、3D渲染等。然而,Xgrid本身并不是一种计算方法,它是一种让多台计算机相互“交谈”的网格结构。

Xgrid允许一个程序在不同的机器上并行运行,从而迅速得到运行结果。在Xgrid中包括三大软件组件:用于启动运算例程的客户机(Client)、进行初始化计算的控制机(Controller)以及执行计算过程的代理机(Agent)。

GridEZ.framework
GridEZ 框架是目的是使得你的yingiyong整合Xgrid的服务更加容易。XgridFoudation api是强大的,可是它使用起来很复杂。为了让使用者连接控制器,提交一项工作和得到相应的结果,你需要用XgridFoundation写数百行代码,和管理一个复杂的XgridFoundation要求你的异步调用链。
GridEZ框架提供一个使用简单的对象隐藏了这些复杂度,和提供了大部分你所需要的功能。例如,你提交一项工作,当工作完成之后结果回自动装载到你的应用,而你要做的仅仅是写一个代理方法去处理它。如果你从来没有使用XgridFoundation APIs,你可能不知道困难的是什么。可是如果你知道的话,你已经意识到GridEZ是怎么使你的生活大为轻松了。

云计算 :EC2
Elastic Compute Cloud(EC2)
EC2是由亚马逊提供的web计算服务,是一个让使用者可以租用云端电脑运行所需应用的系统。EC2由提供web
服务的方式让使用者可以弹性地运行自己的Amazon机器映象档,使用者将可以在这个虚拟机上运行任何自己想要的应用程序。
EC2 与传统的服务器电脑有以下优势:
没有系统管理员
没有机房的空间
没有电费账单
没有限制的空间

OpenMPI
MPI最大的特点是用户写一份单独的程序却运行在所有的计算机上。可是因为每一个计算机被赋予一个唯一的标识序列,尽管它只运行相同的代码,它却可以为不同的机器上进行不同的操作:

if ( I am processor A ) then
add a bunch of numbers
else if ( I am processor B ) then
multipy a matrix times a vector
end

另一个MPI的特点的特点是单独数据存储在各个计算机上。如果一个计算机需要从另一个得到数据,或者发送一个特别的数据到所有其他计算机,它必须单独调用合适的库要求数据传输。
由于库路径的调用,它对发送者和接收者来说要求同时在线(意味着一个人将可能要等待另一个人出现),或者为了以后传输发送者在同一时间发送一个消息到缓冲区,允许发送者立即进行再进一步的计算。
这是一个一份程序看起来的简单例子,在那里数字X被认为被处理器A计算,数字B被处理器B计算。

if ( I am processor A ) then
call MPI_Send ( X )
else if ( I am processor B ) then
call MPI_Recv ( X )
end

open MPI 项目是一个开源的MPI-2层级的实现,由科研机构和合伙公司共同发展和维护的。open MPI可以从各个高性能的计算单位联合专家知识、技术和资源,从而组建一个最高MPI可行的库。open MPI向系统和软件供应商和应用开发者和计算机学者提供很多好处。

不完全列举open MPI的特点:
完全支持MPI-2 层级
线程和并发安全
支持异构网络
单一库支持所有网络
运行时指令
支持各种操作系统
在各个平台上的高性能
可移植和容易维护
动态和快速响应的邮件列表

并行程序:OpenMP
OpenMP(Open Multi-Processing)是由OpenMP Architecture Review Board牵头提出的,并已被广泛接受的,用于共享内存并行系统的多线程程序设计的一套指导性注释(Compiler Directive)。
程序员通过在源代码中加入专用的pragma来指明自己的意图,由此编译器可以自动将程序进行并行化,并在必要之处加入同步互斥以及通信。当选择忽略这些pragma,或者编译器不支持OpenMP时,程序又可退化为通常的程序(一般为串行),代码仍然可以正常运作,只是不能利用多线程来加速程序执行。
OpenMP提供的这种对于并行描述的高层抽象降低了并行编程的难度和复杂度,这样程序员可以把更多的精力投入到并行算法本身,而非其具体实现细节。对基于数据分集的多线程程序设计,OpenMP是一个很好的选择。同时,使用OpenMP也提供了更强的灵活性,可以较容易的适应不同的并行系统配置。线程粒度和负载平衡等是传统多线程程序设计中的难题,但在OpenMP中,OpenMP库从程序员手中接管了部分这两方面的工作。

例子
在 omp parallel 段內的程序代码由多线程來執行:
int main(int argc, char* argv[])
{
#pragma omp parallel
printf("Hello, world.n");

return 1;
}

GPU 编程: OpenCL
OpenCL (Open Computing Language,开放计算语言) 是一个为异构平台编写程序的框架,此异构平台可由CPU,GPU或其他类型的处理器组成。OpenCL由一门用于编写kernels (在OpenCL设备上运行的函数)的语言(基于C99)和一组用于定义并控制平台的API组成。OpenCL提供了基于任务分割和数据分割的并行计算机制。
OpenCL类似于另外两个开放的工业标准OpenGL和OpenAL,这两个标准分别用于三维图形和计算机音频方面。OpenCL扩展了GPU用于图形生成之外的能力。OpenCL由非盈利性技术组织Khronos Group掌管。

OpenCL 是基于C的一个程序语言,在软件上,分为Platform Layer、Runtime、Compiler三个部分。

•Platform Layer用来管理计算装置,提供初始化装置的界面,并用来建立compute contexts和work-queues
•runtime 用来管理资源,并执行程序的kennel
•编译器则是 ISO C99的子集合,并加上Open CL特殊的语法。

在OpenCL的执行模型中,有所谓的Compute Kenel 和Compute Program。Compute Kenel基本上类似于CUDA定义的kenel,是最基本的计算单元;而Compute Program则是Compute Kernel和内建函数的集合,类似一个动态函数库。而应用程序则是会把要执行的compute kernel排序,在执行时则可以依序或不依序来执行。

在平行计算方面,有data-parallel和task-parallel两种不同计算模型。

转载于:https://www.cnblogs.com/J2EEPLUS/archive/2012/04/26/2488039.html

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

高性能计算 的相关文章

  • 使用CocoaPods过程中的几个问题

    当把CocoaPods生成的workspace移动到上层目录时 xff0c 需要改下Pods xcconfig和工程里的一些设置 xff0c 就通常没什么难度 当遇到这个问题时 xff1a Could not automatically s
  • 仿网易云音乐的播放进度条

    仿网易云音乐的播放进度条 xff0c 有三种状态 xff1a 播放 暂停和拖动 xff0c 只是实现了动画和主要的交互逻辑 xff0c 其他细节 xff08 如暂停音乐的播放等 xff09 还需要自己完善 xff1a DKPlayerBar
  • 用 Houston 在本地调试远程通知

    Houston 的背景 Houston 在 GitHub 上的地址 xff1a https github com nomad Houston xff0c 作者又是Mattt Thompson xff0c 简直是惨无人道啊 xff0c 又高产
  • 如何设计一个 iOS 控件?(iOS 控件完全解析)

    代码的等级 xff1a 可编译 可运行 可测试 可读 可维护 可复用 前言 一个控件从外在特征来说 xff0c 主要是封装这几点 xff1a 交互方式显示样式数据使用 对外在特征的封装 xff0c 能让我们在多种环境下达到 PM 对产品的要
  • 蛋花花分享人工智能概念的诞生与发展

    蛋花花分享人工智能概念的诞生与发展 xff01 如今人工智能非常的火 xff0c 在各行各业都有突出的变现 xff0c 让人期待它未来的发展 蛋花花认为了解人工智能向何处去 xff0c 首先要知道人工智能从何处来 1956年夏 xff0c
  • 用JFreeChart 生成报表

    JFreeChart是JAVA平台上的一个开放的图表绘制类库 它完全使用JAVA语言编写 xff0c 是为applications applets servlets 以及JSP等使用所设计 JFreeChart可生成饼图 xff08 pie
  • Mac原生字典支持的词典

    一共十八部词典 xff0c 见下 xff1a 打了一个包 xff0c 有700多M xff0c 在CSDN没有权限上传这么大的文件 xff0c 故上传到115上 放到 Library Dictionaries 目录中即可 下载地址

随机推荐

  • NSAttributedString 详解

    NSAttributedString可以让我们使一个字符串显示的多样化 xff0c 但是目前到iOS 5为止 xff0c 好像对它支持的不是很好 xff0c 因为显示起来不太方便 xff08 至少没有在OS X上方便 xff09 首先导入C
  • ftp三种用户权限设置

    修改配置文件vsftpd conf Vi etc vsftpd vsftpd conf 修改匿名用户为禁止 2在禁止登录名单里删除root vi etc vsftpd user list vi etc vsftpd ftpuser 然后按d
  • 常见的socket出错总结

    常见错误 ECONNREFUSED 111 没有这个端口 EAGAIN 11 buff已满 EPIPE 32 客户端断掉了 ECONNRESET xff08 104 xff09 客户端先可以正常连接服务端 xff0c 并可以进行数据收发 x
  • CentOS-8中安装JDK 1.8

    备忘录 xff1a 喜欢 xff0c 即可 xff0c 无它 本例环境 xff1a 操作系统 xff1a CentOS 8 1 1911 x86 64 dvd1 安装包 xff1a jdk 8u251 linux x64 rpm 远程连接工
  • Android 系统(125)---Android通过Dialer实现暗码启动

    Android通过Dialer实现暗码启动 目前接触比较多的就是通过dialer应用来启动 触发暗码 本文以Dialer为例 xff0c 1 经过调试定位 xff0c 发现拨号盘接对应的Activity为DialtactsActivity
  • 阿里程序员常用的 15 个高效工具,大部分已开源!

    阿里程序员常用的 15 个高效工具 xff0c 大部分已开源 xff01 阿里将自身在各类业务场景下的技术积淀 xff0c 通过开源 云上实现或工具等形式对外开放 xff0c 本文将精选了一些阿里巴巴的开发者工具 xff0c 希望能帮助开发
  • Linux域名解析(DNS)

    DNS简介 域名系统 xff08 英文 xff1a Domain Name System xff0c 缩写 xff1a DNS xff09 xff0c 使用应用层协议 xff0c 是互联网的一项服务 它作为将域名和IP地址相互映射的一个分布
  • redhat6.7系统突然异常死机问题处理

    redhat6 7正常使用过一段时间之后异常死机 xff0c cat var log messages查看日志没有明显的error报错 xff0c 看带外管理日志发现是系统的问题 xff0c 后来通过修改grub conf配置解决了 xff
  • 下载并构建PX4

    根据官方的文档 xff0c PX4下载和构建的方式有两种 xff1a Linux系列的Console模式 xff08 当然也支持Windows下的MINGW32 xff09 和Windows模式 在Windows平台下 xff0c 我们习惯
  • 又是一年年终时...

    今年的第一天 xff0c 也就是 2009 年的第一天 xff0c 我用一个懒觉迎接了 2009 xff0c 整整睡到了中午 11 30 才醒 新一年初 xff0c 也就是明天 xff0c 我决定用早起来迎接 习惯了晚上学习 xff0c 早
  • 前端传值(枚举类接收问题)

    最近做的这个项目中 xff0c 用到了大量的枚举类 xff0c 今天来记录一下我遇到的问题 xff0c 如果能帮到大家就更好了 xff01 1 枚举类如何转为json xff08 在一个类的属性中 xff0c 这个枚举类属性如何直接使用在接
  • APM_ArduCopter源码解析学习(四)——IMU

    APM ArduCopter源码解析学习 xff08 四 xff09 IMU 前言一 system cpp 1 1 无人机内部初始化1 2 Copter init ardupilot 1 3 Copter startup INS groun
  • 查看当前系统的glibc版本

    有时我们经常需要查看当前系统的glibc版本 xff0c 可以这样查看 lib libc so 6 有时 lib x86 64 linux libc so 6 把这个文件当命令执行一下 为什么这个库可以直接run呢 xff1f 原来在lib
  • Java多线程学习三:有哪几种实现生产者消费者模式的方法

    我们先来看看什么是生产者消费者模式 xff0c 生产者消费者模式是程序设计中非常常见的一种设计模式 xff0c 被广泛运用在解耦 消息队列等场景 在现实世界中 xff0c 我们把生产商品的一方称为生产者 xff0c 把消费商品的一方称为消费
  • 如何在 Ubuntu 中管理和使用逻辑卷管理LVM

    在我们之前的文章中 xff0c 我们介绍了什么是 LVM 以及能用 LVM 做什么 xff0c 今天我们会给你介绍一些 LVM 的主要管理工具 xff0c 使得你在设置和扩展安装时更游刃有余 正如之前所述 xff0c LVM 是介于你的操作
  • 如何获取本地和远程主机的IP及MAC地址

    这篇文章 xff0c 我们不准备大规模的讨论技术问题 只是向大家介绍一下我们将如何获得一台主机的IP地址 在Win32 API中我们可以使用NetWork API完成这项工作 xff0c 但是在 Net平台下我们应当如何做呢 xff1f 其
  • 聊聊java中一些减少if-else 的编码方式!

    01 前言 前段时间在阅读别人所写的代码的时候 发现其中一些业务相关的方法体内 出现了比较多的if else语句多层嵌套的情况 首先我个人不是不提倡写if else语句 不得不说 很多时候 在写某些逻辑 使用if else 去做判断 代码看
  • 如何用简单方法推导正弦函数的和角公式: sin(α+β)=sinαcosβ+cosαsinβ ?

    问题 xff1a 看2014年湖北省高考理科数学题 xff0c 选择题第6题 xff1a 这道题目答案是C xff0c 组是正交函数 xff0c 组不是正交函数 可以用数形结合方式 xff0c 快速做出判断 详细解析如下 分析 xff1a
  • Http头部参数:Authorization

    项目uu约优中 xff0c 用到了头部Authorization 当时传递的参数也是后端返回的20位字符 项目sxaik中 xff0c http请求的头部传递Authorization xff0c 值为32位小写字符 xff0c 不确定是m
  • 高性能计算

    信息时代的硬件芯片和存储器价格以摩尔定律的形式下降 xff0c 可是现在处理的数据量也越来越大 我们先以cocoa编程为例 xff0c 然后再结合网格计算 云计算 xff0c 综合对最新的高性能计算技术作介绍 使用 runloop 在coc