1. 程式人生 > >如何寫出執行速度更快的程式碼:硬體篇

如何寫出執行速度更快的程式碼:硬體篇

介紹

這門課會學到OpenMP、CUDA、Hadoop的使用,想想真是激動,一門課要學這麼多東西。

為什麼需要更高效的程式碼

我們使用高效程式碼,一般需要兩部分進行考慮:平臺+技巧。平臺就有多核平臺、多處理器平臺、雲平臺。技術需要考慮資料結構、演算法、軟體架構。這些都會在後續章節談到,這一次主要說的是硬體平臺的內容。
這裡寫圖片描述

這裡寫圖片描述

是應用驅動了這一需求,而不是平臺決定了你需要寫更高效的程式碼。因為目前火熱的RMS(Recognition Mining Synthesis)需要大量的計算,那麼高效的程式碼使得這些應用可以更快實現,甚至達到可以與人類進行互動的地步。

對於RMS這裡需要介紹一下:識別就是對世界的翻譯,比如視覺上的目標檢測、聲音上的語音識別。就是要知道這是一個什麼東西。對目標進行建模。挖掘就是對這個東西隱藏的模式進行挖掘,找到其中的內在聯絡。就是分析模型的特性。分析就是對世界進行一些預測,使用模型進行預測。比如買股票、買期貨。
這裡寫圖片描述

在有了以上運用之後呢,我們就有了特定的平臺做加速。但是呢我們如何評估一個系統的效能呢?系統狀態和效能很難評估,所以有個叫做Norman的人提出了Gulf of evaluation 他把計算機的系統評估和人的感知評估模型相結合起來,獲取計算機系統的狀態、並對這個進行解釋。
這裡寫圖片描述

現在又回到剛才說的RMS,RMS是未來的趨勢。那麼RMS最重要的是什麼呢?
這裡寫圖片描述
那就是資料,資料非常重要。比如目前火熱的深度學習,就是在大資料和高速平臺的驅動下,使得很多演算法得以真正發揮它的效果。

總結一下這部分RMS的東西就是:RMS驅動著未來的運用。
這裡寫圖片描述

加速的意義

這裡寫圖片描述
使得很多應用的互動性增強,效率提高。

平臺相關:
這裡寫圖片描述

技術相關:
這裡寫圖片描述

硬體平臺

當你可以回答以下問題的話,說明你對硬體平臺還是知道不少的。

這裡寫圖片描述

multicore vs manycore

這裡寫圖片描述
multicore是每個核都可以獨當一面,能力十分強。manycore是數量很多,但是每個處理器的能力十分有限。

multicore和manycore有相似點和不同點。它們都在優化同樣的東西,但是優化的方向不同。都是發揮著自己的架構的優勢。multicore更多的是在核內進行加速,manycore是數量更多的核進行加速。
這裡寫圖片描述

兩者進行對比:
這裡寫圖片描述

Instruction level parallelism

先是super scalar,然後是out-of-order。
這裡寫圖片描述


super scalar是獲取一個batch的指令,然後儘量減少其中的相關。在執行階段,多條指令可以一起執行。這是在執行階段,資源增加,使得一個週期可以執行多條指令。

這裡寫圖片描述
out-of-order是增加了一個減少指令間的依賴關係的東西。依賴關係越少,在執行並行指令的時候就可以提高資源利用率。

ILP沒有改變指令的順序流,在軟體層面不需要什麼修改就對程式碼加速。但是在處理器層面就需要做很多修改。功耗大於一般的順序處理器。

SIMD

SIMD: single instruction multiple data.
這裡寫圖片描述
之前的整數是32,64位。那麼我們設計更長位的加法,比如128位,那麼不就可以對4個32bit的資料進行加法。

這裡寫圖片描述
從上圖可以發現CPU時間很大一部分是在暫存器的讀寫上,所以使用SIMD就可以對這塊進行加速。

x86系列的SIMD的發展:
這裡寫圖片描述

使用SMID可以跑的指令越多是不是就越有效(功耗、吞吐量的一個均衡)呢?功耗會上升、資源利用率下降。
這裡寫圖片描述

為了提高資源利用率,那麼可以優化編譯器發揮它的作用。
這裡寫圖片描述

SIMD增加了資源利用率,但是在使用的時候需要在軟體層面手動做不少優化。

Simultaneous Multithreading

當我們有多個指令流的時候,我們可以使用這種方法做加速。它比superscalar、mutlprocessing更有效地解決問題。
這裡寫圖片描述

這種多執行緒的方法可以提高資源利用率,但是沒有加快每個執行緒的延時,需要在多個指令流的時候才可使用、在使用cache的時候會涉及資料同步的問題。

Memory Hierarchy

減少cache miss可以加快速度,這裡的原則使用的是區域性性原則。空間和時間區域性性。
這裡寫圖片描述

cache miss的型別:
這裡寫圖片描述

使用memory hierarchy進行優化的時候,只是在多執行緒情況下,cache同步是一個很大的問題。

System Architecture

這裡就是涉及我們應該採用哪一種平臺,這裡要考慮很多因素了。
這裡寫圖片描述

這裡寫圖片描述

整個設計需要綜合考慮平臺、演算法、軟體架構、成本。
這裡寫圖片描述

PS:以上ppt截圖來自於JikeChong和Ian Lane的CMU 18-645課程。