高性能计算

信息时代的硬件芯片和存储器价格以摩尔定律的形式下降,可是现在处理的数据量也越来越大。我们先以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两种不同计算模型。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/452072.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

混合型面向对象语言和纯面向对象语言

20世纪80年代以来,面向对象语言像雨后春笋一样大量涌现,形成了两大类面向对象语言。 一类是纯面向对象语言,如Smalltalk和Eiffel等语言 另一类是混合型面向对象语言,也就是在过程语言的基础上增加面向对象机制,如C等…

块级元素的margin-left和margin-right的用法注意

此时是有效果显示的因为html文档流默认是从上往下,从左往右进行显示的,所以此时是有效果的。那如果此时把#son的块元素的margin-right:20px; 是没有效果的此时是没有效果的,如图所示:如果此时想要margin-right有效果的话&#xf…

Apache Tiles的基本使用

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 1、概述 对于一个新的技术,了解其基本的概念和和原理是学好该技术的基础。 2、Tiles的概念 Tiles 是复合视图模式&#xff0…

js--------1.时间

1 //获取当前时间 yyyy-MM-dd2 function getNowFormatDate() {3 var date new Date();4 var seperator1 "-";5 var seperator2 ":";6 var month date.getMonth() 1;7 var strDate date.getDate();8 if (month > 1 &&…

网络爬虫--6.urllib库的基本使用(2)

文章目录一. urllib.parse.urlencode()和urllib.parse.unquote()二. Get方式三. 批量爬取百度贴吧数据四.POST方式五.关于CA六.处理HTTPS请求 SSL证书验证一. urllib.parse.urlencode()和urllib.parse.unquote() 编码工作使用urllib.parse的urlencode()函数,帮我们…

面向对象语言的技术特点

1.支持类与对象概念的机制 所有面向对象语言都允许用户动态创建对象,并且可以用指针引用动态创建的对象。允许动态创建对象,就意味着系统必须处理内存管理问题,如果不及时释放不再需要的对象所占用的内存,动态存储分配就有可能耗…

INI 文件的操作

在程序中经常要用到设置或者其他少量数据的存盘,以便程序在下一次执行的时候可以使用,比如说保存本次程序执行时窗口的位置、大小、一些用户设置的数据等等,在 Dos 下编程的时候,我们一般自己产生一个文件,由自己把这些…

摩拜大数据杀熟?官方:老用户押金的确退款延迟

近日,有媒体曝出摩拜单车一些老用户出现押金难退现象。有的消费者点击退款后,系统不断奔溃;有的申请退款后,账户又莫名出现押金,就像未申请一样;也有人终于提交了退款,等候数日却迟迟不见到账。…

Junit Test使用样例

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 配置: 调用类: import java.util.List;import javax.annotation.Resource;import org.apache.shiro.crypto.Rand…

Django congtent types应用

contenttypes 是Django内置的一个应用,可以追踪项目中所有app和model的对应关系,并记录在ContentType表中。 每当我们创建了新的model并执行数据库迁移后,ContentType表中就会自动新增一条记录。比如我在应用app01的models.py中创建表class E…

网络爬虫--7.Handler处理器 和 自定义Opener

文章目录一. 引言二. 简单的自定义opener()三. ProxyHandler处理器(代理设置)四. Cookie1.Cookie原理2.Cookie应用五. cookiejar库 和 HTTPCookieProcessor处理器1.案例一:获取Cookie,并保存到CookieJar()对象中2.案例二:利用cook…

如何选择面向对象语言

开发人员在选择面向对象语言时,还应该着重考虑以下一些实际因素。 1. 将来能否占主导地位 为了使自己的产品在若干年后仍然具有很强的生命力,人们可能希望采用将来占主导地位的语言编程。 根据目前占有的市场份额,以及专业书刊和学术会议上所…

Unicode编码及其实现:UTF-16、UTF-8,and more

本文主要讨论Unicode的编码与各种实现,着重讨论UTF-16,UTF-8的实现规则,以及Big-endian和Little-Endian的存储规则。 一、Unicode编码 Unicode出现之前已经有各种编码标准:ANSI、ISO8859-1、GB2312、GBK以及BIG-5等。Unicode试图统…

Apache Tiles的使用 前配置

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 使用方法见&#xff1a; http://blog.csdn.net/jiangyu1013/article/details/53161580 1.加maven 依赖&#xff1a; <!-- 页面布局…

day212223:线程、进程、协程

1、程序工作原理 进程的限制&#xff1a;每一个时刻只能有一个线程来工作。多进程的优点&#xff1a;同时利用多个cpu&#xff0c;能够同时进行多个操作。缺点&#xff1a;对内存消耗比较高当进程数多于cpu数量的时候会导致不能被调用&#xff0c;进程不是越多越好&#xff0c;…

php课程 8-28 php如何绘制生成显示图片

php课程 8-28 php如何绘制生成显示图片 一、总结 一句话总结&#xff1a;gd库轻松解决 1、php图片操作生成的图的两种去向是什么&#xff1f; 一种在页面直接输出&#xff0c;一种存进本地磁盘 2、php操作图片的库有哪些&#xff1f; PHP: Image Processing and Generation - M…

代码行技术

用代码行技术估算软件规模时&#xff0c;当程序较小时常用的单位是代码行数&#xff08;LOC&#xff09;&#xff0c;当程序较大时常用的单位是千行代码数&#xff08;KLOC&#xff09;。 代码行技术的主要优点是&#xff0c;代码是所有软件开发项目都有的“产品”&#xff0c;…

网络爬虫--8.编码趣闻

很久很久以前&#xff0c;有一群人&#xff0c;他们决定用8个可以开合的晶体管来组合成不同的状态&#xff0c;以表示世界上的万物。他们看到8个开关状态是好的&#xff0c;于是他们把这称为"字节"。 再后来&#xff0c;他们又做了一些可以处理这些字节的机器&#…

科技领域的一分钟

各位果迷是否能想象在一分钟之内&#xff0c;科技领域都会发生什么事情&#xff1f;——苹果平均每分钟卖出81部 iPad&#xff1b;在 iPhone 4S 发布后的第一个周末&#xff0c;每分钟卖出925部 iPhone 4S&#xff1b;RIM每分钟卖出103台黑莓手机&#xff1b;Amazon每分钟卖出1…

flavr—超级漂亮的jQuery扁平弹出对话框

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 插件描述&#xff1a;flavr是一个时尚的扁平弹出对话框为您的下一个网站。 flavr是响应设计布局&#xff0c;能够适应任何屏幕大小。 得…