CentOS7.9@wsl2에 Intel oneAPI(intel compiler)를 설치&hello 프로그램을 실행한다.
16114 단어 WSLCentOSWSL2intelFortranmkl
CentOS7.9@wsl2에 Intel oneAPI(intel compiler) 환경을 구축한다.
몇 가지 소개 되어 있는 것처럼, Intel의 컴파일러&라이브러리인 Intel oneAPI를 무료로 사용할 수 있으므로 CentOS7.9@wsl2에 인스톨 해 봅니다.
컴파일러&MPI&MKL(수치 계산 라이브러리)를 넣고 싶기 때문에 BaseKit와 HPCkit를 인스톨 했습니다.
wsl2라면, gcc계도 들어 있지 않은 것 같고, 조금 넘어지기 때문에 기록합니다.
함께 확인에 사용한 아래의 hello 프로그램도 기재해 둡니다.
(유익하면 LGTM 부탁드립니다)
설치한 환경
wsl2에서 CentOS7.9를 넣은 상태 (아래 참조)
htps : // 코 m / 에오 / ms / 세 d8345 아 fb0 에c383 9
GCC 준비
gcc를 Online으로 설치한다.
참조한 URL: htps //w w. 가 드게 ts-다 y. 네 t/? p=806
아래를 root로 실행.
우선, 현재 상태와 설치할 수 있는 버전을 확인
$ which gcc
# 結果
/usr/bin/which: no gcc in (:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:)
$ yum info gcc
# 結果(一部掲載)
Available Packages
Name : gcc
Version : 4.8.5
$ yum info gcc-c++
#結果
Name : gcc-c++
Version : 4.8.5
$ yum info gcc-gfortran
# 結果
Name : gcc-gfortran
Version : 4.8.5
이어서 설치
$ yum install gcc
$ yum install gcc-c++
$ yum install gcc-gfortran
# Dependencyも含めてインストール、Updateしてくれる。
# gcc-c++で確認
$ which g++
#結果
/usr/bin/g++
$ g++ --version
#結果
g++ (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44)
Copyright (C) 2015 Free Software Foundation, Inc.
intel OneAPI 설치.
BaseKit과 HPCkit을 다운로드합니다. 이곳은 오프라인 버전으로 작업합니다.
참고 사이트: htps : // 이 m / m ぃし t_ 네 / ms / 35bc4 8f2022903747
을 바탕으로, 아래의 파일 2개를 다운로드.
아래 두 가지 다운로드
l_BaseKit_p_2021.1.0.2659_offline.sh
l_HPCKit_p_2021.1.0.2684_offline.sh
설치
#まずはBaseKit
sudo bash l_BaseKit_p_2021.1.0.2659_offline.sh
#次にHPCKit
sudo bash l_HPCKit_p_2021.1.0.2684_offline.sh
각각 실행하면 아래와 같은 GUI 화면이 나옵니다.
End User License Agreement에 동의하면,
Accept & install로 진행합니다.
특정 프로그램만 설치하고 싶은 경우는 Accept & configura installation을 적절히 체크를 해제해 주세요.
설정
설치 폴더인 setvars.sh를 실행하면 경로를 통해 줍니다.
$ source /opt/intel/oneapi/setvars.sh
$ which ifort
#実行結果
/opt/intel/oneapi/compiler/2021.1.1/linux/bin/intel64/ifort
$ ifort --version
#実行結果
ifort (IFORT) 2021.1 Beta 20201112
Copyright (C) 1985-2020 Intel Corporation. All rights reserved.
hello 프로그램을 실행하여 확인합니다.
여기에서 일반 사용자로 실행합니다.
우선, 로그인시에 패스가 통과하도록 설정한다.
# ~/.bashrcに下記を加える。
source /opt/intel/oneapi/setvars.sh
#bashrcの再読み込み
$source ~/.bashrc
#確認
$ ifort --version
$ which ifort
#実行結果
/opt/intel/oneapi/compiler/2021.1.1/linux/bin/intel64/ifort
Fortran 계열
보통 Fortran
움직이는 프로그램은
hello.f90program hello
write(*,*) 'hello,world!'
end program hello
실행.
$ ifort hello.f90 -o hello.exe
$ ./hello.exe
#実行結果
hello, world!
MPI Fortran
참고 : htps : // 쿠 rc. Red d. cs. 이오 / 엔 / ㅁ st / p 로그 라민 g / M 피 푸 rt 란. HTML
움직이는 프로그램은
hello_mpi.f90 PROGRAM hello_mpi
include 'mpif.h'
integer rank, size, ierror, tag
character node*20
call MPI_INIT(ierror)
call MPI_COMM_SIZE(MPI_COMM_WORLD, size, ierror)
call MPI_COMM_RANK(MPI_COMM_WORLD, rank, ierror)
call MPI_Get_processor_name(node, node_len, ierror)
write(*,*) 'hello, world! @ ',node, rank, 'of ', size
call MPI_FINALIZE(ierror)
END PROGRAM
실행.
$ mpiifort hello_mpi.f90 -o hello_mpi.exe
#↓ 実行するとき"./"を省略しない
$ mpirun -n 3 ./hello_mpi.exe
#実行結果
hello, world! @ node1 1 of 3
hello, world! @ node1 2 of 3
hello, world! @ node1 0 of 3
openMP fortran
hello_omp.f90program hello_omp
!$ use omp_lib
!$omp parallel
write(*,*) "hello, world @",omp_get_thread_num(),"of",omp_get_num_threads()
!$omp end parallel
end program hello_omp
실행해보십시오.
$ ifort -qopenmp hello_omp.f90 -o hello_omp.exe
#環境変数OMP_NUM_THREADSに並列化したいthreads数を指定
$ export OMP_NUM_THREADS=4
$ ./hello_omp.exe
#実行結果
hello, world @ 0 of 4
hello, world @ 2 of 4
hello, world @ 3 of 4
hello, world @ 1 of 4
#ちなみにoptionを"-openmp"にすると下記。wsl2だから?
$ ifort -openmp hello_omp.f90 -o hello_omp.exe
#実行結果
ifort: command line error: option '-openmp' is not supported. Please use the replacement option '-qopenmp'
C계
일반 C
hello.c#include <stdio.h>
main( )
{
printf("hello, world\n");
}
$ icc hello.c -o hello.exe
$ ./hello.exe
#実行結果
hello, world
MPI C
참고 : htps // m 피트리어 l. 코 m / 쓰리 아 ls / m 피 - ぉ - rld /
hello_mpi.c#include <mpi.h>
#include <stdio.h>
int main(int argc, char** argv) {
MPI_Init(NULL, NULL);
int size;
MPI_Comm_size(MPI_COMM_WORLD, &size);
int rank;
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
char node[MPI_MAX_PROCESSOR_NAME];
int name_len;
MPI_Get_processor_name(node, &name_len);
printf("hello, world @ %s, %d of %d \n",node, rank, size);
MPI_Finalize();
}
$ mpiicc hello_mpi.c -o hello_mpi.exe
$ mpirun -n 5 ./hello_mpi.exe
#実行結果
hello, world @ node1, 1 of 5
hello, world @ node1, 3 of 5
hello, world @ node1, 0 of 5
hello, world @ node1, 2 of 5
hello, world @ node1, 4 of 5
C++계
보통
hello.cpp#include <iostream>
using namespace std;
int main(){
cout << "hello, world" << endl;
return 0;
}
$ icpc hello.cpp -o hello.exe
$ ./hello.exe
#実行結果
hello, world
MPI C++
프로그램은 hello_mpi.c와 동일한 것을 hello_mpi.cpp로 실행
$ mpiicpc hello_mpi.cpp -o hello_mpi.exe
$ mpirun -n 2 ./hello_mpi.exe
#実行結果
hello, world @ node1, 1 of 2
hello, world @ node1, 0 of 2
(보충) GCC에서 실행하는 경우
gcc계에서 실행하는 경우는, 아래의 표에 따라 컴파일시의 커멘드를 읽어내면 실행 가능합니다.
nomal
MPI
OpenMP
인텔
ifort
mpiifort
ifort -qopenmp
gcc
gfortran
mpif90
gfortran -fopenmp
nomal
MPI
인텔
icc
mpiicc
gcc
cc/gcc
mpicc
nomal
MPI
인텔
icpc
mpiicpc
gcc
g++/cpp
mpicxx
(mpif90, mpicc은/opt/intel/oneapi/mpi/2021.1.1/bin에 링크되어 있습니다.
intelOneAPI를 넣지 않은 경우 OpenMPI 등이 필요)
Reference
이 문제에 관하여(CentOS7.9@wsl2에 Intel oneAPI(intel compiler)를 설치&hello 프로그램을 실행한다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/egoo/items/f642d032428f6ffff425
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
#まずはBaseKit
sudo bash l_BaseKit_p_2021.1.0.2659_offline.sh
#次にHPCKit
sudo bash l_HPCKit_p_2021.1.0.2684_offline.sh
$ source /opt/intel/oneapi/setvars.sh
$ which ifort
#実行結果
/opt/intel/oneapi/compiler/2021.1.1/linux/bin/intel64/ifort
$ ifort --version
#実行結果
ifort (IFORT) 2021.1 Beta 20201112
Copyright (C) 1985-2020 Intel Corporation. All rights reserved.
# ~/.bashrcに下記を加える。
source /opt/intel/oneapi/setvars.sh
#bashrcの再読み込み
$source ~/.bashrc
#確認
$ ifort --version
$ which ifort
#実行結果
/opt/intel/oneapi/compiler/2021.1.1/linux/bin/intel64/ifort
program hello
write(*,*) 'hello,world!'
end program hello
$ ifort hello.f90 -o hello.exe
$ ./hello.exe
#実行結果
hello, world!
PROGRAM hello_mpi
include 'mpif.h'
integer rank, size, ierror, tag
character node*20
call MPI_INIT(ierror)
call MPI_COMM_SIZE(MPI_COMM_WORLD, size, ierror)
call MPI_COMM_RANK(MPI_COMM_WORLD, rank, ierror)
call MPI_Get_processor_name(node, node_len, ierror)
write(*,*) 'hello, world! @ ',node, rank, 'of ', size
call MPI_FINALIZE(ierror)
END PROGRAM
$ mpiifort hello_mpi.f90 -o hello_mpi.exe
#↓ 実行するとき"./"を省略しない
$ mpirun -n 3 ./hello_mpi.exe
#実行結果
hello, world! @ node1 1 of 3
hello, world! @ node1 2 of 3
hello, world! @ node1 0 of 3
program hello_omp
!$ use omp_lib
!$omp parallel
write(*,*) "hello, world @",omp_get_thread_num(),"of",omp_get_num_threads()
!$omp end parallel
end program hello_omp
$ ifort -qopenmp hello_omp.f90 -o hello_omp.exe
#環境変数OMP_NUM_THREADSに並列化したいthreads数を指定
$ export OMP_NUM_THREADS=4
$ ./hello_omp.exe
#実行結果
hello, world @ 0 of 4
hello, world @ 2 of 4
hello, world @ 3 of 4
hello, world @ 1 of 4
#ちなみにoptionを"-openmp"にすると下記。wsl2だから?
$ ifort -openmp hello_omp.f90 -o hello_omp.exe
#実行結果
ifort: command line error: option '-openmp' is not supported. Please use the replacement option '-qopenmp'
#include <stdio.h>
main( )
{
printf("hello, world\n");
}
$ icc hello.c -o hello.exe
$ ./hello.exe
#実行結果
hello, world
#include <mpi.h>
#include <stdio.h>
int main(int argc, char** argv) {
MPI_Init(NULL, NULL);
int size;
MPI_Comm_size(MPI_COMM_WORLD, &size);
int rank;
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
char node[MPI_MAX_PROCESSOR_NAME];
int name_len;
MPI_Get_processor_name(node, &name_len);
printf("hello, world @ %s, %d of %d \n",node, rank, size);
MPI_Finalize();
}
$ mpiicc hello_mpi.c -o hello_mpi.exe
$ mpirun -n 5 ./hello_mpi.exe
#実行結果
hello, world @ node1, 1 of 5
hello, world @ node1, 3 of 5
hello, world @ node1, 0 of 5
hello, world @ node1, 2 of 5
hello, world @ node1, 4 of 5
#include <iostream>
using namespace std;
int main(){
cout << "hello, world" << endl;
return 0;
}
$ icpc hello.cpp -o hello.exe
$ ./hello.exe
#実行結果
hello, world
$ mpiicpc hello_mpi.cpp -o hello_mpi.exe
$ mpirun -n 2 ./hello_mpi.exe
#実行結果
hello, world @ node1, 1 of 2
hello, world @ node1, 0 of 2
Reference
이 문제에 관하여(CentOS7.9@wsl2에 Intel oneAPI(intel compiler)를 설치&hello 프로그램을 실행한다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/egoo/items/f642d032428f6ffff425텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)