⑴ cuda編程中如何把.cu文件編譯成.so庫文件 具體是什麼命令 需要看什麼資料 舉個例子最好
不好意思,這個沒有接觸過。
⑵ linux下CUDA程序一般怎麼編譯啊
編譯好的是什麼類型的程序?c?還是java還是別的? 很多隻能再命令行運行的文件必須在終端執行。 而且就算編譯好了,編譯好的可執行文件是沒有可執行許可權的。 需要手動添加才能運行~ 希望你說具體點最好有截圖~
⑶ CUDA請教,本人初學CUDA程序,可以編譯成功,但無法生成,總是顯示以下錯誤。
第一種方案:在項目-屬性-鏈接器- 命令行 加 /nodefaultlib:libcd
第二種方案:在項目-屬性-鏈接器- 輸入-忽略特定庫加:LIBCD.lib
⑷ 如何ubuntu12/linux 安裝CUDA5.5
在ubuntu12/linux安裝CUDA5.5的步驟如下:
1、在英偉達的官網上下載對應系統版本的cuda5.5工具包,我的筆記本是32位的,下載的包是cuda_5.5.22_linux_32.run,當然下載deb包也可以,deb包可雙擊安裝。推薦使用run包。
注意事項
ubuntu不需要重新編譯內核,記得centos和red hat需要,命令也簡單:$sudo dracut -v /boot/initramfs-$(uname -r).img $(uname -r)
⑸ 如何使用cudaMallocPitch和cudaMemcpy2D
有時候,我們需要在比較大的項目中調用CUDA,這就涉及到MFC+CUDA的環境配置問題,以矩陣相乘為例,在MFC中調用CUDA程序。我們參考羅振東[email protected](國防科學技術大學計算機學院)的方法。
環境: Windows 7 SP1
Microsoft Visual Studio 2010
CUDA 5.0
步驟:
1.首先建立一個空的名叫Matrix Multiplication_KahanMFC的「FCM應用程序」項目:
點擊「確定」,這時彈出如下窗口
我們需要對默認項目進行一些修改,點擊「下一步」,我們設置一個空的MFC項目,選擇「單個文檔」和「MFC標准」:
點擊「完成」。
2.創建CUDA的調用介面函數及其頭文件
(1)頭文件
「添加」--> 「新建項」-->「Visual C++」-->「頭文件(.h)」-->「名稱」-->「CUDA_Transfer.h」 -->「添加」,如下圖:
在CUDA_Transfer.h中添加如下代碼:
//CUDA_Transfer.h
#include
#include "math.h"
using namespace std;
int run_cuda(float* GPU, float* CPU);
如下圖所示:
(2)函數
按照和增加頭文件相似的方法,添加函數。「添加」--> 「新建項」-->「Visual C++」-->「C++文件(.cpp)」 -->「名稱」-->「CUDA_Transfer.cpp」 -->「添加」,如下圖:
在CUDA_Transfer.cpp中添加如下代碼:
//CUDA_Transfer.cpp
#include "CUDA_Transfer.h"
#include "stdafx.h"
extern "C" int runtest(float* GPU, float* CPU);
int run_cuda(float* GPU, float* CPU)
{
runtest(GPU,CPU);
return 0;
}
如下圖所示:
需要注意的是在MFC的文件中是不能包含(include).cu文件的,會報錯,所以我們使用extern "C"的方式來實現函數的調用。
3. 創建存放cuda 代碼的篩選器,名為CUDA
「添加」--> 「新建篩選器」,重命名為CUDA
4. 在篩選器CUDA中創建一個CUDA源代碼文件,kernel.cu。
我們直接把已經寫好的矩陣相乘的程序kernel.cu復制到項目目錄下,添加到CUDA篩選器中去。
添加」--> 「現有項」-->「kernel.cu」--> 「添加」:
把kernel.cu的int main()函數改為extern "C" int runtest(float* GPU, float* CPU),兩個參數用來獲得GPU和CPU計算所使用的時間,單位為毫秒。
5. 右擊項目-->「生成自定義」:
在彈出的窗口中勾選CUDA 5.0(.target,.props)。如果使用其他版本的CUDA,就勾選對應的版本:
點擊「確定」。
6. 修改 kernel.cu的編譯鏈接設置
在解決方案資源管理器中右擊kernel.cu文件-->「屬性」,在彈出窗口中-->「常規」-->「項類型」的下拉列表中選擇
點擊「應用」後,「常規」下方會出現一個「CUDA C/C++」的設置,沒有特殊需求,不需要修改,點擊「確定」。
7.修改工程設置。
工程設置需要修改「鏈接器」-->「輸入」-->「附加依賴項」和「生成事件」-->「預先生成事件」-->「命令行」。需要設置的參數比較多,我們採用比較簡單的方法。
我們新建一個空的CUDA項目,在這個空CUDA項目的項目屬性中找到「鏈接器」-->「輸入」-->「附加依賴項」,把「附加依賴項」中所包含的項復制到我們的MFC項目中:
按照同樣的方法,設置「生成事件」-->「預先生成事件」-->「命令行」:
設置完成後,點擊「確定」。
8.修改MFC文件,完成調用。
我們需要在MFC中調用CUDA程序,顯示出GPU和CPU計算兩個1024*1024矩陣相乘所消耗的時間。
在Matrix Multiplication_KahanMFCView.cpp中包含(include)"CUDA_Transfer.h"
文件;在CMatrixMultiplication_KahanMFCView::OnDraw(CDC* pDC)中添加如下代碼:
float GPU;
float CPU;
run_cuda(&GPU, &CPU);
CString strGPU,strCPU;
strGPU.Format(_T("GPU:%f \n"),GPU);
strCPU.Format(_T("CPU:%f \n"),CPU);
pDC->TextOut(0,0,strGPU);
pDC->TextOut(0,30,strCPU);
如圖所示:
然後重新生成解決方案,運行。
計算要花費一些時間,需要等待,測試的時候可以把矩陣大小改小一些。因為把程序加到了OnDraw中,所以每當刷新窗口時候(例如調整窗口大小時),都會調用。由於計算耗時比較長,窗口看起來會像無響應一樣,等計算完成就好了。
運行的結果如下:
在矩陣比較大的情況下,GPU的加速效果明顯,GPU耗時只需要620ms,而CPU需要23438ms,要花費將近40倍的時間。
⑹ 編譯cuda並運行cuda程序的命令是
在什麼操作系統下啊。。。你問的是不是編譯cu代碼啊,因為CUDA不是開源的。
如果編譯自己的代碼,是nvcc
運行和執行其它可執行程序一樣啊
⑺ ubuntu14.04 cuda 6.5 怎樣配置
1. 預檢查
按照參考鏈接1中所示,檢查系統。
執行命令:
:~$ lspci | grep -i nvidia
03:00.0 3D controller: NVIDIA Corporation GK110GL [Tesla K20c] (rev a1)
04:00.0 VGA compatible controller: NVIDIA Corporation GK106GL [Quadro K4000] (rev a1)
04:00.1 Audio device: NVIDIA Corporation GK106 HDMI Audio Controller (rev a1)
發現有K20和K4000兩塊GPU,還有一塊Audio的應該是音效卡。
然後,執行命令檢查系統版本:
~$ uname -m && cat /etc/*release
x86_64
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04.1 LTS"
NAME="Ubuntu"
VERSION="14.04.1 LTS, Trusty Tahr"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 14.04.1 LTS"
VERSION_ID="14.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
可以看到,機器是ubuntu14.04的版本。
然後,使用gcc --version檢查gcc版本是否符合鏈接1中的要求:
~$ gcc --version
gcc (Ubuntu 4.8.2-19ubuntu1) 4.8.2
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for ing conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
檢查完畢,就去nvidia的官網(參考鏈接3)上下載驅動,為下載的是ubuntu14.04的deb包。
2. 安裝
Deb包安裝較為簡單,但是安裝過程中提示不穩定,不過用著也沒啥出錯的地方。
先按照參考鏈接2安裝必要的庫。
sudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev
還是按照官網上的流程來。
$ sudo dpkg -i cuda-repo-<distro>_<version>_<architecture>.deb
$ sudo apt-get update
$ sudo apt-get install cuda
可能需要下載較長時間,但是沒關系,放在那等著就是。
沒啥問題就算安裝好了。
安裝過程中提示:
*** Please reboot your computer and verify that the nvidia graphics driver is loaded. ***
*** If the driver fails to load, please use the NVIDIA graphics driver .run installer ***
*** to get into a stable state.
我沒管,提示使用.run安裝比較穩定,但我現在用著沒問題。
3. 配置環境
我的系統是64位的,因此配置環境時在.bashrc中加入
$ export PATH=/usr/local/cuda-6.5/bin:$PATH
$ export LD_LIBRARY_PATH=/usr/local/cuda-6.5/lib64:$LD_LIBRARY_PATH
配置完環境後,執行命令
~$ source .bashrc
使其立刻生效。
4. 安裝sample
配置好環境後,可以執行如下命令:
$ cuda-install-samples-6.5.sh <dir>
這樣,就將cuda的sample拷貝到dir文件夾下了。該命令只是一個拷貝操作。
然後進入該文件夾,執行make命令進行編譯,編譯時間較長,需要等待。
5. 驗證安裝是否成功
5.1. 驅動驗證
首先,驗證nvidia的驅動是否安裝成功。
~$ cat /proc/driver/nvidia/version
NVRM version: NVIDIA UNIX x86_64 Kernel Mole 340.29 Thu Jul 31 20:23:19 PDT 2014
GCC version: gcc version 4.8.2 (Ubuntu 4.8.2-19ubuntu1)
5.2. Toolkit驗證
驗證cuda toolkit是否成功。
~$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2014 NVIDIA Corporation
Built on Thu_Jul_17_21:41:27_CDT_2014
Cuda compilation tools, release 6.5, V6.5.12
5.3. 設備識別
使用cuda sample已經編譯好的deviceQuery來驗證。deviceQuery在<cuda_sample_install_path>/bin/x_86_64/linux/release目錄下。我的結果如下,檢測出了兩塊GPU來。
~/install/NVIDIA_CUDA-6.5_Samples/bin/x86_64/linux/release$ ./deviceQuery
./deviceQuery Starting...
CUDA Device Query (Runtime API) version (CUDART static linking)
Detected 2 CUDA Capable device(s)
Device 0: "Tesla K20c"
CUDA Driver Version / Runtime Version 6.5 / 6.5
CUDA Capability Major/Minor version number: 3.5
Total amount of global memory: 4800 MBytes (5032706048 bytes)
(13) Multiprocessors, (192) CUDA Cores/MP: 2496 CUDA Cores
GPU Clock rate: 706 MHz (0.71 GHz)
Memory Clock rate: 2600 Mhz
Memory Bus Width: 320-bit
L2 Cache Size: 1310720 bytes
Maximum Texture Dimension Size (x,y,z) 1D=(65536), 2D=(65536, 65536), 3D=(4096, 4096, 4096)
Maximum Layered 1D Texture Size, (num) layers 1D=(16384), 2048 layers
Maximum Layered 2D Texture Size, (num) layers 2D=(16384, 16384), 2048 layers
Total amount of constant memory: 65536 bytes
Total amount of shared memory per block: 49152 bytes
Total number of registers available per block: 65536
Warp size: 32
Maximum number of threads per multiprocessor: 2048
Maximum number of threads per block: 1024
Max dimension size of a thread block (x,y,z): (1024, 1024, 64)
Max dimension size of a grid size (x,y,z): (2147483647, 65535, 65535)
Maximum memory pitch: 2147483647 bytes
Texture alignment: 512 bytes
Concurrent and kernel execution: Yes with 2 engine(s)
Run time limit on kernels: No
Integrated GPU sharing Host Memory: No
Support host page-locked memory mapping: Yes
Alignment requirement for Surfaces: Yes
Device has ECC support: Enabled
Device supports Unified Addressing (UVA): Yes
Device PCI Bus ID / PCI location ID: 3 / 0
Compute Mode:
< Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >
Device 1: "Quadro K4000"
CUDA Driver Version / Runtime Version 6.5 / 6.5
CUDA Capability Major/Minor version number: 3.0
Total amount of global memory: 3071 MBytes (3220504576 bytes)
( 4) Multiprocessors, (192) CUDA Cores/MP: 768 CUDA Cores
GPU Clock rate: 811 MHz (0.81 GHz)
Memory Clock rate: 2808 Mhz
Memory Bus Width: 192-bit
L2 Cache Size: 393216 bytes
Maximum Texture Dimension Size (x,y,z) 1D=(65536), 2D=(65536, 65536), 3D=(4096, 4096, 4096)
Maximum Layered 1D Texture Size, (num) layers 1D=(16384), 2048 layers
Maximum Layered 2D Texture Size, (num) layers 2D=(16384, 16384), 2048 layers
Total amount of constant memory: 65536 bytes
Total amount of shared memory per block: 49152 bytes
Total number of registers available per block: 65536
Warp size: 32
Maximum number of threads per multiprocessor: 2048
Maximum number of threads per block: 1024
Max dimension size of a thread block (x,y,z): (1024, 1024, 64)
Max dimension size of a grid size (x,y,z): (2147483647, 65535, 65535)
Maximum memory pitch: 2147483647 bytes
Texture alignment: 512 bytes
Concurrent and kernel execution: Yes with 1 engine(s)
Run time limit on kernels: Yes
Integrated GPU sharing Host Memory: No
Support host page-locked memory mapping: Yes
Alignment requirement for Surfaces: Yes
Device has ECC support: Disabled
Device supports Unified Addressing (UVA): Yes
Device PCI Bus ID / PCI location ID: 4 / 0
Compute Mode:
< Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >
> Peer access from Tesla K20c (GPU0) -> Quadro K4000 (GPU1) : No
> Peer access from Quadro K4000 (GPU1) -> Tesla K20c (GPU0) : No
deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 6.5, CUDA Runtime Version = 6.5, NumDevs = 2, Device0 = Tesla K20c, Device1 = Quadro K4000
Result = PASS
這樣,cuda就安裝成功了。
⑻ 如何安裝CUDA
PRE-INSTALLATION ACTIONS 安裝前准備
1.1.Verify You Have a CUDA-Capable GPU
在終端中輸入: $ lspci | grep -i nvidia ,會顯示自己的NVIDIA GPU版本信息
去CUDA的官網http://developer.nvidia.com/cuda-gpus查看自己的GPU版本是否在CUDA的支持列表中
1.2.Verify You Have a Supported Version of Linux 檢查自己的linux版本是否支持,我安裝的是ubuntu14.04版本的,這個就沒有問題
在終端中輸入: $ uname -m && cat /etc/*release
終端顯示結果如下所示:
1.3. Verify the System Has gcc Installed
在終端中輸入: $ gcc --version
1.4. Verify the System has the Correct Kernel Headers and Development Packages Installed
在終端中輸入: $ uname –r 可以查看自己的kernel版本信息
在終端中輸入:$ sudo apt-get install linux-headers-$(uname -r)
可以安裝對應kernel版本的kernel header和package development
這四個小步驟我都比較順利,安裝好ubuntu後這些都裝好了,如果在某一步中有問題,可以參照官方文檔進行解決。
runfile安裝cuda 下載鏈接https://developer.nvidia.com/cuda-downloads
2.1.禁用 nouveau
終端中運行:$ lsmod | grep nouveau,如果有輸出則代表nouveau正在載入。
Ubuntu的nouveau禁用方法:
在/etc/modprobe.d中創建文件blacklist-nouveau.conf,在文件中輸入以下兩行內容:
blacklist nouveau
options nouveau modeset=0
在終端中輸入:$ sudo update-initramfs –u
設置完畢可以再次運行
$ lsmod | grep nouveau 檢查是否禁用成功
如果運行後沒有任何輸出,則代表禁用成功(如果還有輸出,表示沒有禁用成功,不過也不要擔心,可以重啟電腦,再次運行該命令一般情況下會顯示禁用成功)。
2.2.重啟電腦,到達登錄界面時,alt+ctrl+f1,進入text mode,登錄賬戶
2.3.在text mode中輸入
$ sudo service lightdm stop 關閉圖形化界面
2.4.切換到cuda安裝文件的路徑
運行$ sudo sh cuda_7.5.18_linux.run
一般下載好cuda安裝包後直接放在home目錄下,就可以按照上面的代碼運行了,建議這么做。
遇到提示是否安裝openGL ,選擇no(如果你的電腦跟我一樣是雙顯,且主顯是非NVIDIA的GPU需要選擇no,否則可以選擇yes)。其他都選擇yes或者默認安裝成功後,會顯示installed,否則會顯示failed。
2.5. 輸入 $ sudo service lightdm start 重新啟動圖形化界面。
Alt + ctrl +F7,返回到圖形化登錄界面,輸入密碼登錄。
如果能夠成功登錄,則表示不會遇到循環登錄的問題,基本說明CUDA的安裝成功了。
2.6. 重啟電腦。檢查Device Node Verification。
檢查路徑~/dev下 有無存在名為nvidia*(以nvidia開頭)的多個文件(device files)
如果沒有的話,可以參考官方文檔里的指導步驟,進行添加。
添加過程:
a)在home下創建一個文檔,命名位modprobe,不要後綴,文檔的內容如下:
#!/bin/bash
/sbin/modprobe nvidia
if [ "$?" -eq 0 ]; then
# Count the number of NVIDIA controllers found.
NVDEVS=`lspci | grep -i NVIDIA`
N3D=`echo "$NVDEVS" | grep "3D controller" | wc -l`
NVGA=`echo "$NVDEVS" | grep "VGA compatible controller" | wc -l`
N=`expr $N3D + $NVGA - 1`
for i in `seq 0 $N`; do
mknod -m 666 /dev/nvidia$i c 195 $i
done
mknod -m 666 /dev/nvidiactl c 195 255
else
exit 1
fi
/sbin/modprobe nvidia-uvm
if [ "$?" -eq 0 ]; then
# Find out the major device number used by the nvidia-uvm driver
D=`grep nvidia-uvm /proc/devices | awk '{print $1}'`
mknod -m 666 /dev/nvidia-uvm c $D 0
else
exit 1
fi
b)將該文件復制到/etc/init.d目錄下
終端輸入: $ sudo chmod 755 /etc/init.d/modprobe
d)執行如下命令將腳本放到啟動腳本中去。
終端輸入: $ cd /etc/init.d
$ sudo update-rc.d modprobe defaults 95
注意:數字95其實可以隨便設置的。
e)關機然後重新啟動,去~/dev下面查看,不出意外此時應該有nvidia*系類文件了。
對於2.6的說明:很有必要說一下不管怎麼搞我的nvidia*文件總是出現不了,所以我放棄,不過好像並沒有太大的影響。這一點根據情況大家自己試試吧。
2.7. 設置環境變數。
終端中輸入 $ sudo gedit /etc/profile
在打開的文件末尾,添加以下兩行:
export PATH=/usr/local/cuda-7.5/bin/:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda7.5/lib64/:$LD_LIBRARY_PATH
2.8. 重啟電腦,檢查上述的環境變數是否設置成功。
終端中輸入 : $ env
在輸出的環境變數中檢查有無上述 設置的變數,如果有則代表設置成功。
3. 檢查cuda是否安裝成功。
3.1.檢查 NVIDIA Driver是否安裝成功
終端輸入 :$ cat /proc/driver/nvidia/version 會輸出NVIDIA Driver的版本號
3.2檢查 CUDA Toolkit是否安裝成功
終端輸入 : $ nvcc –V 會輸出CUDA的版本信息
3.3嘗試編譯cuda提供的例子
切換到例子存放的路徑,默認路徑是 ~/NVIDIA_CUDA-7.5_Samples
終端輸入:$ make
注意:這里的make操作是將Samples文件夾下所有的demo都編譯了一遍,所以比較耗時,如果僅僅想測試某個例子,可以進入相應的文件夾去編譯即可。
如果出現錯誤的話,則會立即報錯停止,否則會開始進入編譯階段。
注意:我第一次運行的時候就報錯了,錯誤是缺少一些依賴庫,一般情況下也就是這個問題,按照如下方式安裝就好,其實也沒必要都安裝,不過安裝上也不會報錯:
$ sudo apt-get install freeglut3-dev
$ sudo apt-get install build-essential
$ sudo apt-get install libx11-dev
$ sudo apt-get install libxmu-dev
$ sudo apt-get install libxi-dev
$ sudo apt-get install ibgl1-mesa-glx
$ sudo apt-get install llibglu1-mesa
$ sudo apt-get install libglu1-mesa-dev
安裝好後,在終端輸入: $ make
成功後,NVIDIA_CUDA-7.5_Samples文件夾下會出現一個bin文件夾。運行編譯生成的二進制文件。
編譯後的二進制文件 默認存放在~/NVIDIA_CUDA-7.5_Samples/bin中。
⑼ cuda程序編譯方面,各位都有哪些方法和經驗
首先創建一個soTest的文件夾,裡面有兩個文件deviceQuery.cpp, t.cpp。 12345678deviceQuery.cpp的代碼可以參考CUDASDK t.cpp的源代碼如下: #include int cudev(int argc, char** argv);int main(int argc, char ** argv){ cudev(argc,argv); return 0;}然後在當前目錄下輸下命令
⑽ 如何在Linux下編譯CUDA程序,生成動態鏈接庫
首先創建一個soTest的文件夾,裡面有兩個文件deviceQuery.cpp, t.cpp。
deviceQuery.cpp的代碼可以參考CUDASDKt.cpp的源代碼如下:
#includeintcudev(intargc,char**argv);
intmain(intargc,char**argv)
{
cudev(argc,argv);
return0;
}
然後在當前目錄下輸下命令