原创 [菜鳥每天來段CUDA_C]CUDA實現向量的點積運算

本文利用CUDA實現向量的點積運算。主要思想是:每個線程計算兩個相應元素的乘積,然後利用共享內存(__shared__)累計每個線程的結果,得到一個線程塊內向量的部分內積,最後在CPU上對個線程塊的結果求和,從而得到點積運算結果。 主要代

原创 [菜鳥每天來段CUDA_C] GPU上實現直方圖計算

本文通過在GPU上計算直方圖說明GPU計算中的原子操作。原子操作是計算中不能分解爲更小的部分的操作。當有數千個線程在內存訪問上發生競爭時,這些操作能夠確保在內存上實現安全的操作。即數據能按照實際的順序進行讀寫以至於不發生錯誤。  CPU上

原创 [菜鳥每天來段CUDA_C]CUDA實現簡單熱傳導動態模擬

本文利用CUDA實現簡單二維平面上的熱傳導模擬。假設有一個矩形房間,將其分成一個網格,在網格中隨機散佈一些熱源,熱源有不同的固定溫度,然後就可以計算網格中每個單元的溫度隨時間的變化情況。本文將熱傳導模型做如下簡化:某單元的新時刻溫度等於原

原创 [菜鳥每天來段CUDA_C]基於共享內存的位圖與syncthreads的使用

本文使用CUDA實現基於共享內存的位圖顯示。位圖中每個位置的像素值由每個線程計算,計算結果保存到緩衝區(共享內存)中。 結果爲一個由多個綠色球形構成的網格(如下圖)。 圖中可以看出:沒用同步(syncthreads)的運行結果是錯誤的

原创 [菜鳥每天來段CUDA_C]基於GPU的Julia集

Julia集是一個著名的分形集,它是複數經過迭代得到的,是滿足某個複數計算函數的所有點構成的邊界。 算法思想: 通過一個簡單的迭代等式對複平面中的點求值,如果在計算某個點時迭代的結果是發散的,那麼這個點就不屬於Julia集。相反,如

原创 [菜鳥每天來段CUDA_C]向量相加的CUDA實現和順序執行比較

本文首先利用CUDA實現了兩個50000維向量加法的並行運算,然後對兩個向量串行相加,對兩者的計算時間做了比較。 1. CUDA 向量相加 A、B爲隨機生成的長度爲50000的數組。核函數: __global__ void vecAdd

原创 [菜鳥每天來段CUDA_C]GPU上實現任意長度的矢量求和

        由於GPU硬件的限制,核函數kernel<<<B,T>>>中B的數量限制爲不超過65535;同樣對於啓動核函數中每個線程塊中的線程數 量,T不能超過設備屬性結構(cuDeviceProp)中maxThreadsPerBlo

原创 [菜鳥每天來段CUDA_C]GPU實現水波動畫效果

本文利用GPU強大的計算能力生成不同時刻的水波圖片,並使用OpenGL繪製,實現水波動畫效果。其中幾個時刻的截圖如下: 生成一幀動畫的代碼爲: void generateFrame(DataBlock *d, int ticks) {