c cuda 指定gpu_GPU并行編程:熟練使用CUDA C語言

【IT168 專稿】一個大任務通常可能被分解成許多可以一起處理的小任務,以便創建一個解決方案,這和粉刷房子的道理是一樣的,在粉刷之前,假設你需要買5公升油漆和5把刷子,你可以自己一個人干完采購和粉刷的活,也可以請朋友或職業粉刷工人幫忙。

▲圖 開始使用CUDA C

你可能想請人幫忙,為了節約時間,你出去購買油漆,另一個人去買刷子,然后你在4個人的幫助下,每人刷一面墻,這樣并行進行,到任務完成時,你算一下,應該節省了大量的時間。

這個方法對計算機也適用,假設你想添加兩個向量v(x,y,z)和u(x,y,z),這里v=(1,2,3),u=(4,5,6),那么v+u=(1,2,3)+(4,5,6)=(1+4,2+5,3+6)=(5,7,9),你自己可以算一下,一次計算一個,但正如你可能看到的,這個問題可以分解成多個更小的問題,你可以讓一個“人”將x分向量一起加起來,另一個“人”將y分向量一起加起來,第三個“人”將z分向量一起加起來,如下表所示:

表中的每個人所有的工作都是一樣的:a+b=c,但每個人使用的數字不一樣,結果也不一樣。

這并不是什么新概念,并行計算已經存在多年,PC使用多個CPU并行處理任務,提高不同應用程序的執行速度,你可以將上面提到的“人”看作一個進程或一個線程,計算機可以將每個進程分配給不同的處理器,接收到任務的所有處理器并行執行一個任務(計算)。

現在,大多數計算機擁有多顆可以處理多任務的處理器,大型應用程序使用計算機上的可用資源運行可以獲得更好的性能,但如果應用程序需要增加功能會怎么樣呢?你應該增加處理器,還是以某種方式升級系統?這取決于你應用程序的需求和采用的解決方案,其中一個可行的解決方案是使用GPU。

GPU是什么?GPU是圖形處理單元(Graphics Processing Unit)的縮寫,它處理所有桌面上或游戲中的圖形,分擔一些CPU負載,在游戲中,CPU要執行人工智能計算和沖突檢測,任務非常繁重,因此任何幫助都是歡迎的,GPU本身采用了良好的并行架構,使算術運算和計算真正有效,它是CPU的好朋友。

▲圖 CPU+GPU,讓程序運行更高效

本文的目的是幫助你開始使用CUDA C語言在GPU上實現并行計算,CUDA C由nVidia創建,它是一種與C類似的編程語言,但它是專門為創建使用GPU執行并行計算的應用程序設計的,與之類似的還有OpenCL和DirectCompute(DirectX 11),但CUDA C是我懂得的唯一語言,因此本系列文章就選擇了它。它們都基于相同的原則,因此你任意選擇一種學習都可以。

先決條件

在開始寫代碼之前,我們先啟動計算機,把CUDA運行起來先!你需要一個新的啟用CUDA的GPU(2007年以后,帶有256MB顯存的應該都可以,如果你不確定,請移步到www.nvidia.com/cuda檢查一下)。我使用的是Nvidia Geforce 480GTX,但最新的500系列看起來更好。

重要:確定也安裝了最新的驅動!!

安裝

在下載頁面,找到CUDA工具包,根據你平臺的實際情況選擇下載32位或64位,下載完畢后,安裝它。

可選步驟,但真的會給你帶來方便:下載完軟件后,再從CUDA工具包頁面下載并安裝GPU計算SDK代碼示例。

▲ 圖 安裝GPU計算SDK

GPU計算SDK帶有許多優秀的代碼示例和文檔,它們可以幫助你提高GPU計算技能。

CUDA工具包安裝好后,你就可以使用你熟悉的文本編輯器編寫CUDA C應用程序了,我使用的是記事本,如果要編譯應用程序,你可以使用Visual Studio 2008命令提示符,或nvcc.exe編譯。

▲圖 Visual Studio 2008命令提示符

▲圖 nvcc.exe

測試安裝是否成功

讓我們嘗試一下吧,一個真正超級簡單的CUDA應用程序,看起來和其它C代碼沒什么差別:

#include

int main( void )

{

printf( “Hello, World!” );

return 0;

}

