Vietnamen’s Weblog

Time, Chances, Diligence, Intelligence: which is the most important?

Phần 4: Fortran + CUDA + Accelerator (0) install + compile

leave a comment »

NVIDIA phối hợp cùng PGI (Portland Group) cuối cùng đã cho ra Fortran compiler với CUDA support. Trước đây, CUDA support chỉ có trên C/C++ programming language. Hiện nay hầu hết các code chương trình cho khoa học là viết trên Forrtran, vì thế, nhu cầu chuyển dần sang CUDA-enabled Tesla NVIDIA GPU là rất lớn. Bên cạnh đó, PGI cung cấp mô hình Accelerator Programming Model (APM) nhằm giúp chuyển đổi các source codes có sẵn sang GPU với ít thay đổi nhất.

Đăng kí bản quyền

Để dùng được PGI Fortran, bạn cần có file license.dat, ở đây tôi không đi vào chi tiết cài đặt. Tuy nhiên, đây là bước đầu tiên và chỉ làm 1 lần.

 

Kích hoạt CUDA + accelerator compiler

Kể từ phiên bản 9.0-2, PGI Fortran hỗ trợ CUDA features. Để kích hoạt, bạn cần tạo ra 1 file có tên sitenvrc để khai báo các thư mục cài đặt CUDA software. File nỳ nằm ở thư mục $PGI/linux86-64/9.0-4/bin (CHÚ Ý: $PGI là alias đến thư mục cài đặt PGI, ví dụ: $PGI=/opt/pgi, hay $PGI=/usr/pgi, tuỳ theo version của PGI Fortran mà 9.0-1 có thể phải đổi thành 9.0-2 hay khác).

Sau đó, thêm các dòng sau vào trong file sitenvrc (chú ý dấu chấm phẩy sau mỗi hàng là quan trọng)

set NVOPEN64DIR=/opt/cuda/open64/lib;   
set CUDADIR=/opt/cuda/bin;
set CUDALIB=/opt/cuda/lib64;   ! thay lib64 bằng lib nếu là CUDA 2.2
set GCCVERSION=40301; ! có một số không tương thích giữa G++4.3 với NVIDIA installation files

Nếu dòng thứ 4 không có, bạn có thể gặp hàng loạt  lỗi như sau:

/usr/include/c++/4.3/x86_64-linux-gnu/bits/c++config.h(233): error: expected a “{“

….

Để kiểm tra cài đặt thành công, với CUDA, bạn có thể test với deviceQuery hay bandwidthTest (nằm trong bộ CUDA SDK samples), hoặc pgaccelinfo tool. Với pgaccelinfo, thông tin gồm

Device Number:                 2
Device Name:                   Tesla C1060
Device Revision Number:        1.3
Global Memory Size:            4294705152
Number of Multiprocessors:     30
Number of Cores:               240
Concurrent Copy and Execution: Yes
Total Constant Memory:         65536
Total Shared Memory per Block: 16384
Registers per Block:           16384
Warp Size:                     32
Maximum Threads per Block:     512
Maximum Block Dimensions:      512 x 512 x 64
Maximum Grid Dimensions:       65535 x 65535 x 1
Maximum Memory Pitch:          262144B
Texture Alignment              256B
Clock Rate:                    1296 MHz
Initialization time:           3376 microseconds
Current free memory            4246142976
Upload time (4MB)              1091 microseconds ( 908 ms pinned)
Download time                  1545 microseconds (1365 ms pinned)
Upload bandwidth               3844 MB/sec (4619 MB/sec pinned)
Download bandwidth             2714 MB/sec (3072 MB/sec pinned)

Chú ý, “Device Revision Number” là 1.3 và đây cũng là output mặc định khi biên dịch, muốn compile ra CUDA code theo phiên bản khác, ví dụ 1.0, ta thêm vào một dòng khác (1.1 hoặc 1.0)

set COMPUTECAP=1.0

Biên dịch với pgf95

Để biên dịch ra code chạy được trên PGPGU

  • using GPU Programming model CUDA, ta du’ng compiler flag “-Mcuda” (không có dấu ngoặc kép)
  • using Accelerator Programming model, ta du’ng compiler flag “-ta=nvidia” (không có dấu ngoặc kép)

NOTE: Để biên dịch các thư viện kèm theo với accelerator, ta cũng cần dùng compiler flag “-ta”.

Debug

Another way to edit the file sitenvrc

set NVDIR=/usr/local/cuda;
set NVOPEN64DIR=$NVDIR/open64/lib;
set CUDADIR=$NVDIR/bin;
set CUDALIB=$NVDIR/lib64;
set GCCVERSION=40303;

Tham khảo:

  1. http://www.nvidia.com/object/cuda_home.html
  2. http://www.topcoder.com/tc?module=Static&d1=sponsors&d2=NVIDIAOverview
  3. http://www.bv2.co.uk/?p=910

Written by vietnamen

Tháng Mười 4, 2009 lúc 10:11 chiều

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s

%d bloggers like this: