=Ubuntu下安裝CUDA (Tesla C1060)=
Tesla並沒有顯示功能,所以需要另一張顯示卡。這裏用的是nvidia GeForce? 9800GT 支援CUDA的顯示卡。
安裝順序:
- CUDA驅動程式2. CUDA工具套件3. CUDA軟體開發工具(SDK)程式碼範例除了程式碼範例外,其他全詳細步驟如下:
- 安裝CUDA支援的Ubuntu 版本。目前支援到Ubuntu 9.04版。
- 安裝新的nvidia驅動程式
先檢查顯示卡的驅動程式。 檢查檔案 /etc/X11/xorg.conf: 進入終端機 (Terminal)後, $sudo less /etc/X11/xorg.conf 如果尚未安裝任何驅動程式, 可能會看到
# xorg.conf (X.Org X Window System server configuration file) # …… # ……
. . .
# sudo dpkg-reconfigure -phigh xserver-xorg
Section "Device"
Identifier "Configured Video Device"
Endsection Section "Monitor"
Identifier "Configured Monitor"
Endsection Section "Screen"
Identifier "Default Screen" Monitor "Configured Monitor" Device "Configured Video Device"
Endsection
如果已經安裝nvidia驅動程式,但不是自己編譯的,必須要移除$sudo apt-get remove nvidia-*
3.安裝編譯所需要的核心及相關套件
$sudo apt-get install build-essential linux-source linux-headers-uname -r
$sudo apt-get install xserver-xorg-dev libglut3-dev libglu1-mesa-dev libxi-dev libxmu-dev libc6-dev
如果尚未安裝 gcc 與 g++
$sudo apt-get install gcc-4.3 g++-4.3
4.下載CUDA安裝所需的所有檔案
(1)下載適合的驅動程式
http://www.nvidia.com.tw/Download/index.aspx?lang=tw
以手動尋找。
產品類型: 點選 Tesla
產品系列: 點選 GPU Computing Processor
產品家族: 點選 Tesla C1060
作業系統: 依Linux 系統32位元或64位元作選擇
點選搜尋後,會出現以下畫面:
點選下載NVIDIA-Linux-x86_64-195.36.24-pkg2.run
(2) 下載 CUDA Toolkit 及CUDA SDK
http://www.nvidia.com.tw/object/cuda_get_tw.html
如果要安裝最新的套件,點選 “CUDA 工具套件3.0Beta版”。這個範例安裝的是2.3版的工具套件。點選適合的作業系統
比較驅動程式的版本,選用較新版。這裏的版本比先前下載的還舊,所以只要下載工具套件和軟體開發套件。
下載後,可看到檔名是
cudatoolkit_2.3_linux_64_ubuntu9.04.run
cudasdk_2.3_linux.run
5.關掉圖形介面以安裝nvidia顯示卡驅動程式
按 Crl+Alt+F1進入終端機登入
$sudo /etc/init.d/gdm stop
6.假設所有的檔案都在目前所在目錄下
(1) $sudo sh ./NVIDIA-Linux-x86_64-195.36.24-pkg2.run
會進入nvidia授權頁,用Tab鍵選擇 “Accept” 。
(2)接著會看到以下畫面
There appears to already be a driver installed on your system (version: xxx.xx.xx). As part of installing this driver (version: xxx.xx.xx), the existing driver will be uninstalled. Are you sure you want to continue?
選擇 “Yes”。
(3)
Install NVIDIA's 32-bit compatibility OpenGL libraries?
這裏的版本是64位元的,選擇 “No”。
(4)
Would you like to run the nvidia-xconfig utility to automatically update your X configuration file so that the NVIDIA X driver will be used when you restart X? Any re-existing X configuration file will be backed up.
選擇 “Yes”。
(5) 完成後,在終端機模式下重新開機
$sudo reboot
7.檢查是否安裝成功
點選 system > preferences > NVIDIA X-Server Settings
如果看到Tesla 的資訊,代表安裝成功。
如果沒出現GPU的資訊,則安裝失敗,重新確認硬體是否支援,下載的驅動程式是否版本不符, 安裝程序是否錯誤、遺漏,或試不同版本的驅動程式。
如果只出現GPU 0 (也就是顯示卡的GPU),但沒偵測到Tesla,可先關閉電源,取出Tesla,重新插入主機版,再開機,就可以看到Tesla的資訊。
如果要看GPU的資訊,還有另一個方法。
進入終端機, 使用指令 “nvidia-xconfig”
$nvidia-xconfig -query-gpu-info
你將會看到下面的畫面
8.安裝CUDA 工具套件和CUDA 軟體開發套件
進入終端機
$sudo sh ./cudatoolkit_2.3_linux_64_ubuntu9.04.run
$sudo sh ./cudasdk_2.3_linux.run
過程中,所有選項按Enter會使用預設的設定。
修改 etc 目錄下的 profile 檔
$cd /etc/
$cudo emacs profile (可用任意的編輯器)
依照CUDA所在目錄,在檔案的最後加上
PATH=/usr/local/cuda/bin:$PATH
LD_LIBRARY_PATH=/usr/local/cuda/lib64
export PATH
export LD_LIBRARY_PATH
這四行。
如果是32 位元的作業系統,第二行改成LD_LIBRARY_PATH=/usr/local/cuda/lib
如果是64 位元的作業系統,第二行改成LD_LIBRARY_PATH=/usr/local/cuda/lib64
登出,再登入, 用CUDA程式測試,如果正確無誤,即完成安裝。
若出現以下錯誤訊息
./a.out: error while loading shared libraries: libcudart.so.2: cannot open shared object file: No such file or directory
若是64位元 命令列
$sudo ln -sf /usr/local/cuda/lib64/libcudart.so.2.3 /lib64/libcudart.so.2
如果是32位元可能需要加此行
$sudo ln -sf /usr/local/cuda/lib/libcudart.so.2.3 /lib/libcudart.so.2
可以檢查(option)
$emacs /etc/ld.so.conf
include /usr/local/cuda/lib
若32位元 include /usr/local/cuda/lib
若64位元 include /usr/local/cuda/lib64
可用以下程式測試。
用nvcc 編譯cuda 程式 number_add_1.cu。
如果CPU的執行結果和GPU相同,代表GPU成功運作。
$nvcc number_add_1.cu
$./a.out
number_add_1.cu程式碼:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#include <sys/time.h>
#include <iostream>
#include <iomanip>
using namespace std;
#define DATA_SIZE 1048576
int data[DATA_SIZE];
global static void sumOfSquares(int *num, int* result){
int sum = 0;
int i;
for(i = 0; i < DATA_SIZE; i++) {
sum += num[i] * num[i];
}
*result = sum;
}
void GenerateNumbers? (int *number ,int size){
int i;
for(i=0;i<size;i++){
number[i]=rand() % 10;
value = 0 to 9
}
}
double wallclock(void){
struct timeval tv;
struct timezone tz;
double t;
gettimeofday(&tv, &tz);
t = (double)tv.tv_sec*1000;
t += ((double)tv.tv_usec)/1000.0;
return t;
} millisecond
int main(){
cudaSetDevice(0);
set device number
GenerateNumbers?(data, DATA_SIZE);
int* gpudata,*result,sum;
double t1,t2;
cudaMalloc((void) &gpudata, sizeof(int) * DATA_SIZE);
cudaMalloc((void) &result, sizeof(int));
cudaMemcpy(gpudata, data, sizeof(int) * DATA_SIZE,cudaMemcpyHostToDevice);
t1 = wallclock();
sumOfSquares<<<1, 1, 0>>>(gpudata, result);
cudaMemcpy(&sum, result, sizeof(int), cudaMemcpyDeviceToHost);
t2 = wallclock();
printf("Elapsed time = %f(ms) in GPU\n",t2-t1);
cudaFree(gpudata);
cudaFree(result);
printf("sum: %d\n", sum);
sum = 0;
for(int i = 0; i < DATA_SIZE; i++) {
sum += data[i] * data[i];
}
printf("sum (CPU): %d\n", sum);
}
Attachments (6)
-
NVIDIAIP.jpg
(105.8 KB) -
added by adherelinux 14 years ago.
NVIDIA IP
-
Nvidia_product.jpg
(124.8 KB) -
added by adherelinux 14 years ago.
Nvidia_product
-
toolkit.jpg
(171.8 KB) -
added by adherelinux 14 years ago.
toolkit
-
cuda2.3.jpg
(68.8 KB) -
added by adherelinux 14 years ago.
cuda2.3
-
nvidia_xserver.jpg
(189.5 KB) -
added by adherelinux 14 years ago.
nvidia_xserver
-
query_gpu.jpg
(146.9 KB) -
added by adherelinux 14 years ago.
query_gpu
Download all attachments as: .zip