天天看點

MIT最新釋出程式設計語言Milk,加速大資料時代并行運算

本周mit最新釋出新程式設計語言milk,新的程式語言在大資料方面能實作比現有語言快四倍的處理速度。

MIT最新釋出程式設計語言Milk,加速大資料時代并行運算

在當下的計算機晶片中,記憶體管理是基于計算機科學家所稱的局部性原理(principle of locality)來實作的:

如果一個程式需要某個記憶體位置的資料塊,它可能也需要資料塊臨近位置的資料。

但是在大資料時代,這種假設已不再成立。如今的計算機程式更多地是在大型資料集中離散地擷取一點點資料。由于從主要記憶體位中擷取資料已成了當下晶片的最大性能瓶頸,是以不得不更加頻繁地擷取資料,這也明顯拖慢了程式運作的速度。

本周在國際并行體系結構和編譯技術會議(international conference on parallel architectures and compilation techniques)上,來自麻省理工學院計算機科學與人工智能實驗室(csail)的研究人員釋出了一種新的程式設計語言——milk,它能讓應用程式開發者在處理大資料集裡的離散資料點問題中更有效率地管理記憶體。

通過測試幾種通用的算法,使用新語言milk編寫的程式實作了比現有程式設計語言快4倍的速度。但是研究者相信通過更進一步的研究可以實作更好地結果。

電氣工程和計算機科學教授saman amarasinghe 說,當下大資料集給已有的記憶體管理技術帶來問題的原因不僅在于因為它們的規模巨大,更多的是因為它們是稀疏的(sparse)。也就是說,問題解決方案的規模并不一定是與問題的規模成正比增加。

“在社交環境中,我們通常傾向于注重更小的問題。” amarasinghe說“如果你隻關注在這種建築[csail]内的人的話,你能發現我們都是朋友的。但是如果你以地球的層面來看待的話,朋友的數量并不會增加。整個地球有幾十億人口,但是我也僅僅隻有幾百個朋友。這就是一個很明顯的稀疏性問題。”

同樣amarasinghe提到,一個線上書店可能為其1000名顧客提供最流行的20本書籍的書單。但是但其顧客數增加到100萬時,它并不會相應地提供最流行的20000本書籍的書單。

當下的計算機晶片并沒有專門針對稀疏資料進行優化,而且可以說是完全相反。因為從晶片的主要記憶體位讀取資料是緩慢的,當下的晶片中每個核心或者每個處理器都有自己的“緩存”,一個相關的小型、本地、高速的記憶體位。晶片中的核心會一次讀取一個完整的資料塊,而不是在主記憶體中每次提取一個單獨的資料。而讀取的資料塊是通過局部性原理來進行選擇的。

通過圖像處理的例子可以很容易看清局部性原理的本質:

如果一個程式的目的是将視覺過濾器應用到圖像中,且它每次隻作用在圖像的一個資料塊上。那麼每次晶片核心請求一個區塊資料時,它應該收到自身緩存能接受的所有臨近區塊資料。是以它可以一個一個區塊處理,且不再擷取更多的資料。

但是如果該算法的興趣是線上書店200萬資料庫中的20本書的話,該方式将不再适用。如果它請求與某一本書相鄰的資料,很有可能其相鄰的100種書的資料都是沒有關聯的。

從主記憶體中每次隻讀取一個資料是非常低效的,這篇論文的第一作者vladimir kiriansky 提到

就像是每次你想要一勺食品時,你都需要打開冰箱、打開牛奶盒、倒出一勺牛奶、蓋上牛奶盒、将它放回冰箱。

他是電氣工程和計算機科學的博士生。amarasinghe 和 yunming zhang 是他的論文合作者,zhang 也是一位電氣工程和計算機科學的博士生。

milk簡單地增加了一些指令到openmp中。其中openmp 是一種能夠用在c或fortran等語言中的擴充,可以用來更輕松地為多核處理器編寫代碼。使用milk的話,程式員可以在任何指令附近插入幾行代碼,其可以在整個大資料集中進行疊代,尋找相對較少數量的項。milk 的編譯器(将進階代碼轉換成低級指令的程式)可以據此找到管理記憶體的方法。

使用 milk 程式時,如果一個核心發現它需要一項資料時,它并不會請求從主記憶體中讀取它(以及相鄰的資料)。它會将該資料的位址添加到一個本地存儲的位址清單中。當這個清單足夠長時

晶片所有核心将會池化(pool)它們的清單 将這些位址按臨近排布的形式組合到一起 重新配置設定給核心

這樣一來,每個核心都隻請求了自己所需要的資料項,并且可以有效地進行檢索。

這樣描述的話層級較高,但實際上細節會複雜得多。事實上大部分現代計算機晶片都有多級緩存,且一級比一級大(但效率也是以更低)。milk編譯器不僅必須跟蹤記憶體位址表,還要跟蹤這些位址中存儲的資料,而且它常常将這兩者在各級緩存之間進行切換。它也必須決定哪些位址應當被保留(可能需要再次通路),哪些應當被丢棄。研究學者希望能夠進一步提升這種編排複雜資料的算法,進而進一步提升性能表現。

「當下許多重要的應用都是資料密集型的,但不幸的是,記憶體和cpu之間的性能差距越來越大,這意味着目前的硬體還沒有發揮出它們的全部潛力。」斯坦福大學計算機科學助理教授 matei zaharia 說,「milk 通過優化常見程式設計架構中的記憶體通路來幫助解決這一差距。這項成果結合了記憶體控制器設計的詳細知識和相關編譯器的知識,能為目前的硬體實作良好的優化。」

ps : 本文由雷鋒網(公衆号:雷鋒網)獨家編譯,未經許可拒絕轉載!

本文作者:李尊

繼續閱讀