高性能計算

信息時代的硬件芯片和存儲器價格以摩爾定律的形式下降,可是現在處理的數據量也越來越大。我們先以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.pswp.cn/news/452072.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/452072.shtml
英文地址,請注明出處:http://en.pswp.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;能夠適應任何屏幕大小。 得…