Halide學習筆記---Halide語言設計的初衷

Halide語言設計初衷

我們正處於一個數據密集的時代,4D廣場相機、圖形渲染、3D打印、圖像傳感器、高質量醫學圖像等,每天生產大量的圖像數據,面對這樣一個圖像時代,急需要針對圖像處理算法設計的高性能圖像處理編程語言,在這樣的需求下,Halide應運而生。
應用當前存在的編程工具編寫高性能的圖像處理程序需要犧牲可讀性、可移植性和模塊性。這可能是由於算法描述、數據存儲和計算順序雜糅在一起所致。Halide語言將算法描述與算法中數據存儲與計算執行等調度方面的內容解耦合。從而算法的描述和性能的優化可以分開進行,可以在不改動算法的情況下對算法進行調優。
另一個方面需要回答的是:在同樣的計算機下,從什麼地方去挖掘和提升算法的計算性能?有如下的一個統計:
這裏寫圖片描述
從上圖可以看出,算術邏輯單元(ALU)進行一次操作在能量和時間上的消耗都是最小的,然而數據之間的訪問通信佔用了計算花費的大部分時間和能耗。因此,在計算的過程中減少數據的移動是一個很好的優化方向。另一方面,隨着摩爾定律的逐漸失效,當今已經進入多核時代,將計算任務拆分,送到多個核心中並行計算,同一時刻進行計算,成倍縮短計算時間。然而,最小的數據移動並不利於計算任務的並行,考慮到算數邏輯單元的操作相對於數據移動來說小一個甚至多個數量級,因此考慮犧牲一部分數據移動性,冗餘一部分計算,通過數據移動最小、計算冗餘性和並行度之間的折中來達到提高性能計算性能的目的。
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章