這段代碼可能會給你帶來驚喜,實際上,你可以使用CUDA編寫任何C應用程序,當我們開始決定在CPU上執行什么功能,在GPU上執行什么功能時,真正的奇跡發生了。

在你熟悉的文本編輯器中敲入上面的代碼,然后將其保存為TestCUDA.cu。

接下來,我們開始編譯和生成我們的應用程序,仍然是在控制臺窗口,在你保存TestCUDA.cu相同的路徑下,敲入下面的命令:

nvcc –o test.exe TestCUDA.cu

按下回車鍵,將創建一個test.exe可執行文件。

▲圖 創建test.exe文件

現在如果你敲入test.exe,你的第一個CUDA C應用程序將會運行,并在屏幕上輸出“Hello,World”,如下圖所示:

▲圖 運行test.exe

如果你在編譯時遇到了問題,拷貝錯誤消息,在搜索引擎中搜索一下,可以獲得大部分常見失誤和錯誤的解決辦法,祝你好運!(如果你下載的是64位CUDA工具包,試試將其卸載,然后換為32位版本測試一下)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/371349.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/371349.shtml
英文地址,請注明出處:http://en.pswp.cn/news/371349.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

js中使用0 “” null undefined {}需要注意

注意:在js中0為空(false) ,代表空的還有“”,null ,undefined; 如果做判斷if(!上面的四種值);返回均為false console.log(!null);// true console.log(!0);//true consol…

PhpStorm 10.0.3破解版下載

漢化破解版軟件下載: http://pan.baidu.com/s/1geNO24r 密碼: d5ci 這個漢化破解軟件解決了大綱視圖里空白的問題。 先安裝騰訊電腦管家,然后安裝這個軟件,安裝到最后提示有個文件有病毒已刪除,點確定后正常使用。轉載于:https://…

Jenkins:部署JEE工件

隨著持續集成和持續交付的出現 ,我們的構建被分為不同的步驟,以創建部署管道。 這些步驟中的一些步驟可以是例如編譯和運行快速測試,運行慢速測試,運行自動驗收測試或發布應用程序等。 部署流程的最后一步意味著將我們的產品&…

seafile 部署_Seafile開啟webdav及讀寫性能測試

為什么要在seafile搞webdavSeafile 一直是一款可靠的文件同步web應用,經過個人測試,同一臺機器上,seafile在傳輸文件時的速度比nextcloud要快(可能也與php的設置有關系),這是seafile的優勢。但是&#xff0…

Python--校園網爬蟲記

查成績,算分數,每年的綜合測評都是個固定的過程,作為軟件開發者,這些過程當然可以交給代碼去做,通過腳本進行網絡請求獲取數據,然后直接進行計算得到基礎分直接填表就好了,查成績再手動計算既容…

Spring–添加SpringMVC –第1部分

歡迎來到本教程的第四部分。 在這一部分中,我們將使用Spring MVC編寫控制器和視圖,并考慮我們的REST模型。 我們必須做的第一件事,就是根據目前的情況制作一個Web應用程序。 我們將web / WEB-INF文件夾添加到我們的項目根目錄。 在WEB-INF內創…

[Linux] 權限與指令間的關系

我們知道權限對于使用者帳號來說是非常重要的,因為他可以限制使用者能不能讀取/創建/刪除/修改文件或目錄! 在這一章我們介紹了很多文件系統的管理指令,第五章則介紹了很多文件權限的意義。在這個小節當中, 我們就將這兩者結合起來…

access month函數用法_學會了這7個EXCEL日期函數技巧,老板再讓你加班,你找我!...

日期函數,常用年月日,時分秒,星期,季度,求差值等,學會以下幾個函數,老板再讓你加班,你找我!1、記錄當前時間(不隨系統時間變化)NOW()函數與數據有效性結合,記…

css樣式表的選擇器與分類

css 樣式表的作用: 主要用于結構,樣式與行為,CSS主要的作用就是美化網頁的一個語言,它的特點: 1.結構與樣式分離的方式,便于后期維護與改版; 2.樣式定義精確到像素的級別; css樣式表的結構:CSS 稱為層疊樣式表 用于給網頁設置各種樣式 css樣式的語法由3部…

Spring 3.1緩存和@Cacheable

