KR20200047254A - 메모리 중심 컴퓨터를 위한 mpi 프로그램 변환 방법 및 장치 - Google Patents

메모리 중심 컴퓨터를 위한 mpi 프로그램 변환 방법 및 장치 Download PDF

Info

Publication number
KR20200047254A
KR20200047254A KR1020180160347A KR20180160347A KR20200047254A KR 20200047254 A KR20200047254 A KR 20200047254A KR 1020180160347 A KR1020180160347 A KR 1020180160347A KR 20180160347 A KR20180160347 A KR 20180160347A KR 20200047254 A KR20200047254 A KR 20200047254A
Authority
KR
South Korea
Prior art keywords
mpi
function
absolute address
memory
root
Prior art date
Application number
KR1020180160347A
Other languages
English (en)
Other versions
KR102126896B1 (ko
Inventor
신동하
이제만
김강호
Original Assignee
상명대학교산학협력단
한국전자통신연구원
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 상명대학교산학협력단, 한국전자통신연구원 filed Critical 상명대학교산학협력단
Priority to US16/659,761 priority Critical patent/US10963323B2/en
Priority to CN201911011909.6A priority patent/CN111104119A/zh
Publication of KR20200047254A publication Critical patent/KR20200047254A/ko
Application granted granted Critical
Publication of KR102126896B1 publication Critical patent/KR102126896B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/466Transaction processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

개시된 MPI 프로그램 변환 방법:은 분산 처리를 수행하는 컴퓨터 시스템의 MPI 병렬 프로그램에서 한 컴퓨터에서 다른 컴퓨터가 생성한 데이터를 메모리를 통해 직접 액세스할 수 있도록 MPI 함수를 파싱 하고, 해당 MPI 함수에 대응하여 네트워크를 통해 네트워크 함수와 메모리를 직접 액세스하는 버스라인을 통해 버스라인 함수를 생성한다.

Description

메모리 중심 컴퓨터를 위한 MPI 프로그램 변환 방법 및 장치{Method and apparatus for transformation of MPI programs for Memory Centric Computers}
본 개시는 메모리 중심 컴퓨터를 위한 MPI 프로그램 변환 방법 및 장치에 관한 것이다.
분산 메모리 구조의 고성능 컴퓨터(HPC: High Performance Computer) 시스템은 도1에 도시된 바와 같이, 하나의 통신 네트워크(Communication Network) 상에 다수의 유닛 컴퓨터(또는 프로세서, P1~Pn)가 병렬 연결되어 있는 구조를 가진다. 고성능 컴퓨터 시스템에서, 다수의 유닛 컴퓨터로 수행하는 병렬 프로그램 수행 중 어느 하나의 유닛 컴퓨터는 중간 계산 결과를 담은 메시지를 상기 통신 네트워크를 통해 다른 유닛 컴퓨터에게 전송한다. 이러한 기존의 시스템의 각 유닛 컴퓨터는 반도체 저장 장치인 메모리(M1~Mn)와 HDD와 같은 물리적 저장장치인 스토리지(S1~Sn)가 마련되어 있다.
이와 같이 통신 네트워크를 이용한 유닛 컴퓨터 간 메시지 전송 방식은 느리기 때문에 병렬 프로그램의 성능 향상에 한계가 있다. 이는 통신 네트워크가 가지는 근원적 한계성에 기인한다.
모범적인 실시 예는 기존 고성능 컴퓨터에서 수행되게 개발된 MPI 병렬 프로그램을 메모리 중심 컴퓨터에서는 더 효율적으로 수행되게 자동으로 변환하는 방법 및 장치를 제공한다.
모범적인 실시 예에 따른 변환 방법은
병렬 처리를 수행하는 컴퓨터 시스템에서, MPI(Message Passing Interface) 병렬 프로그램을 수행할 때 어느 한 컴퓨터에서 생성한 데이터를 다른 컴퓨터가 직접 액세스할 수 있도록 MPI 함수를 파싱 (parsing) 하고, 해당 MPI 함수를 다른 컴퓨터와 기본적인 통신을 위한 네트워크 함수로 변환하고 버스 라인을 통해 메모리를 직접 액세스할 수 있는 버스라인 커맨드를 생성한다.
이러한 모범적인 실시 예는, MPI 병렬 프로그램을 자동으로 변환하기 위하여 다음과 같은 새로운 형의 구조체 및 함수를 제시한다. 또한 이를 이용한 MPI 함수별 변환 방법도 제시한다.
1) MC_MESSAGE 형(type)
2) 도우미 함수
3) 주요 MPI 함수별 변환
모범적 실시 예에 따른 MPI 프로그램 변환 방법:은
분산 처리를 수행하는 다수의 컴퓨터가 병렬 연결되어 있는 고성능 컴퓨터 시스템용 MPI (Message Passing Interface) 병렬 프로그램의 소스 코드를 로딩하는 단계;
상기 소스 코드를 파싱 (parsing)하여 MPI 함수 명령문을 추출하는 단계;
상기 MPI 함수 명령문을 이용하여 해당 MPI 함수를 네트워크를 통해 다른 컴퓨터와 통신을 행하는 네트워크 함수 명령문과 다수의 컴퓨터가 공유하는 메모리를 버스라인을 통해 직접 액세스하는 버스라인 함수 명령문을 생성하는 단계; 그리고
상기 네트워크 함수 명령문과 버스 라인 함수 명령문을 포함하는 변환 소스코드를 저장하는 단계; 를 포함할 수 있다.
모범적 실시 예에 따른 MPI 프로그램 변환 방법에서, 상기 네트워크 함수 명령문은 절대 주소 정보를 저장하는 절대 주소 전달자를 포함할 수 있다.
모범적 실시 예에 따른 MPI 프로그램 변환 방법에서, 상기 절대 주소 전달자는 상기 메모리에 대한 절대 주소 정보를 포함하는 구조체(객체)에 의해 생성될 수 있다.
모범적 실시 예에 따른 MPI 프로그램 변환 방법에서, 상기 MPI 함수는 MPI_Send, MPI_Recv, MPI_Bcast, MPI_Reduce, MPI_Scatter, MPI_Gather 중 적어도 어느 하나를 포함할 수 있다.
모범적 실시 예에 따른 MPI 프로그램 변환 방법에서, 상기 MPI_Send 함수를 포함하는 명령문은 절대 주소 정보를 저장하는 절대 주소 전달자를 파라미터로 포함하며, 상기 MPI_Send 함수 명령문 실행 후, 타겟 컴퓨터로부터의 응답을 대기할 수 있다.
모범적 실시 예에 따른 MPI 프로그램 변환 방법에서, 상기 MPI_Recv 함수를 포함하는 명령문은 절대 주소 정보를 저장하는 절대 주소 전달자를 파라미터로 포함하며, 상기 MPI_Recv 함수 명령문 실행 후, MPI_Send 함수 명령어를 실행한 소스 컴퓨터에게 응답 신호를 보낼 수 있다.
모범적 실시 예에 따른 MPI 프로그램 변환 방법에서,
상기 MPI_Bcast 함수를 포함하는 명령문:은
해당 프로세스가 루트인 경우, 다른 모든 프로세스에 절대 주소 정보를 전달하는 MPI_Bcast 함수를 실행한 후 다른 모든 프로세스로부터의 응답을 대기하고, 또는
해당 프로세스가 루트가 아닌 경우, MPI_Bcast 함수를 실행한 후 루트 프로세스로 응답 신호를 전송할 수 있다.
모범적 실시 예에 따른 MPI 프로그램 변환 방법에서,
상기 MPI_Reduce 함수를 포함하는 명령문:은
해당 프로세스가 루트인 경우, 다른 모든 프로세스의 절대 주소 정보를 전달받아 오퍼레이터(operator) 계산을 수행하는 MPI_Reduce 함수를 실행하고, 또는
해당 프로세스가 루트가 아닌 경우, 해당 프로세스의 절대 주소 정보를 루트 프로세스에 전달하는 MPI_Reduce 함수를 실행할 수 있다.
모범적 실시 예에 따른 MPI 프로그램 변환 방법에서,
상기 MPI_Scatter 함수를 포함하는 명령문:은
해당 프로세스가 루트인 경우, 다른 모든 프로세스의 절대 주소 정보의 배열을 전달하는 MPI_Scatter 함수를 실행하고, 또는
해당 프로세스가 루트가 아닌 경우, 해당 프로세스의 절대 주소 정보에 루트가 전송한 메시지를 저장하는 MPI_Scatter 함수를 실행할 수 있다.
모범적 실시 예에 따른 MPI 프로그램 변환 방법에서,
상기 MPI_Gather 함수를 포함하는 명령문:은
해당 프로세스가 루트인 경우, 다른 프로세스의 절대 주소 정보를 해당 프로세스의 절대 주소에 배열로 저장하는 MPI_Gather 함수를 실행한 후 모든 프로세서의 절대 주소 정보를 배열로서 저장하고, 또는
해당 프로세스가 루트가 아닌 경우, 해당 프로세스의 절대 주소 정보를 전달하는 MPI_Gather 함수를 실행할 수 있다.
모범적 실시 예에 따라 다수의 컴퓨터가 병렬 연결되어 분산 처리를 수행하는 컴퓨터 시스템용 MPI 병렬 프로그램의 소스 코드를 변환하는 장치;는,
소스 코드와 변환 소스 코드를 저장하는 저장 매체; 그리고
상기 소스 코드를 파싱하여 MPI 함수 명령문을 추출하고, 추출된 MPI 함수 명령문을 이용하여 해당 MPI 함수를 네트워크를 통해 다른 컴퓨터와 통신을 행하는 네트워크 함수 명령문과 다수의 컴퓨터가 공유하는 메모리를 버스라인을 통해 직접 액세스하는 버스라인 함수 명령문을 생성하고, 그리고 상기 네트워크 함수 명령문과 버스라인 함수 명령문을 포함하는 변환 소스 코드를 상기 저장 매체에 저장하는 프로세싱 장치;를 포함할 수 있다.
도1은 분산 메모리 구조의 컴퓨터 시스템의 구성을 예시한다.
도2은 메모리 중심 구조의 컴퓨터 시스템의 구성을 예시한다.
도3은 모범적인 실시 예에 따른 함수 변환 과정을 개념적으로 보여주는 흐름도이다.
도4은 본 발명의 모범적인 실시 예에 따라, MPI 함수 중의 하나인 MPI_Send 의 변환 과정을 보인다.
도5는 본 발명의 모범적인 실시 예에 따라, MPI 함수 중의 하나인 MPI_Recv 의 변환 과정을 보인다.
도6은 본 발명의 모범적인 실시 예에 따라, MPI 함수 중의 하나인 MPI_Bcast 의 변환 과정을 보인다.
도7은 본 발명의 모범적인 실시 예에 따라, MPI 함수 중의 하나인 MPI_Reduce 의 변환 과정을 보인다.
도8은 본 발명의 모범적인 실시 예에 따라, MPI 함수 중의 하나인 MPI_Scatter 의 변환 과정을 보인다.
도9는 본 발명의 모범적인 실시 예에 따라, MPI 함수 중의 하나인 MPI_Gather 의 변환 과정을 보인다.
이하 첨부된 도면을 참조하면 본 발명의 모범적 실시 예에 따른 MPI 프로그램 변환 방법을 설명한다.
메모리 중심 컴퓨터(MC: Memory Centric Computer) 시스템은 도2에 도시된 바와 같이 다수의 유닛 컴퓨터(P1~Pn)를 매우 빠른 공유 메모리(Shared Memory, Mshared)에 직접 연결하는 구조를 가진 시스템으로서, 컴퓨터간 메시지를 전송하기 위하여 느린 통신 네트워크를 사용하지 않고 빠른 공유 메모리를 직접 액세스한다.
지금까지 개발된 많은 병렬 프로그램은 MPI(Message Passing Interface)라는 표준 라이브러리 함수를 사용하여 작성되어 있는데, 이 MPI 병렬 프로그램은 새로 개발되는 메모리 중심 컴퓨터 구조가 나오더라도 느린 통신 네트워크를 사용하므로 비 효율적으로 수행될 수 밖에 없다.
도2에 도시된 바와 같은 메모리 중심 컴퓨터는 기존의 메모리 분산형 컴퓨터와는 달리 공유 메모리(Mshared)를 전체 유닛 컴퓨터가 공유하는 형태를 가지며, 기존에 사용하던 HDD 등과 같은 물리적인 저장장치를 사용하지 않고, 반도체 저장장치인 메모리(Mshared)만을 사용하게 된다. 이러한 메모리 중심의 컴퓨터 시스템은 포화상태에 이른 CPU 개발에 비해 여전히 급격한 처리 속도 및 용량 향상이 이루어지는 반도체 메모리의 도래에 힘을 받고 있다.
모범적 실시 예는 분산 처리를 수행하는 CPU 중심의 고성능 컴퓨터 시스템의 MPI 병렬 프로그램에서 어는 한 컴퓨터가 생성한 데이터를 다른 컴퓨터가 메모리를 통해 직접 액세스할 수 있도록 소스코드 내의 MPI 함수를 파싱 (Parsing) 하고, 해당 MPI 함수를 다른 컴퓨터와 기본적인 통신을 위한 네트워크 함수로 변환하고, 다른 컴퓨터의 연산 결과를 저장하는 메모리를 버스 라인을 통해 직접 액세스하는 버스라인 커맨드를 생성한다.
위에서 언급된 MPI (Message Passing Interface) 는 병렬 프로그래밍을 위한 표준 호환 라이브러리로서, 현재 C, C++, Fortran 등의 프로그래밍 언어를 지원한다. 이러한 MPI는 HPC(High performance computing) 시스템에서 가장 많이 사용되는 병렬 프로그래밍 도구로서 학계 및 산업체 기관으로 구성되는 MPI 포럼(Forum)이 주관하고 있다.
도3에 도시된 바와 같이, 모범적 실시 예에 따른 프로그램 변환 방법:은
소스 코드를 로딩하는 단계;
소스 코드를 파싱하여 변환 대상 MPI 함수 명령문을 추출하는 단계;
상기 명령문에서 함수의 파라미터를 추출하는 단계;
다른 컴퓨터와의 메모리 정보 전달을 위한 절대 주소 전달자를 정의하고 생성하는 단계;
추출된 MPI 함수를 이용하여 네트워크를 통한 유닛 컴퓨터간 기본적 통신을 위한 네트워크 커맨드(하나 또는 복수의 명령어)로 변환하고 버스라인을 통해 메모리를 직접 액세스하는 버스라인 커맨드(하나 또는 복수의 명령어)를 생성하는 단계; 그리고
상기 과정에서 변환된 명령문을 포함하는 변환 코드를 저장하는 단계;를 포함한다.
본 실시 예의 설명에서 언급되는 MPI는 병렬 처리를 위한 대표적 라이브러리의 한 예로이며, 그러나 본 발명은 이러한 특정 라이브러리에 국한되지 않음을 물론이다.
모범적인 실시 예는 다른 컴퓨터의 연산 결과가 저장된 메모리의 절대 주소를 해당 컴퓨터로부터 네트워크 함수를 통해 전달받고 상기 절대 주소를 전달 받은 컴퓨터는 버스라인 함수를 통해 메모리 상의 절대 주소를 직접 액세스하도록 한다.
이를 위하여 본 발명의 모범적인 실시 예는, 절대 주소 저장 및 전달을 위한 구조체 (Structure)와 이와 관련한 도우미 함수 (Helper Functions)를 정의 또는 생성한다.
여기에서 구조체의 생성은 메모리의 절대 위치를 전달하기 위한 것으로 독립된 하나 또는 복수의 변수, 특히 포인터 변수로 대체 가능함은 물론이다.
I. 절대 주소 전달자 (Absolute address transporter)
기존 고성능 컴퓨터 시스템에서 수행되는 MPI 병렬 프로그램을 메모리 중심 컴퓨터에서 더 효율적으로 수행되게 자동 변환하기 위해서, 모범적 실시 예는 아래와 같은, 새로운 구조체(structure), 예를 들어 "MC_MESSAGE" 를 정의한다.
이 구조체의 멤버에는, 송신할 메시지의 절대 주소(absolute address)를 저장하는 절대 주소 변수와 절대 주소 변수의 크기를 저장하는 크기 변수가 포함된다. 아래와 같이 정의되는 구조체 MC_MESSAGE 는 고정 크기 바이트(size-1) 메시지를 표현하는 것으로 이 구조체는 주소 정보와 주소 정보의 크기, 예를 들어 절대 주소를 저장하는 'addr', 그리고 크기(길이)를 저장하는 'size' 를 포함할 수 있다.
Figure pat00001
II. 도우미 함수 (Helper Functions)
MPI 병렬 프로그램을 메모리 중심 컴퓨터 시스템에서 더 효율적으로 수행되게 자동 변환하기 위해서, 모범적 실시 예는 아래와 같은 도우미 함수들을 정의 또는 생성한다. 이 함수들 역시 모범적 실시 예에서 수행하는 MPI 함수 변환에 이용된다.
A. 도우미 함수 1:
현재 프로세스(process)의 가상 주소를 절대 주소로 변환하는 함수가 필요할 수 있다. 이를 위해 본 실시 예에서 도우미 함수 1을 아래와 같이 정의한다.
MC_Address(addr)
함수 MC_Address 는 현재 프로세스의 가상 주소 "addr"을 절대 주소로 변환하여 리턴값으로 절대주소를 반환할 수 있다.
B. 도우미 함수 2
절대 주소의 데이터를 현재 프로세스의 가상 주소로 복사가 필요할 수 있다. 이를 위해 본 실시 예에서 도우미 함수 2를 아래와 같이 정의한다.
MC_Memcpy(to, from, size)
함수 “MC_Memcpy” 는 파라미터 "from"으로 전달되는 절대 주소로부터 "size" 의 크기를 가지는 데이터를 현재 프로세스의 가상 주소 파라미터 "to" 로 복사한다.
C. 도우미 함수 3
특정 랭크의 유닛 컴퓨터와의 통신을 위해서 해당 유닛 컴퓨터에 신호를 보내는 함수가 필요할 수 있다. 이를 위하여 본 실시 예에서 도우미 함수 3을 아래와 같이 정의한다.
MC_Post(rank)
함수 MC_Post는 주어진 랭크(rank, 유닛 또는 프로세스 번호)를 가지는 유닛 컴퓨터(프로세스)에게 응답 신호를 보낸다. 이 함수는 해당 유닛 컴퓨터와의 통신 가능을 판단하기 위해 사용될 수 있다.
D. 도우미 함수 4
특정 유닛 컴퓨터와의 통신을 위해서 해당 유닛 컴퓨터에 신호를 보낸 후 그 응답을 기다리는 함수가 필요할 수 있다. 이를 위하여 본 실시 예에서 도우미 함수 4를 아래와 같이 정의한다.
MC_Pend(rank)
함수 MC_Pend는 해당 랭크(rank)를 가지는 유닛 컴퓨터가 보내는 응답 신호를 기다린다.
E. 도우미 함수 5
특정 유닛 컴퓨터는 같은 커뮤니케이션 네트워크(communication network) 상 또는 프로세스 그룹(communicator, comm.) 내의 모든 프로세스에게 신호를 보내기 위한 함수가 필요할 수 있다. 이를 위하여 본 실시 예에서 도우미 함수 5를 아래와 같이 정의한다.
MC_Post_all(comm)
함수 MC_Post_all 은 주어진 프로세스 그룹(comm)을 구성하는 모든 랭크(현 랭크 제외)에게 신호를 보낸다.
F. 도우미 함수 6
특정 유닛 컴퓨터는 같은 커뮤니케이션 네트워크(communication network) 상 또는 프로세스 그룹(communicator, comm.) 내의 프로세스로부터의 신호를 받아 들이기 위한 함수가 필요할 수 있다. 이를 위하여 본 실시 예에서 도우미 함수 6을 아래와 같이 정의한다.
MC_Pend_all(comm)
함수 MC_Pend_all 은 주어진 프로세스 그룹(comm)을 구성하는 모든 랭크(현 랭크 제외)가 보내는 신호를 기다린다.
G. 도우미 함수 7
각 MPI 리듀스 오퍼레이터(reduce operator) 에 대응하는 함수가 필요할 수 있으며, 본 실시 예는 이를 위하여 도우미 함수 7을 아래와 같이 정의한다.
MC_Op(op)
함수 MC_Op는 MPI_MAX, MPI_MIN, MPI_SUM 등의 MPI 리듀스 오레이터에 대응되게 작성된다.
이하, 모범적 실시 예에 따라, 기존 CPU 중심의 고성능 컴퓨터 시스템의 MPI 병렬 프로그램에서 주요 MPI 함수를 변환하는 방법을 설명한다.
III. MPI 주요 함수 설명
아래는 주요 6개 MPI 함수의 의미는 다음과 같다.
MPI_Send(buffer, count, datatype, dest, tag, comm) :
MPI_Send는 "buffer", "count", "datatype", "dest", "tag", "comm" 등의 파라미터를 가진다.
이러한 함수에 따르면, 현재 프로세스는 메모리 주소(initial address)인 "buffer"에서 (count*datatype) 바이트의 메시지를, 랭크(rank)가 "dest"인 목표 프로세스(destination process))로 전송한다. 이때 메시지 구분을 위한 정보인 태그(tag)를 추가할 수 있다. 목표 프로세스의 랭크 "dest"는 해당 프로세스 그룹(comm.)에 소속된 프로세스의 랭크를 나타낸다. 만약 이 MPI 함수 수행 중 오류가 발생하면 오류 코드가 반환한다.
MPI_Recv(buffer, count, datatype, source, tag, comm, status)
MPI_Recv 함수는 "buffer", "count", "datatype", "source", "tag", "comm", "status" 등의 파라미터를 가진다. 이러한 MPI_Recv 함수가 실행되는 현재 프로세스는 랭크가 "source"인 프로세스가 전송한 메시지를 받아서, 메모리 주소인 "message"에서 (count*datatype) 바이트의 주소에 저장한다. 이때 받는 메시지 구분을 위한 정보인 tag를 사용할 수 있다. "source"는 프로세스 그룹 "comm."에 소속된 프로세스에 해당하는 랭크를 나타낸다. 만약 이 MPI 함수가 수행 중 오류가 발생하면 오류 코드가 반환된다.
MPI_Bcast(buffer, count, datatype, root, comm)
MPI_Bcast 함수는, root 프로세스와 non-root 프로세스에 대해 다르게 작동한다. 현재 프로세스가 해당 프로세스 그룹(comm)에서 "root" 인 경우, 해당 프로세스 그룹 “comm”에 소속된 root를 제외한 모든 프로세스에게, 메모리 주소인 “buffer”로부터 (count*datatype) 바이트의 메시지를 전송한다. 그리고, 현재 프로세스가 root가 아니면 “root” 프로세스가 전송한 메시지를 받아서, 메모리 주소인 “message” 로부터 (count*datatype) 바이트의 주소에 저장한다. 만약 이 MPI 함수가 수행 중 오류가 발생하면 오류 코드가 반환된다.
MPI_Reduce(send_buffer, recv_buffer, count, datatype, operator, root, comm)
현재 프로세스가 “root”이면 프로세스 그룹 “comm.”에 소속된 모든 프로세스가 송신하는 메시지들을 받아서 operator(예: MPI_MAX, MPI_MIN, MPI_SUM 등) 계산을 한 후 그 결과를 “recv_buffer”에 저장한다. 현재 프로세스가 “root”가 아니면 메모리 주소인 “send_buffer”로부터 (count*datatype) 바이트의 메시지를 “root”에게 전달한다. 만약에 MPI 함수 수행 중 오류가 발생하면 오류 코드가 반환된다.
MPI_Scatter(send_buffer, send_count, send_datatype, recv_buffer,recv_count, recv_datatype, root, comm)
현재 프로세스가 “root”이면 프로세스 그룹 “comm.”에 소속된 “root”를 제외한 모든 프로세스에게, 메모리 주소인 “send_buffer”로부터 (send_count*send_datatype) 바이트의 메시지를 전송한다. 현재 프로세스가 “root”가 아니면 “root”가 전송한 메시지를 받아서, 메모리 주소인 “recv_buffer”에서 (recv_count*recv_datatype) 바이트의 주소에 저장한다. 만약 이 MPI 함수 수행 중 오류가 발생하면 오류 코드가 반환된다.
MPI_Gather(send_buffer, send_count, send_datatype, recv_buffer,recv_count, recv_datatype, root, comm)
현재 프로세스가 “root”이면 프로세스 그룹 “comm.”에 소속된 모든 프로세스가 송신하는 메시지들을 받아서 “recv_buffer”로부터 (recv_count*recv_datatype) 바이트의 주소에 배열로 저장한다. 현재 프로세스가 “root”가 아니면 메모리 주소인 “send_buffer”에서 (send_count*send_datatype) 바이트의 메시지를 “root”에게 전달한다. 만약 이 MPI 함수 수행 중 오류가 발생하면 오류 코드가 반환된다.
IV.MPI주요함수의파싱(parsing)
본 발명에서의 MPI 프로그램 변환 방법은 앞에서 설명한 기존 주요 6개 MPI 함수를 변환하며, 이러한 변환에는 컴파일러 기술인 파싱(Parsing) 및 심볼 수행(Symbolic Execution) 기술을 사용한다.
MPI 함수를 분석에 있어서, 심볼 수행을 통해, MPI 프로그램 내 각 MPI 함수 호출이 수행될 조건을 함수 MPI_Comm_rank 함수의 호출의 rank(=MPI 논리적 프로세스 번호) 인수(argument)를 분석하여 현 프로세스의 랭크(rank) 값으로 표현 (예: rank==0 혹은 rank>0 등)하고, 위 정보와 각 MPI 함수 호출의 인수에 주어진 랭크(rank) 정보를 사용하여 각 MPI 함수의 호출자가 sender인지 혹은 receiver인지 파악한다.
Figure pat00002
본 발명에 따른 MPI 함수 변환 (MPI 함수 호출 변환)은, MPI 프로그램 내의 각 MPI 함수 호출에 대하여 멀티 바이트(size-m) 메시지에서 고정 크기 바이트 (size-1) 메시지로 소스 레벨에서 변환하고, 이때 앞에서 분석한 각 MPI 함수 호출의 sender 및 receiver 정보를 사용하여 조건적으로 변환한다.
V. MPI 주요함수의변환
이하에서는 전술한 6개의 주요 MPI 함수의 변환방법의 다양한 실시 예를 설명한다.
각 MPI 함수의 변환 방법은 도4 내지 도9에 도시된 플로우 챠트와 같다.
도4 내지 도9에 도시된 각 플로우 챠트는 각 MPI 함수가 변환되었을 때 변환된 프로그램의 수행의 흐름을 보인다. 변환 과정에는 소스 코드의 파싱에 의해 MPI 함수와 이 함수의 파라미터(parameters)가 추출되며, 이들을 이용한 생성된 다수의 커맨드 라인에 의한 변환 코드가 생성된다.
<MPI_Send 함수 변환 예>
도4은 본 발명의 모범적인 실시 예에 따라, MPI 함수 중의 하나인 MPI_Send 의 변환(치환) 과정을 보인다.
Figure pat00003
위에서와 같이, 1열의 커맨드 라인을 가지는 원형의 입력 코드는 본 발명의 방법에 의해 시순차적 다수 열, 본 실시예에서는 5열의 커맨드 라인이 순차적으로 생성된다.
<MPI_Recv 함수 변환 예>
도5는 본 발명의 모범적인 실시 예에 따라, MPI 함수 중의 하나인 MPI_Recv 의 변환 과정을 보인다.
Figure pat00004
위의 예문에 나타낸 바와 같이, 본 발명에 따르면 MPI_Recv 함수의 2번째 파라미터는 상수 "1" 로 전달되고 있다. MPI_Recv 함수는 결과적으로 1 바이트의 mc_buffer를 수신한다. 그 다음의 MC_Memcpy 함수는 상기 mc_buffer의 주소 및 크기 정보를 이용해 메모리 상의 데이터를 "buffer"에 저장하게 된다.
<MPI_Bcast 함수 변환>
도6는 본 발명의 모범적인 실시 예에 따라, MPI 함수 중의 하나인 MPI_Bcast 의 변환 과정을 보인다.
Figure pat00005
<MPI_Reduce 함수 변환>
도7는 본 발명의 모범적인 실시 예에 따라, MPI 함수 중의 하나인 MPI_Reduce 의 변환 과정을 보인다.
Figure pat00006
<MPI_Scatter 함수 변환>
도8는 본 발명의 모범적인 실시 예에 따라, MPI 함수 중의 하나인 MPI_Scatter 의 변환 과정을 보인다.
Figure pat00007
<MPI_Gather 함수 변환>
도9은 본 발명의 모범적인 실시 예에 따라, MPI 함수 중의 하나인 MPI_Gather 의 변환 과정을 보인다.
Figure pat00008
위의 실시 예들을 통해 기존의 분산 메모리 구조의 HPC에 적용되던 MPI 프로그램을 메모리 중심 구조의 HPC 에 그대로 적용 가능한 MPI 프로그램 변환 방법 및 장치가 제시되었다. 결과적으로 본 발명에 따르면, 분산 메모리 구조의 HPC용으로 개발되어 있는 수 많은 MPI 프로그램을 큰 수정이 없이 메모리 중심 구조의 HPC에 거의 그대로 사용 가능하게 되는 크나 큰 경제적 이점을 가져 올 수 있다.
이러한 본 발명이, 지금까지, 본원 다양한 모범적 실시 예가 설명되고 첨부된 도면에 도시되었다. 그러나, 이러한 실시 예는 단지 다양한 실시 예들의 일부임이 이해되어야 할 것이다. 다양한 다른 변형이 본 기술분야에서 통상의 지식을 가진 자에게 일어날 수 있기 때문이다.

