KR102343652B1 - 벡터 프로세서의 서열 정렬 방법 - Google Patents

벡터 프로세서의 서열 정렬 방법 Download PDF

Info

Publication number
KR102343652B1
KR102343652B1 KR1020170064502A KR20170064502A KR102343652B1 KR 102343652 B1 KR102343652 B1 KR 102343652B1 KR 1020170064502 A KR1020170064502 A KR 1020170064502A KR 20170064502 A KR20170064502 A KR 20170064502A KR 102343652 B1 KR102343652 B1 KR 102343652B1
Authority
KR
South Korea
Prior art keywords
sequence
group
elements
vector
groups
Prior art date
Application number
KR1020170064502A
Other languages
English (en)
Other versions
KR20180129058A (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 KR1020170064502A priority Critical patent/KR102343652B1/ko
Priority to US15/802,844 priority patent/US10372451B2/en
Priority to TW107105795A priority patent/TWI771373B/zh
Priority to CN201810468470.9A priority patent/CN108959179B/zh
Priority to JP2018099367A priority patent/JP7241470B2/ja
Publication of KR20180129058A publication Critical patent/KR20180129058A/ko
Priority to US16/447,035 priority patent/US11442728B2/en
Priority to US16/447,041 priority patent/US11068265B2/en
Application granted granted Critical
Publication of KR102343652B1 publication Critical patent/KR102343652B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • 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/8092Array of vector units
    • 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/8007Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
    • 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/3001Arithmetic instructions
    • 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/30021Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
    • 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/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • 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/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • 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/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • G06F9/30038Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
    • 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 or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3816Instruction alignment, e.g. cache line crossing
    • 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 or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Computer Hardware Design (AREA)
  • Mathematical Optimization (AREA)
  • Mathematical Analysis (AREA)
  • Computational Mathematics (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computing Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Complex Calculations (AREA)
  • Multi Processors (AREA)
  • Advance Control (AREA)
  • Design And Manufacture Of Integrated Circuits (AREA)

Abstract

벡터 프로세서의 서열 정렬 방법이 제공된다. 상기 벡터 프로세서의 서열 정렬 방법은 복수의 원소를 포함하는 벡터 데이터 형태의 서열(sequence)을 로딩하고, 상기 서열을 절반으로 분할하여 제1 그룹들을 형성하고, 상기 제1 그룹들의 i번째 원소끼리 정렬하되, 상기 i는 자연수이고, 상기 정렬은 SIMD(Single Instruction Multiple Data) 처리 방식으로 처리되고, 상기 제n 그룹들을 각각 절반으로 분할하여 제n+1 그룹들을 형성하고, 상기 제n+1 그룹들 중 인접한 그룹들의 j번째 원소끼리 정렬하되, 상기 j는 자연수이고, 상기 n은 자연수이고, 상기 n+1 그룹들이 1개의 원소만을 포함하기 전까지, 상기 분할 및 원소끼리의 정렬을 반복하고, 상기 n+1 그룹들이 1개의 원소만을 포함하면, 상기 그룹들 중 인접한 그룹들의 원소끼리 정렬하는 것을 포함한다.

Description

벡터 프로세서의 서열 정렬 방법{Method for aligning sequence for vector processor}
본 발명은 벡터 프로세서의 서열 정렬 방법에 관한 것이다.
내림차순이나 오름차순과 같은 서열(sequence)의 정렬은 많은 시스템에서 사용되는 기본적인 함수이다. 퀵 정렬과 같이 O(nlog(n))의 연산 복잡도를 가지는 빠른 정렬은 개별적인 원소를 조작하는 방식이므로 SIMD(Single Instruction Multiple Data)나 SIMT(Single Instruction Multiple Thread)를 사용하는 벡터 프로세서에 적용하기에는 어려움이 있다.
그래서 대부분의 벡터 프로세서나 멀티코어에서는 병합정렬(merge sorting)을 많이 사용하는데, 병합 정렬은 이미 정렬된 데이터에 대해 빠른 특성을 가지고 있기 때문에 병합이전에 그룹화 된 원소들의 빠른 정렬이 필요하다. 일반적으로 이진 트리 구조의 병합정렬을 사용할 경우 그 복잡도는 데이터 집합 크기(N)의 O(Nlog2N)에 비례한다.
도 1은 종래의 일반적인 병합 정렬을 설명하기 위한 도면이다. 도 1에서는 원소의 개수 N=8인 서열을 오름차순으로 정렬하는 방법을 예시적으로 도시한다.
도 1을 참고하면, 병합 정렬은 서열을 먼저 분할(divide)한다. 기존의 스칼라 프로세서에서는 분할하는 것도 따로 작업이 필요하지만, 벡터 프로세서에서는 각각의 원소들이 벡터 구조로 연결되어 있으므로, 분할 작업이 별도로 필요하지는 않을 수 있다. 따라서, N개의 원소로 이루어진 서열의 로딩만으로 분할 작업은 완료될 수 있다.
이어서, 분할된 원소들 중 이웃된 원소들끼리 정렬을 한다. 이를 병합(merge) 단계라고 하고, 세분화 하여 병합 단계 중 정복(Conquer) 단계라고 명명할 수 있다. 즉, 8과 3의 경우 3이 8보다 더 작으므로 순서가 바뀌어 "38"로 정렬될 수 있다. 2와 9의 경우 2가 9보다 더 작으므로 그대로 "29"로 정렬된다. 이 때, 각각의 원소를 버퍼에 집어 넣어 호출해야하므로 N번 호출레벨이 달성된다. 즉, 최대 N, O(N)의 복잡도를 가질 수 있다.
이어서, 정렬된 부분 서열끼리 결합(combine)할 수 있다. 이러한 결합 단계는 병합 단계 중의 일부일 수 있다. 이 때, 인접한 서브 서열인 "38"과 "29"는 정렬된 "2389"로 결합되고, "17"과 "45"는 "1457"로 결합될 수 있다.
이 때, "38"과 "29"의 결합은 3과 2, 9를 비교하고, 8과 9를 비교하는 3번의 비교가 필요하므로 3번의 호출레벨이 필요하다. 또한, "17"과 "45"의 경우에는 1과 4,5를 비교하고, 7과 4,5를 비교해야 하므로 4번의 호출레벨이 필요하다. 즉, 2개의 서열끼리의 비교는 최악의 경우 4의 호출레벨이 필요하므로, 전체적으로 최대 8의 호출레벨이 필요하다. 즉, 복잡도는 O(N)이 될 수 있다.
마지막으로, "2389"와 "1457"을 결합하는 경우에 2는 1, 4, 5, 7과 비교되고, 3은 4, 5, 7과 비교되고, 8은 4, 5, 7과 비교되고, 9는 굳이 비교할 필요가 없다. 다만, 서열의 배치가 달리된 경우에 최대 N번의 비교가 필요할 수 있고, 이 경우에도 복잡도는 O(N)이 될 수 있다. 따라서, 각각의 단계에서 최대 N번의 호출레벨이 필요할 수 있고, 각 단계의 복잡도는 O(N)으로 볼 수 있다.
N개의 서열이 2개씩 나누어져 하나의 원소로 분해되는 것은 log2(N)번 이루어질 수 있고, 반대로 각각의 원소가 전체의 정렬된 서열로 결합되는 것도 log2(N)번 이루어질 수 있다. 따라서, 최악의 경우 전체적으로 N* log2(N)번의 호출레벨이 필요하다. 이는 전체적인 병합 정렬의 복작도가 O(N*log2 (N))의 복잡도를 가짐을 의미한다.
따라서, 이러한 복잡도의 정렬 방식보다 더 낮은 복잡도의 정렬방식을 사용하는 경우에 연산 속도와 메모리 등의 리소스 사용량을 줄여 효율적인 연산이 가능하다.
본 발명이 해결하려는 과제는, 연산 속도와 리소스 사용량을 줄여 효율적인 벡터 프로세서의 서열 정렬 방법을 제공하는 것이다.
본 발명이 해결하려는 과제들은 이상에서 언급한 과제들로 제한되지 않으며, 언급되지 않은 또 다른 과제들은 아래의 기재로부터 당업자에게 명확하게 이해될 수 있을 것이다.
상기 과제를 해결하기 위한 본 발명의 몇몇 실시예에 따른 벡터 프로세서에서의 서열 정렬 방법은, 복수의 원소를 포함하는 벡터 데이터 형태의 서열(sequence)을 로딩하고, 상기 서열을 절반으로 분할하여 제1 그룹들을 형성하고, 상기 제1 그룹들의 i번째 원소끼리 정렬하되, 상기 i는 자연수이고, 상기 정렬은 SIMD(Single Instruction Multiple Data) 처리 방식으로 처리되고, 상기 제n 그룹들을 각각 절반으로 분할하여 제n+1 그룹들을 형성하고, 상기 제n+1 그룹들 중 인접한 그룹들의 j번째 원소끼리 정렬하되, 상기 j는 자연수이고, 상기 n은 자연수이고, 상기 n+1 그룹들이 1개의 원소만을 포함하기 전까지, 상기 분할 및 원소끼리의 정렬을 반복하고, 상기 n+1 그룹들이 1개의 원소만을 포함하면, 상기 그룹들 중 인접한 그룹들의 원소끼리 정렬하는 것을 포함한다.
상기 과제를 해결하기 위한 본 발명의 몇몇 실시예에 따른 벡터 프로세서에서의 서열 정렬 방법은 N개의 원소를 포함하는 벡터 데이터 형태의 서열을 로딩하되, 상기 N는 2n이고, n은 자연수인 (a) 단계 및 상기 서열을 각각 서로 동일한 N/(2n) 개의 원소를 가지는 그룹으로 그루핑하여 각각의 그룹 중 인접한 그룹끼리 i번째 원소를 정렬하되, 상기 i는 N/(2n)보다 작은 자연수이고, 상기 정렬은 SIMD 처리 방식으로 처리되는 (b) 단계를 포함하고, 상기 (b) 단계는 퍼뮤테이션 연산을 이용하여 상기 서열과 순서가 바뀐 카피 서열을 생성하는 (c) 단계와, 상기 서열과 상기 카피 서열에 대하여 민맥스 연산을 수행하는 (d) 단계를 포함한다.
상기 과제를 해결하기 위한 본 발명의 몇몇 실시예에 따른 벡터 프로세서에서의 서열 정렬 방법은 각각 별개의 연산유닛을 포함하는 복수의 슬롯과, 상기 복수의 슬롯이 서로 공유하는 레지스터를 포함하는 벡터 프로세서에서의 서열 정렬 방법에 있어서, N개의 원소를 포함하는 벡터 데이터 형태의 서열을 로딩하되, 상기 N는 2n이고, n은 자연수인 (a) 단계 및 상기 서열을 각각 서로 동일한 N/(2n) 개의 원소를 가지는 그룹으로 그루핑하여 각각의 그룹 중 인접한 그룹끼리 i번째 원소를 정렬하되, 상기 i는 자연수이고, 상기 정렬은 SIMD 처리 방식으로 처리되는 (b) 단계를 포함하고, 상기 (b) 단계는 상기 복수의 슬롯에 의해서 병렬 처리된다.
도 1은 병합 정렬의 일 예를 설명하기 위한 도면이다.
도 2는 본 발명의 몇몇 실시예에 따른 벡터 프로세서의 서열 정렬 방법을 설명하기 위한 순서도이다.
도 3a 내지 도 3d는 본 발명의 몇몇 실시예에 따른 벡터 프로세서의 서열 정렬 방법을 설명하기 위한 도면들이다.
도 4는 본 발명의 몇몇 실시예에 따른 벡터 프로세서의 서열 정렬 방법이 실행되는 벡터 프로세서의 구조를 설명하기 위한 블록도이다.
도 5는 도 4의 프로세서의 구조를 설명하기 위한 블록도이다.
도 6은 본 발명의 몇몇 실시예에 따른 벡터 프로세서의 데이터 이동 아키텍쳐를 설명하기 위한 개념도이다.
도 7은 본 발명의 몇몇 실시예에 따른 벡터 프로세서의 서열 정렬 방법에 사용되는 퍼뮤테이션 회로를 설명하기 위한 도면이다.
도 8은 본 발명의 몇몇 실시예에 따른 벡터 프로세서의 서열 정렬 방법에 사용되는 민맥스 회로를 설명하기 위한 도면이다.
도 9는 본 발명의 몇몇 실시예에 따른 벡터 프로세서의 서열 정렬 방법을 설명하기 위한 도면이다.
도 10은 본 발명의 몇몇 실시예에 따른 벡터 프로세서의 서열 정렬 방법 구현을 위한 명령어 집합을 설명하기 위한 표이다.
도 11a 내지 도 11d는 본 발명의 몇몇 실시예에 따른 벡터 프로세서의 서열 정렬 방법 구현을 위한 명령어 사용을 설명하기 위한 예시도이다.
이하에서, 도 2 및 도 3a 내지 도 3d를 참조하여 본 발명의 몇몇 실시예에 따른 벡터 프로세서의 서열 정렬 방법을 설명한다.
도 2는 본 발명의 몇몇 실시예에 따른 벡터 프로세서의 서열 정렬 방법을 설명하기 위한 순서도이고, 도 3a 내지 도 3d는 본 발명의 몇몇 실시예에 따른 벡터 프로세서의 서열 정렬 방법을 설명하기 위한 도면들이다. 도 3a 내지 도 3d에서는 16개의 원소를 가지는 서열을 정렬하는 것을 예시적으로 도시하였다. 단, 이에 제한되는 것은 아니다.
먼저, 도 2를 참조하면, 벡터 데이터를 입력한다(S100).
상기 벡터 데이터는 정렬되지 않은 서열 데이터일 수 있다. 정렬되지 않은 서열 데이터는 총 N개의 원소를 가질 수 있다. 이 때, N=2n 일 수 있고, 여기서, n은 자연수일 수 있다. 단, 이에 제한되는 것은 아니다. N이 2n 이 아닌 경우에는 더미 원소가 더해져서 2n의 형식에 맞춰질 수 있다. 각각의 N개의 원소는 서로 다른 SIMD 레인에서 연산될 수 있다. 따라서, 상기 서열의 SIMD 레인 개수는 N개 이상일 수 있다.
구체적으로 도 3a를 참조하면, 예시적으로 0 내지 F까지의 총 16개의 원소를 가지는 서열을 입력할 수 있다. 이는 하나의 예시일 뿐이므로, 본 발명에서 원소의 개수는 제한되지 않는다. 이 때, 입력은 새로이 데이터를 입력하거나, 미리 저장된 메모리에서 데이터를 로딩하는 것을 포함할 수 있다. 도 3a에서는 예시적으로 [1, 6, 14, 3, 12, 10, 15, 5, 7, 2, 8, 11, 16, 4, 13, 9]의 서열을 정렬하는 것을 도시한다.
다시, 도 2를 참조하면, 서열을 두개의 그룹으로 분리한다(S200).
구체적으로 도 3a를 참조하면, 제1 단계(Stage 1)에서 서열은 제1-1 그룹(G1-1)과 제1-2 그룹(G1-2)으로 분리될 수 있다.
제1-1 그룹(G1-1) 및 제1-2 그룹(G1-2)은 서열이 절반으로 나누어져 형성될 수 있다. 따라서, 제1-1 그룹(G1-1) 및 제1-2 그룹(G1-2)은 각각 N/2 즉, 8개의 원소를 가질 수 있다.
나누어진 제1-1 그룹(G1-1) 및 제1-2 그룹(G1-2)은 각각 0부터 7의 번호를 가지는 원소를 가지게 될 수 있다. 추후에 각각의 동일한 번호의 원소끼리 비교 정렬을 수행할 수 있다.
다시, 도 2를 참조하면, 그룹의 각 원소들을 비교한다(S300).
구체적으로, 도 3a를 참조하면, 제1-1 그룹(G1-1)과 제1-2 그룹(G1-2)을 서로 비교할 수 있다. 제1-1 그룹(G1-1)과 제1-2 그룹(G1-2)의 비교는 각각의 원소들의 비교일 수 있다. 즉, 제1-1 그룹(G1-1)의 0~7의 번호를 가지는 원소들과 제1-2 그룹(G1-2)의 0~7의 번호를 가지는 원소들을 서로 동일한 번호끼리 비교하여 정렬하는 것을 의미할 수 있다.
즉, 예를 들어, 제1-1 그룹(G1-1)의 0번 원소인 "1"과 제1-2 그룹(G1-2)의 0번 원소인 "7"을 비교한다. 이 때, 1이 7보다 작으므로, 서로의 위치는 그대로 유지된다.
반대로, 제1-1 그룹(G1-1)의 1번 원소인 "6"과 제1-2 그룹(G1-2)의 1번 원소인 "2"를 비교하면, 6이 2보다 크므로, 서로의 위치를 바꾸게된다. 즉, 2는 제1-1 그룹(G1-1)에 속하게 되고, 6은 제1-2 그룹(G1-2)에 속하게 될 수 있다.
이러한 방식을 통해서, 제1 단계(Stage 1)에서 2개의 그룹을 통한 원소 정렬의 결과 상기 서열은 [1, 2, 8, 3, 12, 4, 13, 5, 7, 6, 14, 11, 16, 10, 15, 9]로 정렬될 수 있다.
다시, 도 2를 참조하면, 각 그룹의 원소의 개수가 1개보다 큰지 판단한다(S400).
이는 추후에 1개의 원소가 남아있을때까지 그룹을 계속 분할하기 위한 판단 단계이다. 만일 원소가 1개만 남아있는 경우 더 이상 그룹을 분할할 수 없으므로, 그룹의 분할을 종료할 수 있다.
도 3a를 참조하면, 각 그룹의 원소가 8개이므로 1개보다 크다. 따라서, 그룹의 분할이 종료되지 않는다.
다시, 도 2를 참조하면, 각 그룹을 두개의 서브 그룹으로 분리한다(S500).
구체적으로, 도 3b를 참조하면, 제1-1 그룹(G1-1)은 제2-1 그룹(G2-1) 및 제2-2 그룹(G2-2)으로 분리되고, 제1-2 그룹(G1-2)은 제2-3 그룹(G2-3) 및 제2-4 그룹(G2-4)으로 분리될 수 있다.
제2-1 그룹(G2-1), 제2-2 그룹(G2-2), 제2-3 그룹(G2-3) 및 제2-4 그룹(G2-4)은 각각 제1-1 그룹(G1-1) 및 제1-2 그룹(G1-2)의 원소의 개수의 절반인 4개의 원소를 가질 수 있다. 제2 단계(Stage 2)에서는 상기 4개의 그룹의 원소 정렬을 수행할 수 있다. 상기 4개의 그룹은 각각 0부터 3까지의 번호를 가지는 4개의 원소를 가질 수 있다.
다시, 도 2를 참조하면, 첫번째 그룹부터 바로 이웃한 그룹의 원소끼리 비교한다(S600).
구체적으로, 도 3b를 참조하면, 제2-1 그룹(G2-1)과 제2-2 그룹(G2-2)을 서로 비교하고, 제2-3 그룹(G2-3)과 제2-4 그룹(G2-4)을 서로 비교할 수 있다. 즉, 제2-1 그룹(G2-1)과 제2-2 그룹(G2-2)의 같은 번호를 가지는 원소를 서로 비교하고, 제2-3 그룹(G2-3)과 제2-4 그룹(G2-4)의 같은 번호를 가지는 원소를 서로 비교할 수 있다.
이러한 방식을 통해서, 상기 서열은 [1, 2, 8, 3, 12, 4, 13, 5, 7, 6, 14, 9, 16, 10, 15, 11]로 정렬될 수 있다.
다시, 도 2를 참조하면, 두번째 그룹부터 이웃한 그룹끼리 비교한다(S700).
구체적으로, 도 3b를 참조하면, 첫번째 그룹과 마지막 그룹을 제외하고 제2-2 그룹(G2-2)과 제2-3 그룹(G2-3)의 원소를 서로 비교한다.
이를 통해서, 상기 서열은 [1, 2, 8, 3, 12, 4, 13, 5, 7, 6, 14, 9, 16, 10, 15, 11]로 정렬될 수 있다.
다시, 도 2를 참조하면, 비교 결과 이전과 동일한지를 판단한다(S800).
만일 비교 결과가 이전과 동일한 경우에는 현재 단계 즉, 제2 단계(Stage 2)가 종료되고, 새로운 단계 즉, 도 3c의 제3 단계(Stage 3)로 진행해야 한다. 제3 단계(Stage 3)는 현재의 그룹이 다시 분할되는 단계를 의미한다.
구체적으로, 도 3b를 참조하면, 서열이 9와 11 부분이 정렬되어 이전과 동일하지 않으므로, 아직 제3 단계(Stage 3)로 진입하지 않고, 제2 단계(Stage 2)에 머무를 수 있다.
다시, 도 2를 참조하면, 최대 정렬 횟수에 도달했는지 판단한다(S900).
최대 정렬 횟수란 각 단계마다 미리 정해진 정렬 횟수만큼만 정렬을 수행하고 다음 단계로 진행하도록 정의된 값이다. 상기 최대 정렬 횟수는 몇번째 단계인지에 따라서 정해질 수 있다. 즉, 제1 단계(Stage 1)의 경우 1번의 최대 정렬 횟수를 가지고, 제2 단계(Stage 2)의 경우 2번의 최대 정렬 횟수를 가진다. 또한, 제3 단계의 경우 4번의 최대 정렬 횟수를 가지고, 제4 단계(Stage 4)에서는 6번의 최대 정렬 횟수를 가질 수 있다. 이를 일반화하면, 제1 단계에서는 1번의 최대 정렬 횟수를 가지고, 제1 단계를 제외한 제k 단계에서는 2*(k-1)번의 최대 정렬 횟수를 가질 수 있다.
서열의 원소의 개수가 N=2n이므로, 제k 단계에서는 각 그룹은 2(n-k)개의 원소를 가지고, 2k개의 그룹을 형성할 수 있다.
즉, 도 2의 S800 및 S900의 단계를 살펴보면, 최대 정렬 횟수의 범위 내에서 정렬이 미리 종료될 수 있다. 즉, 이를 복잡도와 연관지어 생각해보면, 이므로, 마지막 제n 단계에서는 복잡도가 O(2*(log2(N)-1))이 될 수 있다. 전체 복잡도에 대해서는 추후에 다시 설명한다.
구체적으로, 도 3b를 참조하면, 제2 단계(Stage 2)는 최대 정렬 횟수인 2에 도달하였으므로, 다시 정렬하지 않고, 제3 단계(Stage 3)로 진행한다.
다시, 도 2를 참조하면, 원소의 개수가 1개인지 판단하고(S400), 각 그룹을 두개의 서브 그룹으로 분리한다(S500).
구체적으로, 도 3c를 참조하면, 제2-1 그룹(G2-1)은 제3-1 그룹(G3-1) 및 제3-2 그룹(G3-2)으로 분리되고, 제2-2 그룹(G2-2)은 제3-3 그룹(G3-3) 및 제3-4 그룹(G3-4)으로 분리될 수 있다. 제2-3 그룹(G2-3)은 제3-5 그룹(G3-5) 및 제3-6 그룹(G3-6)으로 분리되고, 제2-4 그룹(G2-4)은 제3-7 그룹(G3-7) 및 제3-8 그룹(G3-8)으로 분리될 수 있다.
제3-1 그룹(G3-1), 제3-2 그룹(G3-2), 제3-3 그룹(G3-3), 제3-4 그룹(G3-4), 제3-5 그룹(G3-5), 제3-6 그룹(G3-6), 제3-7 그룹(G3-7) 및 제3-8 그룹(G3-8)은 각각 제2-1 그룹(G2-1), 제2-2 그룹(G2-2), 제2-3 그룹(G2-3) 및 제2-4 그룹(G2-4)의 원소의 개수의 절반인 2개의 원소를 가질 수 있다. 제3 단계(Stage 3)에서는 상기 8개의 그룹의 원소 정렬을 수행할 수 있다. 상기 8개의 그룹은 각각 0부터 1까지의 번호를 가지는 2개의 원소를 가질 수 있다.
다시, 도 2를 참조하면, 첫번째 그룹부터 바로 이웃한 그룹의 원소끼리 비교한다(S600).
구체적으로, 도 3c를 참조하면, 제3-1 그룹(G3-1)과 제3-2 그룹(G3-2)을 서로 비교하고, 제3-3 그룹(G3-3)과 제3-4 그룹(G3-4)을 서로 비교할 수 있다. 또한, 제3-5 그룹(G3-5)과 제3-6 그룹(G3-6)을 서로 비교하고, 제3-7 그룹(G3-7)과 제3-8 그룹(G3-8)을 서로 비교할 수 있다.
즉, 제3-1 그룹(G3-1)과 제3-2 그룹(G3-2)의 같은 번호를 가지는 원소를 서로 비교하고, 제3-3 그룹(G3-3)과 제3-4 그룹(G3-4)의 같은 번호를 가지는 원소를 서로 비교할 수 있다. 또한, 제3-5 그룹(G3-5)과 제3-6 그룹(G3-6)의 같은 번호를 가지는 원소를 서로 비교하고, 제3-7 그룹(G3-7)과 제3-8 그룹(G3-8)의 같은 번호를 가지는 원소를 서로 비교할 수 있다.
이러한 방식을 통해서, 상기 서열은 [1, 2, 8, 3, 7, 4, 13, 5, 12, 6, 14, 9, 15, 10, 16, 11]로 정렬될 수 있다.
다시, 도 2를 참조하면, 두번째 그룹부터 이웃한 그룹끼리 비교한다(S700).
구체적으로, 도 3c를 참조하면, 첫번째 그룹과 마지막 그룹을 제외하고 제3-2 그룹(G3-2)과 제3-3 그룹(G3-3)의 원소를 서로 비교하고, 제3-4 그룹(G3-4)과 제3-5 그룹(G3-5)의 원소를 서로 비교하고, 제3-6 그룹(G3-6)과 제3-7 그룹(G3-7)의 원소를 서로 비교할 수 있다.
이를 통해서, 상기 서열은 [1, 2, 7, 3, 8, 4, 12, 5, 13, 6, 14, 9, 15, 10, 16, 11]로 정렬될 수 있다.
다시, 도 2 및 도 3c를 참조하면, 비교 결과가 이전과 동일하지 않고(S800), 최대 정렬 횟수에 도달하지도 않았으므로(S900), 다시 첫번째 그룹부터 이웃한 그룹의 원소 비교를 수행한다(S500).
이를 통해서, 상기 서열은 [1, 2, 7, 3, 8, 4, 12, 5, 13, 6, 14, 9, 15, 10, 16, 11]로 정렬될 수 있다.
상술한 설명에서는 비교 결과가 이전과 동일한지 판단하는 단계(S800)가 S600 및 S700의 두 단계를 모두 거친 뒤에 수행되도록 하였지만, 이에 제한되는 것은 아니다. S800 단계는 S600과 S700 단계 사이에서 수행될 수도 있고, S700 단계 직후에 수행될 수도 있고, S600과 S700 단계가 수행된 직후마다 수행될 수도 있다.
상기 정렬된 서열이 이전 결과와 동일하므로, 제3 단계(Stage 3)는 종료되고, 제4 단계로 진행할 수 있다. 이 때, 최대 정렬 횟수에는 도달하지 않았지만, 이를 판단할 필요는 없다.
다시, 도 2를 참조하면, 원소의 개수가 1개인지 판단하고(S400), 각 그룹을 두개의 서브 그룹으로 분리한다(S500).
구체적으로, 도 3d를 참조하면, 각각의 그룹은 각각 1개의 원소들로 분리될 수 있다.
즉, 원소 1개가 스스로 그룹을 이룰 수 있다. 따라서, 총 16개의 그룹이 있고, 상기 그룹은 각각 1개의 원소를 가질 수 있다.
다시, 도 2를 참조하면, 첫번째 그룹부터 바로 이웃한 그룹의 원소끼리 비교한다(S600).
구체적으로, 도 3d를 참조하면, 예를 들어, 1과 2를 비교하고, 7과 3을 비교한다. 이런식으로, 순차적으로 인접한 원소끼리 서로 비교하여 정렬할 수 있다.
이러한 방식을 통해서, 상기 서열은 [1, 2, 3, 7, 4, 8, 5, 12, 6, 13, 9, 14, 10, 15, 11, 16]으로 정렬될 수 있다.
다시, 도 2를 참조하면, 두번째 그룹부터 이웃한 그룹끼리 비교한다(S700).
구체적으로, 도 3d를 참조하면, 첫번째 원소와 마지막 원소를 제외하고 인접한 원소를 서로 비교한다. 예를 들어, 2와 3을 비교하고, 7과 4를 비교한다.
이러한 방식을 통해서, 상기 서열은 [1, 2, 3, 4, 7, 5, 8, 6, 12, 9, 13, 10, 14, 11, 15, 16]으로 정렬될 수 있다.
도 2 및 도 3d를 참조하면, 비교 결과가 이전과 동일하지 않고(S800), 최대 정렬 횟수에 도달하지도 않았으므로(S900), 다시 첫번째 그룹부터 이웃한 그룹의 원소 비교를 수행한다(S500).
이를 통해서, 상기 서열은 [1, 2, 3, 4, 5, 7, 6, 8, 9, 12, 10, 13, 11, 14, 15, 16]으로 정렬될 수 있다.
다시, 도 2를 참조하면, 두번째 그룹부터 이웃한 그룹끼리 비교한다(S700).
구체적으로, 도 3d를 참조하면, 첫번째 원소와 마지막 원소를 제외하고 인접한 원소를 서로 비교한다. 예를 들어, 2와 3을 비교하고, 4와 5를 비교한다.
이러한 방식을 통해서, 상기 서열은 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 11, 13, 14, 15, 16]으로 정렬될 수 있다.
도 2 및 도 3d를 참조하면, 비교 결과가 이전과 동일하지 않고(S800), 최대 정렬 횟수에 도달하지도 않았으므로(S900), 다시 첫번째 그룹부터 이웃한 그룹의 원소 비교를 수행한다(S500).
이를 통해서, 상기 서열은 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]으로 정렬될 수 있다.
다시, 도 2를 참조하면, 두번째 그룹부터 이웃한 그룹끼리 비교한다(S700).
구체적으로, 도 3d를 참조하면, 첫번째 원소와 마지막 원소를 제외하고 인접한 원소를 서로 비교한다. 예를 들어, 2와 3을 비교하고, 4와 5를 비교한다.
이러한 방식을 통해서, 상기 서열은 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]으로 정렬될 수 있다.
다시, 도 2를 참조하면, 비교 결과 이전과 동일하고(S800) 원소의 개수가 1보다 크지 않으므로(S400) 정렬이 종료될 수 있다.
상기 도 3a 내지 도 3d 및 도 3을 참조하면, 서열 전체의 크기는 N=2n이므로, 제1 단계(Stage 1)를 제외한 제k 단계에서의 정렬 횟수는 최대 2*(k-1) 번이고, 마지막 제n 단계에서의 최대 정렬 횟수는 n=log2(N)에 의해서 2*(log2(N)-1)이 될 수 있다.
따라서 제1 단계(Stage 1)를 제외한 전체 정렬 횟수는 수열의 합에 의해서 2 + 4 + 6 + ... + 2*(log2(N)-1)= [2 + 2*{log2(N) - 1}] * {log2(N) - 1}/ 2로 표현할 수 있고, 제1 단계(Stage 1)의 1번을 더하면 1+ 2 + 4 + 6 + ... + 2*(log2(N)-1)= 1+ [2 + 2*{log2(N) - 1}] * {log2(N) - 1}/ 2 ≒ {log2(N)}2로 근사가 가능하다.
따라서, 본 발명의 몇몇 실시예에 따른 벡터 프로세서의 서열 정렬 방법은 기존의 병합 정렬의 O(N*log2 (N))의 복잡도에 비해서 훨씬 낮은 O({log2(N)}2)의 복잡도를 가질 수 있다.
도 3a 내지 도 3d 및 도 2에서는 탑 다운(top down) 방식으로 점차 분해하는 정렬을 설명하였으나, 이와 반대로 바텀 업(bottom up) 방식으로도 정렬을 수행할 수 있다. 바텀 업 방식의 경우에도 기존의 병합 정렬의 O(N*log2 (N))의 복잡도에 비해서 훨씬 낮은 O({log2(N)}2)의 복잡도를 가질 수 있으므로, 정렬의 효율이 높아질 수 있다.
이하, 도 4 내지 도 6을 참조하여 본 발명의 몇몇 실시예에 따른 벡터 프로세서의 서열 정렬 방법이 실행되는 벡터 프로세서를 설명한다.
도 4는 본 발명의 몇몇 실시예에 따른 벡터 프로세서의 구조를 설명하기 위한 블록도이고, 도 5는 도 4의 프로세서의 구조를 설명하기 위한 블록도이다. 도 6은 본 발명의 몇몇 실시예에 따른 벡터 프로세서의 데이터 이동 아키텍쳐를 설명하기 위한 개념도이다.
도 4는 본 발명의 몇몇 실시예에 따른 벡터 프로세서의 서열 정렬 방법이 실행되는 벡터 프로세서의 구조를 설명하기 위한 블록도이다.
도 4를 참조하면, 벡터 프로세서는 프로세서(200), 컨트롤러(300) 및 메모리 버스(100)를 포함한다.
프로세서(200)는 산술 연산을 수행하는 프로세서이다. 본 발명의 몇몇의 실시예에서, 프로세서(200)는 예측(prediction) 연산, 벡터 퍼뮤트(vector permute) 연산, 벡터 비트 조작(vector bit manipulation) 연산, 버터플라이(butterfly) 연산, 정렬(sorting) 연산 등과 같은 벡터 특화 명령어들을 포함하는 벡터 연산 처리에 특화된 벡터 프로세서로 구현될 수 있다. 본 발명의 몇몇의 실시예에서, 프로세서(200)는 SIMD(Single Instruction Multiple Data) 및 다중 슬롯 VLIW(Very Long Instruction Word) 구조를 채택할 수 있다.
프로세서(200)는 레지스터(212, 214)를 포함하고, 레지스터(212, 214)를 이용하여 상기 산술 연산을 수행할 수 있다. 본 발명의 몇몇의 실시예에서, 레지스터(212, 214)는 SR(Scalar Register)(212) 및 VR(Vector Register)(214) 중 적어도 하나를 포함할 수 있다.
여기서, SR(212)은 프로세서(200)의 스칼라 연산에 사용되는 레지스터이고, VR(214)은 프로세서(200)의 벡터 연산에 사용되는 레지스터이다.
도 5를 참조하면, 프로세서(200)는 페치 유닛(220) 및 디코더(230)를 포함한다.
디코더(230)는 페치 유닛(220)으로부터 제공 받은 인스트럭션을 디코딩한다. 본 발명의 몇몇의 실시예에서, 상기 인스트럭션은 VLIW를 따라, 3 개의 슬롯(slot)(240a, 240b, 240c)에 의해 처리될수 있다. 예를 들어, 페치 유닛(220)으로부터 페치된 인스트럭션이 96 비트인 경우, 디코더(230)는 상기 페치된 인스트럭션을, 각각 32 비트로 이루어진 3 개의 인스트럭션으로 디코딩할 수 있고, 3 개의 인스트럭션들은 각각 슬롯(240a, 240b, 240c)에 의해 처리될 수 있다.
본 실시예에서는 설명을 위한 일례로 페치된 인스트럭션이 3 개의 인스트럭션으로 디코딩되어 3 개의 슬롯에 의해 처리될 수 있는 것으로 도시하였으나, 본 발명의 범위가 이에 제한되는 것은 아니고, 상기 인스트럭션은 2 이상의 임의의 개수의 슬롯에 의해 처리될 수 있도록 구현될 수도 있다.
본 실시예에서, 3 개의 슬롯(240a, 240b, 240c)은 모두 동시에 수행 가능하며, 이와 같은 병렬 처리를 효과적으로 수행하기 위해 스칼라 기능 유닛(Scalar Functional Unit, SFU)(242a, 242b, 242c), 벡터 기능 유닛(Vector Functional Unit, VFU)(244a, 244b, 244c), 이동 유닛(MoVe unit, MV)(246a, 246b, 246c)이 3 개의 슬롯(240a, 240b, 240c)에 효율적으로 배치될 수 있다.
구체적으로, 제1 슬롯(240a)은 SFU(242a), VFU(244a) 및 MV(246a)를 포함하고, 제2 슬롯(240b)은 SFU(242b), VFU(244b) 및 MV(246b)를 포함할 수 있다. 한편, 제3 슬롯(240c)은 SFU(242c), VFU(244c) 및 MV(246c)를 포함할 수 있다.
그리고 프로세서(200)는 각 슬롯(240a, 240b, 240c)에 포함된 MV(246a, 246b, 246c)를 이용하여 서로의 데이터를 공유할 수 있다.
한편, SFU(242a, 242b, 242c)에 의해 처리된 결과는 도 4에서 언급한 SR(212)에 저장될 수 있고, VFU(244a, 244b, 244c)에 의해 처리된 결과는 도 4에서 언급한 VR(214)에 저장될 수 있다. 물론, SR(212) 및 VR(214)에 저장된 결과는 필요에 따라 프로세서(200)에 의해 사용될 수 있다.
그러나 도 5에 도시된 구성은, 이하에서 본 발명의 다양한 실시예들에 대한 설명의 편의를 위한 일례에 불과할 뿐이며, 본 발명의 범위가 이에 제한되지 않음은 해당 기술 분야의 통상의 기술자에게 자명하다.
도 6은 본 발명의 몇몇 실시예에 따른 벡터 프로세서의 데이터 이동 아키텍쳐를 설명하기 위한 개념도이다.
도 6을 참조하면, 본 발명의 몇몇 실시예에 따른 벡터 프로세서의 데이터 이동 아키텍쳐는 메모리 계층(105), 레지스터 파일(110), 데이터 배치 레이어(130), 복수의 ALU(160) 및 이들 요소들을 전반적으로 제어하는 제어부(170)를 포함할 수 있다.
여기서 메모리 계층(105)은 메모리 인터페이스(memory interface)를 제공하며, 앞서 도 4와 관련하여 앞서 설명한 메모리 장치, 메모리 버스(100) 등이 메모리 계층(105)에 대응될 수 있다.
레지스터 파일(110)은 도 5와 관련하여 앞서 설명한, SR(212) 및 VR(214)을 포함하는 레지스터(212, 214)에 대응될 수 있다.
데이터 배치 레이어(130)는 프로세서(200)가 처리할 다양한 사이즈의 데이터(예컨대, 매트릭스)에 대한 연산을 효율적으로 수행하기 위한 데이터 패턴을 생성할 수 있다.
상기 아키텍처는 복수의 ALU(160)들이 공유할 수 있는 레지스터(212, 214)를 이용하여 정교한 플로우 제어 및 복잡한 산술 연산 수행을 가능케 하면서도, 데이터 배치 레이어(130)를 이용하여 레지스터(212, 214)에 저장된 데이터를 패턴화함으로써 입력 데이터의 재사용성을 향상시킬 수 있다.
도 4 내지 도 6의 벡터 프로세서를 이용하여 본 발명의 몇몇 실시예에 따른 서열 정렬 방법은 더욱 효율적으로 연산될 수 있다.
즉, 도 3a 내지 도 3d에 나타낸 서열 정렬 방법은 각각의 그룹 별로 데이터 의존도가 없이 정렬을 동시에 수행하므로, 이를 VLIW의 병렬 처리로 수행할 수 있다. 즉, 예를 들어, 도 3b에 나타난 제2-1 그룹(G2-1)과 제2-2 그룹(G2-2)의 정렬과, 제2-3 그룹(G2-3)과 제2-4 그룹(G2-4)의 정렬은 서로 데이터 의존도가 전혀 없으므로 동시에 서로 다른 슬롯에서 이를 처리할 수 있다.
이를 통해서, 훨씬 빠른 속도와 훨씬 높은 효율로 서열의 정렬을 완료할 수 있다.
나아가, 데이터 의존도가 있는 순차적인 연산이라도, 레지스터가 각각의 슬롯마다 공유되므로 메모리의 호출이 필요없이 서로 다른 슬롯의 기능 유닛이 작업을 서로 건내주면서 완료할 수 있다. 즉, 매 단계마다 최적의 연산을 할 수 있는 슬롯에서 작업을 넘겨받아 수행할 수 있다. 이를 통해서, 전체적인 정렬 연산의 효율을 크게 높일 수 있다.
이하, 도 3a 내지 도 3d 및 도 7 및 도 8을 참조하여, 본 발명의 몇몇 실시예에 따른 벡터 프로세서의 서열 정렬 방법의 연산 측면을 설명한다.
도 7은 본 발명의 몇몇 실시예에 따른 벡터 프로세서의 서열 정렬 방법에 사용되는 퍼뮤테이션 회로를 설명하기 위한 도면이고, 도 8은 본 발명의 몇몇 실시예에 따른 벡터 프로세서의 서열 정렬 방법에 사용되는 민맥스 회로를 설명하기 위한 도면이다.
도 7을 참조하면, 퍼뮤테이션 회로는 벡터 레지스터(20), 멀티플렉서 선택 신호(10), 제1 내지 제8 멀티플렉서(M1~M8)를 포함한다.
벡터 레지스터(20)는 퍼뮤테이션 회로에 입력으로 들어가는 인풋 데이터(I1~I8)를 제공하고, 추후에 퍼뮤테이션 회로의 출력으로 나오는 아웃풋 데이터(O1~O8)를 저장할 수 있다. 벡터 레지스터(20)는 도 4 내지 도 6의 VR(214) 이나 레지스터 파일(110)에 해당할 수 있다.
벡터 레지스터(20)는 멀티플렉서 선택 신호(10)도 제공할 수 있다. 이를 통해서, 제1 내지 제8 멀티플렉서(M1~M8)는 인풋 데이터(I1~I8)를 멀티플렉서 선택 신호(10)에 의해서 배치를 바꾸어 아웃풋 데이터(O1~O8)로 출력할 수 있다.
본 실시예에서, 인풋 데이터(I1~I8)와 아웃풋 데이터(O1~O8)가 8개의 원소를 가지는 벡터 데이터의 형태를 가지고, 제1 내지 제8 멀티플렉서(M1~M8)가 8개의 멀티플렉서를 포함하지만, 이는 하나의 예시에 불과하고 이에 제한되지 않는다. 즉, 벡터 데이터의 개수나 멀티 플렉서의 개수는 필요에 따라서 얼마든지 변경될 수 있다.
인풋 데이터(I1~I8)와 아웃풋 데이터(O1~O8)는 벡터 데이터로서 각각의 원소가 별개의 SIMD 레인에 의해서 처리될 수 있다. 이를 통해서, 벡터 프로세서는 스칼라 프로세스와 달리 빠른 연산 속도를 보여줄 수 있다.
제1 내지 제8 멀티플렉서(M1~M8)는 인풋 데이터(I1~I8)의 8개의 원소 모두를 입력으로 받고, 이를 아웃풋 데이터(O1~O8)로 출력할 수 있다.
도 8은 본 발명의 몇몇 실시예에 따른 벡터 프로세서의 서열 정렬 방법에 사용되는 민맥스 회로를 설명하기 위한 도면이다.
도 8을 참조하면, 민맥스 회로는 벡터 레지스터(20), 벡터 컨트롤 레지스터(30), 민맥스 연산기(40)를 포함한다.
벡터 레지스터(20)는 민맥스 회로에 입력으로 들어가는 D1과 D2를 제공하고, 추후에 민맥스 회로의 출력으로 나오는 D0를 저장할 수 있다. 벡터 레지스터(20)는 도 4 내지 도 6의 VR(214) 이나 레지스터 파일(110)에 해당할 수 있다.
벡터 컨트롤 레지스터(30)는 도 8에서는 별개로 도시되었지만, 벡터 레지스터(20)와 통합되어 구성될 수도 있다. 벡터 컨트롤 레지스터(30)는 민맥스 연산기의 컨트롤 신호인 컨트롤 벡터(Vc)를 저장하고, 이를 민맥스 연산기(40)에 제공할 수 있다.
민맥스 연산기(40)는 복수일 수 있다. SIMD 처리 방식에 따라서, D1, D2 및 D0가 N개의 원소를 가지는 벡터 데이터인 경우 민맥스 연산기(40)도 N개일 수 있다. 도면에서는 모두 16개의 민맥스 연산기(40)가 도시되었으나, 이는 하나의 예시에 불과할 뿐 이에 제한되는 것은 아니다.
민맥스 연산기(40)는 D1과 D2의 원소 각각을 비교하여 최대값 또는 최소값을 출력할 수 있다. 이 때, 최대값을 출력할 것인지, 최소값을 출력할 것인지에 대해서는 컨트롤 벡터(Vc)에 의해서 정해질 수 있다.
민맥스 연산기(40)는 감산기(41)와 멀티플렉서(43)를 포함할 수 있다. 감산기(41)는 D1과 D2의 원소를 입력받아 둘 사이의 차(差)를 출력한다. 멀티플렉서(43)는 상기 둘 사이의 차(差)의 부호에 따라서, D1과 D2의 원소 중 어느 값이 최대값이고, 어느 값이 최소값인지를 판단할 수 있다. 이는 D1과 D2의 원소의 차의 부호 정보를 가지고 있는 LSB(least significant bit)에 의해서 쉽게 판단할 수 있다. 이 때, 컨트롤 벡터(Vc)가 컨트롤 신호(ctrl)로 멀티플렉서(43)에 입력되고, 이에 따라서, D1 및 D2 중 어느 하나의 값이 최대값 혹은 최소값으로서 출력될 수 있다.
본 발명의 몇몇 실시예에 따른 벡터 프로세서에서의 서열 정렬 방법은 상기 퍼뮤테이션 회로와 상기 민맥스 회로를 이용하여 원소끼리의 정렬을 수행할 수 있다.
구체적으로 도 3a, 도 7 및 도 8을 참조하면, 제공되는 서열 [1, 6, 14, 3, 12, 10, 15, 5, 7, 2, 8, 11, 16, 4, 13, 9]에 대해서 퍼뮤테이션 회로는 카피 서열 [7, 2, 8, 11, 16, 4, 13, 9, 1, 6, 14, 3, 12, 10, 15, 5]을 출력한다.
즉, 인풋 데이터(I1~I8)는 상기 서열이고, 아웃풋 데이터(O1~O8)는 상기 카피 서열일 수 있다. 이 때, 멀티플렉서 선택 신호(10)는 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F]의 상기 서열에 대해서, [8, 9, A, B, C, D, E, F, 0, 1, 2, 3, 4, 5, 6, 7]로 표현되며 이는 2개의 그룹 즉, 제1-1 그룹(G1-1)과 제1-2 그룹(G1-2)이 위치를 바꾼 것을 의미한다.
그리고, 벡터 레지스터(20)는 이러한 카피 서열을 저장하여 민맥스 회로에 제공한다. 민맥스 회로는 상기 서열 [1, 6, 14, 3, 12, 10, 15, 5, 7, 2, 8, 11, 16, 4, 13, 9]을 D1으로, 상기 카피 서열 [7, 2, 8, 11, 16, 4, 13, 9, 1, 6, 14, 3, 12, 10, 15, 5]을 D2로 할 수 있다. 이를 통해서, 민맥스 연산기(40)가 제1-1 그룹(G1-1)과 제1-2 그룹(G1-2)의 동일한 번호의 원소끼리의 비교를 수행할 수 있다.
이 때, 컨트롤 벡터(Vc)는 원소가 0인경우 min값, 1인 경우 max값을 의미한다고 하면, [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1]일 수 있다. 물론 이는 오름차순의 경우고, 내림차순의 경우 컨트롤 벡터(Vc)는 [1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0]이 될 수 있다.
따라서, D0의 전반부는 min값이 출력되고, 후반부는 max값이 출력될 수 있다. 즉, 이러한 퍼뮤테이션 연산과 민맥스 연산을 통해서, 그룹 정렬의 단계를 단순히 2개의 단계로 간단하게 수행할 수 있다.
이러한 민맥스 회로와 퍼뮤테이션 회로는 단순히 멀티 플렉서와 감산기 등의 공용된 연산 장치를 이용하여 SIMD 연산을 수행하므로, 정렬을 위한 전용 하드웨어가 없이도 공용 벡터 프로세서를 통해서 얼마든지 구현될 수 있다. 나아가, 상술한 복잡도의 측면에서도 월등하므로 매우 효율적인 정렬을 수행할 수 있다.
이하, 도 9를 참조하여 본 발명의 몇몇 실시예에 따른 벡터 프로세서에서의 서열 정렬 방법을 설명한다. 상술한 설명과 중복되는 부분은 간략히 하거나 생략한다.
도 9는 본 발명의 몇몇 실시예에 따른 벡터 프로세서의 서열 정렬 방법을 설명하기 위한 도면이다.
도 9를 참조하여, SIMD 레인보다 많은 데이터를 정렬하는 경우 서열의 정렬 방법을 설명한다. SIMD 레인의 개수가 16개일 때, 32개의 원소를 가지는 서열을 정렬하기 위함이다.
먼저 32개의 원소이므로, 2개의 벡터 데이터로 나누어 입력할 수 있다. 즉, 각각 16개의 원소를 가지는 제1 서열(S1)과 제2 서열(S2)로 입력 혹은 로딩할 수 있다.
제1 서열(S1)과 제2 서열(S2)은 각각 도 3a 내지 도 3d에서 설명된 본 발명의 몇몇 실시예에 따른 서열 정렬 방법으로 각각 정렬될 수 있다. 이 때, 본 발명의 몇몇 실시예에 따른 벡터 프로세서는 서로 다른 슬롯에서 VLIW 모드로 제1 서열(S1) 및 제2 서열(S2)을 병렬적으로 정렬할 수 있다. 단, 이에 제한되는 것은 아니다.
이어서, 제1 서열(S1)은 각각 8개의 원소를 가지는 제1 그룹(G1) 및 제2 그룹(G2)으로 정의될 수 있다. 제2 서열(S2)은 각각 8개의 원소를 가지는 제3 그룹(G3) 및 제4 그룹(G4)으로 정의될 수 있다.
이어서, 제1 그룹(G1)과 제3 그룹(G3)을 연결하는 제3 서열(S3)과 제2 그룹(G2)과 제4 그룹(G4)을 연결하는 제4 서열(S4)을 형성할 수 있다.
이어서, 제3 서열(S3)과 제4 서열(S4)을 본 발명의 몇몇 실시예에 따른 서열 정렬 방법으로 각각 정렬할 수 있다. 이 때, 본 발명의 몇몇 실시예에 따른 벡터 프로세서는 서로 다른 슬롯에서 VLIW 모드로 제3 서열(S3) 및 제4 서열(S4)을 병렬적으로 정렬할 수 있다. 단, 이에 제한되는 것은 아니다.
정렬된 후의 제3 서열(S3)은 각각 8개의 원소를 가지는 제5 그룹(G5)과 제6 그룹(G6)을 포함할 수 있다. 또한, 정렬된 후의 제4 서열(S4)은 각각 8개의 원소를 가지는 제7 그룹(G7)과 제8 그룹(G8)을 포함할 수 있다.
이어서, 제6 그룹(G6)과 제7 그룹(G7)을 연결하는 제5 서열(S5)을 형성할 수 있다.
이어서, 제5 서열(S5)을 본 발명의 몇몇 실시예에 따른 서열 정렬 방법으로 정렬할 수 있다.
이에 따라서, 제1 그룹(G1), 제5 서열(S5) 및 제8 그룹(G8)의 순서대로 총 32개의 원소를 가지는 데이터가 정렬될 수 있다.
도 10은 본 발명의 몇몇 실시예에 따른 벡터 프로세서의 서열 정렬 방법 구현을 위한 명령어 집합을 설명하기 위한 표이다.
일반적인 벡터 프로세서들은 min값이나 max값의 처리를 위한 함수를 지원하지만, 모든 SIMD 레인에 동일한 연산이 수행될 수 있다. 즉, 전체 레인에 대해 min값이나 max 값 중 어느 하나만을 찾는 형식이다. 이 경우 추가로 동일 연산을 한번 더 수행해야 min값과 max값을 모두 찾을 수 있으므로, 추가 오버헤드가 발생한다.
본 발명에서는 SIMD 레인의 프레디케이션 연산(predication-벡터 프로세서의 SIMD 레인 중 특정 레인만 해당 연산을 수행하는 것)을 위해 존재하는 벡터 컨트롤 레지스터를 활용해 min값과 max값을 동시에 처리할 수 있다.
도 10을 참조하면, 도 7 및 도 8에서 구현된 퍼뮤테이션이나, 민맥스 명령이 구현됨을 알 수 있다.
이하, 도 11a 내지 도 11d를 참조하여, 도 10의 명령어와 도 7 및 도 8의 회로를 이용하여 서열을 정렬하는 것을 설명한다.
도 11a 내지 도 11d는 본 발명의 몇몇 실시예에 따른 벡터 프로세서의 서열 정렬 방법 구현을 위한 명령어 사용을 설명하기 위한 예시도이다. 도 11a 내지 도 11d는 도 3a 내지 도 3d의 정렬에 명령어에 대한 부가적인 표시를 한 도면이다.
도 11a를 참조하면, 먼저 "ld" 명령을 이용하여 v3의 벡터를 로드한다. 이 때, v3는 도 7의 멀티플렉서 선택 신호(10)일 수 있다. 즉, 2개의 그룹의 위치를 서로 바꾸는 퍼뮤테이션 연산을 위한 제1 내지 제8 멀티플렉서(M1~M8)의 선택 신호일 수 있다.
이어서 "vpmt" 명령을 통해서, v1의 카피 서열을 형성할 수 있다.
이어서, "ld" 명령을 통해서 vc를 로드할 수 있다. vc는 도 8의 민맥스 연산기(40)의 컨트롤 벡터(Vc)일 수 있다. 즉, 민맥스 연산의 출력 결과 서열 중 전반부는 min값(0)이고, 후반부는 max값(1)임을 의미하는 벡터일 수 있다.
이어서, "vminmax" 명령을 통해서, v1에 제1 단계(Stage 1)의 그룹 정렬을 한 값을 저장할 수 있다.
이어서, 4개의 그룹을 위해서, v3을 다시 로드하고("ld" 명령), 이를 퍼뮤테이션 한 결과를 v2로 출력한다("vpmt" 명령). 이어서, vc를 로드하되, 2개의 그룹씩 min값과 max값이 표시되어야 하므로, vc는 [0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1]과 같이 로드될 수 있다. 이어서, v0에 다시 민맥스 연산값이 저장될 수 있다("vminmax" 명령).
이 때, 각각의 ld, vpmt, vminmax 등등의 명령어는 서로 다른 슬롯에 의해서 동작할 수 있다. 각각의 슬롯은 레지스터를 공유하므로 메모리에 오버헤드를 증가시키지 않고, 병렬 처리가 가능할 수 있다.
도 11b를 참조하면, 이와 유사한 방식으로, ld, vpmt, ld, vminmax의 명령어가 수행될 수 있다. 만일 그룹 중에 첫번째와 마지막 그룹이 제외되고 정렬되는 경우에는 도 7의 멀티플렉서 선택 신호(10)를 위한 v3가 [0, 1, 2, 3, 8, 9, A, B, 4, 5, 6, 7, C, D, E, F]와 같이 로딩될 수 있다. 이는 첫번째와 마지막 그룹의 원소를 바꾸지 않아서, 민맥스 연산에서 첫번째와 마지막 그룹의 원소가 변경되지 않게 하기 위함이다.
도 11c 및 도 11d도 이와 유사하게 명령어를 사용하여 연산될 수 있다.
이상 첨부된 도면을 참조하여 본 발명의 실시예를 설명하였지만, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자는 본 발명이 그 기술적 사상이나 필수적인 특징을 변경하지 않고서 다른 구체적인 형태로 실시될 수 있다는 것을 이해할 수 있을 것이다. 그러므로 이상에서 기술한 실시예들은 모든 면에서 예시적인 것이며 한정적이 아닌 것으로 이해해야만 한다.
20: 벡터 레지스터 40: 민맥스 연산기

