KR20130140475A - 복수의 실행 유닛을 이용한 구문 분석 방법 및 구문 분석 장치 - Google Patents

복수의 실행 유닛을 이용한 구문 분석 방법 및 구문 분석 장치 Download PDF

Info

Publication number
KR20130140475A
KR20130140475A KR1020120063905A KR20120063905A KR20130140475A KR 20130140475 A KR20130140475 A KR 20130140475A KR 1020120063905 A KR1020120063905 A KR 1020120063905A KR 20120063905 A KR20120063905 A KR 20120063905A KR 20130140475 A KR20130140475 A KR 20130140475A
Authority
KR
South Korea
Prior art keywords
execution unit
sub
symbol
score
execution
Prior art date
Application number
KR1020120063905A
Other languages
English (en)
Other versions
KR101382362B1 (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 KR1020120063905A priority Critical patent/KR101382362B1/ko
Publication of KR20130140475A publication Critical patent/KR20130140475A/ko
Application granted granted Critical
Publication of KR101382362B1 publication Critical patent/KR101382362B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • G06F8/427Parsing

Abstract

복수의 실행 유닛의 아키텍처를 고려하여 구문 분석에 적용되는 알고리즘을 변경하고 구문 분석의 속도 향상을 이룰 수 있는, 복수의 실행 유닛을 이용한 구문 분석 방법 및 구문 분석 장치에 관한 것이다.
본 발명인 복수의 실행 유닛을 이용한 구문 분석 방법 및 구문 분석 장치에 의하여, 문장에 대한 자연어 구문 분석의 획기적인 속도 향상을 제공하는 효과가 있다.

Description

복수의 실행 유닛을 이용한 구문 분석 방법 및 구문 분석 장치{APPARATUS AND METHOD FOR ANALYZING SENTENCES USING MULTIPLE EXECUTION UNITS}
본 발명은 복수의 실행 유닛을 이용한 구문 분석 방법 및 구문 분석 장치에 관한 것으로서, 복수의 실행 유닛의 아키텍처를 고려하여 구문 분석에 적용되는 알고리즘을 변경하고 구문 분석의 속도 향상을 이룰 수 있는, 복수의 실행 유닛을 이용한 구문 분석 방법 및 구문 분석 장치에 관한 것이다.
자연어의 구문 분석은 입력 문장으로부터 문법적인 구조를 분석하는 작업이고 이로부터 가장 근접한 파싱 트리(parse tree)를 예측하는 작업이다. 이와 같이 생성된 파싱 트리는, 기계어 번역, 질의 응답, 정보 추출 등과 같은 자연어를 이용한 다양 응용 분야에서 다양한 방식으로 사용되어 진다. 예를 들어 하나의 언어로부터 다른 언어로 번역을 할 때, 단어(word)의 순서를 고려하고 단어 사이의 문법적 관계를 고려하는 것은 매우 중요하고 이 파싱 트리는 단어의 순서와 단어 사이의 문법적인 관계를 표현할 수 있다.
파싱 트리 등을 생성하는 구문 분석기는 일반적으로 확률적 컨텍스-프리 문법(probabilistic contex-free grammar, PCFG)을 채용하고, 이 컨텍스-프리 문법을 위한 파라미터가 분류된 예제로부터 추정된다. 그리고 PCFG로부터 가장 개연성 있는 혹은 가장 근접한 파싱 트리를 찾는 문제는 복잡한 순열짜맞추기 문제(combinatorial problem)이다.
이러한 파싱 트리를 생성하기 위한 알고리즘이 동적 프로그래밍 알고리즘인 CKY 알고리즘([J. Cocke and J. T. Schwartz," Programming languages and their compilers: Preliminary notes,"Courant Institute of Mathematical Sciences, New York University, Tech. Rep., 1970], [T. Kasami, "An efficient recognition and syntax-analysis algorithm for context-free languages," Air Force Cambridge Research Lab, Scientific Report AFCRL-65-758, 1965], [D. Younger, "Recognition and parsing of context-free languages in time n3," Information and Control, vol. 10, 1967] 참조)으로 알려져 있고, 이 CKY 알고리즘은 당업계에서는 비터비(viterbi) 알고리즘으로도 알려져 있다.
이러한 비터비 알고리즘은 길이 n의 주어진 입력 문자에 대해
Figure pat00001
시간 동안에 가장 근접한 파싱 트리를 발견하는 것으로 알려져 있다. 그리고 이 알고리즘의 실제 실행 시간은 입력 문장이 n = 20 혹은 그 이하의 단어를 가지는 반면 수천개 이상의 비-단말 심볼(non-terminal symol)과 백만 이상의 콘텍스-프리 구문 규칙을 가진 문법의 문법 상수인 |G]에 의해서 주로 영향을 받는다.
따라서 정확한 파싱 트리의 추론은 간단한 문법의 경우를 제외하고는 시간과 경제적인 측면에서 비용 대비 효율이 너무 좋지 않아서 일반적으로 적용되는 구문 분석기는 검색 범위(search space)를 극히 제한하도록 된 휴리스틱(heuristic) 알고리즘을 적용한다. 이러한 휴리스틱의 적용은 물론 파싱 트리 생성의 속도를 향상시킬 수 있는 반면에 그 결과는 낙관적이지 않다. 예를 들어 정확도가 떨어지거나 이해하기 힘든 결과의 파싱 트리를 생성할 수 있다.
한편 반도체 기술의 발전에 따라서도, 프로그램을 처리하기 위한 프로세싱 코어의 처리 속도의 향상은 제약을 받고(일반적으로 최대 3GHz 대에서 수렴) 대안으로 다수의 프로세싱 코어를 하나의 반도체에 집적하여 처리 성능을 향상시키고 있다. 또한 이렇게 집적된 다수의 프로세싱 코어는 처리의 효율을 위하여 다층 레벨의 구조화된 형태를 취하고 있다.
다수의 프로세싱 코어가 하나의 반도체에 집적되는 것은 다양한 응용 분야에 새로운 기회를 주고, 다양한 응용 프로그램이 병렬로 처리될 수 있어 사용자에게 속도 향상을 인지할 수 있도록 한다.
그리고 구문 분석기와 같이 입력 문장으로부터의 파싱 트리를 생성하기 위한 소요 시간이 많이 필요한 알고리즘에 대해서도 또한 성능 향상의 새로운 기회를 제공할 수 있다.
한편 구문 분석기에 적용되는 알고리즘의 복잡도가 높음에 따라 구문 분석기의 알고리즘을 병렬로 처리하여 처리 속도를 향상시키기 위한 시도가 있어 왔다.([M. P. van Lohuizen, "Parallel processing of natural language parsers," in ParCo '99, 1999, pp. 17-20], [E. P. Giachin and C. Rullent, "Parallel parser for spoken natural language," in IJCAL, 1989, pp. 1537-1542], [E. Potelli, G. Gupta, J. Wiebe, and D. Farwell, "Natural language processing: A case study," in Proceedings of the 15th International Conference on Artificial Intelligence, 1998], [A. G. Manousopoulou, G. Manis, P. Tsanakas, and G. Papakonstantinou, "Automatic generation of portable parallel natural language parsers," in Proceedings of the 9th conference on Tools with Artificial Intelligence, 1997, pp. 174-177], [J. Bordim, Y. Ito, and K. Nakano, "Accelerating the CKY parsing using FPGAs," in ICHPC '02, 2002] 참조)
한편 이러한 구문 분석기의 병렬 처리를 위한 시도에서도 분산된 메모리 시스템 상에서 구현되거나 구문 분석기의 알고리즘을 높은 수준에서 병렬 적용하거나 하여 충분할 정도의 속도 향상을 가져오지 못하거나 한정된 수의 구문 규칙 또는 심볼에 국한하여 적용하여 실용적이지 못한 문제점이 있다.
따라서 이러한 문제점을 해소하고 특히 다수의 프로세서 코어가 다층 레벨의 구조화된 아키텍처를 가진 경우와 같이 특정 반도체 칩셋 내부의 아키텍처 구조를 고려하고 이 아키텍처 구조에 구문 분석기의 알고리즘을 변경 및 적용하여 파싱 트리 생성의 속도 향상을 가질 수 있도록 하는, 복수의 실행 유닛을 이용한 구문 분석 방법 및 구문 분석 장치가 필요하다.
본 발명은, 상술한 문제점을 해결하기 위해서 안출한 것으로서, 프로그램을 개별적으로 처리할 수 있는 복수의 실행 유닛을 이용하여 문장의 구문 분석 속도 향상을 할 수 있는, 복수의 실행 유닛을 이용한 구문 분석 방법 및 구문 분석 장치를 제공하는 데 그 목적이 있다.
또한 본 발명은, 복수의 실행 유닛의 아키텍처 구조를 고려하여 문장의 구문 분석 속도를 향상할 수 있는, 복수의 실행 유닛을 이용한 구문 분석 방법 및 구문 분석 장치를 제공하는 데 그 목적이 있다.
또한 본 발명은 자연어의 문법 특성을 고려하고 복수의 실행 유닛의 아키텍처 구조를 고려하여 구문 분석 알고리즘을 변경하고 변경된 구문 분석 알고리즘을 적용할 수 있는, 복수의 실행 유닛을 이용한 구문 분석 방법 및 구문 분석 장치를 제공하는 데 그 목적이 있다.
또한 본 발명은 구문 분석의 속도 향상으로 인해 다양한 응용 분야에서 실시간으로 구문 분석이 가능하여 사용자 등과 정확히 그리고 빠른 응답 속도로 상호 작용이 가능하도록 하는, 복수의 실행 유닛을 이용한 구문 분석 방법 및 구문 분석 장치를 제공하는 데 그 목적이 있다.
본 발명에서 이루고자 하는 기술적 과제들은 이상에서 언급한 기술적 과제들로 제한되지 않으며, 언급하지 않은 또 다른 기술적 과제들은 아래의 기재로부터 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에게 명확하게 이해될 수 있을 것이다.
상기와 같은 목적을 달성하기 위한, 복수의 실행 유닛을 이용한 구문 분석 방법은, 복수의 실행 유닛 중 제 1 실행 유닛에서, 계층적 구문 분석을 위한 현재 레벨에서의 복수의 심볼 중 제 1 심볼에 대한 하나 이상의 스코어를 제 1 심볼과 관련된 구문 규칙과 현재 레벨보다 낮은 레벨의 스코어를 이용하여 계산하는 단계와 상기 제 1 실행 유닛에서, 계산된 하나 이상의 스코어를 이용하여 상기 제 1 심볼에 대한 스코어를 결정하는 단계를 포함한다.
또한 상기와 같은 목적을 달성하기 위한, 복수의 실행 유닛을 이용한 구문 분석 방법은, 복수의 실행 유닛 중 제 1 실행 유닛에서, 계층적 구문 분석을 위한 현재 레벨에서의 복수의 심볼 중 제 1 심볼에 대한 복수의 스코어를 현재 레벨보다 낮은 레벨의 스코어를 이용하여 계산하는 단계와 상기 제 1 실행 유닛에서, 계산된 복수의 스코어를 이용하여 상기 제 1 심볼에 대한 스코어를 결정하는 단계를 포함한다.
또한 상기와 같은 목적을 달성하기 위한, 구문 분석 장치는, 계층적 구문 분석을 위한 현재 레벨에서 복수의 심볼 중 제 1 심볼에 대한 하나 이상의 스코어를 제 1 심볼과 관련된 구문 규칙과 현재 레벨보다 낮은 레벨의 스코어를 이용하여 계산하는 제 1 실행 유닛과 상기 현재 레벨에서 복수의 심볼 중 제 2 심볼에 대한 하나 이상의 스코어를 제 2 심볼과 관련된 구문 규칙과 현재 레벨보다 낮은 레벨의 스코어를 이용하여 계산하는 제 2 실행 유닛을 포함한다.
상기와 같은 본 발명에 따른 복수의 실행 유닛을 이용한 구문 분석 방법 및 구문 분석 장치는, 프로그램을 개별적으로 처리할 수 있는 복수의 실행 유닛을 이용하여 문장의 구문 분석 속도 향상을 할 수 있도록 하는 효과가 있다.
또한 상기와 같은 본 발명에 따른 복수의 실행 유닛을 이용한 구문 분석 방법 및 구문 분석 장치는, 복수의 실행 유닛의 아키텍처 구조를 고려하여 문장의 구문 분석 속도를 향상할 수 있도록 하는 효과가 있다.
또한 상기와 같은 본 발명에 따른 복수의 실행 유닛을 이용한 구문 분석 방법 및 구문 분석 장치는, 자연어의 문법 특성을 고려하고 복수의 실행 유닛의 아키텍처 구조를 고려하여 구문 분석 알고리즘을 변경하고 변경된 구문 분석 알고리즘을 적용할 수 있도록 하는 효과가 있다.
또한 상기와 같은 본 발명에 따른 복수의 실행 유닛을 이용한 구문 분석 방법 및 구문 분석 장치는, 구문 분석의 속도 향상으로 인해 다양한 응용 분야에서 실시간으로 구문 분석이 가능하여 사용자 등과 정확히 그리고 빠른 응답 속도로 상호 작용이 가능하도록 하는 효과가 있다.
본 발명에서 얻을 수 있는 효과는 이상에서 언급한 효과들로 제한되지 않으며, 언급하지 않은 또 다른 효과들은 아래의 기재로부터 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에게 명확하게 이해될 수 있을 것이다.
도 1은, 영어 문장에 대응하는 파싱 트리와 문법(grammar) 및 렉시콘(lexicon)의 구문 규칙의 예를 도시한 도면이다.
도 2는, 영어 문장에 대한 비터비 파싱의 상향식 처리 과정을 그리드의 형태로 도시한 도면이다.
도 3은, 비터비 파싱의 개괄적인 쥬도 코드를 도시한 도면이다.
도 4는, 비터비 파싱에서 적용되는 이항 릴랙세이션 알고리즘의 쥬도 코드를 도시한 도면이다.
도 5는, 그래픽 처리 유닛의 컴퓨터 아키텍처를 도시한 도면이다.
도 6은, 그래픽 처리 유닛을 포함하는 구문 분석을 위한 구문 분석 장치의 예시적인 블록도를 도시한 도면이다.
도 7은 PCFG의 구문 규칙들에 대해서 병렬로 처리하기 위한 하나의 예시적인 쥬도 코드를 도시한 도면이다.
도 8은 PCFG의 구문 규칙들에 대해서 병렬로 처리하기 위한 또 다른 예시적인 쥬도 코드를 도시한 도면이다.
도 9는 심볼이 지정된 개수 이상의 구문 규칙이 있는 경우에 가상 심볼로의 분할을 도시한 도면이다.
도 10은, 동일한 심볼에 대한 동기화를 위해 단일 실행 명령을 사용하지 않고 계산하는 방식을 도시한 도면이다.
도 11은, 스코어 어레이 접근 패턴과 스코어 어레이 접근 패턴을 공유 메모리에 저장하기 위한 변형된 접근 패턴을 도시한 도면이다.
상술한 목적, 특징 및 장점은 첨부된 도면을 참조하여 상세하게 후술 되어 있는 상세한 설명을 통하여 더욱 명확해 질 것이며, 그에 따라 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자가 본 발명의 기술적 사상을 용이하게 실시할 수 있을 것이다. 또한, 본 발명을 설명함에 있어서 본 발명과 관련된 공지 기술에 대한 구체적인 설명이 본 발명의 요지를 불필요하게 흐릴 수 있다고 판단되는 경우에 그 상세한 설명을 생략하기로 한다. 이하, 첨부된 도면을 참조하여 본 발명에 따른 바람직한 실시 예를 상세히 설명하기로 한다.
이하에서는 (1) 자연어 처리를 위해서 구문 분석을 위한 비터비(viterbi) 알고리즘(혹은 CKY 알고리즘)에 대해서 먼저 살펴보고, (2) 복수의 실행 유닛(110)을 가지고 각 실행 유닛(110)이 프로그램을 개별적으로 수행할 수 있는 예시적인 컴퓨터 아키텍처에 대해서 살펴본다. 그리고 (3) 이 컴퓨터 아키텍처의 구조를 고려하고 자연어 문법의 특성을 고려하여 변경된 비터비 알고리즘과 다양한 변형예를 살펴보고, (4) 이에 따른 속도 향상의 정도를 간단히 살펴보도록 한다.
(1) 비터비 알고리즘
① 자연 언어 파싱
문장이 주어지면, 자연 언어 파싱은 문법에 따른 가장 적합한 트리 형태의 구조를 결정한다. 예를 들어 도 1은, 영어 문장 "I love you."에 대한 가장 적합한 파싱 트리(parsing tree)를 개시하고 있다. 도 1의 (a)에서 알 수 있는 바와 같이, 단말 노드(leaf node)는 문장의 단어에 대응하고 반면에 비-단말 노드는 명사를 위한 "PRP"나 동사구를 위한 "VP"와 같은 품사 태그(part-of-speech tag)에 대응한다.
여기서 이용되는 문법은 확률적 컨텍스-프리 문법(probabilistic contex-free grammar, PCFG)일 수 있고, 이 확률적 컨텍스-프리 문법은, 어휘(vocabulary)와 품사 태그의 세트와 렉시콘(lexicon)과 문법(grammar)으로 구성될 수 있다. 어휘는 PCFG가 다룰 수 있는 자연 언어의 단어를 식별하고, 품사 태그의 세트는 PCFG의 그래뉼래러티(granularity)의 크기에 의존하는 심볼의 세트로 지칭될 수 있다. 그리고 렉시콘은 어휘로부터 특정 확률 스코어로 심볼에 맵핑을 정의하는 다수의 렉시컬(lexical) 규칙을 포함한다. 예를 들어 도 1 (b)에서 알 수 있는 바와 같이, 렉시컬 규칙은 "I"를 심볼 "PRP"에 대수 확률 -0.23의 확률 스코어로 맵핑한다.
여기서 이러한 확률 스코어는 예시적으로 음의 실수로 정의되었으나 이에 국한될 필요는 없고, 최종적인 파싱 트리를 다른 형태의 파싱 트리와 우열을 결정할 수 있는 임의의 방식으로 정의될 수 있다.
도 1의 (b)에 알 수 있는 바와 같이 문법 또한 구문 규칙의 집합으로 구성될 수 있고, 이 구문 규칙은 하나의 심볼로부터 하나 혹은 둘 이상의 심볼로 유도될 때의 확률을 정의한다. 하나의 심볼로부터 다른 하나의 심볼로 유도되는 경우를 단항 규칙(unary rule)으로 정의될 수 있고 하나의 심볼로부터 두 개의 심볼로 유도되는 경우를 이항 규칙이라 정의될 수 있다. 이러한 규칙의 적용을 각각 단항/이항 릴랙세이션(Relaxation)으로 지칭될 수 있다. 따라서 파싱(parsing)은 가장 높은 확률을 가진 파싱 트리를 생성하도록 입력 문장에 대하여 PCFG에서 렉시컬 규칙과 문법의 구문 규칙을 적용하는 것으로도 설명되어 질 수 있다. 그리고 비터비 파싱 알고리즘은 가장 많이 사용되어지는 파싱 방법 중 하나이다.
② 비터비 파싱의 개관
비터비 파싱은 동적 프로그래밍 방식으로 PCFG를 주어진 타겟 문장에 대하여 적용하는 실질적으로 샹향식(bottom-up)으로 이루어진다. 비터비 파싱에서 주어진 전체 타겟 문장의 가장 개연성있는 구조(파싱 트리)를 얻기 위해서 이 전체 타겟 문장 중의 일부인 서브 문장에 대해서 먼저 평가가 이루어지고, 평가된 서브 문장을 이용하여 이후에 상향식으로 평가된 서브 문장를 포함하는 서브 문장에 대하여 평가가 이루어지고 최종적으로 전체 타겟 문장에 대한 평가가 이루어질 수 있다.
이는 도 2와 같은 형태로 표현될 수 있다. 도 2에서 알 수 있듯이, 주어진 영어 문장 "I love you."에 대해서 각 단어로 이루어진 최하위의 레벨(레벨 1)에서부터 각 단어로 된 서브 문장에 대한 평가가 이루어지고, 이후 2개의 단어로 된 서브 문장의 레벨에 대한 평가로 상향식으로 이루어진다.
여기서 도 2의 각 그리드(grid)는 2차원의 인덱스(index)로 표현될 수 있고 예를 들어 "love you"는 (1,3)으로 표현되어 질 수 있다. 그리고 각 그리드는 또한 문법의 각 심볼에 대한 확률 스코어를 가진다. 따라서 확률 스코어를 각 심볼에 대하여 저장하기 위하여 3차원의 자료 구조(scores[start][end][symbol])를 가질 수 있다. 예를 들어 scores[1][3]["VP"]는 서브 문장 "love you"에 대하여 유도된 심볼 "VP"에 대한 확률 스코어를 저장한다.
이러한 비터비 파싱은 도 3의 쥬도 코드로 표현될 수 있다. 도 3에서 알 수 있는 바와 같이, 3차원의 scores[][][] 자료 구조는 초기화된 후에 타겟 문장을 읽고 PCFG의 렉시컬 규칙을 적용하여 타겟 문장에 포함된 각 단어의 모든 심볼에 대한 확률적 스코어를 계산한다(도 3의 라인 3 참조). 이는 도 2의 최하위의 첫번째 레벨에 대한 스코어를 채우는 것에 대응한다. 이후 레벨 2로부터 각 레벨에서의 각 그리드에서의 모든 심볼에 대한 확률적 스코어를 단항/이항의 구문 규칙을 적용하여 계산하고 이후 상위 레벨에서 이러한 스코어의 계산을 반복하는 등 상향식으로 각 심볼에 대한 스코어를 계산한다(도 3의 라인 4 - 7 참조). 그런 후에 하향식(top-down) 검색을 통해서 가장 확률이 높은 파싱 트리를 결과 트리로서 확정할 수 있다.
이렇게 확정된 결과(파싱) 트리는 해당 타겟 문장에 대한 문법적인 구조를 도시하고 이 결과 트리는 다양한 응용에 활용될 수 있다. 예를 들어 결과 트리는 특정 자연어에서 다른 자연어로의 번역을 위해서나 사용자에 의한 질의를 응답하기 위한 응용에서 결과 트리에 포함된 특정 정보를 추출하기 위해서 활용될 수 있다.
여기서 단항의 구문 규칙은 동일한 그리드에서 하나의 심볼로부터 다른 하나의 심볼로의 스코어를 계산하기 위해서 적용되고, 예를 들어 scores[0][1]["NP"]가 scores[0][1]["PRP"]로부터 (G1)의 확률 스코어를 이용하여 다음과 같이 계산될 수 있다(도 1 (b)의 (G1) 참조).
scores[0][1]["NP"] = scores[0][1]["PRP"] + (G1)의 확률 스코어,
반면에 이항의 구문 규칙은 현재 레벨에서의 한 심볼을 현재 레벨보다 더 낮은(예를 들어 1단계 낮은) 레벨에서의 두 개의 심볼을 관련시킨다. 예를 들어 도 2의 scores[1][3]["VP"]를 계산하기 위해서 아래 레벨의 scores[1][2]["VBP"]와 scores[2][3]["NP"]와 도 1의 (b)에 개시된 (G2)의 확률 스코어를 결합시켜야 한다. 이와 같은 구문 규칙을 적용하기 위해서는 높은 레벨의 스코어는 낮은 레벨의 스코어가 필요하고 이에 따라 상향식으로 각 그리드의 확률 스코어를 계산하는 것이 필수적이다. 이하에서는 이항 릴랙세이션(Relaxation)에 대한 알고리즘을 좀 더 상세히 살펴볼 것이다.
③ 이항 릴랙세이션 알고리즘
도 4는 비터비 파싱에서 이항 구문 규칙을 적용하기 위한 이항 릴랙세이션 알고리즘을 도시하고 있다. 이 릴랙세이션 알고리즘은 네 개의 루프를 수행하기 때문에 비터비 파싱에서 가장 많은 수행 시간을 요하는 부분이다.
이 릴랙세이션 알고리즘은 주어진 현재 레벨(도 3의 length로 정의될 수 있음)에서의 모든 그리드(서브 문장, 즉 length로 정의된 동일한 크기의 서브 문장)에 대해서 반복 수행하고(도 4의 라인 1 참조), 각각의 그리드((start,end)로 정의될 수 있음)에 대하여 모든 심볼에 대하여 반복 수행하고(도 4의 라인 3 참조), 또한 각각의 심볼에 대하여 정의된 이 심볼로부터 두 개의 낮은 레벨의 left_symbol과 right_symbol을 유도하는 이항의 모든 구문 규칙들에 대하여 반복적으로(도 4의 라인 5 참조) 스코어를 분리 지점(split)을 이용하여 계산하여(도 4의 라인 7 참조), 각각의 심볼에 대한 현재 레벨에서의 최대 스코어를 저장한다(도 4의 라인 17 참조).
비록 (start, end, symbol) 트리오(trio)에 대해서 상이한 이항 구문 규칙과 상이한 분리 지점(split point)에 대하여 여러 다른 스코어가 존재할 수 있지만, 도 4에 알 수 있는 바와 같이 각 심볼에 대해서 현재 레벨에서의 최대 스코어 만을 저장하고 이로도 충분한 확률적으로 높은 파싱 트리를 구축할 수 있다.
도 4에서 알 수 있는 바와 같이, 이항 릴랙세이션 알고리즘에 포함된 네 개의 루프는 실행 시간이 단어의 개수의 3승에 이항의 구문 규칙의 총 개수에 비례함을 알 수 있다. 이러한 이항 릴랙세이션 알고리즘은 비터비 파싱에서 가장 시간을 요하는 부분이다.
다시 도 4의 이항 릴랙세이션 알고리즘을 살펴보면, 네 개의 루프에서의 계산이 다른 계산에 의존하지 않고 독립적임을 알 수 있다. 따라서 이 모든 네 개의 루프에서 병렬화 처리를 할 수 있는 기회가 있음을 알 수 있다. 이러한 병렬화 처리는 아래의 "(3) 변경된 비터비 알고리즘 및 다른 변형예"에서 살펴보도록 한다.
한편 단항 릴랙세이션 알고리즘은 비터비 파싱 알고리즘에서 도 4의 라인 7과 같은 분리 지점을 이용하여 반복 수행하지 않고 단항 구문 규칙의 그 개수도 적어서 비터비 파싱에 있어서 병목 지점(bottleneck)이 되지는 않는다.
이하에서는 비터비 파싱 알고리즘 특히 이항 릴랙세이션 알고리즘이 적용될 수 있는 컴퓨터 아키텍쳐를 살펴보도록 한다.
(2) GPU(Graphic Processing Unit)와 GPU를 이용한 구문 분석 장치 - 예시 컴퓨터 아키텍처
그래픽 처리 유닛(Graphic Processing Unit - GPU)은 원래 수많은 점(vertices)들을 처리하기 위한 그래픽 응용의 처리를 위해서 고안되었다. 그래픽 도메인에서 수많은 점들을 효과적으로 처리하기 위해서 전형적인 GPU들은 병렬 처리의 성능을 획기적으로 얻을 수 있도록 하는 수백개 이상의 독립적인 실행 코어(Processing Core)를 포함한다. 예를 들어 NVIDIA의 GTX480은 스트림 프로세서(stream processors, SP)라 지칭되는 480개의 실행 코어를 가지고, 이러한 실행 코어들은 도 5에서 알 수 있는 바와 같이, 계층화된다.
즉 스트림 프로세서인 서브 실행 유닛(111)은 일정한 개수로 묶여서 스트리밍 멀티프로세서로 불리는 실행 유닛(110)으로 구성되고, 다수의 실행 유닛(110)이 묶여서 하나의 그래픽 처리 유닛을 구성한다. 예를 들어 GTX480의 경우에 15개의 스트리밍 멀티 프로세서와 각각의 스트리밍 멀티프로세서는 32개의 스트림 프로세서로 구성된다.
그리고 그래픽 처리 유닛의 각 실행 유닛(110)에 특정 프로그램 코드를 할당하거나 프로그램 코드의 어떤 부분을 언제 할당할 것인지를 결정하기 위한 스케쥴링이 또한 가능하다.
예를 들어 NVIDIA의 GPU를 위해서 CUDA(Compute Unified Device Architecture)라는 개발 환경을 제공하는 데, 이 CUDA는 C 언어와 유사한 프로그램 언어를 이용하여 GPU 내의 실행 유닛(110)이나 서버 실행 유닛(111)에 실행할 프로그램의 특정 부분을 할당하도록 혹은 특정 프로그램의 부분을 병렬로 처리하도록 자동으로 혹은 사용자에 의한 지정으로 설정 가능하다.
비록 CUDA와 같은 프로그램 개발 환경을 제공하는 경우에도 어떻게 특정 프로그램을 병렬로 처리할 것인지에 따라서 그 처리 성능은 달라질 수밖에 없고 예를 들어 비터비 파싱 알고리즘의 처리에 대해서 무엇을 병렬로 처리하고 무엇을 서로 공유할 것인가에 따라서 그 처리 성능(예를 들어 latency)은 달라질 수 밖에 없다.
참고로 NVIDIA의 GPU 아키텍쳐는 실행 유닛(110) 내의 서브 실행 유닛(111)들이 동일한 명령어의 시퀀스를 수행하는 SIMT(Single Instruction Multiple Threads)로 구조로 되어 있고, 따라서 하나의 실행 유닛(110) 내의 모든 서브 실행 유닛(111)들은 명령어 페치 유닛과 명령어 실행(execution) 유닛을 공유한다. 그리고 하나의 실행 유닛(110) 내의 모든 서브 실행 유닛(111)들은 실행 유닛(110) 내에 포함되는 공유 메모리(112)를 이용하여 변수를 공유하거나 저장할 수 있다.
따라서 NVIDIA의 GPU 아키텍쳐 상에서, 서로 다른 실행 유닛(110)은 서로 다른 혹은 동일한 프로그램 부분에 대해서 독립적으로 병렬로 수행가능하나, 하나의 실행 유닛(110) 내에서의 서브 실행 유닛(111)들은 동일한 명령어의 시퀀스를 같이 수행하기 때문에 예를 들어 if-then-else 명령어와 같이 상이한 실행 패스(path)가 있는 경우에는 서브 실행 유닛(111) 내에서 병렬로 수행되지 못하고 순차화되어 서브 실행 유닛(111)의 실행 성능을 최대화하지 못하고 성능 저하가 일어날 수 있다.
그리고 각각의 실행 유닛(110)은 공유 메모리(112)를 포함하고, 이 공유 메모리(112)는 전역 외장 메모리(800)에 비해서 보다더 빠른 속도로 서브 실행 유닛(111)들이 접근할 수 있고 따라서 서브 실행 유닛(111) 내에서 공유되어야 하는 데이터를 이 공유 메모리(112)에 저장하는 것이 성능 향상에 좋은 영향을 미칠 것이다.
또한 도 5에서 알 수 있는 바와 같이, 그래픽 처리 유닛은 텍스처(texture) 메모리 및/또는 상수(constant) 메모리라 불리는 광역 공유 메모리(120)를 더 포함할 수 있고, 이 광역 공유 메모리(120)는 다수의 실행 유닛(110)에 의해서 접근할 수 있으나 공유 메모리(112)에 비해서는 속도가 낮은 메모리이다. 따라서 이 광역 공유 메모리(120)에는 다수의 실행 유닛(110)이 전체로서 공유되어야 하는 데이터를 저장할 수 있고, 예를 들어 PCFG의 전체 심볼과 전체 심볼에 관련된 전체 구문 규칙을 저장할 수 있다.
도 5와 같은 그래픽 처리 유닛의 구조를 이해하고, 특정 프로그램을 이 구조에 최적화되어 프로그래밍을 하는 것은 성능의 향상 또는 최적화에 매우 중요하며, 이하에서는 자연어 문장의 구문 분석을 위해서 어떻게 최적화하여 성능 향상을 이루어낼 수 있는 지를 살펴볼 것이다.
한편 도 5에 도시된 그래픽 처리 유닛의 구조는 예시적인 것이며 상이한 구조의 처리 유닛에도 본 발명의 기술적 사상이 적용될 수 있음은 자명하다. 예를 들어 복수의 실행 코어를 가지고 각 실행 코어가 매트릭스 버스로 연결되는 셀-프로세서나 인텔 등의 듀얼 프로세서나 쿼드 프로세서 등에서도 본 발명의 기술적 사상은 적용될 수 있다. 따라서 이하에서는 그래픽 처리 유닛 혹은 셀-프로세서와 같이 다수의 실행 코어를 가진 처리 유닛을 구문 처리 유닛(100)으로 지칭하도록 하며 도 5의 예시적인 그래픽 처리 유닛의 구조에 기초하여 이하에서 설명하도록 한다.
도 6은 구문 처리 유닛(100)을 포함하고 이 구문 처리 유닛(100)을 이용하여 구문 분석을 하기 위한 구문 분석 장치의 예시적인 블록도를 도시한 도면이다.
이러한 구문 분석 장치는 예를 들어 특정 자연어를 다른 자연어로 번역하기 위한 번역 장치이거나 사용자로부터 음성이나 문장으로 된 질의에 대한 답을 생성하기 위한 질의 응답 장치이거나 음성이나 문장으로부터 특정 정보를 추출하기 위한 정보 추출 장치 등일 수 있다.
각각의 응용 예에 따라서 그 구성 블록도는 상이할 수 있으나, 도 6을 통해 구문 분석 장치의 블록들을 살펴보면, 입력부(300)는 키보드, 마우스 및/또는 마이크 등을 구비하여 사용자로부터의 구문 분석 시작 명령이나 종료 명령 등을 수신하거나 혹은 구문 분석에 이용될 문장(들)을 수신한다.
출력부(400)는, 구문 처리 유닛(100) 등에 의해 생성된 파싱 트리로부터 특정 응용 예에 따른 결과를 출력한다. 예를 들어 출력부(400)는 스피커나 디스플레이를 구비하여, 이 스피커나 디스플레이에 사용자의 요구에 대한 응답을 출력할 수 있다.
저장부(500)는, 휘발성 메모리, 비휘발성 메모리 및/또는 하드 디스크와 같은 대용량 저장 매체를 구비하여, 제어 유닛(200)과 구문 처리 유닛(100)에서 처리할 비터비 파싱 알고리즘과 같은 프로그램을 저장하고 이 프로그램을 제어 유닛(200)이나 구문 처리 유닛(100)에 제공한다. 또한 저장부(500)는 다수의 PCFG에 관련된 데이터를 저장하고 예를 들어 영어에 대한 어휘(vocabulary)와 품사 태그의 세트와 렉시콘(lexicon)과 문법등을 저장하고 이를 제어 유닛(200)이나 구문 처리 유닛(100)으로 제공한다.
통신부(600)는, 유선 및/또는 무선의 네트워크에 연결되어 외부 장치와 통신할 수 있도록 하는 블록이다. 이 통신부(600)는 예를 들어 와이파이(WiFi) 망을 통해서 혹은 랜(LAN)망을 통해서 인터넷에 연결될 수 있고 인터넷의 외부 장치로부터 문장을 수신하고 수신된 문장에 대한 처리 결과를 제공할 수 있다.
제어 유닛(200)은, 구문 분석 장치의 각 블록들을 제어한다. 이러한 제어 유닛(200)은 하나 혹은 복수의 프로세싱 코어를 구비하여, 저장부(500)에 저장된 프로그램을 로딩하고 입력부(300)나 통신부(600)의 제어에 따라 사용자 등의 요구를 처리하고 처리된 결과를 출력부(400)나 통신부(600)를 통해 출력한다.
예를 들어 제어 유닛(200)은, 도 3과 같은 비터비 파싱 알고리즘을 실행할 수 있고, 최하위 레벨에서 최상위 레벨 중에서 도 3과 같은 비터비 파싱 알고리즘에 따라 선택된 현재 레벨에 대한 모든 서브 문장의 각 심볼에 대한 스코어의 계산을 처리하도록 구성되고 최상위 레벨까지 처리가 완료된 후에 최선의 파싱 트리를 결정하도록 할 수 있다. 이러한 처리 과정은 병렬로 처리되지 않고 순차적으로 실행될 수 있다.
또한 제어 유닛(200)은, 구문 처리 유닛(100)을 제어하고 예를 들어 구문 처리 유닛(100)의 하나의 실행 유닛(110)에 구문 분석을 위한 복수의 심볼들 중 특정 심볼을 할당하도록 하고 다른 실행 유닛(110)에 구문 분석을 위한 다른 심볼을 할당하여 해당 실행 유닛(110)이 심볼에 대한 스코어를 계산하도록 할 수 있다.
또한 제어 유닛(200)은 동일한 심볼에 대해서도 하나의 실행 유닛(110)에서 처리가 비효율적인 경우에는 다수의 실행 유닛(110)으로 분할 할당하여 동일한 심볼에 대한 처리를 하도록 할당할 수 있다. 이에 대해서는 이하에서 좀 더 살펴보도록 한다.
구문 처리 유닛(100)은, GPU나 셀-프로세서 등과 같이 다수의 프로세싱 코어를 포함한다. 구문 처리 유닛(100)은 특히 이 다수의 프로세싱 코어가 도 5와 같이 계층화된 컴퓨터 아키텍처로 된 경우에 바람직할 수 있다.
이 구문 처리 유닛(100)은 도 5와 같이 다수의 실행 유닛(110)을 가지고 각각의 실행 유닛(110)은 다수의 서브 실행 유닛(111)과 공유 메모리(112)를 가질 수 있고 하나의 칩셋으로 구성될 수 있다.
전역 외장 메모리(800)는 구문 처리 유닛(100)에 연결되어 구문 처리 유닛(100)의 각 실행 유닛(110)이 공통적으로 접근할 수 있는 메모리로서 예를 들어 SDRAM 등일 수 있다. 이 전역 외장 메모리(800)는 제어 유닛(200)에 의해서 접근될 수 있고 이에 따라 제어 유닛(200)은 각 실행 유닛(110)에 필요한 프로그램의 부분이나 문법에 관련된 구문 규칙 등을 이 전역 외장 메모리(800)에 저장하도록 하거나 혹은 직접 실행 유닛(110) 내의 공유 메모리(112)나 광역 공유 메모리(120)에 저장할 수도 있다.
시스템 버스(700)는 각 블록들을 연결하여 블록들 간의 데이터나 제어 명령을 송수신하도록 하는 버스이다. 이러한 시스템 버스(700)는, 예를 들어 PCI 버스, ISA 버스 등을 포함한다. 시스템 버스(700)를 통해 제어 유닛(200)은 구문 처리 유닛(100)으로 구문 처리 유닛(100)의 각 실행 유닛(110)이 처리해야할 프로그램의 부분이나 문법에 관련된 구문 규칙 등을 전송하거나 각 실행 유닛(110)을 제어하고, 각 실행 유닛(110)의 처리 결과를 수신할 수 있다.
한편 제어 유닛(200)은, 응용 예에 따라서는 생략될 수 있고 예를 들어 구문 처리 유닛(100)의 특정 실행 유닛(110)이 제어 유닛(200)의 기능을 대신할 수도 있다. 이와 같은 제어 유닛(200)은 바람직하게 저장부(500)에 저장된 프로그램을 로딩하여 구동함으로써 각 블록들을 제어할 수 있다.
(3) 변경된 비터비 파싱 알고리즘 및 다른 변형예
비터비 파싱 알고리즘에 포함되는 도 4의 이항 릴랙세이션 알고리즘의 쥬도 코드를 도 5와 같은 구문 처리 유닛(100)의 아키텍처를 고려하여 보다더 처리 성능을 향상시킬 수 있는 변형된 이항 릴랙세이션 알고리즘에 대해서 살펴보도록 한다. 이러한 변경된 이항 릴랙세이션 알고리즘은 비터비 파싱 알고리즘의 일부로서 도 6과 같은 구문 분석 장치에서 수행될 수 있다.
① 맵핑(Mapping)
병렬 처리 알고리즘에서 어떠한 실행 부분(개체)을 어떤 하드웨어 블록에 할당할 것인가 하는 것은 성능상에 중요한 요소가 된다. 수십만의 구문 규칙이 있고 수천개 이상의 심볼이 처리되어야 하는 비터비 파싱 알고리즘에서는, 구문 규칙이나 혹은 심볼을 하나의 서브 실행 유닛(111)이나 실행 유닛(110)에 할당할 수 있다. 이러한 할당은 제어 유닛(200)에 의해서 바람직하게는 CUDA와 같은 개발 환경에 의해서 자동으로 혹은 프로그래머 등의 지정에 의해서 할당되고 이에 따라 제어 유닛(200)이 할당을 처리할 수 있다.
만일 심볼을 하나의 서브 실행 유닛(111)에 할당한다면 GPU와 같은 복수의 서브 실행 유닛(111)을 가진 구문 처리 유닛(100)에서 충분히 효과적으로 그리고 빠른 응답 속도를 가지도록 병렬 처리가 이루어질 수 없다. 즉 심볼에 관련된 구문 규칙이 혹은 구문 규칙의 개수가 심볼마다 상이하기 때문에 각각의 서브 실행 유닛(111)의 로드의 밸런스(balance)를 맞추기 힘들고 특히 GPU와 같이 복수의 서브 실행 유닛(111) 각각이 다른 서브 실행 유닛(111)과 명령어의 시퀀스를 공유하는 경우에는 특히 더 그러하여 성능이 저하될 수 있다.
따라서 구문 규칙에 하나의 서브 실행 유닛(111)을 할당하는 것이 하나의 안이 될 수 있다. 도 7은 PCFG의 구문 규칙들에 대해서 병렬로 처리(할당 또는 맵핑을 포함하여)하기 위한 하나의 예시적인 쥬도 코드를 도시한다.
도 7을 살펴보면, 도 4의 라인 3과 라인 5의 두개의 루프가 하나의 루프(도 7의 라인 3)로 변경되고 이 하나의 루프는 문법에서의 모든 구문 규칙(이항 구문 규칙)에 대해서 병렬(예를 들어 "in parallel" 등과 같은 약속된 명령으로)로 처리할 수 있도록 하고 이러한 하나의 루프는 예를 들어 GPU와 같은 실행 유닛(110) 또는 서브 실행 유닛(111)에 각각의 구문 규칙을 제어 유닛(200) 등에 의해서 할당할 수 있다.
이와 같은 병렬 처리 방식 혹은 할당 방식은 충분한 병렬 처리를 제공할 수 있고 따라서 구문 처리 유닛(100)의 실행 유닛(110) 또는 서브 실행 유닛(111)을 충분히 활용할 수 있도록 하고 로드 밸런스의 문제 역시 제거할 수 있다.
도 7의 쥬도 코드에 기초하여 이 변형된 이항 릴랙세이션 알고리즘(이하 플랫-룰 알고리즘이라 한다)을 살펴보면, 파싱 트리를 생성하여야 할 대상인 타겟 문장에 대해서, 이 타겟 문장의 단어 수에 따라서, 상향식 방식으로 최하위 레벨에서 최상위 레벨의 순으로, 현재 레벨에 대응하는 연속적인 단어를 가지는 서브 문장으로 분할하고 분할된 서브 문장(예를 들어 "I love you."에 대한 서브 문장인 "I love", "love you", "you." )에 대한 확률적 스코어의 계산을 하도록 한다(도 7의 라인 1).
여기서 도 7의 라인 1(루프)과 같이 각각의 분할된 서브 문장이 병렬적으로 처리되도록 명시할 수도 있고, 반대로 이 각각의 분할된 서브 문장에 대한 처리가 순차적으로 이루어질 수도 있고 이에 따라 하나의 분할된 서브 문장이 처리가 완료된 후에 후속하는 분할된 서브 문장의 처리가 순차적으로 이루어지도록 반복 수행할 수도 있다. 이와 같은 방식의 처리는 각각의 서브 문장의 처리에 필요한 문법이나 스코어 등에 대한 공유가 구문 처리 유닛(100)에서 이루어질 수 있도록 하여 성능의 향상을 가져 올 수 있다.
이와 같은 라인 1의 처리는 제어 유닛(200)에 의해서 이루어질 수 있고, 제어 유닛(200)에 의하여 특정 실행 유닛(110)(병렬로)에 혹은 전체 실행 유닛(110)(순차적)에 특정 분할된 서브 문장을 처리하도록 할당할 수 있다.
그리고 도 7의 라인 3(루프)에서, 현재 레벨에서 모든 구문 규칙에 대해서 병렬로 처리한다. 이는 제어 유닛(200)으로 하여금 (예를 들어 프로그램에 의해서, 혹은 개발 환경의 도움으로) 구문 처리 유닛(100)에 포함된 복수의 실행 유닛(110) 각각에 대하여 모든 구문 규칙을 할당하는 것을 수반한다.
즉 제어 유닛(200)은 모든 구문 규칙 중 일부의 구문 규칙을 복수의 실행 유닛(110) 중 하나의 실행 유닛(110)에 할당하고, 다른 일부의 구문 규칙을 다른 실행 유닛(110)에 할당하고, 또 다른 구문 규칙을 또 다른 실행 유닛(110)에 할당할 수 있다. 그리고 이러한 할당은 실행 시간 중에 이루어지거나 혹은 정적으로(compile time)에 이루어질 수도 있다. 따라서 특정 일부의 구문 규칙은 특정 하나의 실행 유닛(110)의 다른 구문 규칙의 실행 완료 후에 다시 특정 하나의 실행 유닛(110)에 할당되어 수행될 수도 있다.
여기서 하나의 실행 유닛(110)에 할당된 일부의 구문 규칙과 다른 실행 유닛(110)에 할당된 다른 일부의 구문 규칙은 동일한 심볼에 대한 구문 규칙일 수 있다. 이와 같은 경우 더 높은 확률적 스코어를 결정하기 위해서 실행 유닛(110) 간에 동기화가 필요하다.
그리고 도 7의 라인 6의 루프에서, 현재 레벨보다 한단계 낮은 레벨에서의 이미 계산된 확률적 스코어를 이용하여 복수의 심볼 들 중 할당된 구문 규칙에서 유도되는 심볼에 대한 확률적 스코어를 계산하고, 한 실행 유닛(110)에서 동일한 심볼에 대한 복수의 구문 규칙이 할당된 경우에는 동일한 심볼에 대해서 병렬적으로 복수의 스코어가 계산되고 물론 다른 실행 유닛(110)에서도 동일한 심볼에 대한 구문 규칙이 할당된 경우에는 해당 동일한 심볼에 대한 확률적 스코어가 계산될 수 있다.
그리고 도 7의 라인 18에서 현재 레벨에서의 처리가 지정된 서브 문장에 대한 심볼들에 대한 스코어 값을 다수의 실행 유닛(110)에서 계산된 심볼들에 대한 스코어 값을 이용하여 최종적으로 결정한다.
하나의 실행 유닛(110) 내의 복수의 실행 유닛(110) 각각은 특정 하나의 구문 규칙을 할당받고(예를 들어 제어 유닛(200)에 의해서), 동일한 실행 유닛(110)에 할당된 둘 이상의 구문 규칙은 특정 동일한 심볼에 대한 상이한 구문 규칙일 수 있다. 이를 위해 실행 유닛(110)의 공유 메모리(112)에 심볼들의 확률적 스코어를 임시로 저장하고(도 7의 라인 4) 서브 실행 유닛(111) 사이에서의 동일한 심볼에 대한 확률적 스코어를 서브 실행 유닛(111)들이 동시에 실행할 수 없는 예를 들어 소위 세마포어(semaphore)나 락(lock) 등과 같은 단일(atomic) 실행 명령으로의 동기화를 통해 정확한 그리고 더 높은 확률적 스코어를 결정할 수 있다(도 7의 라인 15).
그리고 마찬가지로 라인 19에서, 각각의 실행 유닛(110)에서 계산된 동일한 심볼에 대한 확률적 스코어의 최종 값을 결정하기 위해서 각각의 실행 유닛(110)이 동시에 실행 할 수 없는 예를 들어 소위 세마포어(semaphore)나 락(lock) 등과 같은 단일 실행 명령을 이용하여 현재 레벨에서의 지정된 현재 서브 문장에 대한 각 심볼의 최종 확률적 스코어를 결정한다.
도 7과 같은 플랫-룰 알고리즘은 GPU와 같은 복수의 서브 실행 유닛(111)을 가지고 있는 구문 분석 유닛으로 하여금 충분한 정도(구문 규칙이 다수를 차지하여)의 병렬 처리를 할 수 있도록 한다. 따라서 이러한 구현 혹은 맵핑(할당)은 좋은 예가 될 수 있다. 하지만, 도 7의 15 라인과 19 라인에서 알 수 있는 바와 같이 각 심볼에 대한 정확한 스코어를 결정하기 위해서 단일 실행 명령을 요구하고, 이는 하나의 실행 유닛(110) 내의 복수의 서브 실행 유닛(111)으로 하여금 처리가 순차화(seriliazation)도록 하고 또한 복수의 실행 유닛(110) 사이에서의 처리가 순차화되도록 하여 성능 저하가 일어날 수 있고 이에 따라 충분히 서브 실행 유닛(111)이나 실행 유닛(110)을 활용하지 못할 수도 있다.
앞서 도 5에서 살펴본 바와 같이, GPU와 같은 구문 처리 유닛(100)은 계층화된 컴퓨터 아키텍처가 있음을 알 수 있고, 이 계층화된 아키텍처를 활용하여 좀 더 효율적으로 이항 릴랙세이션 알고리즘을 변형할 수 있도록 보다더 좋은 성능을 가질 수 있을 것이다. 즉 실행 유닛(110)들이 다른 실행 유닛(110)과는 독립적으로 프로그램 혹은 프로그램의 일부를 수행할 수 있고, 실행 유닛(110) 내에서의 서브 실행 유닛(111)들은 동일한 시퀀스의 프로그램을 수행할 수 있고 실행 유닛(110) 내의 공유 메모리(112)를 서로 이용할 수 있는 것을 고려할 필요가 있다.
도 8은, 이와 같은 계층화된 아키텍처와 DCFG의 문법 특징을 고려하여 변형된 이항 릴랙세이션 알고리즘(이하에서 2-레벨 알고리즘이라 한다)을 나타내고 있다.
이러한 2-레벨 알고리즘은 간단히 DCFG에 포함된 심볼들을 각각 실행 유닛(110)에 할당하고 각 심볼들에 대하여 관련된 구문 규칙들을 각각 해당 실행 유닛(110) 내의 서브 실행 유닛(111)에 할당하는 형태로 변경되어 있다.
도 8을 통해서 프로그램 코드와 구문 처리 유닛(100)의 아키텍처 사이에서의 처리를 살펴보면, 파싱 트리를 생성하여야 할 대상인 타겟 문장에 대해서, 이 타겟 문장의 단어 수에 따라서, 상향식 방식으로 최하위 레벨에서 최상위 레벨의 순으로, 현재 레벨에 대응하는 연속적인 단어를 가지는 서브 문장으로 분할하고 분할된 서브 문장(예를 들어 "I love you."에 대한 서브 문장인 "I love", "love you", "you." )에 대한 확률적 스코어의 계산을 한다(도 8의 라인 1).
여기서 도 8의 라인 1(루프)과 같이 각각의 분할된 서브 문장이 병렬적으로 처리되도록 명시할 수도 있고, 반대로 이 각각의 분할된 서브 문장에 대한 처리가 순차적으로 이루어질 수도 있고 이에 따라 하나의 분할된 서브 문장의 처리가 완료된 후에 후속하는 분할된 서브 문장의 처리가 순차적으로 이루어지도록 반복 수행할 수도 있다. 이와 같은 순차적 방식의 처리는 각각의 서브 문장의 처리에 필요한 문법이나 스코어 등에 대한 공유가 구문 처리 유닛(100)에서 이루어질 수 있도록 하여 성능의 향상을 가져 올 수 있다.
이와 같은 라인 1의 처리는 제어 유닛(200)에 의해서 이루어질 수 있고, 제어 유닛(200)에 의하여 특정 실행 유닛(110)(병렬로)에 혹은 전체 실행 유닛(110)(순차적)에 특정 분할된 서브 문장을 처리하도록 할당할 수 있다.
그리고 도 8의 라인 3(루프)에서, 현재 레벨에서의 모든 심볼에 대해서 병렬로 처리한다. 이는 제어 유닛(200)으로 하여금 (예를 들어 프로그램에 의해서, 혹은 개발 환경의 도움으로) 구문 처리 유닛(100)에 포함된 실행 유닛(110)에 대하여 특정 심볼을 할당하는 것을 수반한다.
즉 복수의 실행 유닛(110) 중에서 하나의 실행 유닛(110)에는 복수의 심볼 중 하나의 심볼을 할당하고, 다른 실행 유닛(110)에는 다른 심볼을 할당하고 또 다른 실행 유닛(110)에는 또 다른 심볼을 할당할 수 있고, 모든 실행 유닛(110)에 대응하는 심볼을 할당한 후에 할당되지 않고 남아 있는 심볼에 대해서는 할당된 심볼에 대한 처리가 완료한 실행 유닛(110)에 다시 할당할 수 있다. 비록 심볼 별로 실행 시간이 상이한 경우에도 심볼의 개수가 복수의 실행 유닛(110)의 개수보다는 더 큰 경우가 일반적이므로 독립적으로 로드(load)의 밸런스를 맞출 수 있다.
그리고 도 8의 라인 5(루프)에서 각각의 실행 유닛(110)에 할당된 심볼에 관련된 구문 규칙들을 실행 유닛(110)의 서브 실행 유닛(111)들에 할당하고, 이후 각각의 서브 실행 유닛(111)들은 할당된 구문 규칙에 따라 할당된 심볼의 확률적 스코어를 현재 레벨보다 낮은 레벨의 확률적 스코어를 사용하여 확률적 스코어를 병렬적으로 계산한다.
따라서 한 실행 유닛(110)은 이 실행 유닛(110)에 지정된(할당된) 심볼에 관련된 다수의 구문 규칙을 이용하여 다수의 확률적 스코어를 계산하고, 다수의 확률적 스코어로부터 가장 확률이 높은 스코어로 해당 심볼에 대한 확률적 스코어를 결정할 수 있다(도 8의 라인 7에서 16 참조).
도 8의 라인 16에서 알 수 있는 바와 같이 해당 심볼에 대한 가장 높은 확률적 스코어의 결정은 한 실행 유닛(110) 내의 복수의 서브 실행 유닛(111)이 동시에 실행할 수 없는 단일 실행 명령을 통해서 이루어질 수도 있다.
그리고 도 8의 라인 19와 같이 실행 유닛(110) 간의 동기화가 필요에 따라 더 이루어질 수도 있다.
다시 도 8의 2-레벨 알고리즘의 개선점과 성능 향상을 위한 몇 가지를 검토하면, 도 8과 같이 심볼에 대하여 실행 유닛(110)에 할당하는 방식은, 심볼의 특징 또는 타입에 따라 처리를 간편하게 할 수 있다. 예를 들어 특정 심볼은 파싱 트리에서 단말 노드에만 발견되는 심볼일 수 있다. 이러한 경우에는 해당 특정 심볼에 대하여 한단계 아래의 하위 레벨의 분할 지점의 스코어를 활용한 처리가 생략될 수 있다.
또한 도 8에서 알 수 있는 바와 같이 각 실행 유닛(110)은 하나의 심볼에 대해서 처리가 이루어지므로 실행 유닛(110)에 포함되는 공유 메모리(112)에는 해당 심볼에 대한 하나의 공유 변수만(도 8의 라인 4 참조)을 저장하면 된다. 이는 공유 메모리(112)의 크기가 상대적으로 작은 점을 고려하면 성능 향상에 유리한 점으로 작용한다.
GPU와 같은 컴퓨터 아키텍처에서 각 실행 유닛(110)에서 할당되어 병렬로 처리할 수 있는 프로그램의 단위 등인 쓰레드(thread)의 개수는 한정될 수 있다. 예를 들어 특정 GPU는 512개나 1024개의 쓰레드까지의 개수로 한정될 수 있다. 따라서 한 심볼에 대한 구문 규칙의 개수가 이러한 지정된 개수 이상인 경우에는 해당 실행 유닛(110)에서의 성능 저하가 일어날 수 있다.
이를 대비하여 도 9에서 알 수 있는 바와 같이 심볼의 구문 규칙의 개수를 지정된 개수 이하가 되도록 지정된 개수 이상의 구문 규칙을 가진 심볼을 가상 심볼(virtual symbol)로 분할할 수 있고, 분할된 가상 심볼을 제어 유닛(200)이 도 8의 라인 3에서 복수의 실행 유닛(110)에 각각 할당할 수 있다. 이에 따라 가상 심볼에 대한 동기화를 도 8의 19라인에서 수행하여 최종 심볼에 대한 최종 확률적 스코어를 계산할 수 있다.
또 다른 주목할 점은 단일 실행 명령에 있다. 이 단일 실행 명령은 복수의 서브 실행 유닛(111) 사이에서 순차화되어 실행 속도가 저하될 수 있다. 이러한 단일 실행 명령을 사용하지 않고 병렬로 특정 심볼의 최종 확률적 스코어를 계산할 수 있고 이는 아래에서 살펴보도록 한다.
② 동기화(Synchronization)
동기화는 병렬적으로 계산된 심볼에 대한 확률적 스코어를 최종 결정하기 위해서 필요하다. 이러한 동기화는 서브 실행 유닛(111)들 사이에서 혹은 실행 유닛(110)들 사이에서의 동시에 접근하여 변경할 수 없는 단일 실행 명령으로 이루어질 수 있다.
이러한 단일 실행 명령은 실행 유닛(110) 내에서 이루어지는 것이 실행 유닛(110) 사이에서 이루어지는 것보다는 유리하다. 왜냐하면 실행 유닛(110) 내의 공유 메모리(112)를 활용하여 복수의 서브 실행 유닛(111) 사이에서 이루어지는 반면 실행 유닛(110) 사이에서는 구문 처리 유닛(100)에 포함되는 공유 메모리(112)보다 접근 속도가 느린 광역 공유 메모리(120)나 외부의 전역 외장 메모리(800)에 공유 변수가 저장되기 때문이다.
이러한 공유 변수는 공유 메모리(112)나 외부 메모리에 공유 변수로 정의될 수 있다(도 7과 도 8의 라인 4 참조). 도 7과 도 8을 참조하면 2-레벨 알고리즘이 하나의 실행 유닛(110)에 하나의 심볼을 할당하여 공유 메모리(112)의 활용 측면에서 적은 메모리를 사용하고 동기화 회수가 줄어 보다더 유리하다. 그리고 가상 심볼의 도입은 또한 2-레벨 알고리즘에서도 전역(실행 유닛(110) 사이)의 동기화가 필요(도 8의 라인 19 참조)하나 도 7의 18 및 19라인과 비교하여 그 동기화에 필요한 단일 실행 명령의 개수는 상당히 줄어듦을 알 수 있다.
한편 도 8의 라인 16의 단일 실행 명령을 대신한 한 실행 유닛(110)에서의 최종 스코어를 결정할 수 있는 방식이 있을 수 있다. 도 10에서 알 수 있는 바와 같이, 각각의 복수의 서브 실행 유닛(111)은 심볼에 대해서 할당된 구문 규칙에 따라서 개별적으로 공유 메모리(112)에 동일한 심볼에 대한 스코어 값을 저장하기 위한 변수를 할당받고(예를 들어도 8의 라인 4의 공유 변수가 서브 실행 유닛(111)의 개수만큼의 어레이로 변경되어), 각각의 서브 실행 유닛(111)이 개별적으로 할당된 공유 메모리(112)의 변수에 개별적으로 계산된 동일한 심볼에 대한 확률적 스코어를 저장한다.
이후에 도 10과 같이, 복수의 서브 실행 유닛(111)에서 계산된 복수의 확률적 스코어를 두 개씩 페어링하고, 두 개씩 페어링 된 확률적 스코어에 대해서 서브 실행 유닛(111) 중 페어링된 개수(예를 들어 도 10의 단계 1에서 4개) 만큼의 서브 실행 유닛(111)에 계산을 위해 할당(예를 들어 제어 유닛(200)에 의하여)하여, 할당된 서브 실행 유닛(111)에서 두 개의 확률적 스코어를 비교하여 하나의 스코어를 결정하고 결정된 확률적 스코어는 다시 공유 메모리(112)에 저장할 수 있다(이러한 과정은 도 8의 라인 16을 대신하여 이루어짐).
그리고 이러한 단계는 최종적으로 특정 심볼에 대한 하나의 최종 확률적 스코어가 결정될 때까지 반복될 수 있다.
이러한 방식은 물론 순차적으로 실행되는 단일 실행 명령을 이용한 경우보다는 더 빠른 결과를 도출할 수 있다.
③ 메모리 접근의 효율화
도 5에서 알 수 있는 바와 같이 GPU와 같은 계층적인 메모리를 가진 구문 처리 유닛(100)은 연산 처리가 전역 변수를 통한 전역 외장 메모리(800)에 대한 접근보다는 내장 메모리(112, 120)를 통한 접근이 보다더 경제적이다. 따라서 전역 외장 메모리(800)의 접근 대비 연산 처리(Compute to Global Memory Access, CGMA)의 비율을 더 높이는 것이 고성능을 이루어낼 수 있다.
도 4에서 알 수 있는 바와 각각의 이항 구문 규칙에 대해서 3개의 전역 메모리로의 접근(좌측 심볼 ID(l_sym), 우측 심볼 ID(r_sym), 확률적 스코어(rule_score)이 있고 또한 좌측 심볼 ID와 우측 심볼 ID의 확률적 스코어(l_score, r_score)가 있고 라인 5의 반복 회수는 길이(length, 서브 문장의 단어 길이) 만큼이므로 전역 메모리에 대한 접근 회수는 2*length + 3로 결정됨을 알 수 있다.
일반적으로 사용되어지는 전역 메모리의 접근을 줄이는 방법은 실행 유닛(110)의 공유 메모리(112)를 이용하는 것이다. 이러한 공유 메모리(112)는 1-2 사이클(cycle) 이내에 접근이 가능한 반면 전역 외장 메모리(800)와 같은 전역 메모리는 최대 수백 사이클이 걸릴 수 있다.
하지만 공유 메모리(112)의 크기는 한정된 반면(예를 들어 16KB) 서브 문장의 단어 길이(length)가 크짐에 따라 3차원 어레인 스코어 어레이에 접근해야 하는 범위는 더 커져서 한정된 공유 메모리(112)에 저장할 수 없다.
다시 도 11을 통해서 각 서브 실행 유닛(111) 등이 스코어 어레이에 접근하는 패턴을 살펴보면, 스코어 어레이에 대한 접근이 일정한 규칙을 가지고 한정된 영역에만 접근하는 것을 알 수 있다. 예를 들어 현재 그리드가 인덱스로 (1,3)인 경우에는 현재 그리드의 레벨보다 낮은 레벨의 빗금으로 그려진 그리드만을 접근하는 것을 알 수 있다.
이와 같은 한정된 영역은 현재 레벨에서 처리되는 서브 문장의 인덱스에 의해서 결정될 수 있고, 예를 들어 인덱스 (0,3)에 대해서는 (0,0), (0,1), (0,2), (1,3), (2,3), (3,3)의 그리드만을 접근하는 것을 알 수 있다.
따라서 이러한 3차원의 스코어 어레이를 2차원의 연속적으로 인덱싱 가능한 어레이로 도 11 (b)와 같이 변경할 수 있고 이를 제한된 사이즈의 실행 유닛(110)의 공유 메모리(112)에 저장하여 처리 속도를 향상시킬 수 있다.
한편 도 5에서 알 수 있는 바와 같이 구문 처리 유닛(100)은 또한 전역 외장 메모리(800)보다는 접근 속도가 빠르나 공유 메모리(112)보다는 속도가 느린 광역 공유 메모리(120)를 포함할 수 있다. 이러한 광역 공유 메모리(120)는 소위 텍스쳐(texture) 메모리 및/또는 상수(constant) 메모리로 지칭될 수 있고 일반적으로 공유 메모리(112)보다는 더 큰 사이즈의 메모리이다.
이러한 광역 공유 메모리(120)는 다수의 실행 유닛(110)으로 하여금 읽기 전용의 메모리로서 역할을 담당할 수 있고, 여기에 다수의 실행 유닛(110)에서 처리하는 심볼에 관련된 구문 규칙들을 저장할 수 있다. 이러한 일련의 구문 규칙의 저장은 제어 유닛(200)에 의해서 수행될 수 있다.
한편 도 4의 라인 7에서 라인 15의 루프에서 스코어 어레이에의 빈번한 접근 패턴은 또한 전역 외장 메모리(800)로부터 광역 공유 메모리(120)로 이동할 수 있는 후보가 될 수 있다. 하지만 스코어 어레이는 읽기뿐 아니라 쓰기도 이루어지므로 이 이항 릴랙세이션의 적용마다 새로운 바인딩(binding)이 이루어져야 한다(도 3의 라인 4와 라인 5). 이러한 바인딩의 비용을 줄이기 위해서 스코어 어레이의 인덱스 구조를 스코어[start][end][symbol]에서 스코어[len][start][symbol]로 변경할 수 있다. 여기서 len = end - start 를 나타낸다.
여기서 비터비 파싱 알고리즘이 최하위 레벨에서 최상위 레벨로 스코어를 채우는 동적인 알고리즘임을 고려하면, 현재 레벨의 길이가 len일때, 단지 len = 2에서 (len -1)까지의 스코어만이 접근된다는 것은 명확하다. 따라서 새로운 스코어의 인덱스 구조를 이용하여 단지 len -1까지의 스코어 어레이를 광역 공유 메모리(120)에 동적으로 바인딩하면 되고 따라서 바인딩에 따른 비용을 줄일 수 있다.
(4) 테스트 결과
이상에서 제안한 기술적 특징들을 NVIDIA의 GPU(GTX285, GTX480)를 이용하여 테스트를 실시하였다. 테스트를 실시한 DCFG는 623개의 단말(terminal) 심볼을 포함하는 1120개의 심볼을 포함하고, 852,591개의 이항 구문 규칙과 114,419개의 단항 구문 규칙을 포함하고 CUDA 개발 환경을 이용하여 GPU의 각 실행 유닛(110)에 프로그램을 할당하거나 GPU의 메모리에 특정 변수를 할당하도록 구성하였다.
테스트 결과 기존에 알려진 최상의 순차적인 비터비 파서에 비해서 최대 26배 이상의 실행 속도의 향상을 가져오는 것으로 도출되었다. 특히 도 8의 2-레벨 알고리즘과 단일 실행 명령을 이용하지 않고 도 10과 같은 병렬로 동기화로 실행하는 경우에 가장 좋은 결과를 가져오는 것으로 도출되었다.
그리고 앞서 설명한 바와 같이, 한 레벨에서의 모든 서브 문장에 대해서 병렬적으로 수행하는 것보다는 순차적으로 각각의 서브 문장에 대해서 GPU에서 처리하는 것이 좀더 나은 결과를 나오는 것으로 도출되었다.
이와 같이 본 발명의 기술적 특징을 활용하면 다양한 응용에서 사용될 수 있는 파싱 트리를 생성하기 위한 구문 분석을 보다더 빨리 수행하여 사용자 등에게 즉각적인 응답을 제공할 수 있도록 하고 다양한 응용 예에서 특정 구문 규칙의 생략 등의 없이 정확히 파싱 트리를 생성할 수 있도록 하고 GPU나 셀-프로세서와 같은 다수의 프로세싱 코어를 포함하는 아키텍처 상에서 이 아키텍처를 고려하여 보다더 효과적이고 빠른 성능 향상을 가져올 수 있다.
이와 같은 구문 분석 방법은 또한 CD, DVD, 블루레이 디스크, USB 메모리 등과 같은 컴퓨터가 판독 가능하는 저장 매체에 프로그램의 형태로 저장될 수 있다.
이상에서 설명한 본 발명은, 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자에게 있어 본 발명의 기술적 사상을 벗어나지 않는 범위 내에서 여러 가지 치환, 변형 및 변경이 가능하므로 전술한 실시 예 및 첨부된 도면에 의해 한정되는 것이 아니다.
100 : 구문 처리 유닛 110 : 실행 유닛
111 : 서브 실행 유닛 112 : 공유 메모리
120 : 광역 공유 메모리 200 : 제어 유닛
300 : 입력부 400 : 출력부
500 : 저장부 600 : 통신부
700 : 시스템 버스 800 : 전역 외장 메모리

Claims (33)

  1. 복수의 실행 유닛을 이용한 구문 분석 방법으로서,
    (i) 복수의 실행 유닛 중 제 1 실행 유닛에서, 계층적 구문 분석을 위한 현재 레벨에서의 복수의 심볼 중 제 1 심볼에 대한 하나 이상의 스코어를 제 1 심볼과 관련된 구문 규칙과 현재 레벨보다 낮은 레벨의 스코어를 이용하여 계산하는 단계; 및
    (ii) 상기 제 1 실행 유닛에서, 계산된 하나 이상의 스코어를 이용하여 상기 제 1 심볼에 대한 스코어를 결정하는 단계;를 포함하는,
    구문 분석 방법.
  2. 제1항에 있어서,
    (iii) 상기 단계 (i) 이전에, 구문 분석을 위한 복수의 심볼 중 제 1 심볼에 대한 스코어 계산을 상기 제 1 실행 유닛에 할당하는 단계; 및
    복수의 심볼 중 다른 심볼에 대한 스코어 계산을 상기 제 1 실행 유닛과는 상이한 다른 실행 유닛에 할당하는 단계;를 더 포함하는,
    구문 분석 방법.
  3. 제2항에 있어서,
    제 1 심볼에 관련된 구문 규칙의 개수가 제 1 실행 유닛에 대해 지정된 개수를 초과하는 경우에, 상기 제 1 실행 유닛과는 상이한 제 2 실행 유닛에 초과된 구문 규칙으로 상기 제 1 심볼에 대한 스코어 계산을 할당하는 단계;를 더 포함하는,
    구문 분석 방법.
  4. 제2항 또는 제3항에 있어서,
    상기 제 1 실행 유닛 및 상기 다른 실행 유닛은, 동일한 명령어의 시퀀스를 수행하는 복수의 서브 실행 유닛과 각 서브 실행 유닛이 접근할 수 있고 각 실행 유닛에 포함되는 공유 메모리를 포함하고,
    상기 구문 분석 방법은, 복수의 서브 실행 유닛 각각에 상기 제 1 실행 유닛에 할당된 제 1 심볼과 관련된 복수의 구문 규칙을 각각 할당하는 단계를 더 포함하고,
    상기 (i) 단계는, 상기 제 1 실행 유닛의 복수의 서브 실행 유닛 각각에 할당된 구문 규칙으로 상기 제 1 심볼에 대한 스코어를 계산하는,
    구문 분석 방법.
  5. 제4항에 있어서
    상기 (ii) 단계는, 상기 제 1 실행 유닛의 복수의 서브 실행 유닛이 동시에 수행할 수 없는 단일(atomic) 실행 명령을 이용하여 이루어지는,
    구문 분석 방법.
  6. 제4항에 있어서,
    상기 (ii) 단계는, 상기 공유 메모리에 저장되고 상기 복수의 서브 실행 유닛에서 계산된 복수의 스코어를 두 개씩 페어링된 스코어로 복수의 서브 실행 유닛 중 적어도 하나에 할당하는 단계; 및 할당된 서브 실행 유닛이 상기 두 개씩 페어링된 스코어에 대한 비교를 수행하고 비교에 따라 두 개씩 페어링된 스코어 중 하나의 스코어를 결정하는 단계;를 포함하는,
    구문 분석 방법.
  7. 제6항에 있어서,
    상기 복수의 서브 실행 유닛 중 적어도 하나에 할당하는 단계와 상기 페어링된 스코어 중 하나의 스코어를 결정하는 단계는, 최종 하나의 스코어가 결정될 때 까지 반복되는,
    구문 분석 방법.
  8. 제1항에 있어서,
    상기 단계 (i) 이전에, 구문 분석을 위한 문장을 현재 레벨에 따라 서브 문장으로 분할하는 단계;를 더 포함하고,
    상기 단계 (i) 내지 (ii)는, 분할된 서브 문장 중 순차적으로 선택된 서브 문장에 대하여 반복 수행되는,
    구문 분석 방법.
  9. 제8항에 있어서,
    상기 제 1 실행 유닛은, 공유 메모리를 포함하고,
    상기 구문 분석 방법은, 상기 (i) 단계 이전에, 현재 레벨에 따라 분할된 서브 문장의 스코어를 계산하기 위해서 필요한 현재 레벨보다 낮은 레벨의 서브 문장의 스코어를 상기 공유 메모리에 저장하는 단계를 더 포함하고,
    상기 공유 메모리에 저장되는 낮은 레벨의 서브 문장의 스코어는 현재 레벨에 따라 분할된 서브 문장의 스코어를 계산하기 위해 필요한 낮은 레벨의 서브 문장의 스코어들 중 일부인,
    구문 분석 방법.
  10. 제9항에 있어서,
    상기 낮은 레벨의 서브 문장의 스코어들 중 일부는, 현재 레벨에 따라 분할된 서브 문장을 식별하기 위한 인덱스(index)에 의해서 결정되는,
    구문 분석 방법.
  11. 제1항에 있어서,
    상기 복수의 실행 유닛 각각은, GPU(Graphics Processor Units)의 스트리밍 멀티프로세서(Streaming Multiprocessor)인,
    구문 분석 방법.
  12. 복수의 실행 유닛을 이용한 구문 분석 방법으로서,
    (i) 복수의 실행 유닛 중 제 1 실행 유닛에서, 계층적 구문 분석을 위한 현재 레벨에서의 복수의 심볼 중 제 1 심볼에 대한 복수의 스코어를 현재 레벨보다 낮은 레벨의 스코어를 이용하여 계산하는 단계; 및
    (ii) 상기 제 1 실행 유닛에서, 계산된 복수의 스코어를 이용하여 상기 제 1 심볼에 대한 스코어를 결정하는 단계;를 포함하는,
    구문 분석 방법.
  13. 제12항에 있어서,
    (iii) 상기 단계 (i) 이전에, 구문 분석을 위한 복수의 구문 규칙 중 일부의 구문 규칙을 상기 제 1 실행 유닛에 할당하고 복수의 구문 규칙 중 다른 일부의 구문 규칙을 상기 제 1 실행 유닛과는 상이한 제 2 실행 유닛에 할당하는 단계;를 더 포함하며,
    상기 제 1 심볼은, 제 1 실행 유닛에 할당된 구문 규칙에 포함된 심볼인,
    구문 분석 방법.
  14. 제13항에 있어서,
    상기 제 2 실행 유닛에서, 상기 제 1 심볼에 대한 복수의 스코어를 현재 레벨보다 낮은 레벨의 스코어를 이용하여 계산하는 단계;
    상기 제 2 실행 유닛에서, 계산된 복수의 스코어를 이용하여 상기 제 1 심볼에 대한 스코어를 결정하는 단계; 및
    상기 제 1 실행 유닛과 상기 제 2 실행 유닛에서 각각 결정된 제 1 심볼에 대한 스코어를 이용하여 제 1 심볼에 대한 최종 스코어를 결정하는 단계;를 더 포함하는,
    구문 분석 방법.
  15. 제14항에 있어서,
    상기 제 1 심볼에 대한 최종 스코어를 결정하는 단계는, 상기 제 1 실행 유닛과 상기 제 2 실행 유닛에 의해 동시에 수행할 수 없는 단일(atomic) 실행 명령을 이용하여 이루어지는,
    구문 분석 방법.
  16. 제13항에 있어서,
    상기 제 1 실행 유닛 및 상기 제 2 실행 유닛은, 동일한 명령어의 시퀀스를 수행하는 복수의 서브 실행 유닛과 각 서브 실행 유닛이 접근할 수 있고 각 실행 유닛에 포함되는 공유 메모리를 포함하고,
    상기 구문 분석 방법은, 복수의 서브 실행 유닛 각각에 상기 제 1 실행 유닛에 할당된 일부 구문 규칙 각각을 할당하는 단계를 더 포함하고,
    상기 (i) 단계는, 상기 제 1 실행 유닛의 복수의 서브 실행 유닛 각각에 할당된 구문 규칙 중 상기 제 1 심볼에 관련된 구문 규칙으로 상기 제 1 심볼에 대하여 복수의 스코어를 계산하는,
    구문 분석 방법.
  17. 제16항에 있어서,
    상기 (ii) 단계는, 공유 메모리를 이용하여 복수의 서브 실행 유닛이 동시에 수행할 수 없는 단일(atomic) 실행 명령을 이용하여 이루어지는,
    구문 분석 방법.
  18. 제12항에 있어서,
    상기 복수의 실행 유닛 각각은, GPU(Graphics Processor Units)의 스트리밍 멀티프로세서(Streaming Multiprocessor)인,
    구문 분석 방법.
  19. 제13항에 있어서,
    상기 단계 (i) 이전에, 구문 분석을 위한 문장을 현재 레벨에 따라 서브 문장으로 분할하는 단계;를 더 포함하고,
    상기 단계 (i) 내지 (ii)는, 분할된 서브 문장 중 순차적으로 선택된 서브 문장에 대하여 반복 수행되는,
    구문 분석 방법.
  20. 계층적 구문 분석을 위한 현재 레벨에서 복수의 심볼 중 제 1 심볼에 대한 하나 이상의 스코어를 제 1 심볼과 관련된 구문 규칙과 현재 레벨보다 낮은 레벨의 스코어를 이용하여 계산하는 제 1 실행 유닛; 및
    상기 현재 레벨에서 복수의 심볼 중 제 2 심볼에 대한 하나 이상의 스코어를 제 2 심볼과 관련된 구문 규칙과 현재 레벨보다 낮은 레벨의 스코어를 이용하여 계산하는 제 2 실행 유닛;을 포함하는,
    구문 분석 장치.
  21. 제20항에 있어서,
    상기 제 1 실행 유닛 및 상기 제 2 실행 유닛은, 계산된 하나 이상의 스코어를 이용하여 각각 상기 제 1 심볼 및 상기 제 2 심볼에 대한 스코어를 결정하는,
    구문 분석 장치.
  22. 제20항에 있어서,
    상기 제 1 실행 유닛 및 상기 제 2 실행 유닛을 제어하기 위한 제어 유닛을 더 포함하며,
    상기 제어 유닛은, 복수의 심볼 중 제 1 심볼에 대한 스코어 계산을 상기 제 1 실행 유닛에 할당하고, 복수의 심볼 중 제 2 심볼에 대한 스코어 계산을 상기 제 2 실행 유닛에 할당하는,
    구문 분석 장치.
  23. 제22항에 있어서,
    상기 제어 유닛은, 제 1 심볼에 관련된 구문 규칙의 개수가 제 1 실행 유닛에 대해 지정된 개수를 초과하는 경우에, 상기 제 1 실행 유닛과는 상이한 제 3 실행 유닛에 초과된 구문 규칙으로 상기 제 1 심볼에 대한 스코어 계산을 더 할당하는,
    구문 분석 장치.
  24. 제22항 또는 제23항에 있어서,
    상기 제 1 실행 유닛 및 상기 제 2 실행 유닛은, 동일한 명령어의 시퀀스를 수행하는 복수의 서브 실행 유닛과 각 서브 실행 유닛이 접근할 수 있고 각 실행 유닛에 포함되는 공유 메모리를 포함하고,
    상기 제 1 실행 유닛의 복수의 서브 실행 유닛은, 복수의 구문 규칙 중 제 1 심볼에 관련되어 각각 할당된 구문 규칙으로 상기 제 1 심볼에 대한 스코어를 계산하는,
    구문 분석 장치.
  25. 제24항에 있어서,
    상기 제 1 실행 유닛의 공유 메모리는, 제 1 심볼에 대한 계산된 스코어를 저장하고,
    상기 제 1 실행 유닛의 복수의 서브 실행 유닛 각각은, 서브 실행 유닛들이 동시에 수행할 수 없는 단일(atomic) 실행 명령을 이용하여 상기 공유 메모리의 스코어를 갱신하는,
    구문 분석 장치.
  26. 제24항에 있어서,
    상기 제 1 실행 유닛의 공유 메모리는, 각각의 복수의 서브 실행 유닛에서 계산된 제 1 심볼에 대한 스코어를 개별적으로 저장하고,
    상기 복수의 서브 실행 유닛 중 일부의 서브 실행 유닛은, 공유 메모리에 저장된 두 개의 스코어로부터 하나의 스코어를 각각 결정하는,
    구문 분석 장치.
  27. 제26항에 있어서,
    상기 공유 메모리에 저장된 두 개의 스코어로부터 하나의 스코어로의 결정은, 하나의 스코어가 남을 때까지 반복되는,
    구문 분석 장치.
  28. 제22항에 있어서,
    상기 제어 유닛은, 구문 분석을 위한 문장을 현재 레벨에 따라 서브 문장으로 분할하고, 분할된 서브 문장 중 순차적으로 선택된 서브 문장의 제 1 심볼에 대한 스코어 계산을 상기 제 1 실행 유닛에 할당하고 제 2 심볼에 대한 스코어 계산을 상기 제 2 실행 유닛에 할당하는,
    구문 분석 장치.
  29. 제28항에 있어서,
    상기 제 1 실행 유닛은 제 1 실행 유닛에 포함된 복수의 서브 실행 유닛이 접근할 수 있는 공유 메모리를 포함하고,
    상기 공유 메모리는, 현재 레벨에 따라 분할된 서브 문장의 스코어를 계산하기 위해서 필요한 현재 레벨보다 낮은 레벨의 서브 문장의 스코어를 저장하고,
    저장된 낮은 레벨의 서브 문장의 스코어는, 현재 레벨에 따라 분할된 서브 문장의 스코어를 계산하기 위해 필요한 낮은 레벨의 서브 문장의 스코어 중 일부인,
    구문 분석 장치.
  30. 제29항에 있어서,
    상기 낮은 레벨의 서브 문장의 스코어 중 일부는, 현재 레벨에 따라 분할된 서브 문장을 식별하기 위한 인덱스(index)에 의해서 결정되는,
    구문 분석 장치.
  31. 제24항에 있어서,
    상기 공유 메모리보다 액세스 속도가 느리고 상기 제 1 실행 유닛 및 상기 제 2 실행 유닛이 접근할 수 있는 광역 공유 메모리를 더 포함하고,
    상기 광역 공유 메모리는, 상기 제 1 심볼과 상기 제 2 심볼을 포함하는 복수의 심볼과 관련된 구문 규칙들을 저장하는,
    구문 분석 장치.
  32. 제20항에 있어서,
    상기 제 1 실행 유닛 및 제 2 실행 유닛 각각은, GPU(Graphics Processor Units)의 스트리밍 멀티프로세서(Streaming Multiprocessor)인, 구문 분석 장치.
  33. 제1항 또는 제12항에 따른 방법을 실행하기 위한 프로그램을 기록한 컴퓨터 판독가능 기록 매체.
KR1020120063905A 2012-06-14 2012-06-14 복수의 실행 유닛을 이용한 구문 분석 방법 및 구문 분석 장치 KR101382362B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020120063905A KR101382362B1 (ko) 2012-06-14 2012-06-14 복수의 실행 유닛을 이용한 구문 분석 방법 및 구문 분석 장치

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020120063905A KR101382362B1 (ko) 2012-06-14 2012-06-14 복수의 실행 유닛을 이용한 구문 분석 방법 및 구문 분석 장치

Publications (2)

Publication Number Publication Date
KR20130140475A true KR20130140475A (ko) 2013-12-24
KR101382362B1 KR101382362B1 (ko) 2014-04-08

Family

ID=49985085

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020120063905A KR101382362B1 (ko) 2012-06-14 2012-06-14 복수의 실행 유닛을 이용한 구문 분석 방법 및 구문 분석 장치

Country Status (1)

Country Link
KR (1) KR101382362B1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112905525A (zh) * 2019-11-19 2021-06-04 中科寒武纪科技股份有限公司 控制运算装置进行计算的方法及设备

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2020101263A1 (en) 2018-11-14 2020-05-22 Samsung Electronics Co., Ltd. Electronic apparatus and method for controlling thereof

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112905525A (zh) * 2019-11-19 2021-06-04 中科寒武纪科技股份有限公司 控制运算装置进行计算的方法及设备
CN112905525B (zh) * 2019-11-19 2024-04-05 中科寒武纪科技股份有限公司 控制运算装置进行计算的方法及设备

Also Published As

Publication number Publication date
KR101382362B1 (ko) 2014-04-08

Similar Documents

Publication Publication Date Title
Jia et al. Beyond Data and Model Parallelism for Deep Neural Networks.
US10942716B1 (en) Dynamic computational acceleration using a heterogeneous hardware infrastructure
US10949182B2 (en) Systems and methods for generating code for parallel processing units
Lee et al. Transparent CPU-GPU collaboration for data-parallel kernels on heterogeneous systems
Chung et al. Parallel deep neural network training for big data on blue gene/q
Lee et al. Locality-aware mapping of nested parallel patterns on gpus
Behzad et al. Optimizing i/o performance of hpc applications with autotuning
US8312227B2 (en) Method and apparatus for MPI program optimization
Zhang et al. M2M: A simple Matlab-to-MapReduce translator for cloud computing
US20190243625A1 (en) Vectorizing conditional min-max sequence reduction loops
KR102479264B1 (ko) 트랜스포머 기반 생성 작업들에 대한 추론 시스템을 위한 동적 배칭
Luo et al. Finding representative sets of optimizations for adaptive multiversioning applications
Holk et al. Declarative parallel programming for GPUs
Laville et al. MCMAS: a toolkit to benefit from many-core architecure in agent-based simulation
CN108595917A (zh) 基于fpga的面向基因测序串匹配算法的加速平台及设计方法
KR101382362B1 (ko) 복수의 실행 유닛을 이용한 구문 분석 방법 및 구문 분석 장치
Chang et al. PipeBERT: high-throughput BERT inference for arm big. Little multi-core processors
Zhai et al. Lit: A high performance massive data computing framework based on cpu/gpu cluster
Zhao et al. Deepdsl: A compilation-based domain-specific language for deep learning
CN113791770B (zh) 代码编译器、代码编译方法、代码编译系统和计算机介质
Chennupati et al. On the efficiency of multi-core grammatical evolution (mcge) evolving multi-core parallel programs
CN115756605A (zh) 一种基于多gpu的浅积云对流参数化方案异构计算方法
Scolari et al. Towards accelerating generic machine learning prediction pipelines
US11809849B1 (en) Global modulo allocation in neural network compilation
CN107818076B (zh) 针对自然语言的语义处理

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
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20170316

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20180323

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20190329

Year of fee payment: 6