Ubuntu20.04 安裝HPC_SDK加速庫
- 1. NVIDIA HPC SDK 簡介
- 2. 安裝
- 3. OpenACC程式測驗
- 參考
1. NVIDIA HPC SDK 簡介
NVIDIA HPC SDK(NVIDIA High Performance Compute Software Development Kit)是一個適用于高性能計算的全面的編譯器,庫和工具套件,NVIDIA HPC SDK包括經過驗證的編譯器,庫和軟體工具,這些工具對于最大化開發人員的作業效率以及HPC應用程式的性能和可移植性至關重要,
NVIDIA HPC SDK 包括有以下的一些編譯器和內容,C,C ++和Fortran編譯器通過標準C ++和Fortran,OpenACC指令和CUDA支持GPU加速HPC建模和仿真應用程式, GPU加速的數學庫最大程度地提高了通用HPC演算法的性能,優化的通信庫可實作基于標準的多GPU和可擴展的系統編程, 性能分析和除錯工具簡化了HPC應用程式的移植和優化,而容器化工具可以在本地或云中輕松部署, 通過支持NVIDIA GPU和運行Linux的Arm,OpenPOWER或x86-64 CPU,HPC SDK提供了構建NVIDIA GPU加速的HPC應用程式所需的工具,
2. 安裝
按照官網上的說明,可以直接下載它的tar包進行安裝或者是rpm、deb包進行安裝,筆者這里的作業系統是Ubuntu20.04,已經安裝成功CUDA-10.1庫,所以筆者下載了deb包進行安裝,包含有兩個版本的,
wget https://developer.download.nvidia.com/hpc-sdk/20.9/nvhpc-20-9_20.9_amd64.deb \
https://developer.download.nvidia.com/hpc-sdk/20.9/nvhpc-2020_20.9_amd64.deb \
https://developer.download.nvidia.com/hpc-sdk/20.9/nvhpc-20-9-cuda-multi_20.9_amd64.deb
sudo apt-get install ./nvhpc-20-9_20.9_amd64.deb ./nvhpc-2020_20.9_amd64.deb ./nvhpc-20-9-cuda-multi_20.9_amd64.deb
安裝的工具包安裝到了/opt/nvidia/hpc_sdk檔案夾中,編輯檔案~/.bashrc
nano ~/.bashrc
然后進行環境變數設定
export NVARCH=`uname -s`_`uname -m`;
export NVCOMPILERS=/opt/nvidia/hpc_sdk;
export PATH=$NVCOMPILERS/$NVARCH/20.9/comm_libs/mpi/bin:$PATH
export MANPATH=$MANPATH:$NVCOMPILERS/$NVARCH/20.9/comm_libs/mpi/man
使得環境變數生效
source ~/.bashrc
這樣就安裝成功了HPCSDK加速工具包,
3. OpenACC程式測驗
現在我們撰寫一個非常簡單的程式來測驗HPC SDK是否能使用,我們這里使用到了OpenACC加速庫,下面是一個C語言寫成的一個程式,檔案名為test.c
#include <stdio.h>
#include <stdlib.h>
void vecaddgpu( float *restrict r, float *a, float *b, int n ){
#pragma acc kernels loop copyin(a[0:n],b[0:n]) copyout(r[0:n])
for( int i = 0; i < n; ++i ) r[i] = a[i] + b[i];
}
int main( int argc, char* argv[] ){
int n; /* vector length */
float * a; /* input vector 1 */
float * b; /* input vector 2 */
float * r; /* output vector */
float * e; /* expected output values */
int i, errs;
if( argc > 1 ) n = atoi( argv[1] );
else n = 100000; /* default vector length */
if( n <= 0 ) n = 100000;
a = (float*)malloc( n*sizeof(float) );
b = (float*)malloc( n*sizeof(float) );
r = (float*)malloc( n*sizeof(float) );
e = (float*)malloc( n*sizeof(float) );
for( i = 0; i < n; ++i ){
a[i] = (float)(i+1);
b[i] = (float)(1000*i);
}
/* compute on the GPU */
vecaddgpu( r, a, b, n );
/* compute on the host to compare */
for( i = 0; i < n; ++i ) e[i] = a[i] + b[i];
/* compare results */
errs = 0;
for( i = 0; i < n; ++i ){
if( r[i] != e[i] ){
++errs;
}
}
printf( "%d errors found\n", errs );
return errs;
}
對上述程式進行編譯處理:
nvc -o test -acc test.c
如果顯示下列內容則安裝成功
0 errors found
fortran90程式,測驗檔案test.f90
module vecaddmod
implicit none
contains
subroutine vecaddgpu( r, a, b, n )
real, dimension(:) :: r, a, b
integer :: n
integer :: i
!$acc kernels loop copyin(a(1:n),b(1:n)) copyout(r(1:n))
do i = 1, n
r(i) = a(i) + b(i)
enddo
end subroutine
end module
program main
use vecaddmod
implicit none
integer :: n, i, errs, argcount
real, dimension(:), allocatable :: a, b, r, e
character*10 :: arg1
argcount = command_argument_count()
n = 1000000 ! default value
if( argcount >= 1 )then
call get_command_argument( 1, arg1 )
read( arg1, '(i)' ) n
if( n <= 0 ) n = 100000
endif
allocate( a(n), b(n), r(n), e(n) )
do i = 1, n
a(i) = i
b(i) = 1000*i
enddo
! compute on the GPU
call vecaddgpu( r, a, b, n )
! compute on the host to compare
do i = 1, n
e(i) = a(i) + b(i)
enddo
! compare results
errs = 0
do i = 1, n
if( r(i) /= e(i) )then
errs = errs + 1
endif
enddo
print *, errs, ' errors found'
if( errs ) call exit(errs)
end program
編譯程式
nvfortran -o test -acc test.f90
若顯示
0 errors found
則安裝成功
參考
[1] HPC SDK 官方安裝向導
[2] OpenAcc官方參考檔案
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/195735.html
標籤:其他
下一篇:京淘專案架構思想
