KR102370851B1 - 벡터 연산 명령어를 통해 문자열을 고속으로 추출하는 방법 - Google Patents

벡터 연산 명령어를 통해 문자열을 고속으로 추출하는 방법 Download PDF

Info

Publication number
KR102370851B1
KR102370851B1 KR1020210108976A KR20210108976A KR102370851B1 KR 102370851 B1 KR102370851 B1 KR 102370851B1 KR 1020210108976 A KR1020210108976 A KR 1020210108976A KR 20210108976 A KR20210108976 A KR 20210108976A KR 102370851 B1 KR102370851 B1 KR 102370851B1
Authority
KR
South Korea
Prior art keywords
register
delimiter
value
string
offset
Prior art date
Application number
KR1020210108976A
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 KR1020210108976A priority Critical patent/KR102370851B1/ko
Application granted granted Critical
Publication of KR102370851B1 publication Critical patent/KR102370851B1/ko
Priority to US17/889,838 priority patent/US20230071820A1/en

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/20Natural language analysis
    • G06F40/205Parsing
    • G06F40/211Syntactic parsing, e.g. based on context-free grammar [CFG] or unification grammars
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/20Natural language analysis
    • G06F40/279Recognition of textual entities
    • G06F40/289Phrasal analysis, e.g. finite state techniques or chunking
    • 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
    • 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/30029Logical and Boolean instructions, e.g. XOR, NOT
    • 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/3004Arrangements for executing specific machine instructions to perform operations on memory
    • 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/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • 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/30098Register arrangements
    • G06F9/30105Register structure
    • 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/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/3013Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers

Abstract

본 발명은, 전자적 연산 장치가 문자열 중에서 구분자를 제외한 대상 문자열을 추출하는 방법에 대한 것으로서, 소정의 단위의 단위 문자열을 제1-0 레지스터에 적재하는 제1 단계와; 문자 인코딩 체계에서 구분자의 경계값을 제1-1 레지스터에 적재하는 제2 단계와; 제1-0 레지스터와 제1-1 레지스터를 비교하고 그 결과값에 기초하여 산출된 구분자 위치를 제1-2 레지스터에 저장하는 제3 단계와; 제1-2 레지스터에 저장된 값의 특징값을 제2 레지스터에 옮겨서 마스크를 생성하는 제4 단계와; 마스크에 기록된 특징값에 기초하여 구분자의 오프셋을 계산하여 구분자 배열을 생성하는 제5 단계와; 구분자 배열에 기초하여 문자열로부터 대상 문자열을 추출하는 제6 단계를 포함한다.

Description

