KR102295677B1 - 연속적인 데이터 병렬처리가 가능한 병렬 처리장치 - Google Patents

연속적인 데이터 병렬처리가 가능한 병렬 처리장치 Download PDF

Info

Publication number
KR102295677B1
KR102295677B1 KR1020190058629A KR20190058629A KR102295677B1 KR 102295677 B1 KR102295677 B1 KR 102295677B1 KR 1020190058629 A KR1020190058629 A KR 1020190058629A KR 20190058629 A KR20190058629 A KR 20190058629A KR 102295677 B1 KR102295677 B1 KR 102295677B1
Authority
KR
South Korea
Prior art keywords
path network
data
output data
parallel processing
delay
Prior art date
Application number
KR1020190058629A
Other languages
English (en)
Other versions
KR20190132295A (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 US17/052,936 priority Critical patent/US11526432B2/en
Priority to PCT/KR2019/005980 priority patent/WO2019221569A1/ko
Publication of KR20190132295A publication Critical patent/KR20190132295A/ko
Priority to KR1020210099377A priority patent/KR102358612B1/ko
Application granted granted Critical
Publication of KR102295677B1 publication Critical patent/KR102295677B1/ko
Priority to US17/987,421 priority patent/US20230071941A1/en

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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0207Addressing or allocation; Relocation with multidimensional access, e.g. row/column, matrix
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/04Generating or distributing clock signals or signals derived directly therefrom
    • G06F1/14Time supervision arrangements, e.g. real time clock
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/25Using a specific main memory architecture
    • G06F2212/254Distributed memory

Abstract

연속적인 데이터 병렬처리가 가능한 병렬 처리장치는 지연처리부로부터 출력되는 복수의 지연 데이터들, 메모리로부터 출력되는 복수의 메모리 출력 데이터들 및 복수의 연산 경로망 제어신호들을 입력받고 복수의 연산 경로망 출력 데이터들을 출력하는 연산 경로망 및 상기 복수의 연산 경로망 출력 데이터들을 지연하여 얻은 상기 복수의 지연 데이터들 출력하는 상기 지연처리부를 포함한다. 상기 복수의 연산 경로망 출력 데이터들 중 각 연산 경로망 출력 데이터는 상기 복수의 지연 데이터들 및 상기 복수의 메모리 출력 데이터들에 대하여 상기 복수의 연산 경로망 제어신호들 중에서 상기 각 연산 경로망 출력 데이터에 대응하는 연산 경로망 제어신호에 대응하는 연산을 수행하여 얻은 값이다.

Description

연속적인 데이터 병렬처리가 가능한 병렬 처리장치{PARALLEL PROCESSING APPARATUS CAPABLE OF CONSECUTIVE PARALLELISM}
이하 설명하는 기술은 병렬 처리 장치에 관한 것이다.
종래기술에 의한 병렬 처리 장치는 주로 복수의 프로세서들이 복수의 쓰레드들(threads)을 처리하는 방식으로 동작하였다. 이러한 병렬 처리 장치는 매우 긴 순차적 연산을 병렬로 수행하는 데 적합하지 않다.
순차적인 연산을 병렬로 수행하는 병렬 처리 장치의 종래기술로서 한국등록특허 제10-0835173호(발명의 명칭: 곱셈 누적 연산을 위한 디지털 신호처리 장치 및 방법)에 개시된 기술이 있다. 개시된 종래 기술은 필터나 고속 푸리에 변환(FFT) 등의 연산을 수행하는데 적합하지만, CPU가 수행할 수 있는 다양한 연산을 연속적으로 수행하기에는 부적합한 측면이 있다.
이하 설명하는 기술은 CPU가 수행하는 다양한 순차적 연산을 병렬로 또한 연속적으로 수행할 수 있는 병렬 처리 장치를 제공하고자 한다.
연속적인 데이터 병렬처리가 가능한 병렬 처리장치는 지연처리부로부터 출력되는 복수의 지연 데이터들, 메모리로부터 출력되는 복수의 메모리 출력 데이터들 및 복수의 연산 경로망 제어신호들을 입력받고 복수의 연산 경로망 출력 데이터들을 출력하는 연산 경로망 및 상기 복수의 연산 경로망 출력 데이터들을 지연하여 얻은 상기 복수의 지연 데이터들 출력하는 상기 지연처리부를 포함한다. 상기 복수의 연산 경로망 출력 데이터들 중 각 연산 경로망 출력 데이터는 상기 복수의 지연 데이터들 및 상기 복수의 메모리 출력 데이터들에 대하여 상기 복수의 연산 경로망 제어신호들 중에서 상기 각 연산 경로망 출력 데이터에 대응하는 연산 경로망 제어신호에 대응하는 연산을 수행하여 얻은 값이다.
이하 설명하는 병렬 처리 장치는 CPU가 수행할 수 있는 다양한 순차적 연산을 병렬로 또한 연속적으로 수행할 수 있으므로, 연산 처리 속도 및 효율을 향상시킬 수 있다는 장점이 있다.
도 1은 병렬 처리 장치의 구성을 도시한 예이다.
도 2는 병렬 처리부의 구성을 도시한 예이다.
도 3은 부분 합산부의 동작을 설명하는 예이다.
도 4는 병렬 처리부의 동작을 설명하는 예이다.
이하 설명하는 기술은 다양-한 변경을 가할 수 있고 여러 가지 실시례를 가질 수 있는 바, 특정 실시례들을 도면에 예시하고 상세하게 설명하고자 한다. 그러나, 이는 이하 설명하는 기술을 특정한 실시 형태에 대해 한정하려는 것이 아니며, 이하 설명하는 기술의 사상 및 기술 범위에 포함되는 모든 변경, 균등물 내지 대체물을 포함하는 것으로 이해되어야 한다.
제1, 제2, A, B 등의 용어는 다양한 구성요소들을 설명하는데 사용될 수 있지만, 해당 구성요소들은 상기 용어들에 의해 한정되지는 않으며, 단지 하나의 구성요소를 다른 구성요소로부터 구별하는 목적으로만 사용된다. 예를 들어, 이하 설명하는 기술의 권리 범위를 벗어나지 않으면서 제1 구성요소는 제2 구성요소로 명명될 수 있고, 유사하게 제2 구성요소도 제1 구성요소로 명명될 수 있다. 및/또는 이라는 용어는 복수의 관련된 기재된 항목들의 조합 또는 복수의 관련된 기재된 항목들 중의 어느 항목을 포함한다.
본 명세서에서 사용되는 용어에서 단수의 표현은 문맥상 명백하게 다르게 해석되지 않는 한 복수의 표현을 포함-하는 것으로 이해되어야 하고, "포함한다" 등의 용어는 설시된 특징, 개수, 단계, 동작, 구성요소, 부분품 또는 이들을 조합한 것이 존재함을 의미하는 것이지, 하나 또는 그 이상의 다른 특징들이나 개수, 단계 동작 구성요소, 부분품 또는 이들을 조합한 것들의 존재 또는 부가 가능성을 배제하지 않는 것으로 이해되어야 한다.
도면에 대한 상세한 설명을 하기에 앞서, 본 명세서에서의 구성부들에 대한 구분은 각 구성부가 담당하는 주기능 별로 구분한 것에 불과함을 명확히 하고자 한다. 즉, 이하에서 설명할 2개 이상의 구성부가 하나의 구성부로 합쳐지거나 또는 하나의 구성부가 보다 세분화된 기능별로 2개 이상으로 분화되어 구비될 수도 있다. 그리고 이하에서 설명할 구성부 각각은 자신이 담당하는 주기능 이외에도 다른 구성부가 담당하는 기능 중 일부 또는 전부의 기능을 추가적으로 수행할 수도 있으며, 구성부 각각이 담당하는 주기능 중 일부 기능이 다른 구성부에 의해 전담되어 수행될 수도 있음은 물론이다.
또, 방법 또는 동작 방법을 수행함에 있어서, 상기 방법을 이루는 각 과정들은 문맥상 명백하게 특정 순서를 기재하지 않은 이상 명기된 순서와 다르게 일어날 수 있다. 즉, 각 과정들은 명기된 순서와 동일하게 일어날 수도 있고 실질적으로 동시에 수행될 수도 있으며 반대의 순서대로 수행될 수도 있다.
도 1은 병렬 처리 장치(100)의 구성을 도시한 예이다.
병렬 처리 장치(100)는 주소 및 설정값 생성부(110), 메모리(120) 및 병렬 처리부(130)를 구비한다. 또한, 도 1에 도시하지 않았지만, 병렬 처리 장치는 DMA(Direct Memory Access), 주 메모리(main memory) 및 입출력 장치를 더 포함할 수 있다.
주소 및 설정값 생성부(110)는 읽기 주소 그룹(RAG) 및 쓰기 주소 그룹(WAG)을 메모리(120)로 전달할 수 있다. 읽기 주소 그룹(RAG)은 복수의 읽기 주소들을 포함하고, 쓰기 주소 그룹(WAG)은 복수의 쓰기 주소들을 포함한다. 주소 및 설정값 생성부(110)는 복수의 읽기 주소 그룹(RAG) 및/또는 쓰기 주소 그룹(WAG)을 저장하는 주소 테이블(111)을 구비할 수 있다.
주소 및 설정값 생성부(110)는 설정값 그룹(CVG)을 병렬 처리부(130)로 전달한다. 설정값 그룹(CVG)은 복수의 주처리 설정값들(CV1, CV2, CV3, CV4) 및 판단처리 설정값(CV5)을 포함한다. 주소 및 설정값 생성부(110)는 복수의 설정값 그룹(CVG)들을 저장하는 설정값 테이블(112)을 구비할 수 있다.
주소 및 설정값 생성부(110)는 판단처리부(135)로부터 전달되는 정보에 대응하는 위치에 저장된 읽기 주소 그룹(RAG), 쓰기 주소 그룹(WAG) 및 설정값 그룹(CVG)을 출력할 수 있다. 또는 주소 및 설정값 생성부(110)는 별도의 제어부로부터 전달되는 정보에 따라 읽기 주소 그룹(RAG), 쓰기 주소 그룹(WAG) 및 설정값 그룹(CVG)을 출력할 수도 있다.
주소 및 설정값 생성부(110)는 판단처리부(135)로부터 전달되는 프로그램 카운터(GPC)에 대응하는 위치에 저장된 읽기 주소 그룹(RAG), 쓰기 주소 그룹(WAG) 및 설정값 그룹(CVG)을 출력한다.
메모리(120)는 일례로 4개의 메모리 뱅크들(121, 122, 123, 124)을 포함한다. 제1 내지 제4 메모리 뱅크들(121-124) 각각은 일례로 이중 포트 램(dual port RAM) 일 수 있다. 메모리(120)는 읽기 주소 그룹(RAG)에 대응하는 읽기 데이터 그룹(X1-X4)을 출력한다. 또한, 메모리(120)는 쓰기 데이터 그룹(Y1-Y4)을 쓰기 주소 그룹(WAG)에 따라 저장한다.
메모리(120)는 데이터 맵퍼(125)를 더 포함할 수 있다. 데이터 맵퍼(125)는 DMA로부터 전달되는 데이터들 및 병렬 처리부(130)로부터 전달되는 데이터들(R1, R2, R3, R4)을 입력받아 이들이 저장될 메모리 뱅크들(121-124)의 위치에 맞추어 정렬함으로써 쓰기 데이터 그룹(Y1-Y4)을 얻을 수 있다. 데이터 맵퍼(125)는 쓰기 데이터 그룹(Y1-Y4)을 메모리 뱅크들(121-124)로 각각 출력할 수 있다. 또한 데이터 맵퍼(125)는 메모리(120)로부터 메인 메모리로 저장할 데이터들을 DMA로 전달할 수 있다.
병렬 처리부(130)는 일례로 4개의 주처리부들(131, 132, 133, 134) 및 판단처리부(135)를 구비한다. 주처리부들(131-134)은 읽기 데이터 그룹(X1-X4)에 대하여 특정 연산을 수행할 수 있다. 주처리부들(131-134)은 입력된 주처리 설정값들(CV1-CV4)에 대응하는 동작을 수행한다. 판단처리부(135)는 주처리부들(131-134)의 출력을 입력받아 다음 동작을 위한 판단을 수행한다. 판단처리부(135)는 판단처리 설정값(CV5)에 대응하는 동작을 수행한다. 병렬 처리부(130)는 최종적으로 연산된 복수의 데이터들 (R1, R2, R3. R4, GPC)을 출력한다.
도 2는 병렬 처리부(200)의 구성을 도시한 예이다. 병렬 처리부(200)는 도 1의 병렬 처리부(130)에 대응하는 구성이다. 병렬 처리부(200)는 4개의 주처리부들(210, 220, 230, 240)로 구성된 예이다.
복수의 주처리부는 각각 입력부, 부분합산부 및 지연부를 포함할 수 있다. 주처리부(210)는 입력부(211), 부분합산부(212) 및 지연부(213)을 포함한다. 주처리부(220)는 입력부(221), 부분합산부(222) 및 지연부(223)를 포함한다. 주처리부(230)는 입력부(231), 부분합산부(232) 및 지연부(233)를 포함한다. 주처리부(240)는 입력부(241), 부분합산부(242) 및 지연부(243)를 포함한다.
입력부(211, 221, 231, 241)는 각 메모리 뱅크로부터 데이터를 입력받을 수 있다. 또 입력부(211, 221, 231, 241)는 부분합산부(212, 222, 232, 242)의 출력을 피드백받을 수도 있다. 따라서 입력부(211, 221, 231, 241)는 복수의 입력 데이터 중 어느 하나를 선택하는 멀티플렉서(MUX)를 포함할 수 있다.
부분합산부(212, 222, 232, 242)는 입력되는 복수의 데이터들에 대한 합산 연산을 수행한다. 부분합산부 각각(212, 222, 232 또는 242)은 입력부(211, 221, 231, 241)에서 출력하는 데이터를 모두 입력받을 수 있다. 예컨대, 도 2에 도시한 바와 같이 입력부(211, 221, 231, 241)의 출력이 신호간 충돌이 없는 집합 형 버스(bus)로 연결되어, 입력부의 출력들이 설정값에 따라 선택적으로 부분합산부(212, 222, 232, 242)에 전달될 수 있다. 주소 및 설정값 생성부(110)는 설정값 그룹(CVG)을 병렬 처리부(130)로 전달한다. 상기 설정값은 설정값 그룹(CVG) 중 복수의 주처리 설정값들(CV1, CV2, CV3, CV4)를 가리킨다.
입력부(211, 221, 231, 241) 및 부분합산부(212, 222, 232, 242)는 입력된 데이터 또는 연산한 결과를 설정된 경로로 전달하는 기능을 수행한다. 부분합산부(212, 222, 232, 242)는 특정 연산과 동시에 데이터 전달을 수행하는 구성이다. 이와 같은 구성을 연산 경로망이라고 할 수 있다. 도 2에서 A로 표시한 구성이 연산 경로망이다.
지연부(213, 223, 233, 243)는 부분합산부(212, 222, 232, 242)의 출력 데이터를 한 주기 지연하여 다음 주기에 입력부(211, 221, 231, 241)에 입력한다. 지연부(213, 223, 233, 243)는 신호 지연기(D)를 이용하여 현재 시점에서 다음 주기에 입력부(211, 221, 231, 241)로 데이터를 지연 전달한다. 지연부(213, 223, 233, 243)는 단일 클럭에 따라 데이터를 지연 전달한다. 즉, 지연부(213, 223, 233, 243)는 클럭에 따라 데이터를 지연 전달한다.
지연부(213, 223, 233, 243)는 현재 주기의 정보를 저장하는 메모리(레지스터)를 포함할 수 있다. 지연부(213, 223, 233, 243)는 부분합산부(212, 222, 232, 242)의 출력값을 레지스터에 저장하고, 다음 주기에 레지스터에 저장된 해당 출력값을 입력부(211, 221, 231, 241)로 전달할 수 있다.
더하여 지연부(213, 223, 233, 243)를 이용하여 매주기마다 필요한 복수의 데이터를 입력부(211, 221, 231, 241)로 공급함으로써 (소프트웨어 설계자의) 프로그래밍 코드에 지시된 연산과정을 주처리부(210, 220, 230, 240)의 연산 자원을 최대한 활용하여 병렬 처리 연산을 수행할 수 있다. 이 과정에서 데이터 병렬처리 연산 효율을 높이기 위해 매 주기마다 연속적인 데이터 병렬처리 기능이 요구되는데, 부분합산부의 부분합산 연산 기능과 더불어 데이터 경로 설정 기능(매 주기마다 다음 주기 연산을 위한 데이터 재정렬 기능)을 동시에 활용함으로써 연속적인 데이터 병렬 처리가 가능하다. 즉 데이터 재정렬 기능을 데이터 연산 기능과 동시에 수행할 수 있는 구조를 제공하는 부분합산부을 활용함으로써 데이터 병렬처리 연산 효율을 높이기 위한 연속적인 데이터 병렬처리가 가능한 병렬 처리 장치를 구성할 수 있다.
도 2에서 지연부(213, 223, 233, 243) 전체를 B로 표시하였다. 병렬 처리부(200)에서 지연부(213, 223, 233, 243) 전체에 해당하는 구성을 지연처리부라고 명명한다.
판단처리부는 주처리부들(210-240)의 출력을 입력받아 연산 내지 판단을 수행한다. 판단처리부는 현재 주기에서 주처리부들(210-240)이 생성한 정보 내지 플래그를 기준으로, 다음 주기에 생성되는 정보에 대한 판단 내지 제어를 수행할 수 있다. 현재 주기 T1이고, 다음 주기를 T2라고 하면, 판단처리부는 T1에서의 주처리부들(210-240)이 생성한 정보를 기준으로 특정 연산 내지 판단을 한다. 판단처리부는 주처리부들(210-240)의 출력 결과를 기준으로 데이터 처리가 완료되었는지 판단할 수 있다. 데이터 처리가 완료되지 않았다면 판단처리부는 주소 및 설정값 생성부(110)에 정보를 전달하여 T2에서 주처리부들(210-240)이 진행 중인 연산 또는 실행 준비된 연산 과정을 수행하도록 할 수 있다. 필요시 지연부(213, 223, 233, 243)의 처리 결과는 메모리 뱅크에 저장될 수 있다.
도 3은 부분 합산부의 동작을 설명하는 예이다. 도 3은 4개의 주처리부를 갖는 경우의 예이다. 도 3의 전체 주처리부는 4-포트(port) 경로를 갖는다고 할 수 있다. 도 3에서 P1-P4로 표시한 지점은 입력부 출력에 해당한다. 이어서 복수의 연산부 또는 부분합산부(212, 222, 232, 242)는 연산 결과를 출력하고 그 결과는 각각 R1, R2, R3, R4 지점으로 전달된다.
도 3(A)는 4-포트 경로에서 부분합산 기능을 수행하는 예를 도시한다. 주처리설정값들(CV1, CV2, CV3, CV4)에 따라 부분합산부(212, 222, 232, 242)는 입력부들이 출력하는 결과를 선택적으로 합산한다. 부분합산부(212)를 예로 설명한다. 부분합산부(212)는 P1, P2, P3 및 P4를 입력받을 수 있다. 부분합산부(212)는 모두 3개의 가산기를 포함하는 형태이다. 물론 도 3과 달리 부분합산부는 다른 연산 구조를 가질 수도 있다. 부분합산부(212)는 P1, P2, P3, P4를 다양한 조합으로 합산할 수 있다.
부분합산부(212, 222, 232, 242)는 설정값에 따라 연속적인 병렬처리를 위해 입력 데이터의 선택적 부분합산 값인 출력을 다음 주기에 지연부를 거쳐 프로그래밍 코드의 병렬처리 실행 용 컴파일 과정에서 도출한 지정된 입력부로 출력값을 입력한다. 이 과정을 부분합산부(212, 222, 232, 242)가 입력 데이터를 특정 순서로 재정렬하는 과정이라고 할 수 있다.
부분합산부(212, 222, 232, 242)는 부분합산 설정값에 따라 입력부(211, 221, 231, 241)의 출력들 중 하나 이상의 출력들을 선택하고, 선택된 하나 이상의 출력들을 합산하는 기능을 수행한다. 부분합산 설정값은 전술한 바와 같이 주소 및 설정값 생성부(110)로부터 수신한다. 일례로 부분합산 설정값에 따라, 제1, 제2, 제3 및 제4 부분합산부(212, 222, 232, 242)는 P1(제1 입력부, 211)의 출력, P2(제2 입력부, 221)의 출력, P3(제3 입력부, 231)의 출력, P4(제4 입력부, 241)의 출력을 각각 출력할 수 있다. 또한, 다른 예로 부분합산 설정값에 따라, 제1, 제2, 제3 및 제4 부분합산부(212, 222, 232, 242)는 각각 P4(제4 입력부, 241)의 출력, P1(제1 입력부, 211)의 출력, P2(제2 입력부, 221)의 출력, P3(제3 입력부, 231)의 출력을 각각 출력할 수 있다. 또한, 다른 예로 부분합산 설정값에 따라, 제1, 제2, 제3 및 제4 부분합산부(212, 222, 232, 242)는 제2 내지 제4 입력부(221, 231, 241)의 출력들의 합, 제1, 제3, 제4 입력부(211, 231, 241)의 출력들의 합, 제1, 제2, 제4 입력(211, 221, 241)의 출력들의 합, 및 제1 내지 제3 입력부(211, 221, 231)의 출력들의 합을 각각 출력할 수 있다. 또한 다른 예로 부분합산 설정값에 따라, 제1, 제2, 제3 및 제4 부분합산부(212, 222, 232, 242)이 제1 입력부(211)의 출력에서 제2 입력부(221)의 출력을 뺀 값, 제2 입력부(221)의 출력에서 제3 입력부(231)의 출력을 뺀 값, 제3 입력부(231)의 출력에서 제4 입력부(241)의 출력을 뺀 값, 제4 입력부(241)의 출력에서 제1 입력부(211)의 출력을 뺀 값을 각각 출력할 수 있다.
이를 위하여, 부분합산부(212, 222, 232, 242)는 입력부들(211, 221, 231, 241)의 출력들에 연결된 버스로부터 입력부들의 출력을 입력받을 수 있다.
도 3(B)는 4-포트 경로에서의 데이터 전송 경로의 가능한 예를 도시한다. 부분합산부(212, 222, 232, 242)는 입력부 P1 내지 P4의 출력값의 선택적 합산 결과를 레지스터에 저장할 수 있다. 부분합산부(212, 222, 232, 242)는 입력 데이터들에 대한 다양한 조합의 연산이 가능하다. 따라서 부분합산부(212, 222, 232, 242)가 출력하는 결과는 마치 입력된 데이터(P1, P2, P3, P4)를 지정된 연산 내지 가공을 통하여 자신의 또는 다른 레지스터에 전달하는 효과를 가질 수 있다. 이는 도 3(B)에 도시한 바와 같이, 부분합산부(212, 222, 232, 242)가 연산 결과를 다양한 경로로 전달하는 것과 같은 효과를 제공한다.
도 3에서 설명한 구조를 기준으로 병렬 처리에 대한 예를 아래 예제 1에서 설명한다. 아래 예제 1은 C 언어로 표현하였다.
<예제 1>
P1 = 0 ;
P2 = 0 ;
P3 = 0 ;
P4 = 1 ;
do {
CUR = P1 + P2 + P3 + P4;
P4 = P3 ;
P3 = P2 ;
P2 = P1 ;
P1= CUR ;
} while (CUR < 10)
예제 1를 순차적으로 수행한다고 가정하면, "do { ... } while (CUR <10)"을 1회 수행하는데, 10 사이클이 소요될 수 있다.
상기 예제 1과 같은 속성을 가진 순차처리 코드를 도 3과 같은 한 주기 병렬처리 연산 기능을 활용하여 do-while 루프를 매 한 주기마다 연속적으로 수행할 수 있다. R1, R2, R3, R4 연산 결과 값은 도 1의 주소 및 설정값 생성부의 테이블(항목)의 값에 따라 다음 주기에 각각 P1, P2, P3, P4으로 입력된다.
현대의 프로세서들은 다단계 명령어 파이프라인을 가졌다. 파이프라인에서 각 단계는 다른 행동을 하는 같은 단계의 명령어를 실행하는 프로세서와 일치시킨다. N 스테이지 파이프라인은 N 만큼의 다른 명령어들을 다른 완료된 단계에서 가질 수 있다. 파이프라인된 프로세서의 경우. (다섯 개의 단계 : 명령어 패치, 디코드, 실행, 메모리 접근, 다시 써넣기 (write back) 가 정석이다.) 펜티엄 4 프로세서는 31단계의 파이프라인을 가지고 있다. 파이프라인을 할 때 명령어 수준 병렬화에서 몇 프로세서들은 한 개 이상의 명령어를 한 번에 만들 수 있다. 이것을 슈퍼스칼라 프로세서라고도 한다. 만약에 자료종속성만 없다면 명령어들은 한꺼번에 합쳐질 수 있다.
일반적으로 재 순차와 결과의 변경 없이 한꺼번에 명령어 그룹단위로 병렬실행이 가능하면 이것을 명령어 수준 병렬화라고 한다. 이 명령어 수준 병렬화는 80년대 중반부터 90년대 중반까지 컴퓨터 구조의 주류였지만 연속적인 데이터 병렬 처리의 문제를 획기적으로 극복하지 못하여 지금은 그 사용 범위가 제한되고 있다
루프가 가지고 있는 종속성이전 반복의 하나 이상의 결과에 종속된다. 아래 루프의 데이터 종속성은 병렬화의 진행을 가로막는다. 예를 들면 <예제 1>에서,
<예제 1>
P1 = 0 ;
P2 = 0 ;
P3 = 0 ;
P4 = 1 ;
do {
CUR = P1 + P2 + P3 + P4;
P4 = P3 ;
P3 = P2 ;
P2 = P1 ;
P1= CUR ;
} while (CUR < 10)
이 루프는 일반적으로 병렬화 할 수 없다고 믿어져 왔다. 왜냐하면 CUR 이 각 루프를 도는 동안 P1, P2, P3, P4에 종속되기 때문이다. 각 반복이 그 이전 결과에 종속되므로 병렬화할 수 없다.
한편, 예제 1을 도 3의 경로망을 활용하는 한 주기 병렬 처리 장치를 사용할 경우, 병렬 처리 시 발생하는 데이터 종속성 회피하고 do-while 루프를 매 주기마다 연속적으로 수행할 수 있다. 예제 1에 대한 한 주기 병렬처리 절차는 아래와 같이 표현될 수 있다.
<예제 1에 대한 한 주기 병렬처리 수행 절차>
1. 표시 // 는 주석에 해당한다.
2. 표시 […] 는 1 주기 동안 수행되는 연산 또는 초기 설정값을 의미한다.
3. 표시 => 는 물리적 신호 연결을 의미한다.
4. 모든 코드 라인은 동시에 실행된다.
이에 따른 병렬처리 수행 절차는 아래와 같다.
// 병렬 처리 초기화 시작
[P1=0; P2=0; P3=0; P4=1] // 데이터 초기값
DoLoop :
[
P1 => R2 ; // R2는 다음 주기에 P2 로 입력됨
P2 => R3 ; // R3는 다음 주기에 P3 로 입력됨
P3 => R4 ; // R4는 다음 주기에 P4 로 입력됨
P1+P2+P3+P4 =>CUR =>R1; // R1는 다음 주기에 P1 로 입력됨
// R1, R2, R3 및 R4는 각각의 부분합산부 출력(연산결과)에 해당함
(R1 < 10)? Go to DoLoop or OutLoop;
]
OutLoop: // 병렬 처리 끝
복수의 연산기(경로망) 입력 데이터와 복수의 연산기(경로망) 출력 데이터 간 동시 매핑(연결)를 통하여 프로그램 코드 실행 시 발생하는 데이터 종속성을 회피할 수 있다. 데이터 종속성 극복을 통해 한꺼번에 병렬로 처리할 수 있는 데이터 처리량을 극대화할 수 있다. 상기 복수의 연산기를 경로망으로 한정할 필요는 없다. 개념적으로 다음과 같은 조건을 만족하면 복수의 연산기 입력 데이터와 복수의 연산기 출력 데이터 간 동시 매핑(연결)를 통하여 프로그램 코드 실행 시 발생하는 데이터 종속성을 회피할 수 있다.
먼저 다음의 일관된 데이터 병렬처리 규칙에 따라 설계한 병렬처리장치를 한 주기 병렬처리 장치라 명명 하면,
한 주기 병렬처리 장치는 적어도 하나의 데이터를 각각 입력받는 복수의 연산 (및 데이터) 처리기 구비를 상정한다.
한 주기 병렬처리 장치는
(i) 처리할 데이터를 처리 전에 정렬하여 저장한다.
(ii) 저장된 데이터를 1 주기에 연산 처리 후 그 결과를 다음 1 주기 사용을 위해 재 정렬한다.
(iii) 이전 1 주기의 재 정렬된 결과를 현 주기인 1 주기에 사용할 수 있는 구조를 가지면 연속적인 데이터 병렬처리가 가능하다.
이 경우 한 주기 병렬처리 장치는 연속적인 데이터 병렬처리가 가능 하지만, 코드 실행 시 발생하는 데이터 종속성 문제를 해결하지 못하면 연속적인 데이터 병렬 처리의 효율을 높이기 어렵다.
데이터 병렬 처리의 효율을 증대하기 위해 복수의 연산기 입력 데이터와 복수의 연산기 출력 데이터 간 동시 매핑(연결)을 통한 코드 실행 시 발생하는 데이터 종속성 회피할 수 있는 것은 연산기의 가용한 연산 자원 내에, [입력 데이터 그룹]과 [입력 데이터 그룹의 조합으로 이루어진 출력 데이터 그룹] 간 연결이 동시에 맺어지면 데이터 처리 순서에 상관없이 입력 데이터 그룹과 출력 데이터 그룹 간의 연결(매핑)만으로 목적한 프로그램 코드의 작성이 가능하다. 예로 순차처리 기술 언어인 C언어와 하드웨어 기술 언어인 Verilog 코드의 기술방법이 다르지만 둘 다 목적한 프로그램 기술이 가능하다. 따라서 Verilog 방식으로 C 프로그램 코드와 등가인 병렬 처리 루틴과 그에 따른 병렬처리 컴파일러을 구성하면 복수의 입력 데이터와 복수의 출력 데이터 간 동시 매핑(연결)을 통해 코드 실행 시 발생하는 데이터 종속성 회피할 수 있으며 목적한 프로그램 작성이 가능하다.
도 4는 병렬 처리부(200)의 동작을 설명하는 예이다.
메모리 뱅크는 전술한 바와 같이 메인 메모리 등으로부터 데이터를 입력받는다. 복수의 메모리 뱅크(메모리 뱅크 1, 메모리 뱅크 2, 메모리 뱅크 3, 메모리 뱅크 4)는 정렬된 데이터를 저장한다. 메모리 맵퍼가 메모리 뱅크에 저장할 데이터를 정렬하여 전달할 수 있다.
입력부(211, 212, 213, 214)는 멀티플렉서(MUX)를 포함한다. 입력부(211, 212, 213, 214)는 멀티플렉서를 이용하여 메모리 뱅크에서 입력되는 데이터 및 지연부(213, 223, 233, 243)에서 입력되는 데이터 중 하나를 선택한다.
부분합산부(212, 222, 232, 242)는 입력부(211, 212, 213, 214)에서 출력되는 데이터들에 대한 합산 연산을 수행할 수 있다. 전술한 바와 같이 부분합산부(212, 222, 232, 242)는 입력부(211, 212, 213, 214)의 출력 중 가능한 조합에 대한 다양한 연산을 할 수 있다. 동시에 부분합산부(212, 222, 232, 242) 각각은 연산한 결과를 지연부(213, 223, 233, 243) 중 적어도 하나에 전달할 수 있다.
부분합산부(212, 222, 232, 242) 각각은 연산한 결과를 지연부(213, 223, 233, 243)에 전달한다. 이때 부분합산부(212, 222, 232, 242)는 연산 결과를 설정된 경로에 따라 각 지연부(213, 223, 233, 243)에 전달한다. 즉, 설정된 순서에 따라 연산 결과를 전달할 수 있다. 따라서 부분합산부(212, 222, 232, 242)는 연산 결과를 설정된 순서에 따라 정렬하여 각 지연부(213, 223, 233, 243)의 레지스터에 저장할 수 있다. 또는 부분합산부(212, 222, 232, 242)는 실제 합산 연산을 하지 않고 입력부(211, 212, 213, 214)의 출력값을 설정된 경로로 전달하여 새롭게 정렬한 출력값을 각 지연부(213, 223, 233, 243)의 레지스터에 저장할 수도 있다.
(i) 부분합산부(212, 222, 232, 242) 각각은 입력부들의 출력 중 적어도 하나를 입력받아 부분 합산 연산을 수행한다. (ii) 부분합산부(212, 222, 232, 242) 각각은 설정값에 따라 다양한 조합의 연산 중 어느 하나를 수행할 수 있다. (iii) 부분합산부(212, 222, 232, 242) 각각은 연산의 결과를 지연부의 레지스터에 전달한다. 지연부 전체(213, 223, 233, 243)가 갖는 레지스터는 순서대로 D1, D2, D3 및 D4이다. 전술한 바와 같이 부분합산부(212, 222, 232, 242)는 다양한 조합의 연산 중 하나를 수행하여, 입력된 데이터를 그대로 레지스터에 전달하거나, 연산된 결과를 레지스터에 전달한다. 이 과정을 통하여 부분합산부(212, 222, 232, 242)는 데이터를 설정된 순서로 각각 D1, D2, D3 및 D4에 저장할 수 있다. 즉, 부분합산부(212, 222, 232, 242)는 입력 데이터 또는 입력 데이터를 연산한 결과를 특정 순서로 재정렬하여 D1, D2, D3 및 D4에 저장할 수 있다.
한편 부분합산부는 합산 연산을 수행하는 연산부 내지 연산기라고 명명할 수 도 있다.
도 4에서 부분합산부(212, 222, 232, 242)를 포함하는 연산 경로망을 A로 표시하였다.
현주기에 입력된 설정값에 의해 지연부(213, 223, 233, 243)에 포함된 복수의 레지스터의 출력 데이터는 복수의 입력부와 복수의 연산부(부분합산부)를 거쳐 지연부(213, 223, 233, 243)에 포함된 복수의 레지스터의 입력 지점으로 다시 정렬 (재정렬)된다. 다시 정렬된 데이터는 다음 주기에 새로 입력된 설정값에 의해 입력부를 거쳐 연산부(부분합산부) 로 다시 공급될 수 있다. 다음 주기에 입력부(211, 212, 213, 214)는 지연부(213, 223, 233, 243)에서 전달하는 데이터를 선택하여 출력할 수 있다. 도 4에서 지연부(213, 223, 233, 243)를 포함하는 지연 처리부를 B로 표시하였다.
결국, 병렬 처리부(200)는 제1 주기에 처리한 정렬 데이터가 다음 주기인 제2 주기에 사용될 수 있는 경우, 연속적인 데이터 병렬 처리가 가능하다.
본 실시례 및 본 명세서에 첨부된 도면은 전술한 기술에 포함되는 기술적 사상의 일부를 명확하게 나타내고 있는 것에 불과하며, 전술한 기술의 명세서 및 도면에 포함된 기술적 사상의 범위 내에서 당업자가 용이하게 유추할 수 있는 변형 예와 구체적인 실시례는 모두 전술한 기술의 권리범위에 포함되는 것이 자명하다고 할 것이다.

Claims (6)

  1. 지연처리부로부터 출력되는 복수의 지연 데이터들, 메모리로부터 출력되는 복수의 메모리 출력 데이터들 및 복수의 연산 경로망 제어신호들을 입력받고 복수의 연산 경로망 출력 데이터들을 출력하는 연산 경로망; 및
    상기 복수의 연산 경로망 출력 데이터들을 지연하여 얻은 상기 복수의 지연 데이터들 출력하는 상기 지연처리부를 포함하되,
    상기 복수의 연산 경로망 출력 데이터들 중 각 연산 경로망 출력 데이터는 상기 복수의 지연 데이터들 및 상기 복수의 메모리 출력 데이터들에 대하여 상기 복수의 연산 경로망 제어신호들 중에서 상기 각 연산 경로망 출력 데이터에 대응하는 연산 경로망 제어신호에 대응하는 연산을 수행하여 얻은 값인 연속적인 데이터 병렬처리가 가능한 병렬 처리장치.
  2. 제1항에 있어서,
    상기 지연처리부는 상기 복수의 연산 경로망 출력 데이터들을 클럭에 따라 지연시키는 연속적인 데이터 병렬처리가 가능한 병렬 처리장치.
  3. 제2항에 있어서,
    상기 클럭은 단일 클럭이고,
    상기 연산 경로망은 상기 단일 클럭의 주기 내에 상기 복수의 지연 데이터들 및 상기 복수의 메모리 출력 데이터들을 입력받고 입력받은 상기 복수의 지연 데이터들 및 상기 복수의 메모리 출력 데이터들에 대응하는 상기 복수의 연산 경로망 출력 데이터들을 출력하는 연속적인 데이터 병렬처리가 가능한 병렬 처리장치.
  4. 제1항에 있어서,
    상기 연산 경로망은 복수의 주처리부들을 포함하고,
    상기 복수의 주처리부들 중 제1 주처리부는 상기 복수의 지연 데이터들 및 상기 복수의 메모리 출력 데이터들에 대하여 상기 복수의 연산 경로망 제어신호들 중 제1 연산 경로망 제어 신호에 대응하는 제1 연산을 수행함으로써 상기 복수의 연산 경로망 출력 데이터들 중 상기 제1 주처리부에 대응하는 제1 연산 경로망 출력 데이터를 출력하며,
    상기 복수의 주처리부들 중 제2 주처리부는 상기 복수의 지연 데이터들 및 상기 복수의 메모리 출력 데이터들에 대하여 상기 복수의 연산 경로망 제어신호들 중 제2 연산 경로망 제어 신호에 대응하는 제2 연산을 수행함으로써 상기 복수의 연산 경로망 출력 데이터들 중 제2 주처리부에 대응하는 제2 연산 경로망 출력 데이터를 출력하는 연속적인 데이터 병렬처리가 가능한 병렬 처리장치.
  5. 제1항에 있어서,
    상기 연산 경로망은
    상기 복수의 지연 데이터들 및 상기 복수의 메모리 출력 데이터들을 입력받아 복수의 멀티플렉서 출력 데이터들을 출력하는 복수의 멀티플렉서들; 및 상기 복수의 멀티플렉서 출력 데이터들을 입력받아 상기 복수의 연산 경로망 출력 데이터들을 출력하는 복수의 주처리부들을 포함하고,
    상기 복수의 멀티플렉서들 중 각 멀티플렉서는 상기 복수의 지연 데이터들 중 상기 각 멀티플렉서에 대응하는 지연 데이터 및 상기 복수의 메모리 출력 데이터들 중 상기 각 멀티플렉서에 대응하는 메모리 출력 데이터 중 어느 하나를 선택함으로써 상기 복수의 멀티플렉서 출력 데이터들 중 상기 각 멀티플렉서에 대응하는 멀티플렉서 출력 데이터를 얻으며,
    상기 복수의 주처리부들 중 제1 주처리부는 상기 복수의 멀티플렉서 출력 데이터들에 대하여 상기 복수의 연산 경로망 제어신호들 중 제1 연산 경로망 제어 신호에 대응하는 제1 연산을 수행함으로써 상기 복수의 연산 경로망 출력 데이터들 중 상기 제1 주처리부에 대응하는 제1 연산 경로망 출력 데이터를 출력하며,
    상기 복수의 주처리부들 중 제2 주처리부는 상기 복수의 멀티플렉서 출력 데이터들에 대하여 상기 복수의 연산 경로망 제어신호들 중 제2 연산 경로망 제어 신호에 대응하는 제2 연산을 수행함으로써 상기 복수의 연산 경로망 출력 데이터들 중 상기 제2 주처리부에 대응하는 제2 연산 경로망 출력 데이터를 출력하는 연속적인 데이터 병렬처리가 가능한 병렬 처리장치.
  6. 삭제
KR1020190058629A 2018-05-18 2019-05-20 연속적인 데이터 병렬처리가 가능한 병렬 처리장치 KR102295677B1 (ko)

Priority Applications (4)

Application Number Priority Date Filing Date Title
US17/052,936 US11526432B2 (en) 2018-05-18 2019-05-20 Parallel processing device
PCT/KR2019/005980 WO2019221569A1 (ko) 2018-05-18 2019-05-20 병렬 처리장치
KR1020210099377A KR102358612B1 (ko) 2018-05-18 2021-07-28 연속적인 데이터 병렬처리가 가능한 병렬 처리장치
US17/987,421 US20230071941A1 (en) 2018-05-18 2022-11-15 Parallel processing device

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
KR20180057380 2018-05-18
KR1020180057380 2018-05-18

Related Child Applications (1)

Application Number Title Priority Date Filing Date
KR1020210099377A Division KR102358612B1 (ko) 2018-05-18 2021-07-28 연속적인 데이터 병렬처리가 가능한 병렬 처리장치

Publications (2)

Publication Number Publication Date
KR20190132295A KR20190132295A (ko) 2019-11-27
KR102295677B1 true KR102295677B1 (ko) 2021-08-30

Family

ID=68730117

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020190058629A KR102295677B1 (ko) 2018-05-18 2019-05-20 연속적인 데이터 병렬처리가 가능한 병렬 처리장치

Country Status (3)

Country Link
US (1) US11526432B2 (ko)
KR (1) KR102295677B1 (ko)
CN (1) CN112074810B (ko)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102428398B1 (ko) * 2021-03-17 2022-08-02 주식회사 모르미 병렬 처리 장치
KR102574824B1 (ko) 2021-04-26 2023-09-06 주식회사 모르미 가변 비트 수를 지원하는 병렬 처리 장치

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070182746A1 (en) 2006-02-06 2007-08-09 Via Technologies, Inc. System and Method for Vector Computations in Arithmetic Logic Units (ALUS)
JP2011028343A (ja) 2009-07-22 2011-02-10 Fujitsu Ltd 演算処理装置、およびデータ転送方法
US20120278373A1 (en) 2009-09-24 2012-11-01 Nec Corporation Data rearranging circuit, variable delay circuit, fast fourier transform circuit, and data rearranging method

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR940022276A (ko) * 1993-03-11 1994-10-20 오오가 노리오 병렬연산 처리장치
US5586289A (en) * 1994-04-15 1996-12-17 David Sarnoff Research Center, Inc. Method and apparatus for accessing local storage within a parallel processing computer
US6408376B1 (en) * 1999-10-25 2002-06-18 Intel Corporation Method and apparatus for instruction set architecture to perform primary and shadow digital signal processing sub-instructions simultaneously
JP2004086259A (ja) * 2002-08-23 2004-03-18 Matsushita Electric Ind Co Ltd データ処理装置
US7301831B2 (en) * 2004-09-15 2007-11-27 Rambus Inc. Memory systems with variable delays for write data signals
US7734674B2 (en) * 2005-08-08 2010-06-08 Freescale Semiconductor, Inc. Fast fourier transform (FFT) architecture in a multi-mode wireless processing system
KR100835173B1 (ko) 2006-09-20 2008-06-05 한국전자통신연구원 곱셈 누적 연산을 위한 디지털 신호처리 장치 및 방법
WO2013100783A1 (en) * 2011-12-29 2013-07-04 Intel Corporation Method and system for control signalling in a data path module
US10884976B2 (en) * 2018-05-22 2021-01-05 Morumi Co., Ltd. Parallel processing unit and device for parallel processing

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070182746A1 (en) 2006-02-06 2007-08-09 Via Technologies, Inc. System and Method for Vector Computations in Arithmetic Logic Units (ALUS)
JP2011028343A (ja) 2009-07-22 2011-02-10 Fujitsu Ltd 演算処理装置、およびデータ転送方法
US20120278373A1 (en) 2009-09-24 2012-11-01 Nec Corporation Data rearranging circuit, variable delay circuit, fast fourier transform circuit, and data rearranging method

Also Published As

Publication number Publication date
CN112074810A (zh) 2020-12-11
KR20190132295A (ko) 2019-11-27
US11526432B2 (en) 2022-12-13
CN112074810B (zh) 2023-07-21
US20210191847A1 (en) 2021-06-24

Similar Documents

Publication Publication Date Title
US9760373B2 (en) Functional unit having tree structure to support vector sorting algorithm and other algorithms
US5675757A (en) Direct match data flow memory for data driven computing
US8595280B2 (en) Apparatus and method for performing multiply-accumulate operations
US20140317388A1 (en) Apparatus and method for supporting multi-modes of processor
KR102295677B1 (ko) 연속적인 데이터 병렬처리가 가능한 병렬 처리장치
EP0730223B1 (en) Pipeline data processing apparatus for executing a plurality of data processes having a data-dependent relationship
KR101586770B1 (ko) 데이터 처리 장치
KR102358612B1 (ko) 연속적인 데이터 병렬처리가 가능한 병렬 처리장치
JP2004503872A (ja) 共同利用コンピュータシステム
US7673117B2 (en) Operation apparatus
Ma et al. DO-GPU: Domain Optimizable Soft GPUs
JP2017500657A (ja) エミュレートされた共有メモリアーキテクチャにおける長遅延時間演算のアーキテクチャ
EP1546868B1 (en) Superpipelined vliw processor addressing bypass-loop speed limitation
JP4720915B2 (ja) ベクトル命令間追い越し判定装置と方法
CN101615114A (zh) 完成两次乘法两次加法两次位移的微处理器实现方法
KR100226694B1 (ko) 복수 파이프라인 구조 및 복수 파이프라이닝 방법
JP2002318689A (ja) 資源使用サイクルの遅延指定付き命令を実行するvliwプロセッサおよび遅延指定命令の生成方法
KR100230846B1 (ko) 이중 기능 흐름 파이프라인 구조
JP5170021B2 (ja) ベクトル演算装置およびベクトル演算方法
WO2003036468A1 (en) An arrangement and a method in processor technology
KR20100063615A (ko) Vliw 명령어 처리 장치 및 방법
JP2003345589A (ja) 情報処理装置
KR19980037093A (ko) 셔플 파이프라인 구조

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
A107 Divisional application of patent
GRNT Written decision to grant