Claims (20)

  1. 복수의 원소를 포함하는 벡터 데이터 형태의 서열(sequence)을 로딩하고,
    상기 서열을 제1 그룹과 제2 그룹으로 분할하되, 상기 제1 및 제2 그룹 각각은 i(i는 자연수)개의 원소를 포함하고,
    SIMD(Single Instruction Multiple Data) 처리 방식으로, 상기 제1 그룹과 상기 제2 그룹의 k(k는 1이상 i이하의 자연수)번째 원소를 비교하여 정렬함으로써 제1 정렬된 원소를 포함하는 서열을 생성하고,
    상기 제1 정렬된 원소를 포함하는 서열의 상기 제1 그룹을 제3 및 제4 그룹으로 분할하고, 상기 제2 그룹을 제5 및 제6 그룹으로 분할하되, 상기 제3 내지 제6 그룹 각각은 j(j는 자연수)개의 원소를 포함하고,
    상기 제3 내지 제6 그룹 중 서로 인접한 2개의 그룹의 p(p는 1이상 j이하 자연수)번째 원소끼리 비교하여 정렬함으로써 제2 정렬된 원소를 포함하는 서열을 생성하는 것을 포함하는 벡터 프로세서에서의 서열 정렬 방법.
  2. 제1 항에 있어서,
    상기 서열은 N=2n개의 원소를 포함하는 벡터 프로세서의 서열 정렬 방법.
  3. 제1 항에 있어서,
    상기 제3 내지 제6 그룹 중 서로 인접한 2개의 그룹의 p번째 원소끼리 비교하여 정렬함으로써 제2 정렬된 원소를 포함하는 서열을 생성하는 것은,
    상기 제3 그룹과 상기 제4 그룹의 p번째 원소끼리 비교하여 정렬하고,
    상기 제5 그룹과 상기 제6 그룹의 p번째 원소끼리 비교하여 정렬하여 상기 제2 정렬된 원소를 포함하는 서열을 생성하는 것을 포함하는 벡터 프로세서의 서열 정렬 방법.
  4. 제3 항에 있어서,
    상기 제2 정렬된 원소를 포함하는 서열의 상기 제4 그룹과 상기 제5 그룹의 p번째 원소끼리 비교하여 정렬하여 제3 정렬된 원소를 포함하는 서열을 생성하는 것을 더 포함하는 벡터 프로세서의 서열 정렬 방법.
  5. 제1 항에 있어서,
    상기 서열을 로딩하는 것은 서로 같은 크기의 제1 및 제2 서열을 로딩하는 것을 포함하고,
    상기 제1 서열을 제7 그룹과 제8 그룹으로 분할하고,
    상기 제2 서열을 제9 그룹과 제10 그룹으로 분할하고,
    상기 제7 그룹과 제9 그룹을 연결한 제3 서열과, 상기 제8 그룹과 상기 제10 그룹을 연결한 제4 서열을 정의하고,
    상기 제3 및 제4 서열을 각각 정렬하고,
    상기 제3 서열을 제11 그룹과 제12 그룹으로 분할하고,
    상기 제4 서열을 제13 그룹과 제14 그룹으로 분할하고,
    상기 제12 및 제13 그룹을 연결한 제5 서열을 정의하고,
    상기 제5 서열을 정렬하여, 상기 제11 그룹, 상기 제5 서열 및 상기 제14 그룹의 순서로 정렬을 완성하는 것을 더 포함하는 벡터 프로세서의 서열 정렬 방법.
  6. 제5 항에 있어서,
    상기 벡터 프로세서는 각각 별도의 펑션 유닛을 포함하는 복수의 슬롯을 포함하고,
    상기 제3 및 제4 서열을 정렬하는것은,
    상기 제3 및 제4 서열을 서로 다른 슬롯의 펑션 유닛을 이용하여 정렬하는 것을 포함하는 벡터 프로세서의 서열 정렬 방법.
  7. 제6 항에 있어서,
    상기 벡터 프로세서는 VLIW(Very Long Instruction Word) 인스트럭션을 수행하고,
    상기 VLIW 인스트럭션은 제1 및 제2 인스트럭션을 포함하고, 상기 제1 및 제2 인스트럭션은 각각 상기 제3 및 제4 서열을 정렬하는 인스트럭션이고,
    상기 제3 및 제4 서열을 정렬하는 것은,
    상기 제1 및 제2 인스트럭션이 상기 서로 다른 슬롯의 펑션 유닛에 전달되어, 상기 서로 다른 슬롯의 펑션 유닛이 각각 상기 제3 및 제4 서열을 정렬하는 것을 포함하는 벡터 프로세서의 서열 정렬 방법.
  8. 제1 항에 있어서,
    상기 j가 1인 경우, 상기 제2 정렬된 원소를 포함하는 서열을 출력하는 것을 더 포함하는 벡터 프로세서에서의 서열 정렬 방법.
  9. 제1 항에 있어서,
    상기 서열을 제1 그룹과 제2 그룹으로 분할하고, 상기 제1 그룹과 상기 제2 그룹의 k번째 원소를 비교하여 정렬하는 것은,
    퍼뮤테이션(permutation) 연산을 이용하여, 상기 서열에서 상기 제1 그룹과 상기 제2 그룹의 위치가 바뀐 카피 서열을 생성하고,
    민맥스(min/max) 연산기를 사용하여, 상기 서열의 원소와 상기 카피 서열의 원소를 비교하여 정렬하는 것을 포함하는 벡터 프로세서에서의 서열 정렬 방법.
  10. 제9 항에 있어서,
    상기 민맥스 연산기는, 컨트롤 벡터의 제어에 의해, 상기 서열의 원소와 상기 카피 서열의 원소 중 더 큰 값을 출력하거나, 더 작은 값을 출력하는 벡터 프로세서에서의 서열 정렬 방법.
  11. 복수의 원소를 포함하는 벡터 데이터 형태의 제1 서열을 저장하는 벡터 레지스터로, 상기 제1 서열은 각각이 i(i는 자연수)개의 원소를 포함하는 제1 및 제2 그룹을 포함하는 벡터 레지스터;
    상기 제1 서열을 제공받고, 상기 제1 서열 내에서 상기 제1 그룹과 상기 제2 그룹의 위치를 바꾸어 제2 서열을 생성하고, 상기 생성된 제2 서열을 상기 벡터 레지스터에 저장하는 퍼뮤테이션 회로; 및
    상기 제1 및 제2 서열을 상기 벡터 레지스터로부터 제공받고, 상기 제1 서열의 k(k는 1이상 i이하의 자연수)번째 원소와 상기 제2 서열의 k번째 원소를 원소 단위로 비교하고, 비교 결과를 기초로 제3 서열을 출력하는 민맥스(Min/Max) 회로를 포함하되,
    상기 제3 서열의 k번째 원소는 상기 제1 서열의 k번째 원소와 상기 제2 서열의 k번째 원소 중 어느 하나로 선택되는 반도체 회로.
  12. 제11 항에 있어서,
    상기 제3 서열은 제3 및 제4 그룹을 포함하고,
    상기 제3 그룹의 k번째 원소는 상기 제1 서열의 k번째 원소와 상기 제2 서열의 k번째 원소 중 더 작은 값이고,
    상기 제4 그룹의 k번째 원소는 상기 제1 서열의 k번째 원소와 상기 제2 서열의 k번째 원소 중 더 큰 값인 반도체 회로.
  13. 제11 항에 있어서,
    상기 제3 서열은 제3 및 제4 그룹을 포함하고,
    상기 제3 그룹의 k번째 원소는 상기 제1 서열의 k번째 원소와 상기 제2 서열의 k번째 원소 중 더 큰 값이고,
    상기 제4 그룹의 k번째 원소는 상기 제1 서열의 k번째 원소와 상기 제2 서열의 k번째 원소 중 더 작은 값인 반도체 회로.
  14. 제11 항에 있어서,
    상기 민맥스 회로는,
    상기 제1 서열의 k번째 원소와 상기 제2 서열의 k번째 원소를 제공받고, 상기 제1 서열의 k번째 원소와 상기 제2 서열의 k번째 원소의 차이를 출력하는 감산기와,
    상기 제1 서열의 k번째 원소와 상기 제2 서열의 k번째 원소의 차이를 기초로, 상기 제1 서열의 k번째 원소와 상기 제2 서열의 k번째 원소 중 어느 것이 크고 어느 것이 작은지를 구별하는 멀티플렉서를 포함하는 반도체 회로.
  15. 제14 항에 있어서,
    상기 멀티플렉서가 상기 제1 서열의 k번째 원소와 상기 제2 서열의 k번째 원소 중 더 큰 원소를 출력할지 아니면 상기 제1 서열의 k번째 원소와 상기 제2 서열의 k번째 원소 중 더 작은 원소를 출력할지를 제어하는 컨트롤 벡터를 저장하는 벡터 컨트롤 레지스터를 더 포함하는 반도체 회로.
  16. 제15 항에 있어서,
    상기 컨트롤 벡터는 제1 원소와 제2 원소를 포함하고,
    상기 제1 원소는 상기 멀티플렉서가 상기 제1 서열의 k번째 원소와 상기 제2 서열의 k번째 원소 중 더 큰 원소를 출력하도록 제어하고,
    상기 제2 원소는 상기 멀티플렉서가 상기 제1 서열의 k번째 원소와 상기 제2 서열의 k번째 원소 중 더 작은 원소를 출력하도록 제어하는 반도체 회로.
  17. 제16 항에 있어서,
    상기 컨트롤 벡터는 복수의 제1 원소와 복수의 제2 원소를 포함하는 반도체 회로.
  18. 제11 항에 있어서,
    상기 벡터 레지스터는 상기 제3 서열을 저장하고, 상기 제3 서열은 상기 퍼뮤테이션 회로에 제공하는 반도체 회로.
  19. 제11 항에 있어서,
    상기 퍼뮤테이션 회로는 멀티플렉서 선택 신호에 따라 상기 제1 서열의 배열을 변경하는 복수의 멀티플렉서를 포함하는 반도체 회로.
  20. 제19 항에 있어서,
    상기 벡터 레지스터는 상기 복수의 멀티플렉서에 상기 멀티플렉서 선택 신호를 제공하는 반도체 회로.
