關於異構並行分佈式處理系統的構想

一、並行

    由於最近在上並行程序設計課的時候,老師談到Unix能夠進行多線程編程,具體還沒來得及探究到底怎樣的多線程,不過我想應該能夠作到「指哪打哪」,也就是能夠在多核處理器上,人工控制某個線程到某個內核中進行運算。固然,我以爲這個須要程序員須要有比較深厚的功底,最基本的是系統能夠利用多核來爲多個線程進行部署。程序員

    以上說的是「單機」的並行,或者能夠說是併發。那麼擴展到集羣,我想你們都瞭解Hadoop,本科畢業那會的論文也是搭建一個Hadoop平臺,而後寫個程序跑一下,具體也沒太深刻細究。固然,也有人提出(那本書好像是叫《分佈式存儲。。。》)hadoop主要是爲大公司服務的,對於小規模集羣可能並不適用,何況Hadoop只能運行在Linux機上,Windows機就不行了編程

    綜上兩個觀點,一個是並行觀點,另外一個是異構的觀點,先提出下面的多機多級並行框架:並行異構運算框架。多線程

二、框架描述

    一、該框架確定不能凌駕於操做系統之上,由於這個框架就是爲了適應不一樣操做系統而產生的。我記得曾經有一位淘寶作數據挖掘的工程師給咱們來說座說過,咱們PC機的計算資源利用率比較低,而不少企業可能利用其安裝的軟件來利用咱們的計算資源。其實這個就是我要描述的框架的原型。經過軟件客戶端,部署額外的線程,與遠端的主線程進行交互,實現多線程的併發並行,從而實現分佈式計算。併發

    二、而後再來講說應該用什麼語言,由於本身水平比較爛,因此其實更關心的是用什麼語言。固然像Java這樣的語言是最好,跨平臺,運行效率又高,也不用太操心硬件層的調用,全部的機器都是一個媽產出,都不用針對不一樣機器再編譯。框架

    可是我以爲C++或者C可能更合適。首先,自己這個框架是一個輔助工具,他不幹實際的工做,只是一個協調調度,就好像企業,管理層不可能養太多人,而是幾我的,甚至一我的,看似拿着很高的工資,可是一我的月薪2萬和四我的月薪5錢,絕對不是等同的。量越大,消耗的資源就越多,因此做爲一個輔助框架,應該須要更高的性能做爲支撐。分佈式

    其次就是異構這個點,C++和C都有現行標準支持,雖然各個廠家在具體實現細節上有差別,可是目前我能想到這個框架應該就兩個點:計算+通訊。計算用C或C++,沒問題,若是實在不行,用一個翻譯層,將主線程、主進程的指令翻譯成Slave機的指令。通訊,我想就很好說了,否則個人Windows機和Linux機怎麼能互相遠程。函數

    通過上面的描述,大概框架就稍微有點輪廓了。工具

三、功能描述

    限於本身知識比較有限,因此能想到的功能確實不是不少。爲了適應「通用」這個想法,我以爲給出的接口最好是越簡單越好。既然是「計算+通訊」,那麼就不妨直接就把接口拆成兩部分——計算部分和通訊部分。oop

    計算部分固然是給出函數、參數、數據,通訊部分就是給出Slave的位置。這裏假設計算消耗 的時間要比通訊的時間長,那麼下一步就能夠設計出下面這樣一個流程:性能

  state  masterSendSlave(function pointer, argument, attribute, source,   address)

主線程首先執行上面的函數,其中attribute指出是是否將運行的程序、程序所需的數據發送給slave。function和argument爲須要執行的程序。source爲所需的數據資源。address爲表示目標slave。若是slave接收到master的請求,將返回狀態信息,即state。master經過state瞭解到誰能夠幹活,誰不能夠幹活,而後對slave進行管理。

    slave接收的信息中,包括一個虛擬線程號,用於惟一標識本身。slave檢測自身條件是否符合運行,若是符合,則向master發送信息,告訴master我正在執行你的請求。    

    當slave執行請求結束後,向master發送完成信息。master將該線程註銷,並做後期處理。

四、續

    目前這個框架只是初步想下,我以爲應該會有很牛的人早就想到這種方法了,畢竟過去計算機單核處理能力比較弱,對於大型計算,仍是須要多核來作事。

    以上僅記錄下思想,歡迎拍磚。

相關文章
相關標籤/搜索