CUDA程式設計第一章 基於CUDA的異構平行計算

2021-10-16 10:34:58 字數 1850 閱讀 1828

本部分主要講解並行的基礎知識, 在前頭的mpi & openmp並行程式設計基礎基本掌握過了, 直接pass

這裡的記憶體頻寬應該指的是視訊記憶體頻寬

有兩個考量點:

並行性資料規模

如果乙個問題有較小的資料規模、複雜的控制邏輯和/或很少的並行性,那麼最好選擇cpu處理該問題,因為它有處理複雜邏輯和指令級並行性的能力。

如果該問題包含較大規模的待處理資料並表現出大量的資料並行性,那麼使用gpu是最好的選擇。因為gpu中有大量可程式設計的核心,可以支援大規模多執行緒運算,而且相比cpu有較大的峰值頻寬。

cpu上的執行緒通常是重量級的實體。作業系統必須交替執行緒使用啟用或關閉cpu執行通道以提供多執行緒處理功能。上下文的切換緩慢且開銷大。

gpu上的執行緒是高度輕量級的。在乙個典型的系統中會有成千上萬的執行緒排隊等待工作。如果gpu必須等待一組執行緒執行結束,那麼它只要呼叫另一組執行緒執行其他任務即可。

cpu的核被設計用來盡可能減少乙個或兩個執行緒執行時間的延遲,而gpu的核是用來處理大量併發的、輕量級的執行緒,以最大限度地提高吞吐量。

cuda提供了兩層api來管理gpu裝置和組織執行緒,如圖1-13所示。

二者在效能上沒有明顯差異, 相反, 使用者的程式架構對效能更有明顯的影響

二者只能不能混用, 只能選擇其一

__global__修飾乙個函式, 表示此函式會從cpu上呼叫, 並在gpu上執行

<<<>>>

表示從主線程到裝置端(device)**的呼叫, 尖括號內的引數表示執行配置, 指定開多少個執行緒執行函式

乙個核心函式通過一組執行緒執行, 所有執行緒執行相同的**(simd)

函式cudadevicerest()用來顯式地釋放和清空當前程序中與當前裝置有關的所有資源

輸出:

hello world from gpu!

hello world from gpu!

hello world from gpu!

hello world from gpu!

hello world from gpu!

hello world from gpu!

hello world from gpu!

hello world from gpu!

hello world from gpu!

hello world from gpu!

第一章 基於任務的程式設計

1.了解 並行 併發 交錯併發 序列的意思 2.法則 amdahl 法則 通過以下 多處理器系統的最大理論效能提公升 即加速比 這個公式應用於執行在多核處理器上的並行演算法 公式 最大加速比 倍數 1 1 p p n 其中 p 表示能夠完全並行執行的 比例 n 表示可用計算單元數 處理器或物理核心數...

CUDA程式設計(一)第乙個CUDA程式

cuda compute unified device architecture 是顯示卡廠商nvidia推出的運算平台。是一種通用平行計算架構,該架構使gpu能夠解決複雜的計算問題。說白了就是我們可以使用gpu來並行完成像神經網路 影象處理演算法這些在cpu上跑起來比較吃力的程式。通過gpu和高並...

CUDA程式設計(一)第乙個CUDA程式

cuda compute unified device architecture 是顯示卡廠商nvidia推出的運算平台。是一種通用平行計算架構,該架構使gpu能夠解決複雜的計算問題。說白了就是我們可以使用gpu來並行完成像神經網路 影象處理演算法這些在cpu上跑起來比較吃力的程式。通過gpu和高並...