KR1020170064502A 2017-05-25 2017-05-25 벡터 프로세서의 서열 정렬 방법 KR102343652B1 (ko)

Priority Applications (7)

Application Number Priority Date Filing Date Title
KR1020170064502A KR102343652B1 (ko) 2017-05-25 2017-05-25 벡터 프로세서의 서열 정렬 방법
US15/802,844 US10372451B2 (en) 2017-05-25 2017-11-03 Sequence alignment method of vector processor
TW107105795A TWI771373B (zh) 2017-05-25 2018-02-21 向量處理器的序列對齊方法
CN201810468470.9A CN108959179B (zh) 2017-05-25 2018-05-16 向量处理器的序列对齐方法
JP2018099367A JP7241470B2 (ja) 2017-05-25 2018-05-24 ベクトルプロセッサの配列ソート方法
US16/447,035 US11442728B2 (en) 2017-05-25 2019-06-20 Sequence alignment method of vector processor
US16/447,041 US11068265B2 (en) 2017-05-25 2019-06-20 Sequence alignment method of vector processor

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020170064502A KR102343652B1 (ko) 2017-05-25 2017-05-25 벡터 프로세서의 서열 정렬 방법

Publications (2)

Publication Number Publication Date
KR20180129058A KR20180129058A (ko) 2018-12-05
KR102343652B1 true KR102343652B1 (ko) 2021-12-24

