Home > Computational Modelling, Tin Sinh học > Phần 4: CUDA – Cài đặt cho Fortran

Phần 4: CUDA – Cài đặt cho Fortran

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.

Đă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-4, PGI Fortran hỗ trợ CUDA features (tuy chưa đầy đủ). Để 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ày 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

Dòng thứ 4 là cần thiết nếu gặp lỗi:

/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ú ý, các thế hệ NVIDIA GPU khác nhau có khả năng tính toán khác nhau. Chúng được thể hiện qua cái gọi là “Compute Capability” (C.C), đãi diện bởi 2 chữ số. Hiện nay có 3 phiên bản: 1.0, 1.1, và 1.3. Tesla Carg C1060 hỗ trợ C.C. 1.3.

Nếu bạn muốn compile ra CUDA code để có thể chạy trên các NVIDIA Card thấp hơn, ví dụ C.C. 1.0, ta thêm vào một dòng khác trong file sitenvrc

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 (sẽ đề cập ở bài viết khác), ta du’ng compiler flag “-ta=nvidia” (không có dấu ngoặc kép)

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
  1. No comments yet.
  1. No trackbacks yet.