Claims (18)

  1. 분산 처리를 수행하는 다수의 컴퓨터가 병렬 연결되어 있는 고성능 컴퓨터 시스템용 MPI (Message Passing Interface) 병렬 프로그램의 소스 코드를 로딩하는 단계;
    상기 소스 코드를 파싱 (parsing)하여 MPI 함수 명령문을 추출하는 단계;
    상기 MPI 함수 명령문을 이용하여 해당 MPI 함수를 네트워크를 통해 다른 컴퓨터와 통신을 행하는 네트워크 함수 명령문과 다수의 컴퓨터가 공유하는 메모리를 버스라인을 통해 직접 액세스하는 버스라인 함수 명령문을 생성하는 단계; 그리고
    상기 네트워크 함수 명령문과 버스 라인 함수 명령문을 포함하는 변화 소스코드를 저장하는 단계; 를 포함하는 메모리 중심 컴퓨터를 위한 MPI 프로그램 변환 방법.
  2. 제1항에 있어서,
    상기 네트워크 함수 명령문은 절대 주소 정보를 저장하는 절대 주소 전달자를 포함하는, 메모리 중심 컴퓨터를 위한 MPI 프로그램 변환 방법.
  3. 제2항에 있어서,
    상기 절대 주소 전달자는 상기 메모리에 대한 절대 주소 정보를 포함하는 구조체(객체)에 의해 생성되는, 메모리 중심 컴퓨터를 위한 MPI 프로그램 변환 방법.
    제1항 내지 제3항 중의 한 항에 있어서,
    상기 MPI 함수에는 MPI_Send, MPI_Recv, MPI_Bcast, MPI_Reduce, MPI_Scatter, MPI_Gather 중 적어도 어느 하나를 포함하는, 메모리 중심 컴퓨터를 위한 MPI 프로그램 변환 방법.
  4. 제3항에 있어서,
    상기 MPI_Send 함수를 포함하는 명령문은 절대 주소 정보를 저장하는 절대 주소 전달자를 파라미터로 포함하며, 상기 MPI_Send 함수 명령문 실행 후, 타겟 컴퓨터로부터의 응답을 대기하는, 메모리 중심 컴퓨터를 위한 MPI 프로그램 변환 방법.
  5. 제3항에 있어서,
    상기 MPI_Recv 함수를 포함하는 명령문은 절대 주소 정보를 저장하는 절대 주소 전달자를 파라미터로 포함하며, 상기 MPI_Recv 함수 명령문 실행 후, MPI_Send 함수 명령어를 실행한 소스 컴퓨터에게 응답 신호를 보내는, 메모리 중심 컴퓨터를 위한 MPI 프로그램 변환 방법.
  6. 제3항에 있어서,
    상기 MPI_Bcast 함수를 포함하는 명령문:은
    해당 프로세스가 루트인 경우, 다른 모든 프로세스에 절대 주소 정보를 전달하는 MPI_Bcast 함수를 실행한 후 다른 모든 프로세스로부터의 응답을 대기하고, 또는
    해당 프로세스가 루트가 아닌 경우, MPI_Bcast 함수를 실행한 후 루트 프로세스로 응답 신호를 전송하는, 메모리 중심 컴퓨터를 위한 MPI 프로그램 변환 방법.
  7. 제3항에 있어서,
    상기 MPI_Reduce 함수를 포함하는 명령문:은
    해당 프로세스가 루트인 경우, 다른 모든 프로세스의 절대 주소 정보를 전달받아 오퍼레이터(operator) 계산을 수행하는 MPI_Reduce 함수를 실행하고, 또는
    해당 프로세스가 루트가 아닌 경우, 해당 프로세스의 절대 주소 정보를 루트 프로세스에 전달하는 MPI_Reduce 함수를 실행하는, 메모리 중심 컴퓨터를 위한 MPI 프로그램 변환 방법.
  8. 제3항에 있어서,
    상기 MPI_Scatter 함수를 포함하는 명령문:은
    해당 프로세스가 루트인 경우, 다른 모든 프로세스의 절대 주소 정보의 배열을 전달하는 MPI_Scatter 함수를 실행하고, 또는
    해당 프로세스가 루트가 아닌 경우, 해당 프로세스의 절대 주소 정보에 루트가 전송한 메시지를 저장하는 MPI_Scatter 함수를 실행하는, 메모리 중심 컴퓨터를 위한 MPI 프로그램 변환 방법.
  9. 제3항에 있어서,
    상기 MPI_Gather 함수를 포함하는 명령문:은
    해당 프로세스가 루트인 경우, 다른 프로세스의 절대 주소 정보를 해당 프로세스의 절대 주소에 배열로 저장하는 MPI_Gather 함수를 실행한 후 모든 프로세서의 절대 주소 정보를 배열로서 저장하고, 또는
    해당 프로세스가 루트가 아닌 경우, 해당 프로세스의 절대 주소 정보를 전달하는 MPI_Gather 함수를 실행하는, 메모리 중심 컴퓨터를 위한 MPI 프로그램 변환 방법.
  10. 다수의 컴퓨터가 병렬 연결되어 분산 처리를 수행하는 컴퓨터 시스템용 MPI 병렬 프로그램의 소스 코드를 변환하는 시스템에 있어서,
    소스 코드와 변환 소스 코드를 저장하는 저장 매체;
    상기 소스 코드를 파싱하여 MPI 함수 명령문을 추출하고, 추출된 MPI 함수 명령문을 이용하여 해당 MPI 함수를 네트워크를 통해 다른 컴퓨터와 통신을 행하는 네트워크 함수 명령문과 다수의 컴퓨터가 공유하는 메모리를 버스라인을 통해 직접 액세스하는 버스라인 함수 명령문을 생성하고, 그리고 상기 네트워크 함수 명령문과 버스라인 함수 명령문을 포함하는 변환 소스 코드를 상기 저장 매체에 저장하는 프로세싱 장치;를 포함하는 메모리 중심 컴퓨터를 위한 MPI 프로그램 변환 시스템.
  11. 제10항에 있어서,
    상기 절대 주소 전달자는 상기 메모리에 대한 절대 주소 정보를 포함하는 구조체(객체)에 의해 생성되는, 메모리 중심 컴퓨터를 위한 MPI 프로그램 변환 장치
  12. 제11항에 있어서,
    상기 네트워크 함수 명령문은 절대 주소 정보를 저장하는 절대 주소 전달자를 포함하는, 메모리 중심 컴퓨터를 위한 MPI 프로그램 변환 장치.
  13. 제12항에 있어서,
    상기 MPI_Send 함수를 포함하는 명령문은 절대 주소 정보를 저장하는 절대 주소 전달자를 파라미터로 포함하며, 상기 MPI_Send 함수 명령문 실행 후, 타겟 컴퓨터로부터의 응답을 대기하는, 메모리 중심 컴퓨터를 위한 MPI 프로그램 변환 장치.
  14. 제12항에 있어서,
    상기 MPI_Recv 함수를 포함하는 명령문은 절대 주소 정보를 저장하는 절대 주소 전달자를 파라미터로 포함하며, 상기 MPI_Recv 함수 명령문 실행 후, MPI_Send 함수 명령어를 실행한 소스 컴퓨터에게 응답 신호를 보내는, 메모리 중심 컴퓨터를 위한 MPI 프로그램 변환 장치.
  15. 제12항에 있어서,
    상기 MPI_Bcast 함수를 포함하는 명령문:은
    해당 프로세스가 루트인 경우, 다른 모든 프로세스에 절대 주소 정보를 전달하는 MPI_Bcast 함수를 실행한 후 다른 모든 프로세스로부터의 응답을 대기하고, 또는
    해당 프로세스가 루트가 아닌 경우, MPI_Bcast 함수를 실행한 후 루트 프로세스로 응답 신호를 전송하는, 메모리 중심 컴퓨터를 위한 MPI 프로그램 변환 장치
  16. 제12항에 있어서,
    상기 MPI_Reduce 함수를 포함하는 명령문:은
    해당 프로세스가 루트인 경우, 다른 모든 프로세스의 절대 주소 정보를 전달받아 오퍼레이터(operator) 계산을 수행하는 MPI_Reduce 함수를 실행하고, 또는
    해당 프로세스가 루트가 아닌 경우, 해당 프로세스의 절대 주소 정보를 루트 프로세스에 전달하는 MPI_Reduce 함수를 실행하는, 메모리 중심 컴퓨터를 위한 MPI 프로그램 변환 장치.
  17. 제12항에 있어서,
    상기 MPI_Scatter 함수를 포함하는 명령문:은
    해당 프로세스가 루트인 경우, 다른 모든 프로세스의 절대 주소 정보의 배열을 전달하는 MPI_Scatter 함수를 실행하고, 또는
    해당 프로세스가 루트가 아닌 경우, 해당 프로세스의 절대 주소 정보에 루트가 전송한 메시지를 저장하는 MPI_Scatter 함수를 실행하는, 메모리 중심 컴퓨터를 위한 MPI 프로그램 변환 장치.
  18. 제12항에 있어서,
    상기 MPI_Gather 함수를 포함하는 명령문:은
    해당 프로세스가 루트인 경우, 다른 프로세스의 절대 주소 정보를 해당 프로세스의 절대 주소에 배열로 저장하는 MPI_Gather 함수를 실행한 후 모든 프로세서의 절대 주소 정보를 배열로서 저장하고, 또는
    해당 프로세스가 루트가 아닌 경우, 해당 프로세스의 절대 주소 정보를 전달하는 MPI_Gather 함수를 실행하는, 메모리 중심 컴퓨터를 위한 MPI 프로그램 변환 장치.