Family

ID=64401213

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020170064502A KR102343652B1 (ko) 2017-05-25 2017-05-25 벡터 프로세서의 서열 정렬 방법

Country Status (5)

Country Link
US (3) US10372451B2 (ko)
JP (1) JP7241470B2 (ko)
KR (1) KR102343652B1 (ko)
CN (1) CN108959179B (ko)
TW (1) TWI771373B (ko)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9606803B2 (en) 2013-07-15 2017-03-28 Texas Instruments Incorporated Highly integrated scalable, flexible DSP megamodule architecture
US11106462B2 (en) * 2019-05-24 2021-08-31 Texas Instruments Incorporated Method and apparatus for vector sorting
CN111949241B (zh) * 2019-05-15 2024-04-12 瑞昱半导体股份有限公司 排序装置
JP7263994B2 (ja) * 2019-09-17 2023-04-25 富士通株式会社 情報処理方法及び最適化プログラム
US11036506B1 (en) * 2019-12-11 2021-06-15 Motorola Solutions, Inc. Memory systems and methods for handling vector data
CN112861145B (zh) * 2021-01-06 2023-12-12 华控清交信息科技(北京)有限公司 一种数据处理方法、装置和用于数据处理的装置
US11366783B1 (en) 2021-03-29 2022-06-21 SambaNova Systems, Inc. Multi-headed multi-buffer for buffering data for processing
US11204889B1 (en) * 2021-03-29 2021-12-21 SambaNova Systems, Inc. Tensor partitioning and partition access order
US11709611B2 (en) 2021-10-26 2023-07-25 SambaNova Systems, Inc. Determining and using memory unit partitioning solutions for reconfigurable dataflow computing systems

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130246737A1 (en) 2012-03-15 2013-09-19 International Business Machines Corporation SIMD Compare Instruction Using Permute Logic for Distributed Register Files

