1. 程式人生 > >當今主流高效能運算技術介紹比較

當今主流高效能運算技術介紹比較

資訊時代的硬體晶片和儲存器價格以摩爾定律的形式下降,可是現在處理的資料量也越來越大。我們先以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)在主執行緒上不起作用。

[email protected]
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兩種不同計算模型。

相關推薦

當今主流高效能運算技術介紹比較

資訊時代的硬體晶片和儲存器價格以摩爾定律的形式下降,可是現在處理的資料量也越來越大。我們先以cocoa程式設計為例,然後再結合網格計算、雲端計算,綜合對最新的高效能運算技術作介紹。使用 runloop在cocoa程式設計如果用NSThread開執行緒[NSThread de

Java 序列化與主流編解碼技術框架介紹

本文導讀      本文將主要介紹:1)Java 序列化的缺點,2)業界流行的編解碼技術框架介紹。      介紹編解碼技術之前,就不得不提 Java 序列化,記住:Java 序列化只是 Java 編解碼技術中的其中一種! &n

乾貨|一文看懂BLE低功耗技術-附主流BLE晶片廠商介紹

說到物聯網,就不得不提近距離低功耗傳輸的藍芽技術,藍芽技術經過近些年的演變,已經形成了經典藍芽與低功耗藍芽(BLE)這兩種區別。 本文我們主要來看一下低功耗藍芽的一些知識。 1:什麼是低功耗藍芽(BLE)? 藍芽低能耗(BLE)技術是低成本、短距離、可互操作

高效能運算機的Numa、SMP、MPP架構技術特點分析

  SMP伺服器的主要特徵是共享,系統中所有資源(CPU、記憶體、I/O等)都是共享的。也正是由於這種特徵,導致了SMP伺服器的主要問題,那就是它的擴充套件能力非常有限。對於SMP伺服器而言,每一個共享的環節都可能造成SMP伺服器擴充套件時的瓶頸,而最受限制的則是記憶體。由於每個CPU必須通過相同的記憶體匯流

四種主流複製技術介紹,複製原理,優缺點分析

談容災,談災備,我們總是不可避免的要提到複製技術。因為複製技術具有備份所不具備的切換優勢(詳見備份和複製的區別),能夠得到更好的恢復點目標(PRO)和恢復時間目標(RTO),所以成為較高層次容災方案設計中非常重要的一部分。 複製技術分類 按照複製執行位置,分為基於主機

虛擬化的主流技術介紹

虛擬化,是指通過虛擬化技術將一臺計算機虛擬為多臺邏輯計算機。在一臺計算機上同時執行多個邏輯計算機,每個邏輯計算機上可以執行不同的作業系統,並且應用程式都可以相互獨立的空間內執行而互不影響,顯著提高計算機的工作效率。 虛擬化實現了用軟體的方法重新劃分和定義了IT資源,可以實現

三種主流無線同屏技術介紹(Miracast、DLNA與AirPlay技術

不知道大家對無線同屏技術有多少了解,當這種技術普及的時候,我想我們的工作與生活又會方便很多吧!下面是目前三種主流同屏技術的介紹: 目前這種將終端訊號經由WiFi傳輸到電視、電視盒的技術有三種:DLNA

哈夫曼編碼(Huffman coding)的那些事,(編碼技術介紹和程序實現)

信號 truct 依次 while 交換 需要 .text 示例 system 前言   哈夫曼編碼(Huffman coding)是一種可變長的前綴碼。哈夫曼編碼使用的算法是David A. Huffman還是在MIT的學生時提出的,並且在1952年發表了名為《

JEESZ分布式框架--技術介紹文檔

Rest服務 Redis Spring SpringMVC+Mybatis Dubbo+Zookeeper Java分布式架構 摘要: 1.Eclipse IDE:采用Maven項目管理,模塊化。 2.代碼生成:通過界面方式簡單配置,自動生成相應代碼,目前包

JEESZ分布式框架簡介---技術介紹文檔

rest服務 spring redis dubbo+zookeeper springmvc+mybatis java分布式架構 摘要: Jeesz主要定位於互聯網企業架構,已內置企業信息化系統的基礎功能和高效的代碼生成工具,包括:系統權限組件、數據權限組件、數據字典組件、核心工具 組

架構師之路--搜索業務和技術介紹及容錯機制

朋友 單節點 adb 一致性 公司 一個 memcache 消息通知 包括  今天和搜索部門一起做了一下MQ的遷移,順便交流一下業務和技術。發現現在90後小夥都挺不錯。我是指能力和探究心。我家男孩,不招女婿。   在前面的文章中也提到,我們有媒資庫(樂視視頻音頻本身內容)

002-主流區塊鏈技術特點及Fabric V0.6版本特點

集中 擴展 http per 推出 全部 -1 維護 進行 一、主流區塊鏈技術特點    二、Hyperledger的fabric V0.6總體架構:    對應的0.6版本的運行時架構:    0.6版本的架構特點是:  結構簡單: 應用-成員管理-Peer的

php的註釋、變量、類型、常量、運算符、比較符、條件語句;

小數 array cas 單引號 標識 php 規則 tro 特殊 php的註釋 1.// 2.# 3./* */ 變量 變量是儲存信息的容器; 變量規則: 1.變量以$開頭,後面跟名稱》》》$sum; 2.變量必須以字母或下滑先開頭,不能用數字開頭; 3.變量名稱對大小

Rhino腳本引擎技術介紹

target ava www. post ack pan 不支持 pos article 引用:http://p.primeton.com/articles/54c1e255be20aa4735000001 http://blog.csdn.net/u013292493/a

【轉】RAID技術介紹和總結

允許 pos distrib 數據讀取 body web服務器 data- 也有 丟失 轉自http://blog.jobbole.com/83808/ 簡介 RAID是一個我們經常能見到的名詞。但卻因為很少能在實際環境中體驗,所以很難對其原理 能有很清楚的認識和掌握。本文

c++位運算介紹

邏輯或 進行 order 存儲 cap exp 優先 example 右移 下面是C/C++位操作運算符列表,其中運算符優先級為從上到下遞減,但<<,>>優先級相同。 C/C++位操作運算符 操作符 功能 用法 ~ 位求反 ~expr

keepalived高可用集群技術介紹及實戰演練

keepalived一、Keepalived是什麽 Keepalived的作用是檢測服務器的狀態,如果有一臺web服務器宕機,或工作出現故障,Keepalived將檢測到,並將有故障的服務器從系統中剔除,同時使用其他服務器代替該服務器的工作,當服務器工作正常後Keepalived自動將服務器加入到服務器群中,

SVG Sprite技術介紹

問題 tor 位置 mage display 不定 頭部 posit 知識 未來必熱:SVG Sprite技術介紹 這篇文章發布於 2014年07月10日,星期四,18:03,歸類於 SVG相關。 閱讀 100049 次, 今日 15 次 by zhangxinxu fr

IDC 監控技術介紹

proc sha 排名 刪除 使用情況 ifconf 獲取 設備 normal IDC 監控技術介紹監控目的 提前發現問題 — 進行服務器性能調整前,知道調整什麽 — 找出系統的瓶頸在什麽地方 報告系統運行狀況 — 每一部分必須同時

聚合支付場景 成為當今主流戰場

聚合支付場景 聚合支付戰場 如今在第三方支付市場上,微信與支付寶的支付大戰,依舊風煙四起。而支付場景的多樣化,讓聚合支付應運而生。湧現出許多的聚合支付服務商,值得一提的是采寶支付作為國內最好的聚合支付平臺,有著3年的行業經驗。同時,場景依舊是聚合支付的核心內容。