KR102034662B1 - 병렬 연산을 수행하는 장치 및 방법 - Google Patents
병렬 연산을 수행하는 장치 및 방법 Download PDFInfo
- Publication number
- KR102034662B1 KR102034662B1 KR1020170007061A KR20170007061A KR102034662B1 KR 102034662 B1 KR102034662 B1 KR 102034662B1 KR 1020170007061 A KR1020170007061 A KR 1020170007061A KR 20170007061 A KR20170007061 A KR 20170007061A KR 102034662 B1 KR102034662 B1 KR 102034662B1
- Authority
- KR
- South Korea
- Prior art keywords
- parallel
- data
- memory
- main
- computing device
- Prior art date
Links
- 238000000034 method Methods 0.000 title claims abstract description 40
- 230000015654 memory Effects 0.000 claims abstract description 189
- 238000012545 processing Methods 0.000 claims abstract description 64
- 239000011159 matrix material Substances 0.000 claims description 34
- 238000004364 calculation method Methods 0.000 claims description 19
- 239000010979 ruby Substances 0.000 claims description 3
- 229910001750 ruby Inorganic materials 0.000 claims description 3
- 238000006467 substitution reaction Methods 0.000 claims description 2
- 238000010586 diagram Methods 0.000 description 12
- 230000006870 function Effects 0.000 description 6
- 238000004590 computer program Methods 0.000 description 5
- 230000001360 synchronised effect Effects 0.000 description 5
- 238000012546 transfer Methods 0.000 description 5
- 230000005540 biological transmission Effects 0.000 description 4
- 238000004891 communication Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 239000013598 vector Substances 0.000 description 3
- 238000003491 array Methods 0.000 description 2
- 238000009795 derivation Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 229940050561 matrix product Drugs 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 230000015556 catabolic process Effects 0.000 description 1
- 238000007405 data analysis Methods 0.000 description 1
- 238000007418 data mining Methods 0.000 description 1
- 238000006731 degradation reaction Methods 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 230000014509 gene expression Effects 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 230000001151 other effect Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000007619 statistical method Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3867—Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
- G06F9/3871—Asynchronous instruction pipeline, e.g. using handshake signals between stages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
본 발명은 병렬 연산을 수행하는 장치 및 방법에 관한 것이다. 본 발명의 제 1 측면에 따르면, 본 발명의 실시예에 따른 병렬 연산을 수행하는 장치는, 메인 메모리에 저장된 데이터를 이용하여 연산을 수행하는 메인 연산 처리부, 병렬 메모리에 저장된 데이터를 이용하여 연산을 처리하는 병렬 연산 처리부, 및 연산이 요청되면, 연산에 필요한 데이터가 저장된 위치를 확인하고, 연산을 수행하기 위해 필요한 위치로 연산에 필요한 데이터를 이동시키는 데이터 이동 제어부를 포함한다.
Description
본 발명은 병렬 연산을 수행하는 장치 및 방법에 관한 것이다. 보다 상세하게는, 알(R) 프로그램의 명령어에 따른 연산을 병렬화하여 처리하는 병렬 연산을 수행하는 장치 및 방법에 관한 것이다.
알(R)은 오픈소스(open source) 프로그램으로 통계, 데이터마이닝, 및 그래프를 위한 언어이다. 이러한 R은 빅데이터 분석을 목적으로 주목을 받고 있으며, 수천 개의 패키지들을 이용하여 다양한 기능을 지원하고 있으며, 수시로 업데이트된다. 관련하여 선행기술문헌인 한국등록특허 제10-1665008호에서는 R 언어 기반으로 대용량 데이터에 대해 통계를 분석하는 어플리케이션을 기재하고 있다.
이러한, R 언어는 인터프리터 언어로서, 씨(C) 언어, 포트란(FORTRAN) 언어와 같은 형태의 컴파일 언어와 달리 R 인터프리터에서 프로그램의 명령어를 한 줄씩 읽어서 실행한다. R 인터프리터는 R 언어로 구현된 프로그램의 명령어에 대해 한 줄의 실행을 마치기 전까지 다음 줄을 실행하지 않는 동기적 명령어 수행 기법을 사용한다.
이로 인해, R 언어는 동기적 명령어 수행 기법의 사용에 의해 하나의 중앙처리장치(이하 'CPU'라 칭하기로 함)의 코어를 사용하여 실행된다. 또한, R 언어로 구성된 프로그램을 R 프로그램이라 할 수 있다. 이때, R 프로그램의 명령어를 수행할 때, 처리 속도 향상시키기 위해 R 언어를 사용하는 CPU와 별개의 메모리를 구비한 다른 연산 장치를 이용할 수도 있다.
하지만, 다른 연산 장치를 활용하여 병렬로 연산 처리를 하는 경우, CPU의 메모리와 다른 연산 장치의 메모리 사이에 데이터를 동기화 하기 위해 데이터 전송 동작이 발생한다. 이로 인해, CPU와 연산 장치 사이에서 데이터 전송에 따른 병목 현상이 발생될 수 있으며, 이로 인해 전체 시스템 성능이 저하되는 문제점이 있었다.
따라서 근래에는 이러한 문제점을 해결하기 위한 장치 및 방법이 요구되고 있는 실정이다.
한편, 전술한 배경기술은 발명자가 본 발명의 도출을 위해 보유하고 있었거나, 본 발명의 도출 과정에서 습득한 기술 정보로서, 반드시 본 발명의 출원 전에 일반 공중에게 공개된 공지기술이라 할 수는 없다.
본 발명의 일실시예는 병렬 연산을 수행하는 장치 및 방법을 제시하는 데에 목적이 있다.
본 발명의 일실시예는 프로그램의 명령어를 처리하는 병렬 연산을 수행하는 장치 및 방법을 제시하는 데에 목적이 있다.
본 발명의 일실시예는 병렬 연산에 따른 메모리 간 데이터 이동에 따른 성능 저하가 발생되지 않는 병렬 연산을 수행하는 장치 및 방법을 제시하는 데에 목적이 있다.
상술한 기술적 과제를 달성하기 위한 기술적 수단으로서, 본 발명의 제 1 측면에 따르면, 본 발명의 실시예에 따른 병렬 연산을 수행하는 장치는, 메인 메모리에 저장된 데이터를 이용하여 연산을 수행하는 메인 연산 처리부, 병렬 메모리에 저장된 데이터를 이용하여 연산을 처리하는 병렬 연산 처리부, 및 연산이 요청되면, 상기 연산에 필요한 데이터가 저장된 위치를 확인하고, 상기 연산을 수행하기 위해 필요한 위치로 상기 연산에 필요한 데이터를 이동시키는 데이터 이동 제어부를 포함한다.
본 발명의 제 2 측면에 따르면, 본 발명의 실시예에 따른 병렬 연산을 수행하는 장치는, 메인 메모리에 저장된 데이터를 이용하여 연산을 수행하는 메인 연산 장치, 병렬 메모리에 저장된 데이터를 이용하여 연산을 수행하는 병렬 연산 장치를 포함하고, 상기 메인 연산 장치는 연산이 요청되면, 상기 연산에 필요한 데이터가 저장된 위치를 확인하고, 상기 연산을 수행하기 위해 상기 메인 메모리와 상기 병렬 메모리 중 하나로 상기 연산에 필요한 데이터를 이동시킨다.
본 발명의 제3 측면에 따르면, 본 발명의 실시예에 따른 병렬 연산을 수행하는 방법은, 메인 메모리를 구비한 메인 연산 장치와 병렬 메모리를 구비한 병렬 연산 장치를 포함하고, 병렬 연산을 수행하는 장치에 의해 수행되며, 연산이 요청되면, 상기 연산에 필요한 데이터가 저장된 위치를 확인하는 단계, 상기 연산을 수행하기 위해 필요한 위치로 상기 연산에 필요한 데이터를 이동시켜야 하면, 상기 메인 메모리와 상기 병렬 메모리 사이에서 상기 연산에 필요한 데이터를 이동시키는 단계, 상기 메인 연산 장치와 상기 병렬 연산 장치 중 하나를 통해 상기 연산을 수행하는 단계, 및 상기 연산이 수행되면, 상기 연산을 수행한 장치에 대응하는 메모리로 상기 연산의 수행에 따른 데이터를 저장하는 단계를 포함한다.
전술한 본 발명의 과제 해결 수단 중 어느 하나에 의하면, 프로그램의 명령어를 병렬로 처리할 수 있다.
또한, 본 발명의 과제 해결 수단 중 어느 하나에 의하면, 프로그램을 수행하는 장치들 사이에서 데이터를 보다 효율적인 메모리에 저장하도록 하므로 데이터 전송에 따른 병목 현상을 감소시킬 수 있다.
또한, 본 발명의 과제 해결 수단 중 어느 하나에 의하면, 데이터 전송에 따른 병목 현상을 감소시켜 전체 시스템 성능을 향상시킬 수 있다.
본 발명에서 얻을 수 있는 효과는 이상에서 언급한 효과들로 제한되지 않으며, 언급하지 않은 또 다른 효과들은 아래의 기재로부터 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에게 명확하게 이해될 수 있을 것이다.
도 1은 본 발명의 일실시예에 따른 병렬 연산 시스템을 도시한 도면이다.
도 2는 본 발명의 일실시예에 따른 병렬 연산 시스템을 도시한 블록도이다.
도 3은 본 발명의 일실시예에 따른 병렬 연산 방법을 예시적으로 도시한 도면이다.
도 4는 본 발명의 일실시예에 따른 병렬 연산 시스템의 구현을 설명하기 위한 도면이다.
도 5는 병렬 연산에 따른 데이터의 이동을 예시적으로 도시한 도면이다.
도 6은 본 발명의 일실시예에 따른 병렬 연산에 따른 데이터의 이동을 도시한 도면이다.
도 2는 본 발명의 일실시예에 따른 병렬 연산 시스템을 도시한 블록도이다.
도 3은 본 발명의 일실시예에 따른 병렬 연산 방법을 예시적으로 도시한 도면이다.
도 4는 본 발명의 일실시예에 따른 병렬 연산 시스템의 구현을 설명하기 위한 도면이다.
도 5는 병렬 연산에 따른 데이터의 이동을 예시적으로 도시한 도면이다.
도 6은 본 발명의 일실시예에 따른 병렬 연산에 따른 데이터의 이동을 도시한 도면이다.
아래에서는 첨부한 도면을 참조하여 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자가 용이하게 실시할 수 있도록 본 발명의 실시예를 상세히 설명한다. 그러나 본 발명은 여러 가지 상이한 형태로 구현될 수 있으며 여기에서 설명하는 실시예에 한정되지 않는다. 그리고 도면에서 본 발명을 명확하게 설명하기 위해서 설명과 관계없는 부분은 생략하였으며, 명세서 전체를 통하여 유사한 부분에 대해서는 유사한 도면 부호를 붙였다.
명세서 전체에서, 어떤 부분이 다른 부분과 "연결"되어 있다고 할 때, 이는 "직접적으로 연결"되어 있는 경우뿐 아니라, 그 중간에 다른 소자를 사이에 두고 "전기적으로 연결"되어 있는 경우도 포함한다. 또한 어떤 부분이 어떤 구성요소를 "포함"한다고 할 때, 이는 특별히 반대되는 기재가 없는 한 다른 구성요소를 제외하는 것이 아니라 다른 구성요소를 더 포함할 수 있는 것을 의미한다.
이하 첨부된 도면을 참고하여 본 발명을 상세히 설명하기로 한다.
도 1은 본 발명의 일실시예에 따른 병렬 연산을 수행하는 장치를 도시한 도면이다.
도 1에서 도시된 바와 같이, 장치(100)는 병렬 연산을 수행하는 장치이고, 메인 연산 장치(101)와 병렬 연산 장치(102)를 포함할 수 있다.
메인 연산 장치(101)는 프로그램을 기계어로 해석하여 실행할 수 있으므로, 인터프리터일 수 있다. 여기서, 프로그램은 알(R)언어, 파이썬(Python) 언어, 루비(Ruby) 언어, 및 스킴(Scheme) 언어와 같이 동기적 명령어를 수행하는 프로그램 언어로 구성될 수 있다.
예를 들어, 메인 연산 장치(101)는 R 언어로 구성된 프로그램을 해석하는 R 인터프리터인 경우로 가정하여 설명한다. 이때, 메인 연산 장치(101)는 R 프리미티브와 R 추가 패키지를 포함할 수 있다. 여기서, R 프리미티브는 기본적인 R 프로그램을 실행하는 구성 요소이며, 하나의 중앙처리장치(CPU) 코어만을 사용하는 시퀀셜 프로그램이다. 따라서, 메인 연산 장치(101)는 CPU 내에 포함되거나, CPU를 이용하여 구현될 수도 있다. 한편, R 추가 패키지는 특화된 작업을 수행하기 위한 구성 요소이다.
R 프리미티브는 비엘에이에스(Basic Linear Algebra Subprograms, 이하 'BLAS'라 칭하기로 함) 함수를 호출하여 벡터 연산 및 행렬 연산을 수행할 수 있다. R 프리미티브는 기본적으로 단일 코어를 사용하는 BLAS 구현을 사용하도록 구성되어 있지만, 병렬 BLAS를 호출하도록 구성될 수 있다.
여기서, BLAS는 벡터와 행렬을 다루는 기본적인 연산들을 정의한 규격이다. BLAS 규격에 맞는 함수를 사용하도록 프로그램을 작성할 경우, 컴파일 혹은 실행 시 BLAS 라이브러리를 링크하여 벡터 연산 및 행렬 연산을 수행할 수 있다. BLAS 연산은 일반적으로 병렬화하기 적합하므로 많은 BLAS 라이브러리들이 연산을 병렬로 수행하도록 구현될 수 있다. 대표적으로 예를 들면, 단일 코어 및 멀티코어 CPU에 최적화된 오픈비엘에이에스(OpenBLAS), 인텔 CPU에 최적화된 엠케이엘(MKL), 엔비디아 그래픽처리장치(Nvidia GPU)를 활용할 수 있는 마그마(MAGMA) 등이 있다.
따라서, 메인 연산 장치(101)는 BLAS 규격의 함수를 사용하도록 작성된 프로그램을 이용할 수 있고, 프로그램의 명령어들을 병렬 연산 장치(102)와 함께 병렬로 연산을 처리할 수 있다.
또한, 병렬 연산 장치(102)는 메인 연산 장치(101)가 사용하는 메모리 주소 공간과 별도의 주소 공간을 갖는 메모리를 사용하여 연산을 병렬로 수행하는 연산 장치를 의미한다. 즉, 병렬 연산 장치(102)는 메인 연산 장치(101)와 프로그램의 명령어 실행을 위해 물리적으로 구분된 메모리를 사용하는 장치이다.
예를 들어, 병렬 연산 장치(102)는 고속 직렬 버스 규격인 피씨아이-익스프레스(Peripheral Component Interconnect-Express, 이하 'PCI-e'라 칭하기로 함)를 통해 연결된 그래픽 처리 장치(Graphic Processing Unit, 이하 'GPU'라 칭하기로 함), 필드 프로그래머블 게이트 어레이(Field Programmable Gate Array, 이하 'FPGA'라 칭하기로 함)와 같은 가속기, 네트워크를 통해 연결된 컴퓨터 복수개로 구성된 동종 클러스터, GPU, FPGA와 같은 가속기를 장착한 컴퓨터 복수개로 구성된 이종 클러스터를 모두 포함할 수 있다.
한편, 메인 연산 장치(101)와 병렬 연산 장치(102)는 데이터 교환을 위해 메시지 전달 인터페이스(Message Passing Interface, 이하 'MPI'라 칭하기로 함)를 이용할 수 있다. MPI는 클러스터 환경에서 컴퓨터 간 통신을 위해 사용하는 라이브러리이다. 그러므로, 메인 연산 장치(101)와 병렬 연산 장치(102)와 같이 클러스터를 구성하는 컴퓨터에서 각자 독립적인 메모리 주소 공간을 갖는 프로세스들이 실행되는 분산 메모리 모델에서, MPI 규격에서 정의한 함수를 사용하여 프로세서들 간에 데이터를 주고받을 수 있다.
도 2는 본 발명의 일실시예에 따른 병렬 연산 시스템을 도시한 블록도이다.
도 2에 도시된 바와 같이, 장치(100)는 메인 연산 장치(101)와 병렬 연산 장치(102)를 포함할 수 있다. 여기서, 메인 연산 장치(101)는 전처리부(110), 메인 연산 처리부(120), 메인 메모리(130), 및 데이터 이동 제어부(140)를 포함할 수 있다. 또한, 병렬 연산 장치(102)는 병렬 연산 처리부(150), 및 병렬 메모리(160)를 포함할 수 있다.
전처리부(110)는 입력된 프로그램의 명령어를 전처리할 수 있다. 전처리부(110)는 프로그램 명령어를 스킴(scheme) 리스트 구조로 변환할 수 있다. 따라서, 전처리부(110)는 전처리된 명령어를 메인 연산 처리부(120)로 출력한다.
메인 연산 처리부(120)는 전처리된 명령어를 입력받고, 명령어의 연산자와 피연산자를 확인할 수 있다. 이를 통해, 메인 연산 처리부(120)는 명령어에 대응되는 연산을 수행할 수 있으며, 연산의 수행을 위해 메인 메모리(130)를 이용할 수 있다. 또한, 메인 연산 처리부(120)는 병렬로 처리될 연산을 구분하고, 병렬 연산 처리부(150)로 병렬로 처리될 연산에 대해 처리를 요청할 수 있다.
메인 메모리(130)는 메인 연산 처리부(120)에서 연산의 처리를 위한 데이터를 저장하거나 연산의 처리에 따라 생성된 데이터를 저장할 수 있다.
데이터 이동 제어부(140)는 메인 연산 처리부(120) 또는 병렬 연산 처리부(150)에서 수행되는 연산의 피연산자를 확인할 수 있다. 이후, 데이터 이동 제어부(140)는 피연산자에 해당되는 데이터의 저장 위치를 확인하고, 연산자에 따라 데이터를 필요한 위치로 이동하거나 전송할 수 있다. 즉, 데이터 이동 제어부(140)는 메인 메모리(130)와 병렬 메모리(160) 사이에서 연산에 필요한 데이터가 필요한 위치로 데이터를 이동하거나 전송할 수 있다.
병렬 연산 처리부(150)는 메인 연산 처리부(120)의 메인 메모리(130)와 구분된 별도의 병렬 메모리(160)를 사용하여 연산을 병렬로 수행한다. 그리고, 병렬 연산 처리부(150)는 연산의 수행을 위해 병렬 메모리(160)를 이용할 수 있다.
병렬 메모리(160)는 병렬 연산 처리부(150)에서 연산의 처리를 위한 데이터를 저장하거나 연산의 처리에 따라 생성된 데이터를 저장할 수 있다.
한편, 메인 연산 처리부(120)와 병렬 연산 처리부(150)는 연산 수행 후 연산의 수행에 따른 데이터를 연산을 수행한 연산 처리부에 대응되는 메모리에 그대로 저장한다. 즉, 메인 연산 처리부(120)는 연산의 수행에 따른 데이터를 메인 메모리(130)에 저장하고, 병렬 연산 처리부(150)는 연산의 수행에 따른 데이터를 병렬 메모리(160)에 저장한다.
따라서, 새로운 연산 수행 시 마다, 데이터 이동 제어부(140)는 메인 연산 처리부(120) 또는 병렬 연산 처리부(150)에서 필요로 하는 데이터를 이동시키도록 제어할 필요가 있다. 만약, 메인 연산 처리부(120)에서 연산 수행을 하는 경우, 필요로 하는 데이터가 병렬 메모리(160) 내에 저장되어 있을 수 있다. 이때, 데이터 이동 제어부(140)는 병렬 메모리(160)로부터 메인 메모리(130)로 연산에 필요한 데이터를 이동시킬 수 있다. 이와 반대로, 병렬 연산 처리부(150)에서 연산 수행을 하는 경우, 필요로 하는 데이터가 메인 메모리(130) 내에 저장되어 있을 수 있다. 이때, 데이터 이동 제어부(140)는 메인 메모리(130)로부터 병렬 메모리(160)로 연산에 필요한 데이터를 이동시킬 수 있다.
이와 같이, 데이터 이동 제어부(140)는 데이터의 위치 확인 또는 이동을 위해 심볼 테이블을 이용할 수도 있다. 예를 들어, 심볼 테이블은 메인 메모리(130)와 병렬 메모리(160) 내에 저장된 데이터의 저장 위치에 관련된 정보를 저장하는 테이블이다. 그러므로, 데이터 이동 제어부(140)는 메인 연산 처리부(120) 또는 병렬 연산 처리부(150)에서 연산의 처리가 수행되면, 연산 처리에 따라 생성되거나 변경된 데이터에 대한 정보를 심볼 테이블에 업데이트할 수 있다.
상술한 바와 같이, 메인 연산 처리부(120)는 연산 처리된 데이터를 메인 메모리(130)에 저장하고, 병렬 연산 처리부(150)는 연산 처리된 데이터를 병렬 메모리(160)에 저장한다. 이와 같이, 메인 연산 처리부(120)와 병렬 연산 처리부(150)는 비동기적으로 연산의 처리를 수행하며, 연산 결과 얻어지는 데이터를 연산을 수행한 장치에 대응되는 메모리에 저장하고, 필요한 경우에만 데이터를 이동시킨다. 이로서, 메인 연산 장치(101)와 병렬 연산 장치(102)는 병렬 연산에 따른 불필요한 데이터의 이동을 감소시켜 성능을 향상시킬 수 있다.
도 3은 본 발명의 일실시예에 따른 병렬 연산 방법을 예시적으로 도시한 도면이다.
도 3에 도시된 바와 같이, 장치(100)는 연산에 필요한 데이터가 저장된 위치를 확인한다(S210). 이때, 데이터는 메인 메모리(130) 또는 병렬 메모리(160) 중 하나에 위치할 수 있다. 예를 들어, 장치(100)는 데이터의 저장 위치를 심볼 테이블 등을 통해 관리할 수 있으며, 심볼 테이블에 기초하여 데이터의 저장 위치를 확인할 수도 있다.
장치(100)는 연산에 필요한 데이터를 이동하여야 하는지 확인한다(S220). S220단계의 확인결과, 데이터의 이동이 필요하면, 장치(100)는 S230단계로 진행한다.
장치(100)는 연산 처리를 위한 메모리로 데이터를 이동한다(S230). 예를 들어, 장치(100)가 개인 컴퓨터(PC)를 통해 구현될 수 있다. 이때, 메인 연산 장치(101)는 CPU를 이용하여 구현되고, 병렬 연산 장치(102)는 GPU를 이용하여 구현될 수 있다. 이때, CPU에서 연산이 처리되어야 하는 경우, GPU의 메모리 내에 연산을 위해 필요한 데이터가 존재하면, 장치(100)는 GPU의 메모리로부터 CPU의 메모리로 데이터를 이동시킬 수 있다. 이와 달리, GPU에서 연산이 처리되어야 하는 경우, CPU의 메모리 내에 연산을 위해 필요한 데이터가 존재하면, 장치(100)는 CPU의 메모리로부터 GPU의 메모리로 데이터를 이동시킬 수 있다.
S230단계의 확인결과, 데이터의 이동이 필요하지 않으면, 장치(100)는 S240단계로 진행한다.
장치(100)는 연산 처리를 한다(S240). 예를 들어, 장치(100)는 메인 연산 장치(101) 또는 병렬 연산 장치(102) 중 하나를 통해 병렬로 연산을 수행할 수 있다. 이때, 수행되는 연산은 행렬 연산, 대입 연산, 및 일반 연산과 같은 연산을 모두 포함할 수 있다.
장치(100)는 연산 처리 결과를 연산을 수행한 장치에 대응되는 메모리로 연산의 수행에 따른 데이터를 저장할 수 있다(S250). 즉, 메인 연산 장치(101)는 연산의 수행에 따른 데이터를 메인 메모리(130)에 저장할 수 있고, 병렬 연산 장치(102)는 연산의 수행에 따른 데이터를 병렬 메모리(160)에 저장할 수 있다. 이와 같이, 메인 연산 장치(101)와 병렬 연산 장치(102)는 비동기적으로 연산 처리를 수행하므로, 연산 결과 얻어지는 데이터를 필요한 경우에만 이동시킬 수 있다.
한편, 장치(100)는 새로운 연산을 수행할 때마다, 심볼 테이블을 업데이트할 수 있다. 이를 통해, 장치(100)는 연산에 필요한 데이터의 위치를 심볼 테이블을 이용하여 확인할 수도 있다.
장치(100)는 연산 처리가 모두 완료되어 동작을 종료해야 하면(S260단계), 동작을 종료한다.
하지만, S260단계에서 동작을 종료하지 않으면, 장치(100)는 S210단계로 진행한다.
도 4는 본 발명의 일실시예에 따른 병렬 연산 시스템의 구현을 설명하기 위한 도면이다.
도 4에 도시된 바와 같이, 장치(100)는 메인 연산 장치(101)와 병렬 연산 장치(102)를 포함할 수 있다. 여기서, 메인 연산 장치(101)는 전처리부(110), 메인 연산 처리부(120), 메인 메모리(130), 및 데이터 이동 제어부(140)를 포함할 수 있다. 또한, 병렬 연산 장치(102)는 병렬 연산 처리부(150)와 병렬 메모리(160)를 포함할 수 있다.
여기서, 장치(100)의 상세 구성에 대한 설명은 도 2를 참조한다.
하기에서는, 메인 연산 처리부(120)에 대응하는 메인 메모리(130)와 병렬 연산 처리부(150)에 대응하는 병렬 메모리(160)를 기준으로 병렬로 연산을 처리하는 동작을 살펴보기로 한다.
메인 연산 처리부(120)는 메인 메모리(130)를 이용하여 연산을 수행할 수 있다. 그러므로, 메인 메모리(130)는 연산 수행에 관련된 데이터를 저장할 수 있으며, 연산의 수행에 따라 생성된 데이터를 저장할 수도 있다.
병렬 연산 처리부(150)는 병렬 메모리(160)를 이용하여 연산을 수행할 수 있다. 그러므로, 병렬 메모리(130)는 연산 수행에 관련된 데이터를 저장할 수 있으며, 연산의 수행에 따라 생성된 데이터를 저장할 수도 있다. 이를 위해, 병렬 메모리(160)는 병렬 메모리(160)에서 필요로 하는 데이터 저장을 위한 주소 공간을 갖는다. 그러므로, 메인 메모리(130)는 메인 연산 처리부의 전용 메모리일 수 있고, 또는 병렬 메모리(160)는 병렬 연산 처리부(150)의 전용 메모리일 수 있다.
예를 들어, 메인 메모리(130)에 데이터(A)가 저장되고, 병렬 메모리(160)에 데이터(B)가 저장될 수 있다.
이때, 데이터 이동 제어부(140)는 연산 처리에 따라 메인 연산 처리부(120)에서 데이터(B)를 필요로 하면, 병렬 메모리(160)로부터 메인 메모리(130)로 데이터(B)를 이동시킬 수 있다. 이와 반대로, 데이터 이동 제어부(140)는 연산 처리에 따라 병렬 연산 처리부(150)에서 데이터(A)를 필요로 하면, 메인 메모리(130)로부터 병렬 메모리(160)로 데이터(A)를 이동시킬 수 있다.
한편, 메인 메모리(130)는 내부에 심볼 테이블(1211)이 저장될 수 있다. 심볼 테이블(1211)은 데이터 이동 제어부(140)에 의해 관리될 수 있으며, 데이터의 저장 위치에 관련된 정보를 저장할 수 있다. 한편, 심볼 테이블(1211)은 연산을 수행한 이후, 데이터(또는 데이터를 저장한 변수)의 위치를 업데이트하여 현재 데이터의 위치(메인 메모리(130) 또는 병렬 메모리(160))를 관리하도록 할 수 있다.
설명의 편의를 위하여, 심볼 테이블(1211)에서 데이터(A)는 메인 메모리(130) 내에 존재(O)하고, 데이터(B)는 메인 메모리(130) 내에 존재하지 않으며(X), 병렬 메모리(160) 내에 존재하는 것을 나타내고 있다.
한편, 프로그램의 명령어에 의한 중간 단계 표현의 리스트의 앞부분의 명령은 행렬 연산, 대입 연산, 일반 연산으로 구분될 수 있다. 여기서, 일반 연산은 행렬 연산과 대입 연산을 제외한 나머지의 대부분의 모든 연산을 포함할 수 있다.
예를 들어, 행렬 연산은 병렬 연산 장치(102)(즉, 병렬 연산 처리부(150))를 이용할 수 있다. 이를 위해, 메인 연산 처리부(120)는 행렬 연산을 수행하기 위한 명령을 병렬 연산 처리부(150)로 전달할 수 있다. 예를 들어, 일반 연산은 메인 연산 처리부(120)에서 메인 메모리(130)를 이용하여 수행할 수 있으며, 데이터 이동 제어부(140)에 의해 병렬 메모리(160) 내에 저장된 필요 데이터를 메인 메모리(130)로 옮길 수 있다. 한편, 메인 메모리(130)에서 수행한 일반 연산의 결과도 메인 메모리(130)에 저장할 수 있다. 또 예를 들어, 대입 연산은 메인 연산 처리부(120)와 병렬 연산 처리부(150)에서 모두 수행할 수 있으며, A <- B의 대입 연산의 경우, 좌변인 A에 해당하는 데이터의 저장 공간을 우변의 B의 데이터가 현재 존재하는 메모리 주소 공간에 할당할 수 있다.
이를 통해, 메인 연산 처리부(120) 또는 병렬 연산 처리부(150)는 연관된 메모리들 사이의 불필요한 데이터 이동을 최소화시켜, 메인 연산 장치(101)와 병렬 연산 장치(102) 사이의 PCI-e 버스 또는 네트워크를 통한 통신 오버헤드를 줄일 수 있다. 도 4에 도시된 구조에 근거하여 메모리들 사이의 불필요한 데이터의 전송을 감소하는 동작을 하기의 도 5와 도 6을 참조하여 설명하기로 한다.
도 5는 병렬 연산에 따른 데이터의 이동을 예시적으로 도시한 도면이다.
도 5에 도시된 바와 같이, 메인 메모리(130)와 병렬 메모리(160) 사이의 데이터 이동은 우측에 도시된 프로그램에 기초하여 수행될 수 있다. 이때, 메인 연산 장치(101)는 병렬 연산 장치의 활용이 가능한 BLAS 라이브러리를 이용하여 프로그램을 병렬로 수행할 수 있다. 이러한, BLAS 라이브러리를 이용하면, 프로그램 사용에 따른 프로그래머로부터의 프로그램 수정을 필요로 하지 않는다.
또한, 메인 메모리(130)와 병렬 메모리(160) 상에 도시된 실선 화살표는 데이터의 이동을 나타내고, 점선 화살표는 데이터를 사용한 연산을 나타낸다.
예를 들어, 프로그램은 행렬 A와 B를 생성한 후, 행렬 곱을 구한 후에 A에 저장하는 명령을 2회 연속으로 수행하는 것을 의미한다.
메인 연산 처리부(120)는 R 프로그램의 첫 번째 행과 두 번째 행에서 변수 'A'와 변수 'B'에 각각 행렬을 대입(301)한다.
메인 연산 처리부(120)는 행렬이 대입된 데이터(A)와 데이터(B)의 행렬 연산, 일예로, 'A%*%B'로 나타낼 수 있는 행렬 곱셈 연산(302, 303)을 별도의 메모리 주소 공간을 갖는 병렬 연산 처리부(150)에서 수행하도록 요청할 수 있다.
(a)에서, 프로그램의 세 번째 행에 있는 행렬 곱셈 연산(302)을 병렬 연산 처리부(150)에서 수행할 수 있다. 이때, 데이터 이동 제어부(140)는 메인 메모리(130)로부터 데이터(A)와 데이터(B)를 각각 병렬 메모리(160)로 이동시킨다(310).
이후, 병렬 연산 처리부(150)는 병렬 메모리(160)에 저장된 데이터(A)와 데이터(B)에 기초하여 행렬 곱셈 연산(A%*%B)(302)을 하고, 곱셈 연산 결과(A')를 병렬 메모리(160)에 저장(A <- A%*%B)한다(320).
곱셈 연산 결과(A')는 메인 메모리(130)와 동기화되기 위해 메인 메모리(130) 내 데이터(A)에 저장되도록 데이터 이동 제어부(140)에 의해 이동될 수 있다(330).
(b)에서, 프로그램의 네 번째 행에 있는 행렬 곱셈 연산(A%*%B)(303)을 병렬 연산 처리부(150)에서 수행하기 위해, 데이터 이동 제어부(140)는 메인 메모리(130)로부터 데이터(B)와 행렬 곱셈 결과 값으로 교체된 데이터(A)를 각각 병렬 메모리(160)로 이동시킨다(340).
이후, 병렬 연산 처리부(150)는 병렬 메모리(160)에 저장된 데이터(A)와 데이터(B)에 기초하여 행렬 곱셈 연산(A%*%B)(303)을 하고, 곱셈 연산 결과(A')를 병렬 메모리(160)에 다시 저장(A <- A%*%B)한다(350).
곱셈 연산 결과(A')는 메인 메모리(130)와의 동기화를 위해 메인 메모리(130) 내 데이터(A)에 저장되도록 데이터 이동 제어부(140)에 의해 이동될 수 있다(360).
두 번의 행렬 곱셈 연산이 완료되면, 메인 연산 처리부(120)는 프로그램의 5번째 행에 있는 출력 명령(Print[A(1)(1)])(304)을 메인 메모리(130)를 이용하여 수행한다(370).
도 5에 도시된 바와 같이, 장치(100)에서 동기적인 명령어 수행 기법을 이용하면, 메인 메모리(130)와 병렬 메모리(160) 사이의 동기화로 인해 도시된 화살표(330, 340)의 동작을 수행해야 한다. 즉, 병렬 메모리(160) 내 데이터를 메인 메모리(130)로 이동시켜야 한다. 하지만, 병렬 연산 처리부(150)에서 연산 처리 결과를 병렬 연산 처리부(150)에서 재사용(A의 경우)하거나, 필요한 데이터가 병렬 연산 장치에 이미 존재(B의 경우)하는 경우, 데이터의 이동이 불필요하다. 따라서, 장치(100)에서 도 5에 도시된 방식을 사용하면, 불필요한 데이터의 전송(예를 들면, 화살표(330, 340))이 발생할 수 있다.
도 6은 본 발명의 일실시예에 따른 병렬 연산에 따른 데이터의 이동을 도시한 도면이다.
도 6에 도시된 바와 같이, 메인 메모리(130)와 병렬 메모리(160) 사이의 데이터 이동은 우측에 도시된 프로그램에 기초하여 수행될 수 있다. 여기서도, 메인 연산 장치(101)는 병렬 연산 장치의 활용이 가능한 BLAS 라이브러리를 이용하여 프로그램을 병렬로 수행할 수 있다. 또한, 메인 메모리(130)와 병렬 메모리(160) 상에 도시된 실선 화살표는 데이터의 이동을 나타내고, 점선 화살표는 데이터를 사용한 연산을 나타낸다.
예를 들어, 프로그램은 행렬 A와 B를 생성한 후, 행렬 곱을 구한 후에 A에 저장하는 명령을 2회 연속으로 수행하는 것을 의미한다.
메인 연산 처리부(120)는 프로그램의 첫 번째 행과 두 번째 행에서 변수 'A'와 변수 'B'에 각각 행렬을 대입(401)한다.
메인 연산 처리부(120)는 행렬이 대입된 데이터(A)와 데이터(B)의 행렬 연산, 일예, 'A%*%B'로 나타낼 수 있는 행렬 곱셈 연산(402, 403)을 별도의 메모리 주소 공간을 갖는 병렬 연산 처리부(150)에서 수행하도록 요청할 수 있다.
(a)에서, 프로그램의 세 번째 행에 있는 행렬 곱셈 연산(402)을 병렬 연산 처리부(150)에서 수행할 수 있다. 이때, 메인 연산 처리부(120)는 메인 메모리(130)로부터 데이터(A)와 데이터(B)를 각각 병렬 메모리(160)로 이동시킨다(410).
이후, 병렬 연산 처리부(150)는 병렬 메모리(160)에 저장된 데이터(A)와 데이터(B)에 기초하여 행렬 곱셈 연산(A%*%B)(402)을 하고, 곱셈 연산 결과(A')를 병렬 메모리(160)에 저장(A <- A%*%B)한다(420).
여기서, 곱셈 연산 결과(A')는 메인 메모리(130) 내에 저장되도록 이동되지 않는다. 이로 인해, 프로그램의 네 번째 행에 있는 행렬 곱셈 연산(A%*%B)(403)을 수행하기 위해 메인 메모리(130)로부터 병렬 메모리로 데이터가 이동될 필요가 없다.
(b)에서, 프로그램의 네 번째 행에 있는 행렬 곱셈 연산(A%*%B)(403)을 병렬 연산 처리부(150)에서 수행한다. 이때, 병렬 연산 처리부(150)는 병렬 메모리(160)에 저장된 데이터(A')와 데이터(B)에 기초하여 행렬 곱셈 연산(A%*%B)(403)을 하고, 곱셈 연산 결과(A')를 병렬 메모리(160)에 다시 저장(A <- A%*%B)한다(430).
(c)에서, 두 번의 행렬 곱셈 연산이 완료되면, 데이터 이동 제어부(140)는 병렬 메모리(160)로부터 메인 메모리(130)로 데이터를 이동시킨다(440). 그리고, 메인 연산 처리부(120)는 프로그램의 5번째 행에 있는 출력 명령(Print[A(1)(1)])(404)을 메인 메모리(130)를 이용하여 수행한다(450).
본 발명은 도 6에서 도시한 바와 같이, 장치(100)는 비동기적 명령어 수행기법을 이용한다. 그리하면, 장치(100)는 메인 메모리(130)와 병렬 메모리(160) 사이의 동기화로 인해 도 5에서 도시된 화살표(330, 340)의 동작을 수행할 필요가 없다. 즉, 장치(100)는 병렬 메모리(160) 내 데이터를 메인 메모리(130)로 연산 후 바로 이동시키지 않고, 메인 연산 처리부(120) 또는 병렬 연산 처리부(150)에서 데이터를 필요로 하는 시점에만 데이터를 이동시킬 수 있다.
이와 같이, 장치(100)는 메인 연산 처리부(120)와 병렬 연산 처리부(150)에서 명령어를 비동기적으로 수행할 수 있도록 한다. 즉, 메인 메모리(130)로 데이터를 이동하는 작업을 최대한 늦추어 수행하고, 필요로 하는 경우에만 수행하도록 한다.
즉, 도 6에서 도시한 바와 같이 병렬 연산 처리부(150)는 연산 처리 결과를 즉시 메인 메모리(130)로 옮기지 않고, 연산 처리 시 필요한 데이터를 병렬 메모리(160)에서 우선적으로 찾아 사용한다. 실제, 메인 메모리(130)로 데이터의 이동은 출력 명령(404)의 실행 시점과 같이 메인 메모리(130) 내에서 데이터를 필요로 하는 경우에 데이터를 이동시켜, 비동기적으로 데이터가 이동되는 것을 확인할 수 있다.
그러므로, 메모리들(메인 메모리(130)와 병렬 메모리(160)) 사이에서 전송되는 불필요한 데이터의 전송을 최소화하여 장치(100)의 성능을 향상시킬 수 있다.
본 발명의 장치(100)는 도 6에서와 같이 비동기적으로 명령어를 수행하기 때문에, 도 5에서와 같이 동기적으로 명령어를 수행하는 방식에 비하여 불필요한 데이터의 이동을 감소시켜 성능을 향상시킬 수 있다.
이와 같이, 비동기적으로 명령어를 수행하는 비동기적 명령어 수행은 인터프리터에서 명령어 한 개를 처리할 때, 해당 명령어의 수행 결과를 메인 메모리 또는 병렬 메모리 중 보다 효율적인 곳에 저장할 수 있도록 메모리 저장 위치에 자유도를 주는 것을 의미한다. 이와 같은 자유도는 연산 수행에 따른 데이터의 전체 이동량을 감소시켜, PCI-e 또는 네트워크를 통한 통신 오버헤드를 감소시킬 수 있다.
한편, 장치(100)는 프로그래머의 수정없이 기존의 프로그램을 병렬 연산 장치를 사용하여 가속시키는 프로그래밍 언어의 실행환경을 구축할 수 있다. 따라서, 제안된 프로그램 언어의 실행 환경은 비동기적인 명령어 실행을 가능하게 하여 병렬 연산 장치의 메모리를 활용할 때의 불필요한 데이터의 이동을 최소화시킬 수 있고, 자주 병목이 발생되는 행렬 연산을 중심으로 병렬화하면, 전체 프로그램의 성능을 더욱 향상시킬 수 있다.
본 발명에서 제안된 장치(100)는 프로그램을 이용할 수 있는 통계 분석, 빅데이터 처리, 및 유전체 분석과 같은 다양한 분야에서 활용될 수 있다.
본 실시예에서 사용되는 '~부'라는 용어는 소프트웨어 또는 FPGA(field programmable gate array) 또는 ASIC 와 같은 하드웨어 구성요소를 의미하며, '~부'는 어떤 역할들을 수행한다. 그렇지만 '~부'는 소프트웨어 또는 하드웨어에 한정되는 의미는 아니다. '~부'는 어드레싱할 수 있는 저장 매체에 있도록 구성될 수도 있고 하나 또는 그 이상의 프로세서들을 재생시키도록 구성될 수도 있다. 따라서, 일 예로서 '~부'는 소프트웨어 구성요소들, 객체지향 소프트웨어 구성요소들, 클래스 구성요소들 및 태스크 구성요소들과 같은 구성요소들과, 프로세스들, 함수들, 속성들, 프로시저들, 서브루틴들, 프로그램특허 코드의 세그먼트들, 드라이버들, 펌웨어, 마이크로코드, 회로, 데이터, 데이터베이스, 데이터 구조들, 테이블들, 어레이들, 및 변수들을 포함한다.
구성요소들과 '~부'들 안에서 제공되는 기능은 더 작은 수의 구성요소들 및 '~부'들로 결합되거나 추가적인 구성요소들과 '~부'들로부터 분리될 수 있다.
뿐만 아니라, 구성요소들 및 '~부'들은 디바이스 또는 보안 멀티미디어카드 내의 하나 또는 그 이상의 CPU 들을 재생시키도록 구현될 수도 있다.
또한 본 발명의 일실시예에 따르는 병렬 연산 방법은 컴퓨터에 의해 실행 가능한 명령어를 포함하는 컴퓨터 프로그램(또는 컴퓨터 프로그램 제품)으로 구현될 수도 있다. 컴퓨터 프로그램은 프로세서에 의해 처리되는 프로그래밍 가능한 기계 명령어를 포함하고, 고레벨 프로그래밍 언어(High-level Programming Language), 객체 지향 프로그래밍 언어(Object-oriented Programming Language), 어셈블리 언어 또는 기계 언어 등으로 구현될 수 있으며, 특히, R 언어, Python 언어, Ruby 언어, Scheme 언어 등으로 구현될 수 있다. 또한 컴퓨터 프로그램은 유형의 컴퓨터 판독가능 기록매체(예를 들어, 메모리, 하드디스크, 자기/광학 매체 또는 SSD(Solid-State Drive) 등)에 기록될 수 있다.
따라서 본 발명의 일실시예에 따르는 병렬 연산 방법은 상술한 바와 같은 컴퓨터 프로그램이 컴퓨팅 장치에 의해 실행됨으로써 구현될 수 있다. 컴퓨팅 장치는 프로세서와, 메모리와, 저장 장치와, 메모리 및 고속 확장포트에 접속하고 있는 고속 인터페이스와, 저속 버스와 저장 장치에 접속하고 있는 저속 인터페이스 중 적어도 일부를 포함할 수 있다. 이러한 성분들 각각은 다양한 버스를 이용하여 서로 접속되어 있으며, 공통 머더보드에 탑재되거나 다른 적절한 방식으로 장착될 수 있다.
여기서 프로세서는 컴퓨팅 장치 내에서 명령어를 처리할 수 있는데, 이런 명령어로는, 예컨대 고속 인터페이스에 접속된 디스플레이처럼 외부 입력, 출력 장치상에 GUI(Graphic User Interface)를 제공하기 위한 그래픽 정보를 표시하기 위해 메모리나 저장 장치에 저장된 명령어를 들 수 있다. 다른 실시예로서, 다수의 프로세서 및(또는) 다수의 버스가 적절히 다수의 메모리 및 메모리 형태와 함께 이용될 수 있다. 또한 프로세서는 독립적인 다수의 아날로그 및(또는) 디지털 프로세서를 포함하는 칩들이 이루는 칩셋으로 구현될 수 있다.
또한 메모리는 컴퓨팅 장치 내에서 정보를 저장한다. 일례로, 메모리는 휘발성 메모리 유닛 또는 그들의 집합으로 구성될 수 있다. 다른 예로, 메모리는 비휘발성 메모리 유닛 또는 그들의 집합으로 구성될 수 있다. 또한 메모리는 예컨대, 자기 혹은 광 디스크와 같이 다른 형태의 컴퓨터 판독 가능한 매체일 수도 있다.
그리고 저장장치는 컴퓨팅 장치에게 대용량의 저장공간을 제공할 수 있다. 저장 장치는 컴퓨터 판독 가능한 매체이거나 이런 매체를 포함하는 구성일 수 있으며, 예를 들어 SAN(Storage Area Network) 내의 장치들이나 다른 구성도 포함할 수 있고, 플로피 디스크 장치, 하드 디스크 장치, 광 디스크 장치, 혹은 테이프 장치, 플래시 메모리, 그와 유사한 다른 반도체 메모리 장치 혹은 장치 어레이일 수 있다.
전술한 본 발명의 설명은 예시를 위한 것이며, 본 발명이 속하는 기술분야의 통상의 지식을 가진 자는 본 발명의 기술적 사상이나 필수적인 특징을 변경하지 않고서 다른 구체적인 형태로 쉽게 변형이 가능하다는 것을 이해할 수 있을 것이다. 그러므로 이상에서 기술한 실시예들은 모든 면에서 예시적인 것이며 한정적이 아닌 것으로 이해해야만 한다. 예를 들어, 단일형으로 설명되어 있는 각 구성 요소는 분산되어 실시될 수도 있으며, 마찬가지로 분산된 것으로 설명되어 있는 구성 요소들도 결합된 형태로 실시될 수 있다.
본 발명의 범위는 상기 상세한 설명보다는 후술하는 특허청구범위에 의하여 나타내어지며, 특허청구범위의 의미 및 범위 그리고 그 균등 개념으로부터 도출되는 모든 변경 또는 변형된 형태가 본 발명의 범위에 포함되는 것으로 해석되어야 한다.
100: 병렬 연산을 수행하는 장치 101: 메인 연산 장치
102: 병렬 연산 장치 110: 전처리부
120: 메인 연산 처리부 130: 메인 연산 메모리
140: 데이터 이동 제어부 150: 병렬 연산 처리부
160: 병렬 연산 메모리
102: 병렬 연산 장치 110: 전처리부
120: 메인 연산 처리부 130: 메인 연산 메모리
140: 데이터 이동 제어부 150: 병렬 연산 처리부
160: 병렬 연산 메모리
Claims (14)
- 병렬 연산을 수행하는 장치에 있어서,
메인 메모리에 대응되고, 상기 메인 메모리에 저장된 데이터를 이용하여 연산을 수행하는 메인 연산 처리부;
병렬 메모리에 대응되고, 상기 병렬 메모리에 저장된 데이터를 이용하여 연산을 처리하는 병렬 연산 처리부; 및
상기 메인 연산 처리부와 상기 병렬 연산 처리부에서 연산이 요청되면, 상기 연산의 피연산자를 확인하고, 상기 연산에 필요한 피연산자에 해당되는 데이터가 저장된 위치를 확인하고, 상기 연산을 수행하기 위해 필요한 위치로 상기 연산에 필요한 피연산자에 해당되는 데이터를 상기 메인 메모리와 상기 병렬 메모리 사이에서 이동시키는 데이터 이동 제어부를 포함하고,
상기 메인 연산 처리부와 상기 병렬 연산 처리부 각각은 연산을 수행한 후, 연산의 수행에 따른 데이터를 대응되는 메모리에 저장하고,
상기 메인 연산 처리부는 일반 연산과 대입 연산 중 하나의 연산을 수행하고, 상기 병렬 연산 처리부는 행렬 연산과 상기 대입 연산 중 하나의 연산을 수행하되, 상기 일반 연산은 상기 대입 연산과 상기 행렬 연산을 제외한 나머지 연산을 포함하는 장치. - 제 1 항에 있어서,
상기 데이터 이동 제어부는,
상기 연산이 수행된 후에는 데이터의 위치를 업데이트하는 장치. - 제 2 항에 있어서,
상기 데이터 이동 제어부는,
상기 메인 연산 처리부와 상기 병렬 연산 처리부에서 연산이 수행되면, 심볼 테이블에 상기 연산이 수행된 데이터의 위치를 업데이트하는 장치. - 제 3 항에 있어서,
상기 메인 연산 처리부와 상기 병렬 연산 처리부는,
연산을 수행하기 위해 필요한 피연산자에 해당하는 데이터의 저장 위치를 상기 심볼 테이블에 기초하여 확인하는 장치. - 제 1 항에 있어서,
상기 메인 연산 처리부는,
상기 연산을 수행한 데이터를 상기 메인 메모리에 저장하고,
상기 병렬 연산 처리부는,
상기 연산을 수행한 데이터를 상기 병렬 메모리에 저장하는 장치. - 제 1 항에 있어서,
상기 연산은 알(R) 언어, 파이썬(Python) 언어, 루비(Ruby) 언어, 및 스킴(Scheme) 언어 중 적어도 하나로 구성된 프로그램의 명령어의 일부인 장치. - 병렬 연산을 수행하는 장치에 있어서,
메인 메모리에 대응되고, 상기 메인 메모리에 저장된 데이터를 이용하여 연산을 수행하는 메인 연산 장치; 및
병렬 메모리에 대응되고, 상기 병렬 메모리에 저장된 데이터를 이용하여 연산을 수행하는 병렬 연산 장치를 포함하고,
상기 메인 연산 장치는 연산이 요청되면, 상기 연산의 피연산자를 확인하고, 상기 연산에 필요한 피연산자에 해당되는 데이터가 저장된 위치를 확인하고, 상기 연산을 수행하기 위해 상기 메인 메모리와 상기 병렬 메모리 중 하나로 상기 연산에 필요한 피연산자에 해당되는 데이터를 상기 메인 메모리와 상기 병렬 메모리 사이에서 이동시키고,
상기 메인 연산 장치와 상기 병렬 연산 장치 각각은 연산을 수행한 후, 연산의 수행에 따른 데이터를 대응되는 메모리에 저장하고,
상기 메인 연산 장치는 일반 연산과 대입 연산 중 하나의 연산을 수행하고, 상기 병렬 연산 장치는 행렬 연산과 상기 대입 연산 중 하나의 연산을 수행하되, 상기 일반 연산은 상기 대입 연산과 상기 행렬 연산을 제외한 나머지 연산을 포함하는 장치. - 제 7 항에 있어서,
상기 메인 연산 장치는,
상기 메인 메모리와 상기 병렬 메모리에 저장된 데이터에 기초하여 연산이 수행되면, 상기 연산 수행에 따른 데이터의 저장 위치를 심볼 테이블에 업데이트하는 장치. - 제 7 항에 있어서,
상기 메인 연산 장치는,
상기 메인 연산 장치에서 연산이 수행되면, 상기 연산 수행에 따른 데이터를 상기 메인 메모리에 저장하고,
상기 병렬 연산 장치는,
상기 병렬 연산 장치에서 연산이 수행되면, 상기 연산의 수행에 따른 데이터를 상기 병렬 메모리에 저장하는 장치. - 병렬 연산을 수행하는 방법에 있어서
메인 메모리를 구비한 메인 연산 장치와 병렬 메모리를 구비한 병렬 연산 장치를 포함하고, 병렬 연산을 수행하는 장치에 의해 수행되며,
연산이 요청되면, 상기 메인 연산 장치와 상기 병렬 연산 장치에서 수행되는 연산의 피연산자를 확인하고, 상기 연산에 필요한 피연산자에 해당되는 데이터가 저장된 위치를 확인하는 단계;
상기 연산을 수행하기 위해 필요한 위치로 상기 연산에 필요한 데이터를 이동시켜야 하면, 상기 메인 메모리와 상기 병렬 메모리 사이에서 상기 연산에 필요한 피연산자에 해당되는 데이터를 이동시키는 단계;
상기 메인 연산 장치와 상기 병렬 연산 장치 중 하나를 통해 상기 연산을 수행하는 단계; 및
상기 연산이 수행되면, 상기 연산을 수행한 장치에 대응하는 메모리로 상기 연산의 수행에 따른 데이터를 저장하는 단계를 포함하고,
상기 연산을 수행하는 단계는,
상기 메인 연산 장치에서 일반 연산과 대입 연산 중 하나의 연산을 수행하는 단계; 및
상기 병렬 연산 장치에서 행렬 연산과 상기 대입 연산 중 하나의 연산을 수행하는 단계를 포함하고,
상기 일반 연산은 상기 대입 연산과 상기 행렬 연산을 제외한 나머지 연산을 포함하는 방법. - 제 10 항에 있어서,
상기 연산을 수행하는 단계 이후에,
상기 연산을 수행한 데이터의 위치를 업데이트하는 단계를 더 포함하는 방법. - 제 11 항에 있어서,
상기 데이터의 위치를 업데이트하는 단계는,
상기 연산을 수행한 데이터의 위치를 심볼 테이블에 업데이트하는 단계를 포함하는 방법. - 제 12 항에 있어서,
상기 데이터가 저장된 위치를 확인하는 단계는,
상기 연산을 수행하기 위해 필요한 피연산자에 해당하는 데이터의 저장 위치를 상기 심볼 테이블에 기초하여 확인하는 단계를 포함하는 방법. - 제 10 항에 있어서,
상기 연산의 처리 결과를 저장하는 단계는,
상기 연산이 메인 연산 장치에서 수행되면, 상기 연산의 수행에 따른 데이터를 상기 메인 메모리에 저장하는 단계; 및
상기 연산이 병렬 연산 장치에서 수행되면, 상기 연산의 수행에 따른 데이터를 상기 병렬 메모리에 저장하는 단계를 포함하는 방법.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020160004948 | 2016-01-14 | ||
KR20160004948 | 2016-01-14 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20170085455A KR20170085455A (ko) | 2017-07-24 |
KR102034662B1 true KR102034662B1 (ko) | 2019-11-18 |
Family
ID=59429172
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020170007061A KR102034662B1 (ko) | 2016-01-14 | 2017-01-16 | 병렬 연산을 수행하는 장치 및 방법 |
Country Status (1)
Country | Link |
---|---|
KR (1) | KR102034662B1 (ko) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR102228586B1 (ko) * | 2018-01-19 | 2021-03-16 | 한국전자통신연구원 | Gpu 기반의 적응적 blas 연산 가속화 장치 및 방법 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9489183B2 (en) * | 2010-10-12 | 2016-11-08 | Microsoft Technology Licensing, Llc | Tile communication operator |
-
2017
- 2017-01-16 KR KR1020170007061A patent/KR102034662B1/ko active IP Right Grant
Non-Patent Citations (1)
Title |
---|
Jiangtian Li et al, "Transparent runtime parallelization of the R scripting language", Journal of Parallel and Distributed Computing archive, Volume 71, Issue 2, pp. 157-168(2011.02.) 1부.* |
Also Published As
Publication number | Publication date |
---|---|
KR20170085455A (ko) | 2017-07-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10235398B2 (en) | Processor and data gathering method | |
US11755382B2 (en) | Programming flow for multi-processor system | |
US9134974B2 (en) | Source code separation and generation for heterogeneous central processing unit (CPU) computational devices | |
US9977759B2 (en) | Parallel computing apparatus, compiling apparatus, and parallel processing method for enabling access to data in stack area of thread by another thread | |
US10025533B2 (en) | Logical block addresses used for executing host commands | |
US20190228308A1 (en) | Deep learning accelerator system and methods thereof | |
US11163686B2 (en) | Method and apparatus for accessing tensor data | |
TW201407482A (zh) | 多個應用程式分享的圖形處理單元 | |
JP2014216021A (ja) | バッチスレッド処理のためのプロセッサ、コード生成装置及びバッチスレッド処理方法 | |
JP2023518833A (ja) | ハードウェアアクセラレーションリソースを有効にするためのコンパイラ主導のタイル置換 | |
Sunitha et al. | Performance improvement of CUDA applications by reducing CPU-GPU data transfer overhead | |
US20200210114A1 (en) | Networked shuffle storage | |
KR20220107617A (ko) | 인메모리 프로세싱을 수행하는 병렬 처리 시스템 | |
CN114610394B (zh) | 指令调度的方法、处理电路和电子设备 | |
KR102034662B1 (ko) | 병렬 연산을 수행하는 장치 및 방법 | |
CN114218152B (zh) | 流处理方法、处理电路和电子设备 | |
CN113961506B (zh) | 加速器和电子装置 | |
Nukada et al. | Efficient checkpoint/Restart of CUDA applications | |
US20220318015A1 (en) | Enforcing data placement requirements via address bit swapping | |
Li et al. | Dual buffer rotation four-stage pipeline for CPU–GPU cooperative computing | |
US20130166887A1 (en) | Data processing apparatus and data processing method | |
US20140223419A1 (en) | Compiler, object code generation method, information processing apparatus, and information processing method | |
US20030135535A1 (en) | Transferring data between threads in a multiprocessing computer system | |
Bhimani et al. | Design space exploration of GPU Accelerated cluster systems for optimal data transfer using PCIe bus | |
KR20090107973A (ko) | 리타게팅된 그래픽 프로세서 가속 코드의 범용 프로세서에 의한 실행 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
AMND | Amendment | ||
E601 | Decision to refuse application | ||
AMND | Amendment | ||
X701 | Decision to grant (after re-examination) | ||
GRNT | Written decision to grant |