Family Cites Families (39)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05189202A (ja) * 1992-01-10 1993-07-30 Fujitsu Ltd 並列ソート方式
US6324638B1 (en) * 1999-03-31 2001-11-27 International Business Machines Corporation Processor having vector processing capability and method for executing a vector instruction in a processor
JP2001014139A (ja) 1999-06-28 2001-01-19 Nec Corp ワークファイルを使用するマルチスレッドソート処理方式及び処理方法
US6557096B1 (en) * 1999-10-25 2003-04-29 Intel Corporation Processors with data typer and aligner selectively coupling data bits of data buses to adder and multiplier functional blocks to execute instructions with flexible data types
US20050188182A1 (en) * 1999-12-30 2005-08-25 Texas Instruments Incorporated Microprocessor having a set of byte intermingling instructions
US6745319B1 (en) * 2000-02-18 2004-06-01 Texas Instruments Incorporated Microprocessor with instructions for shuffling and dealing data
TWI289789B (en) 2002-05-24 2007-11-11 Nxp Bv A scalar/vector processor and processing system
US7386842B2 (en) 2004-06-07 2008-06-10 International Business Machines Corporation Efficient data reorganization to satisfy data alignment constraints
US20070011441A1 (en) * 2005-07-08 2007-01-11 International Business Machines Corporation Method and system for data-driven runtime alignment operation
JP2009199439A (ja) * 2008-02-22 2009-09-03 Nec Corp マージソート処理方法、マージソート処理装置、及びマージソート処理プログラム
EP2269362B1 (en) 2008-04-21 2018-06-13 Telefonaktiebolaget LM Ericsson (publ) Method for enabling communication between a user equipment and an ims gateway
US8417921B2 (en) * 2008-08-15 2013-04-09 Apple Inc. Running-min and running-max instructions for processing vectors using a base value from a key element of an input vector
GB2464292A (en) * 2008-10-08 2010-04-14 Advanced Risc Mach Ltd SIMD processor circuit for performing iterative SIMD multiply-accumulate operations
US9652231B2 (en) * 2008-10-14 2017-05-16 International Business Machines Corporation All-to-all permutation of vector elements based on a permutation pattern encoded in mantissa and exponent bits in a floating-point SIMD architecture
JP5445469B2 (ja) 2009-01-13 2014-03-19 日本電気株式会社 Simd型並列データ処理装置及びデータソート方法並びにプロセッシングエレメント
US20130212354A1 (en) * 2009-09-20 2013-08-15 Tibet MIMAR Method for efficient data array sorting in a programmable processor
KR101662769B1 (ko) 2010-03-09 2016-10-05 삼성전자주식회사 고속 정렬 장치 및 방법
US10083032B2 (en) * 2011-12-14 2018-09-25 Intel Corporation System, apparatus and method for generating a loop alignment count or a loop alignment mask
JP5834997B2 (ja) * 2012-02-23 2015-12-24 株式会社ソシオネクスト ベクトルプロセッサ、ベクトルプロセッサの処理方法
CN104204991B (zh) * 2012-03-30 2018-01-02 英特尔公司 将较小的已排序向量合并和排序为较大的已排序向量的指令的方法和装置
US9098265B2 (en) * 2012-07-11 2015-08-04 Arm Limited Controlling an order for processing data elements during vector processing
US9342479B2 (en) * 2012-08-23 2016-05-17 Qualcomm Incorporated Systems and methods of data extraction in a vector processor
US9606961B2 (en) * 2012-10-30 2017-03-28 Intel Corporation Instruction and logic to provide vector compress and rotate functionality
US10133577B2 (en) * 2012-12-19 2018-11-20 Intel Corporation Vector mask driven clock gating for power efficiency of a processor
US9405538B2 (en) 2012-12-28 2016-08-02 Intel Corporation Functional unit having tree structure to support vector sorting algorithm and other algorithms
KR20140092135A (ko) 2013-01-15 2014-07-23 한국전자통신연구원 빅 데이터를 위한 병렬 정렬 방법 및 장치
US9632781B2 (en) * 2013-02-26 2017-04-25 Qualcomm Incorporated Vector register addressing and functions based on a scalar register data value
US9477999B2 (en) * 2013-09-20 2016-10-25 The Board Of Trustees Of The Leland Stanford Junior University Low power programmable image processor
KR102122406B1 (ko) 2013-11-06 2020-06-12 삼성전자주식회사 셔플 명령어 처리 장치 및 방법
US9977676B2 (en) * 2013-11-15 2018-05-22 Qualcomm Incorporated Vector processing engines (VPEs) employing reordering circuitry in data flow paths between execution units and vector data memory to provide in-flight reordering of output vector data stored to vector data memory, and related vector processor systems and methods
US9740659B2 (en) * 2014-03-19 2017-08-22 International Business Machines Corporation Merging and sorting arrays on an SIMD processor
KR102310246B1 (ko) 2014-04-23 2021-10-08 삼성전자주식회사 세컨더리 인덱스 생성 방법 및 세컨더리 인덱스 저장 장치
JP6318303B2 (ja) * 2014-05-30 2018-04-25 華為技術有限公司Huawei Technologies Co.,Ltd. 並列マージソート
KR101573618B1 (ko) 2014-07-04 2015-12-01 한양대학교 산학협력단 메모리 구조에 기반한 외부 퀵 정렬의 방법 및 장치
US9910670B2 (en) * 2014-07-09 2018-03-06 Intel Corporation Instruction set for eliminating misaligned memory accesses during processing of an array having misaligned data rows
EP3001306A1 (en) * 2014-09-25 2016-03-30 Intel Corporation Bit group interleave processors, methods, systems, and instructions
JP2016091488A (ja) 2014-11-11 2016-05-23 アズビル株式会社 データソート方法およびプログラム
CN105518623B (zh) * 2014-11-21 2019-11-05 英特尔公司 用于在虚拟执行环境中进行高效的图形处理的装置和方法
US9870339B2 (en) * 2015-06-26 2018-01-16 Intel Corporation Hardware processors and methods for tightly-coupled heterogeneous computing

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130246737A1 (en) 2012-03-15 2013-09-19 International Business Machines Corporation SIMD Compare Instruction Using Permute Logic for Distributed Register Files