緩存在軟件領域已經存在很長時間了。 它們是那些真正有用的東西之一,一旦您開始使用它們,您會想知道如果沒有它們,您是如何相處的,所以似乎讓Spring的家伙們只是在版本中向Spring核心添加緩存實現有點奇怪。 3.1。 我猜想以前沒有…

pytorchyolov4訓練_使用pytorch-yolov5 訓練自己的數據集-2020.6.15

make yolov5 pytorch train datasets訓練所需環境 python3.5, pytorch1.3, torchvision 0.4.1 , tensorboard 1.14.0 , tensorflow-gpu1.14.0本例制作yolov5數據集 并進行數據訓練從VOC數據集轉為訓練所需的coco數據集代碼有待改進包含文件夾voc2coco/(Annotations/ JPEGImages…

meta 的作用 搜集

Meta標簽中的format-detection屬性及含義 format-detection翻譯成中文的意思是“格式檢測”&#xff0c;顧名思義&#xff0c;它是用來檢測html里的一些格式的&#xff0c;那關于meta的format-detection屬性主要是有以下幾個設置&#xff1a;<meta name"format-detecti…

Web服務安全性和SOA路線圖的人為維度

在大多數非平凡的SOA環境中&#xff0c;很難跟蹤系統之間不斷發展的集成&#xff0c;除非有明確的發布和查找適當信息的方法。 概述IT環境&#xff0c;定義當前或將要連接的內容&#xff0c;是維護環境的先決條件。 缺少這種情況通常會導致“面向意大利面條的環境”的感覺&…

pccad自定義圖框_(PCCAD自定義標題欄詳細方法.doc

PCCAD2011自定義標題欄詳細方法下面以圖3-1為例說明標題欄的自定義過程。圖3-11&#xff0e;新建文件(用New 命令)。2&#xff0e;用繪圖和文字中的相關命令設計出圖3-1所示的圖形。其中在使用中不變的內容&#xff0c;如廠名等均用“文字”命令標出&#xff0c;而需臨時填充的…

ThinkPHP 3.2.x 集成極光推送指北

3.2版本已經過了維護生命周期&#xff0c;官方已經不再維護&#xff0c;請及時更新至5.0版本 —— ThinkPHP 官方倉庫 以上&#xff0c;如果有條件&#xff0c;請關閉這個頁面&#xff0c;然后升級至 ThinkPHP 5&#xff0c;如果由于各種各樣的原因無法升級至 TP 5 &#xff0c…

Java:選擇正確的集合

這是在應用程序中選擇Set &#xff0c; List或Map的正確實現的快速指南。 最好的通用或“主要”實現可能是ArrayList&#xff0c;LinkedHashMap和LinkedHashSet。 它們的整體性能更好&#xff0c;除非您需要其他實現提供的特殊功能&#xff0c;否則應使用它們。 該特殊功能通常…

Java多線程——不變性與安全發布

1、不變性 某個對象在被創建后其狀態就不能被修改&#xff0c;那么這個對象就稱為不可變對象&#xff0c;不可變對象一定是線程安全的。不可變對象很簡單。他們只有一種狀態&#xff0c;并且該狀態由構造函數來控制。 當滿足以下條件時&#xff0c;對象才是不可變的&#xff1a…

中tr不能顯示字符_垃圾文本識別中基本操作指南和錯誤總結,第三部分

創建模型需要用到機器學習的庫&#xff0c;所以我們先下載sklearn庫sklearn庫下載完成后再輸入庫文件&#xff0c;就可以完美運行。然后就是劃分測試集和訓練集&#xff0c;需要注意的是&#xff0c;在從數據處理函數中導入數據時&#xff0c;足足運行了有將近30多秒&#xff0…

mvc后臺post發送json數據

代碼比較簡單&#xff0c;不廢話&#xff0c;直接上代碼&#xff1a; /// <summary>/// 提交json數據&#xff0c;并接收/// </summary>/// <param name"apipath">要請求的服務器地址</param>/// <param name"jsonStr">要提…

(轉載)20分鐘讀懂程序集

轉自&#xff1a;http://www.cnblogs.com/damonlan/p/3221347.html 說到程序集&#xff0c;我剛開始對這個名詞特別的郁悶&#xff01;~。然后 前些天花了些時間 好好讀了一下&#xff0c;現在比較清晰了&#xff0c;把一些書上看到的 記下來&#xff0c;以饗讀者。希望沒浪費你…