KR1020180160347A 2018-10-25 2018-12-12 메모리 중심 컴퓨터를 위한 mpi 프로그램 변환 방법 및 장치 KR102126896B1 (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
US16/659,761 US10963323B2 (en) 2018-10-25 2019-10-22 Method and apparatus for transformation of MPI programs for memory centric computers
CN201911011909.6A CN111104119A (zh) 2018-10-25 2019-10-23 用于存储器中心型计算机的mpi程序转换方法及装置

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
KR1020180128371 2018-10-25
KR20180128371 2018-10-25

Publications (2)

Publication Number Publication Date
KR20200047254A true KR20200047254A (ko) 2020-05-07
KR102126896B1 KR102126896B1 (ko) 2020-06-25

Family

ID=70734100

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020180160347A KR102126896B1 (ko) 2018-10-25 2018-12-12 메모리 중심 컴퓨터를 위한 mpi 프로그램 변환 방법 및 장치

Country Status (1)

Country Link
KR (1) KR102126896B1 (ko)

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20080010626A (ko) * 2006-07-27 2008-01-31 고려대학교 산학협력단 에이전트 기반 피투피-메시지 패싱 인터페이스 미들웨어 및그 설계 방법
JP2010134698A (ja) * 2008-12-04 2010-06-17 Hitachi Ltd 情報処理システム
US20100333074A1 (en) * 2009-06-30 2010-12-30 Supalov Alexander V Automatic conversion of MPI source code programs into MPI thread-based programs
KR20140071194A (ko) * 2012-12-03 2014-06-11 삼성전자주식회사 집합 통신 수행 방법 및 이를 이용한 집합 통신 시스템
JP2017224253A (ja) * 2016-06-17 2017-12-21 富士通株式会社 並列処理装置及びメモリキャッシュ制御方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20080010626A (ko) * 2006-07-27 2008-01-31 고려대학교 산학협력단 에이전트 기반 피투피-메시지 패싱 인터페이스 미들웨어 및그 설계 방법
JP2010134698A (ja) * 2008-12-04 2010-06-17 Hitachi Ltd 情報処理システム
US20100333074A1 (en) * 2009-06-30 2010-12-30 Supalov Alexander V Automatic conversion of MPI source code programs into MPI thread-based programs
KR20140071194A (ko) * 2012-12-03 2014-06-11 삼성전자주식회사 집합 통신 수행 방법 및 이를 이용한 집합 통신 시스템
JP2017224253A (ja) * 2016-06-17 2017-12-21 富士通株式会社 並列処理装置及びメモリキャッシュ制御方法

Also Published As

Publication number Publication date
KR102126896B1 (ko) 2020-06-25

Similar Documents

Publication Publication Date Title
CN110096338B (zh) 智能合约执行方法、装置、设备及介质
US8018951B2 (en) Pacing a data transfer operation between compute nodes on a parallel computer
US8325633B2 (en) Remote direct memory access
US7948999B2 (en) Signaling completion of a message transfer from an origin compute node to a target compute node
US9065839B2 (en) Minimally buffered data transfers between nodes in a data communications network
US8478834B2 (en) Low latency, high bandwidth data communications between compute nodes in a parallel computer
US9569399B2 (en) Routing data communications packets in a parallel computer
US7797445B2 (en) Dynamic network link selection for transmitting a message between compute nodes of a parallel computer
US7958274B2 (en) Heuristic status polling
US8565089B2 (en) Performing a scatterv operation on a hierarchical tree network optimized for collective operations
US9882801B2 (en) Providing full point-to-point communications among compute nodes of an operational group in a global combining network of a parallel computer
US20120331243A1 (en) Remote Direct Memory Access (&#39;RDMA&#39;) In A Parallel Computer
US20080022079A1 (en) Executing an allgather operation with an alltoallv operation in a parallel computer
US20120079035A1 (en) Administering Truncated Receive Functions In A Parallel Messaging Interface
US9348661B2 (en) Assigning a unique identifier to a communicator
US20090031001A1 (en) Repeating Direct Memory Access Data Transfer Operations for Compute Nodes in a Parallel Computer
US7966618B2 (en) Controlling data transfers from an origin compute node to a target compute node
CN111045911A (zh) 性能测试方法、性能测试装置、存储介质与电子设备
US20140075418A1 (en) Replacing contiguous breakpoints with control words
US7890597B2 (en) Direct memory access transfer completion notification
US8578068B2 (en) Method of data communications with reduced latency
US10963323B2 (en) Method and apparatus for transformation of MPI programs for memory centric computers
US7889657B2 (en) Signaling completion of a message transfer from an origin compute node to a target compute node
KR102208867B1 (ko) 이종 디바이스 유형들을 위한 피어-투-피어 분산 컴퓨팅 시스템
CN112506676B (zh) 进程间的数据传输方法、计算机设备和存储介质

Legal Events

Date Code Title Description
E701 Decision to grant or registration of patent right