벡터 연산 명령어를 통해 문자열을 고속으로 추출하는 방법 {Method for High-Speed String Extraction using Vector Instruction}
본 발명은 컴퓨터와 같은 전자적 연산 장치가 벡터 연산 명령어를 통해 문자열을 고속으로 추출하는 방법에 대한 것으로서 좀 더 자세하게는 구분자를 제외한 대상 문자열을 추출하는 방법에 대한 것이다.
빅데이터 플랫폼은 일반적으로 네트워크를 통해서 원격으로 데이터를 수집하거나, 파일로 기록된 데이터를 대량으로 수집한다. 빅데이터로 분류되는 수많은 데이터는 종래에 데이터베이스에서 관리하는 스키마가 부여되는 정형화된 데이터와 달리 규격화되지 않은 비정형 데이터가 대부분이다. 이와 같은 비정형 빅데이터를 고속으로 검색하기 위해서는 풀텍스트 인덱스를 생성하거나, 통계 처리를 위하여 값 추출을 통한 정형화를 수행하기 위해서 구문 분석은 필수적이다.
종래의 빅데이터 플랫폼은 여러 개의 프로세서 코어를 동시에 병렬적으로 사용하도록 멀티스레드를 이용한 구문 분석을 통해 구문 분석 성능을 향상시켜 오고 있었는데 기업의 네트워크 환경이 10Gbps 위주의 환경에서 40Gbps 이상으로 고도화되고 있고, 데이터센터 백본에는 100Gbps 장비가 도입되는 상황에서 데이터가 이전에는 상상할 수 없을 정도로 증가하고 있는 실정이다.
구문 분석을 위해서는 문자열 데이터에 포함되어 있는 구분자 즉 언어학적 의미를 가지지 않는 특수문자를 제외한 대상 문자만을 추출하는 것이 필요하다. 본 명세서에서 "구분자"는 기호를 가리키는 특수 문자를 의미하며 "대상 문자"라 함은 광의의 정의를 가지는 문자로부터 구분자를 제외한 문자를 의미한다.
한국특허 제10-1300362호 (등록공고일: 2013년 8월 30일)
본 발명은 벡터 연산 명령어를 이용한 구문 분석을 통해 대상 문자열을 고속으로 추출하는 방법을 제공하는 것을 목적으로 한다.
본 발명은, 전자적 연산 장치가 문자열 중에서 구분자를 제외한 대상 문자열을 추출하는 방법에 대한 것으로서, 소정의 단위의 단위 문자열을 제1-0 레지스터에 적재하는 제1 단계와; 문자 인코딩 체계에서 구분자의 경계값을 제1-1 레지스터에 적재하는 제2 단계와; 제1-0 레지스터와 제1-1 레지스터를 비교하고 그 결과값에 기초하여 산출된 구분자 위치를 제1-2 레지스터에 저장하는 제3 단계와; 제1-2 레지스터에 저장된 값의 특징값을 제2 레지스터에 옮겨서 마스크를 생성하는 제4 단계와; 마스크에 기록된 특징값에 기초하여 구분자의 오프셋을 계산하여 구분자 배열을 생성하는 제5 단계와; 구분자 배열에 기초하여 문자열로부터 대상 문자열을 추출하는 제6 단계를 포함한다.
단위 문자열은 복수 개일 수 있으며, 제1 단계 내지 제5 단계는 각각의 단위 문자열에 대해서 실행될 수 있다.
구분자 경계값은, 제1 구간의 구분자 중 가장 큰 구분자의 다음 값인 제1 구분자 경계값과; 적어도 하나인 제2 구간의 구분자 중 가장 작은 구분자의 바로 아래값인 제2 구분자 경계값과; 제2 구간의 구분자 중 가장 큰 구분자의 다음 값인 제3 구분자 경계값과; 제3 구간의 구분자 중 가장 작은 구분자의 바로 아래값인 제4 구분자 경계값을 포함할 수 있다.
제3 단계는, 제1-0 레지스터의 단위 문자열과, 제1 구분자 경계값을 비교한 제1 비교결과를 제1-2-1 레지스터에 저장하는 제3-1 단계와; 제1-0 레지스터의 단위 문자열과 제2 구분자 경계값을 비교한 제2-1 비교결과를 제1-2-2 레지스터에 저장하고, 제1-0 레지스터의 단위 문자열과 제3 구분자 경계값을 비교한 제3-1 비교 결과를 제1-2-3 레지스터에 저장하고, 제1-2-2 레지스터에 저장된 값과 제1-2-3 레지스터에 저장된 값에 대해서 제1 연산을 수행하여 산출된 제2 구간의 구분자 위치를 제1-2-4 레지스터에 저장하는 제3-2 단계와; 제1-0 레지스터의 단위 문자열과 제4 구분자 경계값을 비교한 제3-1 비교 결과를 제1-2-5 레지스터에 저장하는 제3-3 단계와; 제1-2-1 레지스터에 저장된 값과, 제1-2-4 레지스터에 저장된 값과, 제1-2-5 레지스터에 저장된 값에 대해서 제2 연산을 수행하여 최종 구분자 위치를 제1-2 레지스터에 저장하는 제3-4 단계를 포함할 수 있다.
제1 연산은 AND 비트 연산일 수 있으며, 제2 연산은 OR 비트 연산일 수 있다.
제1 단계 내지 제4 단계를 실행하는 명령어는 벡터 연산 명령어일 수 있다.
제1-2 레지스터에 기록되는 각 바이트의 특징값은, 구분자는 "FF"로, 대상 문자열의 위치는 "00"으로 기록될 수 있다. 제2 레지스터는 범용 레지스터일 수 있다. 제5 단계는, 제1-2 레지스터의 각 바이트의 특징값의 MSB를 범용 레지스터로 매핑시켜 마스크를 생성하는 단계일 수 있다.
구분자 위치 배열은 산출된 구분자의 개수와, 구분자의 오프셋 정보를 포함할 수 있다.
제6 단계는, 구분자 배열에 포함된 오프셋을 획득하는 제6-1 단계와; 마스크의 초기 시작 위치를 0으로 할당하는 제6-2 단계와; 마스크의 시작 위치와 오프셋의 차이가 0이면 문자열을 추출하지 않고 다음번 시작 위치를 오프셋에 1을 증가시켜 할당하는 제6-3 단계와; 오프셋에서 시작 위치를 뺀 값이 0보다 크면 시작 위치로부터 오프셋 직전의 위치까지의 대상 문자열을 추출하고, 다음번 시작 위치를 오프셋에 1을 증가시킨 값으로 할당하는 제6-4 단계를 포함할 수 있다.
제1-0 레지스터 내지 제1-2 레지스터 및 제1-2-1 레지스터 내지 제1-2-5 레지스터는 벡터 레지스터일 수 있다.
본 발명에 의한 대상 문자열 추출 방법의 각 단계는 컴퓨터 판독 가능 기록 매체에 기록된 컴퓨터 프로그램에 의해서 실행될 수 있다.
본 발명에 의하면 구문 분석을 통하여 대상 문자열을 고속으로 추출할 수 있는 효과가 제공된다.
본 발명이 종래 기술 대비 우수한 점을 좀 더 구체적으로 설명한다.
종래의 기술은 구문분석을 수행할 때 문자 단위로 구분자를 검색하고 문자열을 추출하였다. 스칼라 연산자를 이용하여 1개의 문자마다 해당 문자가 구분자에 속하는지 범위를 비교하거나, 문자의 코드포인트 (예를 들어 아스키 코드 값)을 기준으로 메모리의 특정 위치를 조회하여 구분자에 해당하는지 비교하는 방법을 사용한다.
기존 응용프로그램들은 스칼라 연산 명령어를 이용하여 구문분석을 구현하기 때문에, 다수의 프로세서 코어를 이용한 멀티스레드 병렬화를 통해 성능 향상을 추구한다. 그러나 동일한 멀티스레드 구동 조건에서도 프로세서나 가상머신이 지원하는 벡터 연산자를 이용하여 구문분석을 수행할 수 있다면, 코어 수 배율에 해당하는 성능 향상 뿐 아니라 벡터 연산자가 한 번에 처리하는 문자의 개수에 비례하여 성능을 몇 배 더 향상시킬 수 있다.
본 발명은 구문분석을 수행할 때 프로세서나 가상머신이 지원하는 벡터 연산자를 이용하는 방법을 제시한다. 인텔의 경우 MMX 명령어 집합(instruction set)을 처음 출시한 이래, SSE, AVX, AVX2, AVX-512 명령어 집합까지 지속적으로 벡터 레지스터를 확장하여 제공해왔다. 최신 AVX-512 명령어는 512비트를 한 번의 연산으로 처리한다. 이는 아스키 문자 8비트를 기준으로 할 때 종래의 기술에 비하여 동일한 수의 명령어로 64개의 문자를 동시에 처리할 수 있으므로, 레지스터 연산을 기준으로 할 때 종래의 기술보다 64배의 성능을 달성할 수 있다는 의미이다. 실제로는 전체 작업 과정에서 프로세서 레지스터보다 훨씬 느린 DRAM에 구분자 검색 결과를 저장해야 하기 때문에 암달의 법칙(Amdahl's law)에 의해 64배까지 성능이 나오지는 않지만, 여전히 수 배 이상의 성능을 달성할 수 있다.
한편, 2021년 3월에 출시된 자바 16 버전은 벡터 API를 통해 자바 가상머신에서도 프로세서의 벡터 연산자로 실시간 컴파일(just in time compile) 하여 성능 가속을 지원하기 시작하였다. 이러한 실행 환경에서, 본 발명은 기존의 구문분석 성능을 수 배로 향상시키는 효과를 제공한다.
도 1은 본 발명에 의한 대상 문자열 추출을 위한 메모리 배열을 생성하는 방법의 흐름도.
도 2는 도 1에 의해 생성된 메모리 배열을 참조하여 대상 문자열을 추출하는 방법의 흐름도.
도 3 내지 도 7은 본 발명에 의한 구분자 식별 방법을 설명하기 위한 레지스터의 예시.
도 8은 본 발명에 의한 구분자 식별을 위해 사용하는 마스크의 일례.
도 9은 본 발명에 의해 생성된 구분자 배열의 일례.
이하에서는 첨부 도면을 참조하여 본 발명에 대해서 자세하게 설명한다.
본 명세서에서는 본 발명의 설명에 필요한 최소한의 구성요소만을 설명하며, 본 발명의 본질과 관계가 없는 구성요소는 언급하지 아니한다. 그리고 언급되는 구성요소만을 포함하는 배타적인 의미로 해석되어서는 아니되며 언급되지 않은 다른 구성요소도 포함할 수 있는 비배타적인 의미로 해석되어야 한다.
본 명세서에서 사용되는 “제1”, “제2” 또는 그와 유사한 표현들은 같거나 유사한 구성요소를 구분적으로 표현하기 위해서 또는 본 발명을 구성하는 단계들의 명칭을 구분하기 위해 사용되며, 순서를 의미하거나 복수임을 의미하는 것이 아니다.
본 발명에 의한 방법은 컴퓨터, 태블릿 PC, 모바일폰, 휴대용 연산 장치, 고정식 연산 장치 등의 전자적 연산 장치에 의해서 실행될 수 있다. 또한, 본 발명의 하나 또는 그 이상의 방법 또는 형태가 적어도 하나의 프로세서에 의해 실행될 수 있다는 점이 이해되어야 한다. 프로세서는, 컴퓨터, 태블릿PC, 모바일 장치, 휴대용 연산 장치 등에 설치될 수 있다. 컴퓨터 프로그램 명령을 저장하도록 되어 있는 메모리가 그러한 장치에 설치되어서 프로그램이 저장된 프로그램 명령을 프로세서가 실행하도록 특별히 프로그램되어 하나 또는 그 이상의, 본 명세서에 기재된 바와 같은 프로세스를 실행할 수 있다. 또한, 본 명세서에 기재된 정보 및 방법 등은, 하나 또는 그 이상의 추가적인 구성요소와 프로세서를 포함하는 컴퓨터, 태블릿PC, 모바일 장치, 휴대용 연산 장치 등에 의해서 실행될 수 있다는 점이 이해되어야 한다. 또한, 제어 로직은, 프로세서, 제어부/제어 유니트 등에 의해 실행가능한 프로그램 명령을 포함하는 비휘발성 컴퓨터 판독 가능 매체로 구현될 수 있다. 컴퓨터 판독 가능 매체의 예로는, ROM, RAM, CD-ROM, 자기 테이프, 플로피 디스크, 플래시 드라이브, 스마트 카드, 광학 데이터 저장 장치 등이 있지만 그에 제한되는 것은 아니다. 또한, 컴퓨터 판독 가능 기록 매체는 네트워크로 연결된 컴퓨터에 분산되어, 컴퓨터 판독 가능 매체가 분산된 방식 예를 들어 원격 서버 또는 CAN(Controller Area Network)에 의해 분산된 방식으로 저장되고 실행될 수도 있다.
도 1에는 본 발명에 의한 대상 문자열 추출 방법을 실행하기 위한 기초가 되는 구분자 배열을 생성하는 방법의 흐름도가 도시되어 있다. 본 발명의 과정은, 벡터 연산 명령어에 의해서 실행될 수 있다.
본 명세서에서는 이해의 편의를 돕기 위해 대상 문자열이 추출되는 문자열에 대해서 아래의 문자열을 예로 들어 설명한다. 아래 문자열의 길이는 259바이트이다.
Figure 112021095221163-pat00001
이하의 설명에서는 벡터 연산 명령어 집합 중 하나인 인텔사의 AVX2 명령어 집합을 예로 들어 설명하지만, 본 발명의 권리범위는 그러한 실시예에 제한되는 것은 아니다. 또한, 설명의 편의를 위해 본 명세서에서는 문자 인코딩 체계 중 ASCII 코드를 예로 들어 설명하지만, 그 이외의 문자 인코딩 체계 예를 들어 UTF-16, UTF-32 등 다른 문자 인코딩 체계에도 본 발명의 기술적 사상의 동일성을 해치지 않고 적용될 수 있다.
본 명세서에서는 256비트 AVX2 레지스터를 지원하는 경우에 대해서 설명을 하지만 그 역시 지원하는 레지스터의 용량에 따라 본 발명의 기술적 사상을 동일성을 해치지 않고 적용될 수 있다
단계(100)에서는 상기 예시 문자열의 길이(259바이트)를 소정의 단위로 나누어서 반복 횟수를 산출한다. 256비트 AVX2 레지스터를 지원하므로, 상기 소정의 단위는 32바이트가 된다. 그러면 반복횟수는 8회이며, 나머지는 3이 된다.
첫번째 32바이트에 해당하는 단위 문자열 "[sniper-0005] [attack_name=(3007"을 제1-0 레지스터(도 3 참조)에 VLDDQU 명령어로 적재한다(단계 105). 본 명세서에서는 AVX2 명령어 집합을 사용하는 실시예에 대해서 설명을 하므로, 본 명세서에서 언급되는 레지스터는 별다른 언급이 없는 한 벡터 레지스터로서 YMM 레지스터 또는 XMM 레지스터로 이해할 수 있다.
단계(110)에서는 제1 구분자 경계값을 제1-1-1 레지스터에 적재한다.
본 명세서에서 설명하는 실시예에서는 제1-1 레지스터에는 후술하는 구분자 경계값이 적재되는데, 구분자 경계값이 복수 개이므로 하위 숫자를 더하여 각각의 구분자 경계값이 적재되는 레지스터를 제1-1-1 레지스터, 제1-1-2 레지스터 등으로 표기한다. 그리고 후술하는 제1-0 레지스터에 적재된 단위 문자열과, 구분자 경계값의 최종 비교 결과는 제1-2 레지스터에 저장되는데, 최종 비교 결과를 산출하기 위해 필요한 구분자 구간별 사전 비교 결과가 저장되는 레지스터를 제1-2-1 레지스터, 제1-2-2 레지스터 등으로 표기한다.
본 명세서에서는, 문자 인코딩 체계에서 오름차순 기준으로 구분자들이 배치되어 있는 구간이 대상 문자에 의해 단절되는 구간을 제1 구간, 대상 문자가 배치되어 있는 구간들 사이에 구분자들이 배치되는 구간을 제2 구간, 대상 문자 구간 다음 구간에 배치되지만 대상 문자 구간에 의해서 단절되지 않는 구간을 제3 구간으로 정의한다. 제2 구간은 적어도 하나가 제공될 수 있다.
제1 구분자 경계값은, 제1 구간의 구분자 중 가장 큰 구분자의 다음 값이다. 제2 구분자 경계값은, 제2 구간의 구분자 중 가장 작은 구분자의 바로 아래값이다. 제3 구분자 경계값은, 제2 구간의 구분자 중 가장 큰 구분자의 다음 값이다. 제4 구분자 경계값은, 제3 구간의 구분자 중 가장 작은 구분자의 바로 아래값이다.
ASCII 코드에서는 제1 구분자 경계값은 "0"이 된다. 단계(110)에서는 VMOVDQA 명령어로 아스키 문자 "0"에 해당하는 "48"을 제1-1-1 레지스터에 적재한다.(도 3 참조)
단계(115)에서는 제1-0 레지스터의 값과 제1-1-1 레지스터의 제1 구분자 경계값을 VPCMPGTB 명령어로 비교하여 그 결과값을 제1-2-1 레지스터에 저장한다.(도 3 참조)
비교 결과 제1-0 레지스터의 값이 제1-1-1 레지스터의 값보다 크면 "00"으로, 비교 결과 제1-0 레지스터의 값이 제1-1-1 레지스터의 값보다 작으면 "FF"로 저장한다.
다음으로 ASCII 코드에서 첫번째 제2 구간의 구분자를 식별하는 과정을 설명한다. 첫번째 제2 구간의 가장 작은 구분자의 바로 아래값 즉 제2 구분자 경계값인 "9"에 해당하는 "57"을 VMOVDQA 명령어로 제1-1-2 레지스터에 적재한다.(도 4 참조)
그리고 제1-0 레지스터에 적재되어 있는 문자열과 제1-1-2 레지스터에 적재되어 있는 값을 비교하여 제1-2-2 레지스터에 저장한다.(도 4 참조)
이 비교에서는, 도 3에서와 다르게, 대소 관계를 역전시켜서 비교결과를 저장한다. 즉 도 3에서는 제1-0 레지스터에 적재된 값이 제1-1-1 레지스터에 적재된 값보다 크면 "0", 작으면 "FF"로 비교결과가 저장되었지만 제2 구간의 구분자의 위치를 구분하기 위한 과정에서는 그와 반대의 비교 결과로 저장한다.
다음으로 제2 구간의 가장 큰 구분자의 다음값 즉 제3 구분자 경계값인 "A"에 해당하는 "65"를 VMOVDQA 명령어로 제1-1-3 레지스터에 적재한다.
VPCMPGTB 명령어로 제1-0 레지스터에 적재된 값과 제1-1-3 레지스터에 적재된 값을 비교하고 그 비교결과를 제1-2-3 레지스터에 저장한다.
제2 구간의 구분자의 위치를 결정하기 위해, VPAND 명령어로 제1-2-2 레지스터와 제1-2-3 레지스터를 AND 비트 연산하고 그 결과를 제1-2-4 레지스터에 저장한다.
다음으로 두번째 제2 구간의 구분자를 식별하는 과정을 설명한다. 두번째 제2 구간의 가장 작은 구분자의 바로 아래값 즉 제2 구분자 경계값인 "Z"에 해당하는 "90"을 VMOVDQA 명령어로 제1-1-4 레지스터에 적재한다.(도 5 참조)
그리고 제1-0 레지스터에 적재되어 있는 문자열과 제1-1-4 레지스터에 적재되어 있는 값을 비교하여 제1-2-5 레지스터에 저장한다.(도 5 참조)
다음으로 두번째 제2 구간의 가장 큰 구분자의 다음값 즉 제3 구분자 경계값인 "a"에 해당하는 "97"를 VMOVDQA 명령어로 제1-1-5 레지스터에 적재한다.
VPCMPGTB 명령어로 제1-0 레지스터에 적재된 값과 제1-1-5 레지스터에 적재된 값을 비교하고 그 비교결과를 제1-2-6 레지스터에 저장한다.
두번째 제2 구간의 구분자의 위치를 결정하기 위해, VPAND 명령어로 제1-2-5 레지스터와 제1-2-6 레지스터를 AND 비트 연산하고 그 결과를 제1-2-7 레지스터에 저장한다.
마지막으로 제3 구간의 구분자를 식별하는 과정을 설명한다. ASCII 코드상 제3 구간의 가장 작은 구분자의 바로 아래값 즉 제4 구분자 경계값인 "z"에 해당하는 "122"를 VMOVDQA 명령어로 제1-1-6 레지스터에 적재한다.
다음으로 VPCMPGTB 명령어로 제1-0 레지스터와 제1-1-6 레지스터를 비교하여 그 비교결과를 제1-2-8 레지스터에 저장한다.
제3 구간의 구분자 식별이 완료되면, VPOR 명령어로 제1-2-1 레지스터와 제1-2-4 레지스터를 OR 비트 연산하여 제1-2 레지스터에 저장한다. 다음으로, VPOR 명령어로 제1-2 레지스터와 제1-2-7 레지스터를 OR 비트 연산하여 제1-2 레지스터에 저장한다. 마지막으로, VPOR 명령어로 제1-2 레지스터와 제1-2-8 레지스터를 OR 비트 연산하여 제1-2 레지스터에 저장한다. 이로써 단계(115)가 완료된다.
단계(120)에서는 제1-2 레지스터에 저장된 배열의 특징값을 제2 레지스터로 옮겨서 마스크를 생성한다. 제1-2 레지스터에 저장된 배열의 특징값은 예를 들어 제1-2 레지스터의 각 바이트의 MSB(Most Significant Bit)가 될 수 있다. 제2 레지스터는 범용 레지스터로서 예를 들어, EAX 레지스터 또는 EDX 레지스터 등이 될 수 있다.
제1-2 레지스터의 각 바이트의 값이 "FF"인 경우는 MSB가 "1"이 되고, "00"인 경우에는 MSB가 "0"이 되며, 제2 레지스터에는 도 8에 도시된 바와 같이 그러한 특징값이 적재된다. 도 8에 도시된 실시예에서는 리틀 엔디안(Little-endian) 방식으로서 역순으로 매핑되어 있다. 자바 가상머신의 경우 빅 엔디안 방식으로 매핑할 수 있다.
마스크의 비트를 위치별로 검사하면서 구분자 여부를 검사하고 메모리 배열에 구분자의 오프셋을 저장하고, 카운트를 증가시키면서 구분자 배열을 생성한다(단계 125).
단계(130)에서는 반복횟수만큼 반복되었는지를 판정하고 그렇지 않으면, 단계(135)로 이행하여, 문자열의 시작위치를 레지스터 크기만큼 증가한 후 단계(105)로 복귀하여 전술한 과정을 수행하여 나머지 단위 문자열에 대해서도 구분자 위치를 식별한다.
반복횟수만큼 반복되었다면 나머지 문자열에 대해서 구분자 여부를 검사하고, 오프셋을 저장한 다음에 카운트를 증가시킨다.(단계 140)
마지막으로 구분자 배열에 카운트를 저장하고 구분자 배열을 반환한다.(단계 145) 카운트는 구분자 배열의 첫번째 위치에 저장될 수 있다. 도 9에는 상기 실시예에 의해서 생성된 구분자 배열이 도시되어 있다. 구분자의 개수 "8"은 배열의 첫번째에 저장되어 있으며, 그 다음 배열들은 구분자의 오프셋을 의미한다.
도 2에는 구분자 배열이 결정된 후에 이를 이용하여 문자열을 추출하는 방법의 흐름도가 도시되어 있다. 도 2의 과정은 단위 문자열에 대한 대상 문자열 추출 방법에 대한 것이다. 전체 문자열에 대해서 도 2의 과정을 수행하여 전체 문자열로부터 대상 문자열을 추출할 수 있다.
단계(200)에서 구분자 배열로부터 반복 횟수를 결정한다. 반복 횟수는 단위 문자열에 포함되어 있는 구분자의 개수를 의미한다. 도 9의 예에서는 "8"이다.
단계(210)에서는 문자열 시작 위치를 "0"으로 초기화하고 단계(220)에서 구분자 배열의 다음 배열값 즉 도 9의 배열에서 "0"을 구분자의 오프셋으로 획득한다. 단계(230)에서는 "오프셋-시작위치"가 "0"인지 여부를 판단한다. 이 값이 0이면 단계(270)으로 이행하고 "오프셋+1"을 다음 시작 위치로 할당한다. 이 값이 0이 아니면 문자열 시작 위치로부터 오프셋 직전까지의 부분 문자열을 추출하고, "오프셋+1"을 다음 시작 위치로 할당한다.(단계 240)
첫번째 시작위치는 초기화되어서 "0"이며, 첫번째 오프셋 역시 0이다. 이 경우 "오프셋-시작위치"가 0이므로, 단계(270)에서 "오프셋+1" 즉 "1"을 다음 시작 위치로 할당하고, 단계(250)에서 반복횟수만큼 반복되었는지 여부를 판단한 다음에, 단계(220)로 이행하여 다음 배열값 즉 "7"을 구분자의 오프셋으로 획득한다.
오프셋 "7"에서 시작 위치 "1"을 뺀 값은 6이므로, 단계(240)로 이행하여, 시작 위치 "1"부터 오프셋 "7" 직전 위치까지의 부분 문자열 즉 "sniper"를 추출하고, 다음 시작 위치는 "오프셋+1" 즉 "8"로 할당한 다음에, 단계(250)에서 반복횟수만큼 반복되었는지를 판단한다.
다음번 오프셋은 "12"이므로 시작 위치 "8"와의 차이는 "4"로서 "0"보다 크므로, 단계(240)에서 시작 위치 "8"부터 오프셋 "12" 이전까지의 부분 문자열 "0005"를 추출하고, 다음 시작 위치를 "오프셋+1" 즉 "13"으로 할당한다.
이러한 방식으로 단위 문자열로부터 구분자 배열로부터 부분 (대상) 문자열을 추출할 수 있다.
반복횟수만큼 반복한 후에는 단계(260)으로 이행하여 마지막 시작 위치로부터 문자열 끝까지 부분 문자열을 추출한다.
본 명세서에서 설명한 비교 단위는 1바이트 단위이지만, UTF-16 또는 UTF-32 인코딩 체계에서는 비교 단위를 WORD 단위 또는 QWORD 단위가 될 수도 있다.
이상 첨부 도면을 참고하여 본 발명에 대해서 설명하였지만 본 발명의 권리범위는 후술하는 특허청구범위에 의해 결정되며 전술한 실시예 및/또는 도면에 제한되는 것으로 해석되어서는 아니된다. 그리고 특허청구범위에 기재된 발명의, 당업자에게 자명한 개량, 변경 및 수정도 본 발명의 권리범위에 포함된다는 점이 명백하게 이해되어야 한다.

Claims (11)

  1. 전자적 연산 장치가 문자열 중에서 구분자를 제외한 대상 문자열을 추출하는 방법에 있어서,
    소정의 단위의 단위 문자열을 제1-0 레지스터에 적재하는 제1 단계와,
    문자 인코딩 체계에서 구분자의 경계값을 제1-1 레지스터에 적재하는 제2 단계와,
    제1-0 레지스터와 제1-1 레지스터를 비교하고 그 결과값에 기초하여 산출된 구분자 위치를 제1-2 레지스터에 저장하는 제3 단계와,
    제1-2 레지스터에 저장된 값의 특징값을 제2 레지스터에 옮겨서 마스크를 생성하는 제4 단계와,
    마스크에 기록된 특징값에 기초하여 구분자의 오프셋을 계산하여 구분자 배열을 생성하는 제5 단계와,
    구분자 배열에 기초하여 문자열로부터 대상 문자열을 추출하는 제6 단계를 포함하며,
    구분자 경계값은,
    제1 구간의 구분자 중 가장 큰 구분자의 다음 값인 제1 구분자 경계값과,
    적어도 하나인 제2 구간의 구분자 중 가장 작은 구분자의 바로 아래값인 제2 구분자 경계값과,
    제2 구간의 구분자 중 가장 큰 구분자의 다음 값인 제3 구분자 경계값과,
    제3 구간의 구분자 중 가장 작은 구분자의 바로 아래값인 제4 구분자 경계값을 포함하며,
    제3 단계는,
    제1-0 레지스터의 단위 문자열과, 제1 구분자 경계값을 비교한 제1 비교결과를 제1-2-1 레지스터에 저장하는 제3-1 단계와,
    제1-0 레지스터의 단위 문자열과 제2 구분자 경계값을 비교한 제2-1 비교결과를 제1-2-2 레지스터에 저장하고, 제1-0 레지스터의 단위 문자열과 제3 구분자 경계값을 비교한 제3-1 비교 결과를 제1-2-3 레지스터에 저장하고, 제1-2-2 레지스터에 저장된 값과 제1-2-3 레지스터에 저장된 값에 대해서 AND 비트 연산을 수행하여 산출된 제2 구간의 구분자 위치를 제1-2-4 레지스터에 저장하는 제3-2 단계와,
    제1-0 레지스터의 단위 문자열과 제4 구분자 경계값을 비교한 제3-1 비교 결과를 제1-2-5 레지스터에 저장하는 제3-3 단계와,
    제1-2-1 레지스터에 저장된 값과, 제1-2-4 레지스터에 저장된 값과, 제1-2-5 레지스터에 저장된 값에 대해서 OR 비트 연산을 수행하여 최종 구분자 위치를 제1-2 레지스터에 저장하는 제3-4 단계를 포함하는,
    대상 문자열 추출 방법.
  2. 청구항 1에 있어서,
    단위 문자열은 복수 개이며,
    제1 단계 내지 제5 단계는 각각의 단위 문자열에 대해서 실행되는,
    대상 문자열 추출 방법.
  3. 삭제
  4. 삭제
  5. 청구항 1 또는 청구항 2에 있어서,
    제1 단계 내지 제4 단계를 실행하는 명령어는 벡터 연산 명령어인,
    대상 문자열 추출 방법.
  6. 청구항 1 또는 청구항 2에 있어서,
    제1-2 레지스터에 기록되는 각 바이트의 특징값은, 구분자는 "FF"로, 대상 문자열의 위치는 "00"으로 기록되며,
    제2 레지스터는 범용 레지스터이며,
    제5 단계는, 제1-2 레지스터의 각 바이트의 특징값의 MSB를 범용 레지스터로 매핑시켜 마스크를 생성하는 단계인,
    대상 문자열 추출 방법.
  7. 청구항 1 또는 청구항 2에 있어서,
    구분자 위치 배열은 산출된 구분자의 개수와, 구분자의 오프셋 정보를 포함하는,
    대상 문자열 추출 방법.
  8. 청구항 7에 있어서,
    제6 단계는,
    구분자 배열에 포함된 오프셋을 획득하는 제6-1 단계와,
    마스크의 초기 시작 위치를 0으로 할당하는 제6-2 단계와,
    마스크의 시작 위치와 오프셋의 차이가 0이면 문자열을 추출하지 않고 다음번 시작 위치를 오프셋에 1을 증가시켜 할당하는 제6-3 단계와,
    오프셋에서 시작 위치를 뺀 값이 0보다 크면 시작 위치로부터 오프셋 직전의 위치까지의 대상 문자열을 추출하고, 다음번 시작 위치를 오프셋에 1을 증가시킨 값으로 할당하는 제6-4 단계를 포함하는,
    대상 문자열 추출 방법.
  9. 청구항 5에 있어서,
    제1-0 레지스터 내지 제1-2 레지스터 및 제1-2-1 레지스터 내지 제1-2-5 레지스터는 벡터 레지스터인,
    대상 문자열 추출 방법.
  10. 청구항 1 또는 청구항 2의 방법을 실행하기 위한 컴퓨터 프로그램이 기록된 컴퓨터 판독 가능 기록 매체.
  11. 청구항 1 또는 청구항 2의 방법을 실행하기 위해 컴퓨터 판독 가능 기록 매체에 기록된 컴퓨터 프로그램.
KR1020210108976A 2021-08-18 2021-08-18 벡터 연산 명령어를 통해 문자열을 고속으로 추출하는 방법 KR102370851B1 (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
KR1020210108976A KR102370851B1 (ko) 2021-08-18 2021-08-18 벡터 연산 명령어를 통해 문자열을 고속으로 추출하는 방법
US17/889,838 US20230071820A1 (en) 2021-08-18 2022-08-17 Method for extracting target string at high-speed using vector instruction

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020210108976A KR102370851B1 (ko) 2021-08-18 2021-08-18 벡터 연산 명령어를 통해 문자열을 고속으로 추출하는 방법

Publications (1)

Publication Number Publication Date
KR102370851B1 true KR102370851B1 (ko) 2022-03-07

Family

ID=80817421

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020210108976A KR102370851B1 (ko) 2021-08-18 2021-08-18 벡터 연산 명령어를 통해 문자열을 고속으로 추출하는 방법

Country Status (2)

Country Link
US (1) US20230071820A1 (ko)
KR (1) KR102370851B1 (ko)

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20090043581A (ko) * 2006-09-22 2009-05-06 인텔 코오퍼레이션 텍스트 문자열을 처리하기 위한 명령 및 논리
KR20100126690A (ko) * 2008-02-18 2010-12-02 샌드브리지 테크놀로지스, 인코포레이티드 널-종료 문자열 동작을 가속화하는 방법
KR20140113580A (ko) * 2013-03-15 2014-09-24 인텔 코오퍼레이션 연산 마스크들의 마스킹되지 않는 요소들을 통합하기 위한 프로세서들, 방법들, 시스템들, 및 명령어들
KR20140135723A (ko) * 2012-03-15 2014-11-26 인터내셔널 비지네스 머신즈 코포레이션 종결 문자를 갖는 문자 데이터 세트의 길이 파악
KR20170102865A (ko) * 2014-12-31 2017-09-12 인텔 코포레이션 벡터 패킹된 투플 교차 비교 기능을 제공하기 위한 방법, 장치, 명령어들 및 로직
US20200265097A1 (en) * 2019-02-15 2020-08-20 International Business Machines Corporation Vector string search instruction

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20090043581A (ko) * 2006-09-22 2009-05-06 인텔 코오퍼레이션 텍스트 문자열을 처리하기 위한 명령 및 논리
KR101300362B1 (ko) 2006-09-22 2013-08-30 인텔 코오퍼레이션 텍스트 문자열을 처리하기 위한 명령 및 논리
KR20100126690A (ko) * 2008-02-18 2010-12-02 샌드브리지 테크놀로지스, 인코포레이티드 널-종료 문자열 동작을 가속화하는 방법
KR20140135723A (ko) * 2012-03-15 2014-11-26 인터내셔널 비지네스 머신즈 코포레이션 종결 문자를 갖는 문자 데이터 세트의 길이 파악
KR20140113580A (ko) * 2013-03-15 2014-09-24 인텔 코오퍼레이션 연산 마스크들의 마스킹되지 않는 요소들을 통합하기 위한 프로세서들, 방법들, 시스템들, 및 명령어들
KR20170102865A (ko) * 2014-12-31 2017-09-12 인텔 코포레이션 벡터 패킹된 투플 교차 비교 기능을 제공하기 위한 방법, 장치, 명령어들 및 로직
US20200265097A1 (en) * 2019-02-15 2020-08-20 International Business Machines Corporation Vector string search instruction

Also Published As

Publication number Publication date
US20230071820A1 (en) 2023-03-09

Similar Documents

Publication Publication Date Title
KR102376117B1 (ko) 병렬 결정 트리 프로세서 아키텍처
US9645828B2 (en) Method of searching character string, character string searching device, and recording medium
US9396172B2 (en) Method for data chunk partitioning in XML parsing and method for XML parsing
KR102379894B1 (ko) 벡터 연산들 수행시의 어드레스 충돌 관리 장치 및 방법
CN110569629A (zh) 二进制代码文件溯源方法
US10241979B2 (en) Accelerated detection of matching patterns
US11150993B2 (en) Method, apparatus and computer program product for improving inline pattern detection
JP2010092179A (ja) オリジナルコードの抽出装置、抽出方法、および抽出プログラム
KR102370851B1 (ko) 벡터 연산 명령어를 통해 문자열을 고속으로 추출하는 방법
CN114201756A (zh) 一种智能合约代码片段的漏洞检测方法和相关装置
KR101473535B1 (ko) Multi N―gram을 이용한 악성코드 분류 방법
JP6201788B2 (ja) ループ分割検出プログラム及びループ分割検出方法
CN111026736B (zh) 数据血缘管理方法及装置、数据血缘解析方法及装置
US20080306948A1 (en) String and binary data sorting
CN113495901B (zh) 一种面向可变长数据块的快速检索方法
US20150055868A1 (en) Character data processing method, information processing method, and information processing apparatus
CN115904486A (zh) 一种代码相似度检测方法及装置
US20170031892A1 (en) System and method for representing sequences of bits
KR102425596B1 (ko) 로우 레이턴시 하드웨어 메모리 관리를 위한 시스템 및 방법
KR101559651B1 (ko) 동적 분석 방법 및 장치
KR102021447B1 (ko) 컴퓨팅 장치 및 그것의 동작 방법
CN112199158B (zh) 虚拟机保护的解释例程识别方法、装置、设备及存储介质
KR102158317B1 (ko) 2차 q-그램에 대한 핑거프린트를 이용한 순위패턴매칭 알고리즘
KR102128581B1 (ko) 다중 문자열 패턴 탐색 방법 및 장치
US20220392578A1 (en) Apparatus and method for genome sequence alignment acceleration

Legal Events

Date Code Title Description
E701 Decision to grant or registration of patent right
GRNT Written decision to grant