日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Cuda编程学习(一)

發布時間:2025/4/14 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Cuda编程学习(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
使用Cuda進行GPU編程 ——GPU高性能編程Cuda實戰? ? 第四章C并行編程總結 開始學習Cuda和GPU編程的相關知識啦。 感覺GPU編程會越來越重視,尤其是在移動端的計算復雜度優化方面。掌握GPU編程,以后實習找工作也會方便很多。 最近一有時間就會學習GPU高性能編程Cuda實戰這本書,也會寫一些總結發表到博客里。 期望是:摸熟GPU這一領域,這是以前從來沒接觸過得地方;通過使用Cuda進行優化三維重建的項目,為簡歷填上一筆硬通貨。 Cuda的思想是: 按照類似于CPU的方法,對GPU提供通用計算的編程界面。 CPU的計算體系是: 在程序中運行的指令和臨時變量,一般是保存在內存中的。CPU把數據從內存中取出來計算,再存入到內存中。 簡要來說兩個部分:數據的存儲和計算。 GPU類似于CPU,只不過有更多的算術邏輯處理單元,更適合采用并行處理的算法來解決問題。 在考慮時,把GPU與CPU類似考慮,區別在于: 1.? ? 內存位置的不同。 2.? ? 計算方式的不同。 ?

1.? ? 內存位置的不同:

變量存儲在內存中,其物理地址,有的對應的是CPU的內存,有的是對應GPU的內存。(方便起見,暫時不考慮CPU的高速緩存機制) 放在CPU內存中的數據,只能被CPU讀寫;放在GPU內存中的數據,只能被GPU讀寫。 當然可以通過CudaMemcpy的方式,把CPU內存中的數據與GPU內存總的數據做交換。 考慮CPU和GPU的區別時,把CPU和CPU對應的內存當做主機,而GPU和GPU對應的內存當做設備device 在CPU中聲明一個指針的方法是: int *a = new int[10]; 這樣a就對應著CPU內存中一個長度為10的int數組的首地址 在GPU中分配內存則是: int *dev_a; cudaMalloc( (void **) &dev_a, 10 * sizeof(int) ); dev_a是一個指針,指向一段int型數組的首地址; &dev_a 是 指向dev_a的指針,通過cudaMalloc的函數,可以改變dev_a指向的位置。 分配完空間之后,dev_a指向的也就是GPU內存中一段int型數組的首地址。

2.? ? 計算方式的不同

在GPU中執行的函數被稱為核函數, 使用如下:kernel<<<1,1>>>>(params); 舉例來說: 聲明GPU的函數,需要用如下的方式: __global __ void add(int *a, int *b){???? } 使用時,add<<<N,1>>>(dev_a, dev_b); 聲明為global函數之后,才可以在主機上調用。 第一個參數表示,設備在執行核函數時使用的并行線程塊的數量。在函數中,可以通過blockIdx.x獲得當前線程塊的id (備注:cuda可以支持二維索引,通過grid實現) 簡單的并行處理就可以通過調用add函數來完成了。 不過真正的并行處理,還需要考慮到不同線程之間的通信、同步情況,這些內容留著學習下一章的時候再做介紹吧。

轉載于:https://www.cnblogs.com/leohan2013/p/3285143.html

總結

以上是生活随笔為你收集整理的Cuda编程学习(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。