與GPU技術的第一次親密接觸

2021-07-10 01:10:03 字數 3068 閱讀 1017

gpu是什麼?

gpu是圖形處理器的英文縮寫(

graphics processing unit

),顯示卡的處理器稱為圖形處理器(gpu

),它是顯示卡的「心臟」,與cpu類似,只不過gpu是專為執行複雜的數學和幾何計算而設計的,這些計算是圖形渲染所必需的。

因為cpu 由專為順序序列處理而優化的幾個核心組成,而gpu 則由數以千計的更小、更高效的核心組成,這些核心專為同時處理多工而設計,這使得gpu作為硬體加速,成為可能。

gpu加速一般有渲染加速和運算加速兩種,前者是顯示卡的本質工作,將渲染器速度提公升完成畫面輸出,後者是通用計算領域的用法,利用gpu強大的浮點數運算能力幫助cpu進行計算。

我的程式可以用gpu加速嗎?

這裡的思想主要引用的文章,更完整的請參考這篇文章,我在此,僅僅是羅列一下文中的主要觀點。

1.平行計算

」不等於

「序列**

+並行裝置

所以我們還是要按部就班,先花個

1~2天對平行計算的基礎理論開始理解,以及對並行裝置(

gpu架構)有基本認知,然後再開始進入

cuda

或openacc

,opencl

程式設計,這樣才不會誤入歧途。如果想對平行計算有個大概的認知,可以參考

的第一章,對資料並行和任務並行有很生動的闡釋。

2.並行化的最基本工作,就是

」演算法並行化

這部分您可多參考一些別人的**,相信對您會有明顯的幫助。

3.效能提公升程度:演算法並行化程度

>>

並行**優化程度

其次,也有大部分的人將序列習慣中的條件分支(

if..then..else

或case )

大量用到並行程式設計之中,結果效能反而變得更差。這是因為不理解平行計算的核心:一致性與規整性。

平行計算的關鍵,是讓絕大部分的計算核進行「相同

」的工作,任何條件分子都會破壞工作的一致性,條件分支越複雜則一致性越差。同樣的,如果資料結構的規整度不一致,效能也會不好。 4.

平行計算只處理

「適合的部分」而非

「從頭到尾

」  有許多初學者一開始鑽入

cuda

語法與結構,將

gpu的計算核當做

cpu的控制核使用,然後將整個

cpu的

c/c++/fortran

**從頭到尾全部改寫成

cuda

函式,結果效能奇差無比。

真正合理的平行計算,是將整個應用中計算量最大的部分(可能**只佔

10%、但計算量超過

60%)轉換成並行**,交給並行處理器去計算就可以。

5.

計算效能並非只以計算核數量為衡量標準

與cpu

計算效能類似,

gpu計算核也有主頻,整體效能以

「計算核數量*主頻

」為依據。此外,影響效能另乙個關鍵因素,在於資料傳輸所消耗的時間,因此

pcie

匯流排、cpu

的qpi

頻寬、計算卡的視訊記憶體頻寬等等,也是至關重要的實際影響因素。

6.

絕對要善用

nsight

之類的專門除錯工具

平行計算會同時啟動成千上百個執行緒,其中牽扯非常多的資源衝突、資料同步等可能出錯的狀況,絕非傳統序列**用

vc設斷點、用

printf

顯示等方式能夠除錯的,所以學習

gpu程式設計請同時學習

nsight

之類除錯工具的使用

7 .遊戲卡的

sli或

crossfire

功能,於多卡計算的資料交換無關

許多人在這方面存在絕對的誤解,以為遊戲卡提供的

sli(

nvidia

)或crossfire

(amd

)是多卡計算的資料傳輸介面,其實這兩種技術與

multi-gpu

平行計算沒有任何關係,專業計算卡(

nvidia tesla

或amd firepro

)都不提供這類技術」

ps:官方網頁,並闡述了如何加速,看看自己使用的應用程式是否支援 gpu 加速

怎麼用gpu加速?

現在還沒有正式開發過,網上了解的,可以用cuda和opencl開發.

cuda是一套軟體開發工具,支援nvidia公司生產的gpu圖形卡。如果你的程式需要提高執行的速度,並且是可並行的,cuda就是乙個非常實用和適用的開發工具。將你的程式在cuda環境改編(並行化)之後,執行的硬體平台有nvidia公司生產的gpu圖形卡,則可大幅度提高你的程式執行的效率和速度。

通用目的並行程式設計的開放式、免費標準,也是乙個統一的程式設計環境。便於軟體開發人員為高效能計算伺服器、桌面計算系統、手持裝置編寫高效輕便的**,而且廣泛適用於多核心處理器(cpu)、圖形處理器(gpu)、cell型別架構以及數字訊號處理器(dsp)等其他並行處理器,在遊戲、娛樂、科研、醫療等各種領域都有廣闊的發展前景。

二者的區別和前景可以參考

需要買gpu卡嗎?

軟體,安裝好,可以看到像下面這樣的頁面:開啟後可以在下面看到。

我的pc支援opencl,而不支援cuda.這樣,我可以用opencl開發啦!

與MySQL第一次親密接觸

資料庫的好處 1 可以持久化資料到本地 2 結構化查詢 資料庫的常見概念 1 db 資料庫 儲存資料的容器 2 dbms 資料庫管理系統,又稱為資料庫軟體或資料庫產品,用於建立或者管理db 3 sql 結構化查詢語言,用於和資料庫通訊的語言,不是某個資料庫軟體特有的,而是幾乎所有的主流的資料庫軟體通...

RabbitMQ的第一次親密接觸

企業應用系統,如果系統之間的通訊 整合與整合,尤其當面臨異構系統時,那麼需要分布式的呼叫與通訊。系統中一般會有很多對實時性要求不高但零零碎碎且耗時的地方,比如傳送簡訊,郵件提醒,記錄使用者操作日誌等,在使用者訪問量比較大的情況下,對系統壓力比較大。面對這些問題,我們一般會將這些請求,放在訊息佇列mq...

PHP與WCF第一次親密接觸

接觸php第二天,要求php訪問wcf服務 著實痛苦,無從下手啊.在網上查了很多資料知道php訪問wcf很方便 如上即可訪問 但是報錯,無法找到soapclient 這個類,在網上找答案,說是要去掉php.ini中 extension php soap.dll的分號去掉,然後重啟即可 由於不熟悉,兄...