世界上最簡單的處理器核心是什麼樣的?單核單執行緒!
現以gpu為例。
渲染1024個頂點,也就是1024個執行緒。渲染的shader程式由兩條指令組成,且都是算術邏輯指令。所有算術邏輯指令的執行都花費乙個時鐘週期。
fragthread threads[1024];
for (auto thread : threads)
}
那麼,渲染完1024個頂點需要花費2048個時鐘週期,也就是1024個執行緒 x 2條指令/執行緒 x 1個時鐘/指令。
如果把shader程式改複雜一點,將其中一條指令改為載入紋理資料指令。
一般來說,訪問視訊記憶體所花費的時鐘數幾百到上千不等。不妨假設執行一條載入紋理資料指令花費999個時鐘。
fragthread threads[1024];
for (auto thread : threads)
}
此時,渲染完1024個頂點需要花費102400個時鐘週期,也就是1024個執行緒 x 1000個時鐘/執行緒。可以看到,時鐘數是之前的500倍!
不難想到,如果像載入紋理資料這一型別的指令比較多的情況下,我們的處理器執行效率將非常低。
優化!執行緒0執行到載入指令後,不傻傻等待立馬切換執行緒,讓執行緒1繼續從頭開始執行直到也執行到載入指令,接著再切換到執行緒2執行,直到最後乙個執行緒1023。接下來,又回到執行緒0的執行,這時候執行緒0請求的紋理資料已經載入回來了,因為已經過去了1024個時鐘,而載入只需要999個時鐘,執行緒0立馬結束。後面的執行緒以此類推。
此時,渲染完1024個頂點需要花費3072個時鐘週期,也就是1024個執行緒 x 3個時鐘/執行緒。可以看到,時鐘數直線下降。
這就達到了隱藏延遲的效果。
但需要達到上面的效果的前提是,執行緒切換速度足夠快。做法便是給每個執行緒增加一點獨立的儲存,這樣切換便類似於修改指標的指向,代價很小。
一 多執行緒 硬體基礎
目錄1.2快取一致性協議 1.3寫緩衝佇列與無效化佇列 處理器的處理能力要遠遠高於主記憶體dram的讀寫能力。進行一次主記憶體的讀寫所需要的時間,處理器可能足夠處理上百條指令。為了彌補處理器與主記憶體巨大的效率差距,處理器的設計者們引入了快取記憶體cache。快取記憶體的容量遠小於主記憶體,但是讀取...
多執行緒 多執行緒原理
我們首先要知道什麼是多執行緒,說白了就是多個執行緒,執行緒是什麼呢,其實就是程序執行的途徑,那麼說道這裡我們又引入了乙個新的名字,就是程序,那麼我們來看看什麼是程序,其實我們自己也能看到,啟動電腦的任務管理器,我們就可以看到程序選項,裡面是我們電腦所有的程序,我們會發現有很多的程序.簡單地說就是程序...
多執行緒(一) tomcat 多執行緒
web server允許的最大執行緒連線數還受制於作業系統的核心引數設定,通常windows是2000個左右,linux是1000個左右。1.編輯tomcat安裝目錄下的conf目錄下的server.xml檔案 maxthreads 150 表示最多同時處理150個連線,tomcat使用執行緒來處理...