Also Published As

Publication number Publication date
US11068265B2 (en) 2021-07-20
US20180341487A1 (en) 2018-11-29
US10372451B2 (en) 2019-08-06
TWI771373B (zh) 2022-07-21
US20190303149A1 (en) 2019-10-03
US11442728B2 (en) 2022-09-13
KR20180129058A (ko) 2018-12-05
JP2018200692A (ja) 2018-12-20
CN108959179B (zh) 2023-12-01
CN108959179A (zh) 2018-12-07
TW201901412A (zh) 2019-01-01
US20190303148A1 (en) 2019-10-03
JP7241470B2 (ja) 2023-03-17

Similar Documents

Publication Publication Date Title
KR102343652B1 (ko) 벡터 프로세서의 서열 정렬 방법
US5710902A (en) Instruction dependency chain indentifier
EP1351134A2 (en) Superpipelined arithmetic-logic unit with feedback
US20030105945A1 (en) Methods and apparatus for a bit rake instruction
US8959276B2 (en) Byte selection and steering logic for combined byte shift and byte permute vector unit
KR102560424B1 (ko) 와이드 데이터 타입들의 비교
KR20090076848A (ko) 프로세서 장치 및 조건 분기 처리 방법
US6715066B1 (en) System and method for arranging bits of a data word in accordance with a mask
US20140181164A1 (en) Selectively combinable shifters
US10698655B2 (en) Partially and fully parallel normaliser
Kolte et al. A fast median filter using AltiVec
US7370046B2 (en) Sort processing method and sort processing apparatus
US20230129750A1 (en) Performing a floating-point multiply-add operation in a computer implemented environment
KR20120077177A (ko) Simd 프로세서를 이용하는 갈로아 필드 이진 다항식 제산 장치 및 방법
US5192882A (en) Synchronization circuit for parallel processing
US6629239B1 (en) System and method for unpacking and merging bits of a data world in accordance with bits of a mask word
US12001929B2 (en) Mixed-precision neural processing unit (NPU) using spatial fusion with load balancing
KR102182299B1 (ko) 시프트 연산 장치 및 그의 동작 방법
US20200249909A1 (en) Reconfigurable segmented scalable shifter
US5880978A (en) Method and apparatus for creating an output vector from an input vector
JP2004334297A (ja) 並列演算処理装置及び並列演算処理方法
US11010159B2 (en) Bit processing involving bit-level permutation instructions or operations
JPS6324324A (ja) ソ−ト処理装置
WO2020155136A1 (en) Reconfigurable segmented scalable shifter
WO2011121795A1 (en) Data shifter and control method thereof, multiplexer, data sifter, and data sorter

Legal Events

Date Code Title Description
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant