KR20120134549A - Simd 프로세서를 이용한 병렬 연산 처리 장치 및 방법 - Google Patents

Simd 프로세서를 이용한 병렬 연산 처리 장치 및 방법 Download PDF

Info

Publication number
KR20120134549A
KR20120134549A KR1020110053512A KR20110053512A KR20120134549A KR 20120134549 A KR20120134549 A KR 20120134549A KR 1020110053512 A KR1020110053512 A KR 1020110053512A KR 20110053512 A KR20110053512 A KR 20110053512A KR 20120134549 A KR20120134549 A KR 20120134549A
Authority
KR
South Korea
Prior art keywords
source node
column
input data
previous
node belonging
Prior art date
Application number
KR1020110053512A
Other languages
English (en)
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 KR1020110053512A priority Critical patent/KR20120134549A/ko
Priority to US13/364,687 priority patent/US8769390B2/en
Publication of KR20120134549A publication Critical patent/KR20120134549A/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/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
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8053Vector processors
    • G06F15/8076Details on data register access
    • 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
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30018Bit or string instructions
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/37Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35
    • H03M13/39Sequence estimation, i.e. using statistical methods for the reconstruction of the original codes
    • H03M13/41Sequence estimation, i.e. using statistical methods for the reconstruction of the original codes using the Viterbi algorithm or Viterbi processors
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/37Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35
    • H03M13/39Sequence estimation, i.e. using statistical methods for the reconstruction of the original codes
    • H03M13/41Sequence estimation, i.e. using statistical methods for the reconstruction of the original codes using the Viterbi algorithm or Viterbi processors
    • H03M13/4107Sequence estimation, i.e. using statistical methods for the reconstruction of the original codes using the Viterbi algorithm or Viterbi processors implementing add, compare, select [ACS] operations
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/37Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35
    • H03M13/39Sequence estimation, i.e. using statistical methods for the reconstruction of the original codes
    • H03M13/41Sequence estimation, i.e. using statistical methods for the reconstruction of the original codes using the Viterbi algorithm or Viterbi processors
    • H03M13/4161Sequence estimation, i.e. using statistical methods for the reconstruction of the original codes using the Viterbi algorithm or Viterbi processors implementing path management
    • H03M13/4169Sequence estimation, i.e. using statistical methods for the reconstruction of the original codes using the Viterbi algorithm or Viterbi processors implementing path management using traceback
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/65Purpose and implementation aspects
    • H03M13/6561Parallelized implementations

Abstract

SIMD 프로세서를 이용하여 비터비 디코딩을 수행하는 병렬 연산 처리 장치 및 방법이 제공된다. 병렬 연산 처리 장치는, 현재 컬럼에 속하는 각 소스 노드의 입력 데이터를 이전 컬럼에 속하는 각 소스 노드의 입력 데이터와 병합하여 저장할 수 있다.

Description

SIMD 프로세서를 이용한 병렬 연산 처리 장치 및 방법{APPARATUS AND METHOD FOR PROCESSING PARALLEL COMPUTATION USING SIMD ARCHITECTURE}
아래의 실시예들은 SIMD 프로세서를 이용하여 병렬로 연산을 처리하기 위한 방법 및 장치에 관한 것이다.
SIMD(Single Instruction Multiple Data)는 하나의 명령어(instruction)로 여러 개의 데이터를 처리하는 병렬 컴퓨팅의 한 분류이다. SIMD는 다수의 연산 장치들이 동일(또는, 유사)한 연산을 다수의 데이터에 적용하여 동시에 처리하는 방식이다. SIMD는 주로 백터(vector) 프로세서(processor)에서 이용되는 기술이다.
일반적으로, 비터비 디코딩(Viterbi Decoding)은 3단계의 연산 과정으로 이루어진다. 1단계는 브랜치의 메트릭을 계산(Branch Metric Computation: BMC)하는 과정이고, 2단계는 계산된 메트릭들을 비교하여 브랜치를 선택(Add Compare Select: ACS)하는 과정이고, 3단계는 역추적(Traceback: TB)하는 과정이다.
그러나, 비터비 디코딩의 깊이(Depth)가 깊어질수록 디코딩 시 요구되는 메모리의 양이 증가하여 전체 하드웨어 로직(logic)의 크기가 증가하며, ACS 연산 결과 정보의 크기가 매우 작아 ACS 연산 결과 정보를 저장하면서 낭비되는 메모리가 발생한다.
이에 따라, 비터비 디코딩 연산 시 메모리를 효과적으로 사용하여 디코딩의 깊이가 깊어지더라도 전체 하드웨어 로직의 사이즈를 감소시키고, 낭비되는 메모리를 감소시킬 수 있는 기술이 필요하다.
본 병렬 연산 처리 장치는, 현재 컬럼(column)에 속하는 각 소스 노드(source node)에서의 경로값을 계산하고, 상기 경로값을 이용하여 선택된 경로에 해당하는 입력 데이터와 이전 컬럼에 속하는 소스 노드를 각각 결정하는 병렬 연산부-상기 이전 컬럼에 속하는 소스 노드는, 상기 선택된 경로에 기초하여 상기 현재 컬럼에 속하는 소스 노드와 논리적으로 연결된 소스 노드임-, 및 상기 이전 컬럼에 속하는 각 소스 노드의 입력 데이터 순서에 기초하여 상기 현재 컬럼에 속하는 각 소스 노드의 입력 데이터 순서를 정렬하는 데이터 정렬부를 포함할 수 있다. 그리고, 상기 병렬 연산부는, 상기 이전 컬럼의 입력 데이터와 상기 순서가 정렬된 현재 컬럼의 입력 데이터를 레지스터 처리 단위에 따라 병합하여 병렬 레지스터부에 저장할 수 있다.
또한, 상기 병렬 연산부는, 상기 이전 컬럼의 입력 데이터에 대해 비트 쉬프트(bit shift) 연산을 수행하여 상기 이전 컬럼의 입력 데이터에 상기 현재 컬럼의 입력 데이터를 병합하여 저장할 수 있다.
또한, 상기 데이터 정렬부는, 상기 현재 컬럼에 속하는 각 소스 노드의 입력 데이터가 상기 현재 컬럼에 속하는 각 소스 노드와 논리적으로 연결된 이전 컬럼에 속하는 소스 노드의 입력 데이터와 물리적으로 연결되게(concatenate) 위치하도록 상기 입력 데이터 순서를 정렬할 수 있다.
또한, 상기 병렬 연산부는, 상기 현재 컬럼에 속하는 각 소스 노드와 논리적으로 연결된 이전 컬럼의 소스 노드를 나타내는 인덱스 정보를 상기 레지스터 처리 단위마다 저장할 수 있다.
또한, 상기 인덱스 정보는, 상기 선택된 경로에 기초하여 현재 레지스터의 첫 번째 컬럼의 각 소스 노드와 논리적으로 연결된 이전 레지스터의 마지막 컬럼의 각 소스 노드를 나타내는 정보일 수 있다.
또한, 상기 병렬 연산부는, 현재 컬럼(column)에 속하는 각 소스 노드(source node)에서의 경로값이 복수개인 경우, 복수의 경로값들 중 최소 경로값을 결정할 수 있다. 그러면, 상기 병렬 레지스터부는, 상기 현재 컬럼(column)에 속하는 각 소스 노드(source node)에서의 최소 경로값을 이전 컬럼에 속하는 각 소스 노드에서의 최소 경로값이 저장된 위치에 덮어쓰기(overwrite)를 이용하여 상기 병렬 레지스터부에 저장할 수 있다.
또한, 상기 병렬 연산부는, 마지막 컬럼에 속하는 각 소스 노드에서의 경로값을 계산하고, 계산된 경로값들 중 최소 경로값에 해당하는 최종 소스 노드와 연결된 이전 컬럼들에 속하는 소스 노드의 입력 데이터를 역추적(Traceback)할 수 있다.
또한, 상기 병렬 연산부는, 상기 마지막 컬럼부터 첫 번째 컬럼에 속하는 소스 노드까지 상기 역추적을 반복함에 따라, 상기 최종 소스 노드와 연결된 각 소스 노드에 해당하는 입력 데이터를 획득할 수 있다.
또한, 상기 경로값은, 비터비 디코딩(Viterbi Decoding)을 수행함에 따라 컬럼 별로 계산된 각 노드에서의 메트릭(metric)을 현재 컬럼을 기준으로 누적한 값일 수 있다.
본 병렬 연산 처리 방법은, 현재 컬럼(column)에 속하는 각 소스 노드(source node)에서의 경로값을 계산하는 단계, 상기 경로값을 이용하여 선택된 경로에 해당하는 입력 데이터와 이전 컬럼에 속하는 소스 노드를 각각 결정하는 단계-상기 이전 컬럼에 속하는 소스 노드는, 상기 선택된 경로에 기초하여 상기 현재 컬럼에 속하는 소스 노드와 논리적으로 연결된 소스 노드임-, 상기 이전 컬럼에 속하는 각 소스 노드의 입력 데이터 순서에 기초하여 상기 현재 컬럼에 속하는 각 소스 노드의 입력 데이터 순서를 정렬하는 단계, 및 상기 이전 컬럼의 입력 데이터와 상기 순서가 정렬된 현재 컬럼의 입력 데이터를 레지스터 처리 단위에 따라 병합하여 저장하는 단계를 포함할 수 있다.
본 발명에 따르면, SIMD 프로세서를 이용하여 비터비 디코딩을 수행함에 따라 메모리를 효과적으로 사용하여 전체 하드웨어 로직의 사이즈를 감소시킬 수 있다.
본 발명에 따르면, ACS 연산 시 복수의 입력 데이터를 병합하여 메모리에 저장함에 따라, 낭비되는 메모리를 감소 또는 제거할 수 있을 뿐만 아니라, 한 번의 데이터 읽기로 많은 입력 데이터를 역추적하여 TB 연산을 고속으로 처리할 수 있다.
도 1은 본 발명의 일 실시예에 따른 SIMD 프로세서를 이용하는 병렬 연산 처리 장치(100)의 구조를 도시한 도면이다.
도 2는 본 발명의 일실시예에 따른 병렬 레지스터부의 세부 구조를 도시한 도면이다.
도 3은 본 발명의 일실시예에 따른 BMC 연산을 병렬로 처리하는 구성을 도시한 도면이다.
도 4는 본 발명의 일실시예에 따른 ACS 연산을 병렬로 처리하는 구성을 도시한 도면이다.
도 5는 비터비 알고리즘의 동작을 트레일리스 다이어그램(Trellis Diagram)으로 도시한 도면이다.
도 6은 본 발명의 일실시예에 따른 병렬 연산 처리 장치의 구성 요소들 중 ACS 연산을 수행하는 주요 구성 요소를 도시한 블록도이다.
도 7은 본 발명의 일실시예에 따른 병렬 연산 처리 장치에서 현재 컬럼에 속하는 각 소스 노드의 입력 데이터 순서를 정렬하는 구성을 설명하기 위해 제공되는 도면이다.
도 8은 본 발명의 일실시예에 따른 병렬 연산 처리 장치에서 수행하는 비트 쉬프트 연산을 도시한 도면이다.
도 9는 본 발명의 일실시예에 따른 TB 연산을 병렬로 처리하는 구성을 도시한 도면이다.
도 10은 본 발명의 일실시예에 따른 병렬 연산 처리 장치에서 SIMD 프로세서를 이용하여 비터비 디코딩을 병렬로 처리하는 방법을 설명하기 위해 제공되는 흐름도이다.
도 11은 본 발명의 일실시예에 따른 병렬 연산 처리 장치에서 2개의 데이터 입력으로 연산을 처리하는 구성을 설명하기 위해 제공되는 도면이다.
이하에서, 본 발명의 일 실시예를, 첨부된 도면을 참조하여 상세하게 설명한다. 그러나, 본 발명이 실시예들에 의해 제한되거나 한정되는 것은 아니다. 각 도면에 제시된 동일한 참조 부호는 동일한 부재를 나타낸다.
도 1은 본 발명의 일 실시예에 따른 SIMD 프로세서를 이용하는 병렬 연산 처리 장치(100)의 구조를 도시한 도면이다.
병렬 연산 처리 장치(100)는 명령어 저장부(110), 제어부(120), 스칼라 연산부(130), 스칼라 레지스터(scalar register)부(140), 병렬 연산부(150), 병렬 레지스터부(160), 데이터 정렬부(170) 및 데이터 저장부(180)를 포함할 수 있다.
먼저, 명령어 저장부(110)는 병렬 연산 처리 장치(100)에서 수행되는 각종 제어를 위한 명령어가 저장될 수 있다. 일례로, 명령어 저장부(110)는 비터비 디코딩 처리 시 필요한 연산에 대한 명령어들이 저장될 수 있다. 예를 들어, 브랜치의 메트릭을 계산(Branch Metric Computation: BMC)하는 BMC 연산 명령어, 계산된 브랜치 메트릭들(Branch Metrics)을 누적하여 생성한 경로 메트릭(Path Metric, 이하, 경로값이라 칭함)을 각 노드 별로 비교하여 어느 하나를 선택(Add Compare Select: ACS)하는 ACS 연산 명령어, 및 마지막 컬럼에 속하는 각 소스 노드의 경로 메트릭 중 최소에 해당하는 노드와 연결된 이전 컬럼들의 소스 노드를 역추적(Traceback: TB)하는 TB 연산 명령어 등을 포함할 수 있다.
제어부(120)는 명령어 저장부(110)에 저장된 명령어에 해당하는 제어 신호를 생성할 수 있다. 예를 들어, 제어부(120)는 SIMD 프로세서를 이용한 병렬 연산 처리 장치를 제어하기 위해 필요한 제어 신호를 생성할 수 있다.
데이터 저장부(180)는 비터비 디코딩 수행 시 필요한 입력 데이터 및 비터비 디코딩 수행에 따라 생성된 연산 결과 데이터를 저장할 수 있다. 예를 들어, 데이터 저장부(180)는 BMC 연산에 따른 BMC 연산 결과, ACS 연산에 따른 ACS 연산 결과, 및 TB 연산에 따른 TB 연산 결과를 저장할 수 있다.
스칼라 연산부(130)는 병렬로 처리되기 어려운 연산을 처리할 수 있다.
스칼라 레지스터부(140)는 스칼라 연산부(130)가 연산을 수행하기 위해 사용하는 레지스터들을 포함할 수 있다.
병렬 연산부(150)는 하나의 명령어로 다수의 데이터를 처리하는 연산을 처리할 수 있다. 병렬 연산부(150)는 SIMD(Single Instruction Multiple Data) 연산부로 표현할 수도 있다.
병렬 레지스터부(160)는 병렬 연산부(150)가 연산을 수행하기 위해 사용하는 레지스터들을 포함할 수 있다. 여기서, 병렬 레지스터부(160)는 SIMD 레지스터부로 표현할 수도 있다.
데이터 정렬부(170)는 병렬 연산부(150)에서 처리된 연산의 결과들의 순서를 정렬할 수 있다. 일례로, 데이터 정렬부(170)는 ACS 연산에 따라 생성된 ACS 연산 결과의 순서를 정렬할 수 있다. 예를 들어, 복수의 컬럼들(Columns)에 대핸 ACS 연산이 수행된 경우, 데이터 정렬부(170)는 각 컬럼의 연산 결과를 다음 컬럼의 입력으로 사용할 수 있도록 현재 컬럼의 연산 결과에 대한 순서를 정렬할 수 있다. 그러면, 병렬 연산부(150)는 데이터 순서가 정렬된 현재 컬럼의 연산 결과들을 이전 컬럼의 연산 결과들과 병합하여 병렬 레지스터부(160)에 저장할 수 있다.
도 2는 본 발명의 일실시예에 따른 병렬 레지스터부의 세부 구조를 도시한 도면이다.
도 2에 따르면, 병렬 레지스터(150)는 복수의 벡터 레지스터(Vector Registor)를 포함할 수 있다.
그리고, 병렬 연산부(160)는 복수의 ALU(Arithmetic and Logical Unit)을 포함할 수 있다. 이때, 병렬 연산부(160)는 소스 노드(Source Node: SN)의 개수에 대응하는 복수의 ALU를 포함할 수 있다. 예를 들어, 소스 노드의 개수가 N-1개인 경우, 병렬 연산부(160)는 N-1개의 ALU를 포함할 수 있다.
그러면, ALU는 병렬 레지스터(150)에 저장된 입력 데이터들 중 2개의 입력 데이터를 읽어들여 연산을 수행하고, 1개의 연산 결과를 다시 병렬 레지스터(150)에 저장할 수 있다. 예를 들어, ALU 0(201)는 벡터 레지스터 0(202)에 저장된 입력 데이터와 벡터 레지스터 1(203)에 저장된 입력 데이터를 읽어들일 수 있다. 그리고, ALU 0(201)는 읽어들인 2개의 비터비 디코딩 시 필요한 연산을 수행하여 1개의 연산 결과를 생성할 수 있다. 이어, ALU 0(201)는 생성된 연산 결과를 벡터 레지스터들 중 어느 하나에 저장할 수 있다. 예를 들어, ALU 0(201)는 생성된 연산 결과를 벡터 레지스터 0(202) 중 필요없는 공간에 저장할 수도 있고, 벡터 레지스터 2 내지 벡터 레지스터 m-1 중 빈 공간에 저장할 수도 있다.
이하에서는, SIMD 프로세서를 이용하여 BMC 연산, ACS 연산, 및 TB 연산을 수행하는 구성에 대해 설명하기로 한다.
도 3은 본 발명의 일실시예에 따른 BMC 연산을 병렬로 처리하는 구성을 도시한 도면이다. 도 3에서, BMC 연산은 도 1의 병렬 연산부(150)에 의해 수행될 수 있다.
도 3에 따르면, 병렬 연산 처리 장치는, 두 데이터(A0, B0) 간의 차의 절대값을 계산하여 출력(R0)할 수 있다. 이처럼, 병렬 연산 처리 장치는, 현재 컬럼에 속하는 n개의 모든 소스 노드들에 대해 BMC 연산을 병렬로 수행할 수 있다.
다시 말해, BMC 연산은 다른 BMC 연산의 결과를 입력으로 사용하지 않기 때문에, 현재 컬럼에 속하는 각 소스 노드들에서의 BMC 연산을 동시에 수행할 수 있다. 예를 들어, 병렬 연산 처리 장치는, BMC 0, BMC 1, … BMCn 연산을 동시에 수행하여 R0 내지 Rn을 출력할 수 있다.
도 4는 본 발명의 일실시예에 따른 ACS 연산을 병렬로 처리하는 구성을 도시한 도면이다. 도 4에서, ACS 연산은 도 1의 병렬 연산부(150)에 의해 수행될 수 있다.
도 4에 따르면, 병렬 연산 처리 장치는, 현재 컬럼에 속하는 각 노드에서의 메트릭과 이전 컬럼의 경로값을 더하여 생성된 경로값들 중 어느 하나를 선택하여 출력할 수 있다.
일례로, 도 5를 참조하면, 현재 컬럼이 컬럼 4(Col. 4: 502)이고, 컬럼 4의 소스 노드 a로 2개의 경로(503, 504)가 입력되는 경우, 병렬 연산 처리 장치는, 경로 0(503)에 해당하는 메트릭 0(도 4의 path-metric 0에 해당함)과 이전 컬럼인 컬럼 3(501)의 소스 노드 a에서의 경로값(도 4의 BMC 0에 해당함)을 더하고, 경로 1(504)에 해당하는 메트릭 1(도 4의 path-metric 1에 해당함)과 컬럼 3(501)의 소스 노드 c에서의 경로값(도 4의 BMC 1에 해당함)을 더하여 서로 비교할 수 있다.
그리고, 병렬 연산 처리 장치는, 비교를 통해 더한 결과 값이 작은 값을 현재 컬럼의 경로값(401)으로 출력하고, 현재 컬럼의 경로값에 해당하는 경로를 선택하고, 선택된 경로에 해당하는 입력 데이터(403)를 출력할 수 있다. 이때, 병렬 연산 처리 장치는, 선택된 경로에 기초하여 현재 컬럼의 소스 노드와 연결된 이전 컬럼의 소스 노드를 나타내는 인덱스 정보(402)를 함께 출력할 수 있다.
예를 들어, 메트릭 0와 이전 컬럼인 컬럼 3(501)의 소스 노드 a에서의 경로값을 더한 결과값이 13이고, 메트릭 1과 컬럼 3(501)의 소스 노드 c에서의 경로값을 더한 결과값이 8인 경우, 병렬 연산 처리 장치는 8을 현재 컬럼의 경로값(401)으로 출력할 수 있다. 그리고, 병렬 연산 처리 장치는, 컬럼 4(502)의 소스 노드 a로 입력되는 경로 0(503) 및 경로 1(504) 중에서 경로값 8에 해당하는 경로 1(504)을 선택할 수 있다. 이어, 병렬 연산 처리 장치는, 경로 1(504)에 기초하여 현재 컬럼인 컬럼 4(502)의 소스 노드 a가 이전 컬럼인 컬럼 3(501)의 소스 노드 c와 논리적으로 연결됨을 나타내는 인덱스 정보(402)를 출력할 수 있다. 그리고, 병렬 연산 처리 장치는, 선택된 경로에 해당하는 입력 데이터(403)를 출력할 수 있다.
이처럼, 병렬 연산 처리 장치는 ACS 연산을 통해 현재 컬럼에 속하는 각 소스 노드 별로 현재 컬럼의 경로값(401), 인덱스 정보(402), 및 입력 데이터(403)를 출력할 수 있다.
도 6은 본 발명의 일실시예에 따른 병렬 연산 처리 장치의 구성 요소들 중 ACS 연산을 수행하는 주요 구성 요소를 도시한 블록도이다.
도 6에 따르면, 병렬 연산 처리 장치(600)는 병렬 연산부(601), 병렬 레지스터부(602), 데이터 정렬부(603), 및 데이터 저장부(604)를 포함할 수 있다.
먼저, 병렬 연산부(601)는 현재 컬럼(column)에 속하는 각 소스 노드(source node)에서의 경로값을 계산할 수 있다. 여기서, 경로값은 컬럼 별로 계산된 각 소스 노드에서의 메트릭을 현재 컬럼을 기준으로 누적한 값을 의미한다. 다시 말해, 경로 값은, 현재 컬럼에 속하는 소스 노드를 기준으로 이전 컬럼들 각각에 속하는 소스 노드에서의 메트릭들과 현재 컬럼에 속하는 소스 노드에서의 메트릭을 모두 더한 값을 나타낼 수 있다. 예를 들어, 경로값은 비터비 디코딩에서 해밍 디스턴스(hamming distance)를 누적한 값을 의미할 수 있다.
그리고, 병렬 연산부(601)는 현재 컬럼에 속하는 소스 노드에서의 경로값을 이용하여 어느 하나의 경로를 선택할 수 있다. 예를 들어, 현재 컬럼에 속하는 각 소스 노드에서의 경로값이 복수개인 경우, 병렬 연산부(601)는 복수의 경로값들 중 가장 작은 경로값을 최소 경로값으로 결정하고, 결정된 최소 경로값에 해당하는 경로를 선택할 수 있다. 이어, 병렬 연산부(601)는 현재 컬럼에 속하는 각 소스 노드에서의 최소 경로값을 이전 컬럼에 속하는 각 소스 노드에서의 최소 경로값이 저장된 위치에 덮어쓰기(overwrite)를 이용하여 병렬 레지스터부(602)에 저장할 수 있다.
이어, 병렬 연산부(601)는 상기 선택된 경로에 해당하는 입력 데이터(input data)를 결정하고, 선택된 경로에 기초하여 이전 컬럼에 속하는 소스 노드를 각각 결정할 수 있다. 여기서, 이전 컬럼에 속하는 소스 노드는, 상기 선택된 경로에 기초하여 현재 컬럼에 속하는 소스 노드와 논리적으로 연결된 소스 노드일 수 있다. 이에 따라, 병렬 연산부(601)는 현재 컬럼에 속하는 각 소스 노드에 연결된 이전 컬럼의 소스 노드를 나타내는 인덱스 정보를 결정할 수 있다.
이어, 데이터 정렬부(603)는 이전 컬럼에 속하는 각 소스 노드의 입력 데이터 순서에 기초하여 현재 컬럼에 속하는 각 소스 노드의 입력 데이터 순서를 결정할 수 있다.
일례로, 도 7를 참조하면, 데이터 정렬부(603)는 현재 컬럼(701)에 속하는 소스 노드 1(703)의 인덱스 정보에 기초하여 소스 노드 1(703)이 이전 컬럼의 소스 노드 3(704)과 논리적으로 연결되었음을 확인할 수 있다. 마찬가지로, 데이터 정렬부(603)는 현재 컬럼의 소스 노드 2(705)의 인덱스 정보에 기초하여 소스 노드 2(705)가 이전 컬럼의 소스 노드 5(706)와 논리적으로 연결되었음을 확인할 수 있다. 동일한 방식으로, 데이터 정렬부(603)는 현재 컬럼에 속하는 모든 소스 노드들 각각과 논리적으로 연결된 이전 컬럼의 소스 노드들을 확인할 수 있다.
그러면, 데이터 정렬부(603)는 현재 컬럼에 속하는 각 소스 노드의 입력 데이터 순서를 정렬할 수 있다. 이때, 데이터 정렬부(603)는 현재 컬럼에 속하는 각 소스 노드의 입력 데이터가, 현재 컬럼에 속하는 각 소스 노드와 논리적으로 연결된 이전 컬럼에 속하는 소스 노드의 입력 데이터와 물리적으로 연결되게(concatenated) 위치하도록 현재 컬럼에 속하는 각 소스 노드의 입력 데이터 순서를 정렬할 수 있다.
예를 들어, 도 7을 참조하면, 데이터 정렬부(603)는 현재 컬럼의 소스 노드 0에 해당하는 입력 데이터는 소스 노드 0와 논리적으로 연결된 이전 컬럼의 소스 노드 0에 해당하는 입력 데이터와 벡터 레지스터에 물리적으로 연결되게 정렬할 수 있다. 그리고, 데이터 정렬부(603)는 현재 컬럼의 소스 노드 1(703)에 해당하는 입력 데이터는 소스 노드 1(703)과 논리적으로 연결된 이전 컬럼의 소스 노드 3에 해당하는 입력 데이터와 벡터 레지스터에 물리적으로 연결되게 저장할 수 있다. 마찬가지로, 데이터 정렬부(603)는 현재 컬럼의 소스 노드 2(705)에 해당하는 입력 데이터부터 현재 컬럼의 소스 노드 7에 해당하는 입력 데이터까지 데이터 순서를 정렬할 수 있다.
그리고, 병렬 연산부(601)는 입력 데이터 순서가 정렬된 현재 컬럼의 입력 데이터를 이전 컬럼의 입력 데이터에 레지스터 처리 단위에 따라 병합하여 병렬 레지스터부(602)에 저장할 수 있다. 여기서, 레지스터 처리 단위는, 병렬 레지스터가 동시에 처리할 수 있는 데이터의 크기를 나타내는 단위로서 미리 설정될 수 있다. 예를 들어, 레지스터 처리 단위가 8bits, 16 bits, 32 bits 등으로 설정될 수 있으며, 16bits로 설정된 경우, 병렬 레지스터부(602)는 16bits까지 복수의 컬럼들에 속하는 각 소스 노드의 입력 데이터들을 병합하여 저장할 수 있다.
이때, 병렬 연산부(601)는 현재 컬럼에 속하는 각 소스 노드의 입력 데이터 순서가 정렬됨에 따라 이전 컬럼의 입력 데이터에 대해 비트 쉬프트(bit shift) 연산을 수행할 수 있다. 이처럼, 병렬 연산부(601)는 비트 쉬프트 연산을 통해 이전 컬럼의 입력 데이터에 현재 컬럼의 입력 데이터를 병합하여 병렬 레지스터부(602)에 저장할 수 있다.
일례로, 도 8을 참고하면, 레지스터 처리 단위가 k 비트로 기설정된 경우, 벡터 레지스터 0에 저장된 이전 컬럼들의 입력 데이터(803)를 비트 쉬프트할 수 있다. 그러면, 이전 컬럼들의 입력 데이터(803)가 비트 쉬프트됨에 따라 벡터 레지스터 (801)의 마지막 컬럼은 0으로 채워질 수 있다. 그러면, 병렬 연산부(601)는 비트 쉬프트를 통해 채워진 0과 현재 컬럼의 입력 데이터(804)를 XOR 연산하여, 이전 컬럼의 입력 데이터에 현재 컬럼의 입력 데이터를 병합(806)하여 벡터 레지스터 2(805)에 저장할 수 있다. 다시 말해, 정렬을 통해 데이터 순서가 정렬된 현재 컬럼의 입력 데이터와 논리적으로 연결된 이전 컬럼들의 입력 데이터가 물리적으로 연결되도록 붙여서 벡터 레지스터에 저장될 수 있다. 이처럼 병합을 통해, 현재 컬럼의 입력 데이터와 이전 컬럼들의 입력데이터가 레지스터 처리 단위까지 붙여서 저장됨에 따라, ACS 연산 결과가 매우 작인 비트를 차지하더라도 낭비되는 비트가 감소 또는 제거될 수 있다.
이때, 병렬 연산부(601)는 이전 컬럼의 입력 데이터에 현재 컬럼의 입력 데이터를 병합하는 연산을 마지막 컬럼이 현재 컬럼이 될 때까지 레지스터 처리 단위마다 반복할 수 있다. 예를 들어, 레지스터 처리 단위가 16비트로 설정되고, 전체 컬럼이 160개로 구성된 경우, 병렬 연산부(601)는 전체 컬럼들을 대상으로 첫 번째 컬럼부터 16번째 컬럼까지 병합하여 병렬 레지스터부(602)에 저장할 수 있다. 그리고, 병렬 연산부(601)는 이러한 병합을 마지막 160 번째 컬럼까지 반복할 수 있다. 다시 말해, 병렬 연산부(601)는 레지스터 처리 단위에 기초하여 현재 컬럼의 입력 데이터를 병합하는 연산을 10번(160개 컬럼/16비트) 반복할 수 있다. 그러면, 병렬 레지스터부(602)는 데이터 순서가 정렬된 16개의 컬럼들 각각의 입력 데이터를 10번에 걸쳐서 데이터 저장부(604)에 저장할 수 있다.
한편, 데이터 정렬부(603)가 현재 컬럼의 입력 데이터 순서를 정렬하는 경우, 현재 컬럼에 속하는 각 소스 노드들은 ACS 연산 수행 이후에 데이터 정렬 및 경로를 선택하는 과정이 수행되므로, 현재 컬럼의 입력 데이터 순서는 이전 컬럼의 입력 데이터 순서와 서로 달라질 수 있다. 이로 인해, 병렬 연산부(601)는 현재 컬럼의 소스 노드와 이전 컬럼의 소스 노드 간의 논리적 연결 관계를 나타내는 인덱스 정보를 병렬 레지스터부(602)에 저장할 수 있다. 이때, 병렬 연산부(601)는 트레일리스 다이어그램(Trellis Diagram)을 이용하여 이전 컬럼의 소스 노드와 현재 컬럼의 소스 노드 간의 논리적 연결 관계를 결정할 수 있다. 이처럼, 인덱스 정보는, 컬럼 별로 ACS 연산을 수행할 때마다 생성되며, 생성되는 인덱스 정보를 컬럼 별로 저장하는 경우, 메모리가 낭비되어 많은 메모리가 필요하고 하드웨어 로직의 크기가 증가할 수 있다.
이때, 병렬 레지스터부(602)에는 컬럼 별로 인덱스 정보를 저장되지 않고, 레지스터 처리 단위마다 인덱스 정보가 저장됨에 따라 메모리의 낭비가 감소 또는 제거되고, 결국 하드웨어 로직의 크기를 감소될 수 있다.
상세하게는, 병렬 연산부(601)는 현재 레지스터의 첫 번째 컬럼의 각 소스 노드와 논리적으로 연결된 이전 레지스터의 마지막 컬럼의 각 소스 노드에 대한 인덱스 정보를 현재 레지스터에 저장할 수 있다.
예를 들어, 도 2를 참고하면, 벡터 레지스터 0(VR 0: 202)가 이전 컬럼들에 속하는 각 소스 노드의 입력 데이터가 저장된 이전 레지스터이고, 벡터 레지스터 1(VR 1: 203)이 현재 컬럼이 속하는 각 소스 노드의 입력 데이터가 저장된 현재 레지스터인 경우, 병렬 연산부(601)는 현재 컬럼이 속하는 각 소스 노드의 입력 데이터와 함께 현재 컬럼의 인덱스 정보를 벡터 레지스터 1(203)에 저장할 수 있다. 그러면, 레지스터 처리 단위가 k비트로 기설정되고, 전체 컬럼이 n개로 구성된 경우, 병렬 연산부(601)는 n번째 컬럼에 속하는 각 소스 노드의 입력 데이터를 저장할 때까지 k비트마다 인덱스 정보를 병렬 레지스터부(602)에 저장할 수 있다.
그리고, 데이터 저장부(604)는 병렬 레지스터부(602)에 임시로 저장된 ACS 연산 결과들을 저장할 수 있다. 예를 들어, 데이터 저장부(604)는 입력 데이터 순서가 정렬된 컬럼 별 입력 데이터, 레지스터 처리 단위 마다 인덱스 정보, 및 최종 소스 노드의 경로값 등을 저장할 수 있다. 그러면, ACS 연산 결과가 데이터 저장부(604)에 저장된 경우, 병렬 레지스터부(602)는 레지스터를 비우고 다시 새로운 연산을 수행하는 데 이용될 수 있다.
이상의 도 6에서는 데이터 저장부(604)가 데이터 순서가 정렬된 입력 데이터를 저장하는 것에 대해 설명하였으나, 이는 실시예에 해당되며, 병렬 연산 처리 장치(600)는 병렬 레지스터부(602)와 바로 연결된 데이터 저장부 2를 포함할 수도 있다. 그러면, 데이터 저장부 2는 BMC 연산 결과와 같이, 연산 결과 데이터의 순서가 바뀌지 않아도 되는 데이터를 저장하기 위해 이용될 수 있다.
도 9는 본 발명의 일실시예에 따른 TB 연산을 병렬로 처리하는 구성을 도시한 도면이다. 도 9에서, TB 연산은 도 1의 병렬 연산부(150)에 의해 수행될 수 있다.
병렬 연산 처리 장치는, 마지막 컬럼인 n번째 컬럼에 속하는 m개의 소스 노드들의 경로값을 각각 비교할 수 있다. 그리고, 병렬 연산 처리 장치는, m개의 소스 노드들 중 경로값이 최소인 소스 노드를 최종 소스 노드로 결정할 수 있다. 이어, 병렬 연산 처리 장치는, 최종 소스 노드와 논리적으로 연결된 이전 컬럼들에 속하는 소스 노드의 입력 데이터를 역추적(Traceback: 903)할 수 있다. 예를 들어, 전체 컬럼의 개수가 n+1개이고, 소스 노드의 개수가 m=8이고, 8개의 소스 노드들 중 소스 노드 2의 경로값이 가장 작은 경우, 병렬 연산 처리 장치는, 마지막 n+1번째 컬럼에 속하는 소스 노드 2를 최종 소스 노드로 결정할 수 있다. 그리고, 병렬 연산 처리 장치는, 소스 노드 2와 논리적으로 연결된 이전 컬럼 n에 속하는 소스 노드 5의 입력 데이터를 역추적할 수 있다. 마찬가지로, 병렬 연산 처리 장치는, 이전 컬럼에 속하는 소스 노드 5와 논리적으로 연결된 이전 컬럼 n-1에 속하는 소스 노드 3의 입력 데이터를 역추적할 수 있다. 동일한 방법으로, 병렬 연산 처리 장치는, 첫 번째 컬럼인 이전 컬럼 n=0까지 역추적을 반복하여 모든 입력 데이터를 획득할 수 있다.
도 10은 본 발명의 일실시예에 따른 병렬 연산 처리 장치에서 SIMD 프로세서를 이용하여 비터비 디코딩을 병렬로 처리하는 방법을 설명하기 위해 제공되는 흐름도이다.
먼저, 1001 단계에서, 병렬 연산 처리 장치는, 현재 컬럼(column)에 속하는 각 소스 노드(source node)에서의 경로값을 계산할 수 있다. 여기서, 경로값은 컬럼 별로 계산된 각 소스 노드에서의 메트릭을 현재 컬럼을 기준으로 누적한 값을 의미할 수 있다.
이어, 1002 단계에서, 병렬 연산 처리 장치는, 경로값에 기초하여 경로를 선택할 수 있다. 예를 들어, 현재 컬럼에 속하는 각 소스 노드에서의 경로값이 복수개인 경우, 병렬 연산 처리 장치는, 복수의 경로값들 중 가장 작은 경로값을 최소 경로값으로 결정하고, 결정된 최소 경로값에 해당하는 경로를 선택할 수 있다.
그리고, 1003 단계에서, 병렬 연산 처리 장치는, 선택된 경로에 기초하여 현재 컬럼에 속하는 소스 노드와 연결된 이전 컬럼에 속하는 소스 노드를 결정할 수 있다. 예를 들어, 현재 컬럼에 속하는 소스 노드 2와 경로 1을 통해 이전 컬럼에 속하는 소스 노드 1이 논리적으로 연결, 현재 컬럼에 속하는 소스 노드 2와 경로 4를 통해 이전 컬럼에 속하는 소스 노드 4가 논리적으로 연결되고, 소스 노드 2와 소스 노드 1에 해당하는 경로값이 10, 소스 노드 2와 소스 노드 4에 해당하는 경로값이 8인 경우, 병렬 연산 처리 장치는, 경로값 8을 현재 컬럼에 속하는 소스 노드 2에서의 최소 경로값으로 결정하고, 소스 노드 2와 논리적으로 연결된 경로 1 및 경로 4 중 최소 경로값에 기초하여 경로 4를 선택할 수 있다.
이때, 병렬 연산 처리 장치는, 현재 컬럼에 속하는 각 소스 노드에서의 최소 경로값을 이전 컬럼에 속하는 각 소스 노드에서의 최소 경로값이 저장된 위치에 덮어쓰기를 이용하여 저장할 수 있다. 예를 들어, 소스 노드 2에서의 최소 경로값 8을 이전 컬럼에 속하는 소스 노드 4에서의 최소 경로값이 저장된 위치에 덮어씌워 저장할 수 있다.
이어, 1004 단계에서, 병렬 연산 처리 장치는, 선택된 경로에 해당하는 입력 데이터를 결정할 수 있다. 예를 들어, 현재 컬럼에 속하는 소스 노드 2와 논리적으로 연결된 이전 컬럼에 속하는 소스 노드 1에 해당하는 입력 데이터가 0이고, 상기 소스 노드 2와 논리적으로 연결된 이전 컬럼에 속하는 소스 노드 4에 해당하는 입력 데이터가 1인 경우, 병렬 연산 처리 장치는 경로 4가 선택됨에 따라, 경로 4에 해당하는 입력 데이터를 '1'로 결정할 수 있다. 동일한 방법으로, 병렬 연산 처리 장치는, 현재 컬럼에 속하는 각 소스 노드에 대한 입력 데이터를 결정할 수 있다.
그리고, 1005 단계에서, 병렬 연산 처리 장치는, 현재 컬럼에 속하는 각 소스 노드의 입력 데이터의 순서를 정렬할 수 있다. 이때, 병렬 연산 처리 장치는, 이전 컬럼에 속하는 각 소스 노드의 입력 데이터 순서에 기초하여 현재 컬럼에 속하는 각 소스 노드의 입력 데이터 순서를 정렬할 수 있다.
일례로, 병렬 연산 처리 장치는, 현재 컬럼에 속하는 각 소스 노드의 입력 데이터가 현재 컬럼에 속하는 각 소스 노드와 논리적으로 연결된 이전 컬럼에 속하는 소스 노드의 입력 데이터와 물리적으로 연결되게(concatenate) 위치하도록 입력 데이터 순서를 정렬할 수 있다.
그러면, 1006 단계에서, 병렬 연산 처리 장치는, 데이터 순서가 정렬된 현재 컬럼의 입력 데이터를 이전 컬럼의 입력 데이터와 함께 레지스터 처리 단위에 따라 병합하여 저장할 수 있다. 이때, 병렬 연산 처리 장치는, 이전 컬럼의 입력 데이터에 비트 쉬프트 연산을 수행하여 이전 컬럼의 입력 데이터에 현재 컬럼의 입력 데이터를 병합하여 저장할 수 있다. 그러면, 이전 컬럼의 입력 데이터 옆에 나란히 묶여서 데이터 순서가 정렬된 현재 컬럼의 입력 데이터가 저장될 수 있다.
이때, 병렬 연산 처리 장치는, 컬럼 별로 ACS 연산이 수행됨에 따라 생성된 인덱스 정보를 계속 저장하지 않고, 레지스터 처리 단위마다 인덱스 정보를 저장할 수 있다.
일례로, 병렬 연산 처리 장치는, 현재 레지스터의 첫 번째 컬럼의 각 소스 노드와 논리적으로 연결된 이전 레지스터의 마지막 컬럼의 각 소스 노드를 나타내는 인덱스 정보를 현재 레지스터에 저장할 수 있다. 이처럼, 병렬 연산 처리 장치는, 레지스터 처리 단위마다 인덱스 정보를 저장하고, 이전 컬럼의 입력 데이터에 현재 컬럼의 입력 데이터를 병합하여 저장함에 따라, 메모리의 낭비를 감소 또는 제거하고, 결국, 하드웨어 로직(logic)의 크기를 감소시킬 수 있다.
그리고, 1007 단계에서, 병렬 연산 처리 장치는, 최종 소스 노드를 기준으로 이전 컬럼들에 속하는 소스 노드의 입력 데이터를 역추적할 수 있다.
일례로, 전체 컬럼의 개수가 n+1개인 경우, 병렬 연산 처리 장치는, 마지막 n+1번째 컬럼에 속하는 각 소스 노드에서의 경로값을 계산할 수 있다. 그리고, 병렬 연산 처리 장치는 계산된 경로값들 중 가장 작은 경로값을 최소 경로값으로 결정하고, 최소 경로값에 해당하는 소스 노드를 최종 소스 노드로 결정할 수 있다. 이어, 병렬 연산 처리 장치는, 최종 소스 노드를 기준으로 최종 소스 노드와 논리적으로 연결된 이전 컬럼들의 입력 데이터를 역추적할 수 있다. 이때, 병렬 연산 처리 장치는 n=0인 첫 번째 컬럼까지 입력 데이터에 대한 역추적을 반복하여, 전체 컬럼에 대한 입력 데이터들을 모두 획득할 수 있다.
지금까지, 병렬 연산 처리 장치가, 이전 컬럼에 속하는 각 소스 노드의 입력 데이터와 현재 컬럼에 속하는 각 소스 노드의 입력 데이터를 병합하여 병렬 레지스터부에 저장함으로써, 낭비되는 메모리를 제거 또는 감소하는 구성에 대해 설명하였다.
이상에서 설명한 바와 같이, 병렬 연산 처리 장치는, 2개의 입력 데이터와 2개의 경로값을 입력받아 ACS 연산을 수행하여 1개의 ACS 연산 결과를 출력할 수 있다. 이처럼, 4개의 데이터를 입력받는 경우, 하드웨어 로직의 크기가 매우 커질 수 있다. 그러나, 도 2를 참고하면, 본 발명의 일실시예에 따른 병렬 연산 처리 장치는 2개의 데이터만을 입력 받아 ACS 연산을 수행하여 1개의 ACS 연산 결과를 출력할 수 있다.
도 11은 본 발명의 일실시예에 따른 병렬 연산 처리 장치에서 2개의 데이터 입력으로 연산을 처리하는 구성을 설명하기 위해 제공되는 도면이다. 도 11에서, 2개의 데이터 입력에 대한 연산은 도 1의 병렬 연산부(150)에 의해 수행될 수 있다.
도 11에 따르면, 병렬 연산 처리 장치는, 현재 컬럼에 속하는 각 소스 노드로 입력되는 경로들 중 입력 데이터 0에 해당하는 포트 0와 입력 데이터 1에 해당하는 포트 1를 나누어 처리할 수 있다.
일례로, 병렬 연산 처리 장치는, 현재 컬럼에 속하는 각 소스 노드(1101)와 논리적으로 연결된 이전 컬럼에 속하는 각 소스 노드(1102) 중에서, 포트 0을 통해 현재 컬럼의 소스 노드와 논리적으로 연결된 이전 컬럼의 소스 노드(1104)와 포트 1을 통해 현재 컬럼의 소스 노드와 논리적으로 연결된 이전 컬럼의 소스 노드(1102)에 해당하는 이전 컬럼의 소스 노드(1005)를 서로 분리하여 배열할 수 있다. 예를 들어, 현재 컬럼의 소스 노드 0와 포트 0을 통해 연결된 이전 컬럼의 소스 노드는 소스 노드 0, 현재 컬럼의 소스 노드 1과 포트 0을 통해 연결된 이전 컬럼의 소스 노드는 소스 노드 2이다. 마찬가지로, 도 11에 따르면, 현재 컬럼의 소스 노드 3부터 7까지 각각 논리적으로 연결된 이전 컬럼의 소스 노드를 확인할 수 있다. 그러면, 현재 컬럼의 각 소스 노드(1101)와 포트 0을 통해 논리적으로 연결된 이전 컬럼의 소스 노드(1004)는 소스 노드 '0, 2, 4, 6, 0, 2, 4, 6'일 수 있다. 마찬가지로, 현재 컬럼의 각 소스 노드(1101)와 포트 1을 통해 논리적으로 연결된 이전 컬럼의 소스 노드(1005)는 소스 노드 '1, 3, 5,7, 1,3, 5, 7'일 수 있다.
그리고, 병렬 연산 처리 장치는, 현재 컬럼에 속하는 각 소스 노드에서 선택된 경로에 해당하는 입력 데이터를 결정할 수 있다. 이때, 병렬 연산 처리 장치는, 포트 0 및 포트 1을 분리하여 상기 입력 데이터를 결정할 수 있다. 예를 들어, 포트 0에서 입력 데이터를 결정하는 경우, 병렬 연산 처리 장치는, 현재 컬럼의 소스 노드 0(1108)에서 결정된 경로에 해당하는 입력 데이터를 '0'으로 결정할 수 있다. 동일한 방법으로, 병렬 연산 처리 장치는, 현재 컬럼의 소스 노드 1 내지 소스 노드 7 각각에서 결정된 경로에 해당하는 입력 데이터를 결정할 수 있다. 그러면, 소스 노드 0 내지 소스 노드 7 각각에서 결정된 입력 데이터는, '0, 1, 0, 0, 1, 1, 1, 1'을 포함할 수 있다. 마찬가지로, 포트 0에서 입력 데이터를 결정하는 경우, 병렬 연산 처리 장치는, 현재 컬럼의 소스 노드 0 내지 7 각각에서 입력 데이터를 결정할 수 있다. 이때, 포트 1에서, 결정된 입력 데이터는, '0, 1, 0, 0, 1, 1, 1, 1'을 포함할 수 있다.
이어, 병렬 연산 처리 장치는, 결정된 입력 데이터 중 입력 데이터가 '0'에 해당하는 현재 컬럼의 소스 노드와 연결된 이전 컬럼의 소스 노드를 결정할 수 있다.
일례로, 포트 0인 경우, 병렬 연산 처리 장치는, 결정된 입력 데이터들(1106) 중에서 입력 데이터가 '0'에 해당하는 현재 컬럼의 소스 노드를 선택할 수 있다. 예를 들어, 입력 데이터가 '0'에 해당하는 현재 컬럼의 소스 노드는 소스 노드 0, 소스 노드 2, 및 소스 노드 3을 포함할 수 있다. 그러면, 병렬 연산 처리 장치는, 선택된 현재 컬럼의 소스 노드와 논리적으로 연결된 이전 컬럼의 소스 노드를 결정할 수 있다. 예를 들어, 입력 데이터가 '0'에 해당하는 현재 컬럼의 소스 노드 0, 2, 및 3과 연결된 이전 컬럼의 소스 노드(1109)는 소스 노드 0, 소스 노드 4, 및 소스 노드 6으로 결정될 수 있다.
동일한 방법으로, 포트 1인 경우, 병렬 연산 처리 장치는, 결정된 입력 데이터들(1107) 중에서 입력 데이터가 '1'에 해당하는 현재 컬럼의 소스 노드를 선택할 수 있다. 예를 들어, 입력 데이터가 '1'에 해당하는 현재 컬럼의 소스 노드는 소스 노드 1, 소스 노드 4 내지 소스 노드 7을 포함할 수 있다. 그러면, 병렬 연산 처리 장치는, 선택된 현재 컬럼의 소스 노드와 논리적으로 연결된 이전 컬럼의 소스 노드를 결정할 수 있다. 예를 들어, 입력 데이터가 '1'에 해당하는 현재 컬럼의 소스 노드 0, 4 내지 7과 각각 논리적으로 연결된 이전 컬럼의 소스 노드(1110)는 소스 노드 3, 소스 노드 1, 소스 노드 3, 소스 노드 5, 및 소스 노드 7로 각각 결정될 수 있다.
그러면, 병렬 연산 처리 장치는, 포트 0에서 선택된 현재 컬럼의 소스 노드와 논리적으로 연결된 이전 컬럼의 소스 노드와 포트 1에서 선택된 현재 컬럼의 소스 노드와 논리적으로 연결된 이전 컬럼의 소스 노드를 XOR 연산할 수 있다. 그리고, 병렬 연산 처리 장치는, 상기 XOR 연산 결과를 통해 현재 컬럼의 각 소스 노드와 논리적으로 연결된 이전 컬럼의 소스 노드들 중에서 선택된 경로에 해당하는 이전 컬럼의 각 소스 노드를 결정(1112)할 수 있다.
예를 들어, 병렬 연산 처리 장치는, XOR 연산을 통해 '0, 3, 4, 6, 1, 3, 5, 7'을 연산 결과로 출력할 수 있다. 그러면, 병렬 연산 처리 장치는, 연산 결과 '0'에 기초하여 현재 컬럼의 소스 노드 0와 이전 컬럼의 소스 노드 0가 논리적으로 연결, 연산 결과 '3'에 기초하여 현재 컬럼의 소스 노드 1과 이전 컬럼의 소스 노드 3이 논리적으로 연결됨을 결정할 수 있다. 동일한 방법으로, 연산 처리 장치는 XOR 연산 결과에 기초하여 현재 컬럼의 소스 노드 2 내지 현재 컬럼의 소스 노드 7과 논리적으로 연결된 이전 컬럼의 소스 노드를 각각 결정할 수 있다.
이처럼, 병렬 연산 처리 장치는, ACS 연산을 포트 0 및 포트 1로 나누어 처리하고, XOR 연산을 이용함에 따라, 현재 컬럼의 각 소스 노드와 논리적으로 연결된 이전 컬럼의 소스 노드들 중에서, 현재 컬럼의 소스 각 소스 노드에서 선택된 경로에 해당하는 이전 컬럼의 소스 노드를 결정할 수 있다. 이에 따라, 병렬 연산 처리 장치는, 2개의 데이터를 입력받아 ACS 연산을 수행하고, 1개의 ACS 연산 결과를 출력할 수 있다. 이처럼, ACS 연산 시 요구되는 데이터 입력의 개수가 4개에서 2개로 감소함에 따라, 하드웨어 로직의 복잡도가 감소할 수 있다.
본 발명의 일 실시예에 따른 방법은 다양한 컴퓨터 수단을 통하여 수행될 수 있는 프로그램 명령 형태로 구현되어 컴퓨터 판독 가능 매체에 기록될 수 있다. 상기 컴퓨터 판독 가능 매체는 프로그램 명령, 데이터 파일, 데이터 구조 등을 단독으로 또는 조합하여 포함할 수 있다. 상기 매체에 기록되는 프로그램 명령은 본 발명을 위하여 특별히 설계되고 구성된 것들이거나 컴퓨터 소프트웨어 당업자에게 공지되어 사용 가능한 것일 수도 있다. 컴퓨터 판독 가능 기록 매체의 예에는 하드 디스크, 플로피 디스크 및 자기 테이프와 같은 자기 매체(magnetic media), CD-ROM, DVD와 같은 광기록 매체(optical media), 플롭티컬 디스크(floptical disk)와 같은 자기-광 매체(magneto-optical media), 및 롬(ROM), 램(RAM), 플래시 메모리 등과 같은 프로그램 명령을 저장하고 수행하도록 특별히 구성된 하드웨어 장치가 포함된다. 프로그램 명령의 예에는 컴파일러에 의해 만들어지는 것과 같은 기계어 코드뿐만 아니라 인터프리터 등을 사용해서 컴퓨터에 의해서 실행될 수 있는 고급 언어 코드를 포함한다. 상기된 하드웨어 장치는 본 발명의 동작을 수행하기 위해 하나 이상의 소프트웨어 모듈로서 작동하도록 구성될 수 있으며, 그 역도 마찬가지이다.
이상과 같이 본 발명은 비록 한정된 실시예와 도면에 의해 설명되었으나, 본 발명은 상기의 실시예에 한정되는 것은 아니며, 본 발명이 속하는 분야에서 통상의 지식을 가진 자라면 이러한 기재로부터 다양한 수정 및 변형이 가능하다.
그러므로, 본 발명의 범위는 설명된 실시예에 국한되어 정해져서는 아니 되며, 후술하는 특허청구범위뿐 아니라 이 특허청구범위와 균등한 것들에 의해 정해져야 한다.
100: 병렬 연산 처리 장치
110: 명령어 저장부
120: 제어부
130: 스칼라 연산부
140: 스칼라 레지스터부
150: 병렬 연산부
160: 병렬 레지스터부
170: 데이터 정렬부
180: 데이터 저장부

Claims (19)

  1. 현재 컬럼(column)에 속하는 각 소스 노드(source node)에서의 경로값을 계산하고, 상기 경로값을 이용하여 선택된 경로에 해당하는 입력 데이터와 이전 컬럼에 속하는 소스 노드를 각각 결정하는 병렬 연산부-상기 이전 컬럼에 속하는 소스 노드는, 상기 선택된 경로에 기초하여 상기 현재 컬럼에 속하는 소스 노드와 논리적으로 연결된 소스 노드임-; 및
    상기 이전 컬럼에 속하는 각 소스 노드의 입력 데이터 순서에 기초하여 상기 현재 컬럼에 속하는 각 소스 노드의 입력 데이터 순서를 정렬하는 데이터 정렬부
    를 포함하고,
    상기 병렬 연산부는,
    상기 이전 컬럼의 입력 데이터와 상기 순서가 정렬된 현재 컬럼의 입력 데이터를 레지스터 처리 단위에 따라 병합하여 병렬 레지스터부에 저장하는 것을 특징으로하는 병렬 연산 처리 장치.
  2. 제1항에 있어서,
    상기 병렬 연산부는,
    상기 이전 컬럼의 입력 데이터에 대해 비트 쉬프트(bit shift) 연산을 수행하여 상기 이전 컬럼의 입력 데이터에 상기 현재 컬럼의 입력 데이터를 병합하여 저장하는 것을 특징으로 하는 병렬 연산 처리 장치.
  3. 제1항에 있어서,
    상기 데이터 정렬부는,
    상기 현재 컬럼에 속하는 각 소스 노드의 입력 데이터가 상기 현재 컬럼에 속하는 각 소스 노드와 논리적으로 연결된 이전 컬럼에 속하는 소스 노드의 입력 데이터와 물리적으로 연결되게(concatenate) 위치하도록 상기 입력 데이터 순서를 정렬하는 것을 특징으로 하는 병렬 연산 처리 장치.
  4. 제1항에 있어서,
    상기 병렬 연산부는,
    상기 현재 컬럼에 속하는 각 소스 노드와 논리적으로 연결된 이전 컬럼의 소스 노드를 나타내는 인덱스 정보를 상기 레지스터 처리 단위마다 저장하는 것을 특징으로 하는 병렬 연산 처리 장치.
  5. 제4항에 있어서,
    상기 인덱스 정보는, 상기 선택된 경로에 기초하여 현재 레지스터의 첫 번째 컬럼의 각 소스 노드와 논리적으로 연결된 이전 레지스터의 마지막 컬럼의 각 소스 노드를 나타내는 정보인 것을 특징으로 하는 병렬 연산 처리 장치.
  6. 제1항에 있어서,
    상기 병렬 연산부는,
    현재 컬럼(column)에 속하는 각 소스 노드(source node)에서의 경로값이 복수개인 경우, 복수의 경로값들 중 최소 경로값을 결정하고, 상기 현재 컬럼(column)에 속하는 각 소스 노드(source node)에서의 최소 경로값을 이전 컬럼에 속하는 각 소스 노드에서의 최소 경로값이 저장된 위치에 덮어쓰기(overwrite)를 이용하여 상기 병렬 레지스터부에 저장하는 것을 특징으로 하는 병렬 연산 처리 장치.
  7. 제1항에 있어서,
    상기 병렬 연산부는,
    마지막 컬럼에 속하는 각 소스 노드에서의 경로값을 계산하고, 계산된 경로값들 중 최소 경로값에 해당하는 최종 소스 노드와 연결된 이전 컬럼들에 속하는 소스 노드의 입력 데이터를 역추적(Traceback)하는 것을 특징으로 하는 병렬 연산 처리 장치.
  8. 제7항에 있어서,
    상기 병렬 연산부는,
    상기 마지막 컬럼부터 첫 번째 컬럼에 속하는 소스 노드까지 상기 역추적을 반복함에 따라, 상기 최종 소스 노드와 연결된 각 소스 노드에 해당하는 입력 데이터를 획득하는 것을 특징으로 하는 병렬 연산 처리 장치.
  9. 제1항에 있어서,
    상기 경로값은, 비터비 디코딩(Viterbi Decoding)을 수행함에 따라 컬럼 별로 계산된 각 노드에서의 메트릭(metric)을 현재 컬럼을 기준으로 누적한 값인 것을 특징으로 하는 병렬 연산 처리 장치.
  10. 현재 컬럼(column)에 속하는 각 소스 노드(source node)에서의 경로값을 계산하는 단계;
    상기 경로값을 이용하여 선택된 경로에 해당하는 입력 데이터와 이전 컬럼에 속하는 소스 노드를 각각 결정하는 단계-상기 이전 컬럼에 속하는 소스 노드는, 상기 선택된 경로에 기초하여 상기 현재 컬럼에 속하는 소스 노드와 논리적으로 연결된 소스 노드임-;
    상기 이전 컬럼에 속하는 각 소스 노드의 입력 데이터 순서에 기초하여 상기 현재 컬럼에 속하는 각 소스 노드의 입력 데이터 순서를 정렬하는 단계; 및
    상기 이전 컬럼의 입력 데이터와 상기 순서가 정렬된 현재 컬럼의 입력 데이터를 레지스터 처리 단위에 따라 병합하여 저장하는 단계
    를 포함하는 병렬 연산 처리 방법.
  11. 제10항에 있어서,
    상기 레지스터 처리 단위에 따라 병합하여 저장하는 단계는,
    상기 이전 컬럼의 입력 데이터에 대해 비트 쉬프트(bit shift) 연산을 수행하여 상기 이전 컬럼의 입력 데이터에 상기 현재 컬럼의 입력 데이터를 병합하여 병렬 레지스터부에 저장하는 것을 특징으로 하는 병렬 연산 처리 방법.
  12. 제10항에 있어서,
    상기 입력 데이터 순서를 정렬하는 단계는,
    상기 현재 컬럼에 속하는 각 소스 노드의 입력 데이터가 상기 현재 컬럼에 속하는 각 소스 노드와 논리적으로 연결된 이전 컬럼에 속하는 소스 노드의 입력 데이터와 물리적으로 연결되게(concatenate) 위치하도록 상기 입력 데이터 순서를 정렬하는 것을 특징으로 하는 병렬 연산 처리 방법.
  13. 제10항에 있어서,
    상기 레지스터 처리 단위에 따라 병합하여 저장하는 단계는,
    상기 현재 컬럼에 속하는 각 소스 노드와 논리적으로 연결된 이전 컬럼의 소스 노드를 나타내는 인덱스 정보를 상기 레지스터 처리 단위마다 저장하는 것을 특징으로 하는 병렬 연산 처리 방법.
  14. 제13항에 있어서,
    상기 인덱스 정보는, 상기 선택된 경로에 기초하여 현재 레지스터의 첫 번째 컬럼의 각 소스 노드와 논리적으로 연결된 이전 레지스터의 마지막 컬럼의 각 소스 노드를 나타내는 정보인 것을 특징으로 하는 병렬 연산 처리 방법.
  15. 제10항에 있어서,
    상기 결정하는 단계는,
    현재 컬럼(column)에 속하는 각 소스 노드(source node)에서의 경로값이 복수개인 경우, 복수의 경로값들 중 최소 경로값을 결정하고,
    상기 레지스터 처리 단위에 따라 누적하여 저장하는 단계는,
    상기 현재 컬럼(column)에 속하는 각 소스 노드(source node)에서의 최소 경로값을 이전 컬럼에 속하는 각 소스 노드에서의 최소 경로값이 저장된 위치에 덮어쓰기(overwrite)를 이용하여 저장하는 것을 특징으로 하는 병렬 연산 처리 방법.
  16. 제10항에 있어서,
    상기 경로값을 계산하는 단계는,
    마지막 컬럼에 속하는 각 소스 노드에서의 경로값을 계산하고, 계산된 경로값들 중 최소 경로값에 해당하는 최종 소스 노드와 연결된 이전 컬럼들에 속하는 소스 노드의 입력 데이터를 역추적하는 것을 특징으로 하는 병렬 연산 처리 방법.
  17. 제16항에 있어서,
    상기 경로값을 계산하는 단계는,
    상기 마지막 컬럼부터 첫 번째 컬럼에 속하는 소스 노드까지 상기 역추적을 반복함에 따라, 상기 최종 소스 노드와 연결된 각 소스 노드에 해당하는 입력 데이터를 획득하는 것을 특징으로 하는 병렬 연산 처리 방법.
  18. 제10항에 있어서,
    상기 경로값은, 비터비 디코딩(Viterbi Decoding)을 수행함에 따라 컬럼 별로 계산된 각 노드에서의 메트릭(metric)을 현재 컬럼을 기준으로 누적한 값인 것을 특징으로 하는 병렬 연산 처리 방법.
  19. 제10항 내지 제18항 중 어느 한 항의 병렬 연산 처리 방법을 수행하는 프로그램을 수록한 컴퓨터 판독 가능 기록 매체.
KR1020110053512A 2011-06-02 2011-06-02 Simd 프로세서를 이용한 병렬 연산 처리 장치 및 방법 KR20120134549A (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
KR1020110053512A KR20120134549A (ko) 2011-06-02 2011-06-02 Simd 프로세서를 이용한 병렬 연산 처리 장치 및 방법
US13/364,687 US8769390B2 (en) 2011-06-02 2012-02-02 Apparatus and method for processing operations in parallel using a single instruction multiple data processor

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020110053512A KR20120134549A (ko) 2011-06-02 2011-06-02 Simd 프로세서를 이용한 병렬 연산 처리 장치 및 방법

Publications (1)

Publication Number Publication Date
KR20120134549A true KR20120134549A (ko) 2012-12-12

Family

ID=47262614

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020110053512A KR20120134549A (ko) 2011-06-02 2011-06-02 Simd 프로세서를 이용한 병렬 연산 처리 장치 및 방법

Country Status (2)

Country Link
US (1) US8769390B2 (ko)
KR (1) KR20120134549A (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11042502B2 (en) 2014-12-24 2021-06-22 Samsung Electronics Co., Ltd. Vector processing core shared by a plurality of scalar processing cores for scheduling and executing vector instructions

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9760372B2 (en) * 2011-09-01 2017-09-12 Hewlett Packard Enterprise Development Lp Parallel processing in plural processors with result register each performing associative operation on respective column data
US9342544B2 (en) 2014-01-30 2016-05-17 International Business Machines Corporation Parallel load in a column-store database
CN111523888B (zh) * 2020-04-16 2023-09-05 武汉有牛科技有限公司 基于区块链技术的链上数据及信息溯源系统

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5752001A (en) 1995-06-01 1998-05-12 Intel Corporation Method and apparatus employing Viterbi scoring using SIMD instructions for data recognition
US5838984A (en) 1996-08-19 1998-11-17 Samsung Electronics Co., Ltd. Single-instruction-multiple-data processing using multiple banks of vector registers
US5805875A (en) 1996-09-13 1998-09-08 International Computer Science Institute Vector processing system with multi-operation, run-time configurable pipelines
US6665790B1 (en) 2000-02-29 2003-12-16 International Business Machines Corporation Vector register file with arbitrary vector addressing
WO2002003637A1 (de) * 2000-07-03 2002-01-10 Infineon Technologies Ag Viterbi-entzerrer mittels verschiedener hardware-datenpfaden für acs und übertr agungsmetriken operationen
US6922716B2 (en) 2001-07-13 2005-07-26 Motorola, Inc. Method and apparatus for vector processing
US7315934B2 (en) * 2002-03-06 2008-01-01 Matsushita Electric Industrial Co., Ltd. Data processor and program for processing a data matrix
US6718504B1 (en) * 2002-06-05 2004-04-06 Arc International Method and apparatus for implementing a data processor adapted for turbo decoding
US6954841B2 (en) * 2002-06-26 2005-10-11 International Business Machines Corporation Viterbi decoding for SIMD vector processors with indirect vector element access
GB2394571B (en) 2002-10-23 2005-08-10 Motorola Inc Arrangement system and method for vector permutation in single-instruction multiple-data microprocessors
US7343530B2 (en) 2004-02-10 2008-03-11 Samsung Electronics Co., Ltd. Turbo decoder and turbo interleaver
US7275204B2 (en) 2004-09-30 2007-09-25 Marvell International Ltd. Distributed ring control circuits for Viterbi traceback
KR100725931B1 (ko) * 2004-12-17 2007-06-11 한국전자통신연구원 하이브리드 역추적 장치 및 그를 이용한 고속 비터비 복호시스템
US7933405B2 (en) 2005-04-08 2011-04-26 Icera Inc. Data access and permute unit
US8966223B2 (en) 2005-05-05 2015-02-24 Icera, Inc. Apparatus and method for configurable processing
KR100726171B1 (ko) 2005-09-28 2007-06-11 한국전자통신연구원 비터비 복호 장치 및 방법
US7979781B2 (en) * 2006-11-10 2011-07-12 Samsung Electronics Co., Ltd. Method and system for performing Viterbi decoding using a reduced trellis memory
US20080133879A1 (en) 2006-12-05 2008-06-05 Electronics And Telecommunications Research Institute SIMD parallel processor with SIMD/SISD/row/column operation modes
US8099657B2 (en) * 2008-07-11 2012-01-17 Freescale Semiconductor, Inc. Error correcting Viterbi decoder
US8627189B2 (en) * 2009-12-03 2014-01-07 Microsoft Corporation High performance digital signal processing in software radios
US8495480B2 (en) * 2010-06-09 2013-07-23 Topcon Positioning Systems, Inc. Method and apparatus for signal-to-noise ratio estimation in convolutional codes (Viterbi) decoder

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11042502B2 (en) 2014-12-24 2021-06-22 Samsung Electronics Co., Ltd. Vector processing core shared by a plurality of scalar processing cores for scheduling and executing vector instructions

Also Published As

Publication number Publication date
US8769390B2 (en) 2014-07-01
US20120311302A1 (en) 2012-12-06

Similar Documents

Publication Publication Date Title
KR102413832B1 (ko) 벡터 곱셈 덧셈 명령
CN107077322A (zh) 用于执行转换运算的装置和方法
CN107851019B (zh) 用于执行叠接操作的设备和方法
US8959275B2 (en) Byte selection and steering logic for combined byte shift and byte permute vector unit
JP6616608B2 (ja) 半導体装置
CN104111818B (zh) 用于批量线程处理的处理器、处理方法和代码生成设备
US9965275B2 (en) Element size increasing instruction
US10409604B2 (en) Apparatus and method for performing multiply-and-accumulate-products operations
KR102560424B1 (ko) 와이드 데이터 타입들의 비교
KR20120134549A (ko) Simd 프로세서를 이용한 병렬 연산 처리 장치 및 방법
US20200278865A1 (en) Hazard Mitigation for Lightweight Processor Cores
US10768897B2 (en) Arithmetic logic unit for single-cycle fusion operations
JP4255475B2 (ja) データ駆動型情報処理装置
JP7324754B2 (ja) ベクトル・キャリー付き加算命令
CN108228238B (zh) 用于确定具有多个数据元素的数据集合中的最小的两个值的方法及装置
KR20120077177A (ko) Simd 프로세서를 이용하는 갈로아 필드 이진 다항식 제산 장치 및 방법
JP2016224596A (ja) 加減算器及び加減算器の制御方法
CN104317554A (zh) 用于simd处理器的寄存器文件数据读写装置和方法
US11550574B2 (en) Generating a vector predicate summary
US6240540B1 (en) Cyclic redundancy check in a computer system
US8892622B2 (en) Pipelined divide circuit for small operand sizes
JP4873546B2 (ja) データ処理装置、データ処理方法
US9411582B2 (en) Apparatus and method for processing invalid operation in prologue or epilogue of loop
KR102628658B1 (ko) 뉴럴 프로세서 및 뉴럴 프로세서의 제어 방법
US11669489B2 (en) Sparse systolic array design

Legal Events

Date Code Title Description
E902 Notification of reason for refusal
E601 Decision to refuse application