KR102600283B1 - 전자 장치 및 이를 이용한 명령어 처리 방법 - Google Patents

전자 장치 및 이를 이용한 명령어 처리 방법 Download PDF

Info

Publication number
KR102600283B1
KR102600283B1 KR1020170165725A KR20170165725A KR102600283B1 KR 102600283 B1 KR102600283 B1 KR 102600283B1 KR 1020170165725 A KR1020170165725 A KR 1020170165725A KR 20170165725 A KR20170165725 A KR 20170165725A KR 102600283 B1 KR102600283 B1 KR 102600283B1
Authority
KR
South Korea
Prior art keywords
code
operation code
instruction
processor
slots
Prior art date
Application number
KR1020170165725A
Other languages
English (en)
Other versions
KR20190066208A (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 KR1020170165725A priority Critical patent/KR102600283B1/ko
Priority to US16/205,297 priority patent/US10860321B2/en
Priority to TW107143682A priority patent/TWI791699B/zh
Priority to CN201811479903.7A priority patent/CN110007960A/zh
Publication of KR20190066208A publication Critical patent/KR20190066208A/ko
Application granted granted Critical
Publication of KR102600283B1 publication Critical patent/KR102600283B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30101Special purpose registers
    • 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/30181Instruction operation extension or modification
    • G06F9/30185Instruction operation extension or modification according to one or more bits in the instruction, e.g. prefix, sub-opcode
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1668Details of memory controller
    • 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/82Architectures of general purpose stored program computers data or demand driven
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/30156Special purpose encoding of instructions, e.g. Gray coding
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • 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
    • 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/3814Implementation provisions of instruction buffers, e.g. prefetch buffer; banks
    • 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/3818Decoding for concurrent execution
    • G06F9/3822Parallel decoding, e.g. parallel decode units
    • 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/3824Operand accessing
    • 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/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3853Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution of compound instructions

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Executing Machine-Instructions (AREA)
  • Hardware Redundancy (AREA)

Abstract

본 발명은 전자 장치 및 이를 이용한 명령어 처리 방법에 관한 것으로, 본 발명의 다양한 실시예들에 따르면, 전자 장치는, 메모리, 및 프로세서를 포함하며, 상기 프로세서는, 어플리케이션 컴파일 시, 상기 메모리에 정의된 복수의 슬롯(slot)에 동일한 연산 코드를 사용하는 경우, 상기 동일한 연산 코드에 기초하여 명령어 코드를 생성하도록 설정되고, 상기 복수의 슬롯에 동일한 연산 코드를 사용하지 않는 경우, 상기 복수의 슬롯 각각의 연산 코드에 기초하여 명령어 코드를 생성하도록 설정될 수 있다.
본 발명에 개시된 다양한 실시예들 이외의 다른 다양한 실시예가 가능하다.

Description

전자 장치 및 이를 이용한 명령어 처리 방법 {ELECTRONIC DEVICE AND METHOD FOR PROCESSING INSTRUCTION THEREOF}
본 발명의 다양한 실시예는 전자 장치 및 이를 이용한 명령어 처리 방법에 관한 것으로, 특히, VLIW(very long instruction word) 프로세서에서 실행될 명령어를 처리하는 방법에 관한 것이다.
일반적으로, VLIW(very long instruction word) 프로세서는 고속 푸리에 변환(fast fourier transform, FFT), 디지털 필터링(digital filtering) 등과 같은 규칙적인 연산을 처리하는 DSP(digital signal processor)에서 사용될 수 있다. 예컨대, VLIW 프로세서는 하나의 긴 명령어에 복수의 연산을 기술하여 명령어를 병렬처리(instruction level parallelism, ILP)할 수 있다. 이러한 VLIW 프로세서는 사이클(cycle) 당 복수의 명령어를 처리할 수 있어, 향상된 성능과 빠른 처리시간을 요구하는 멀티미디어 및 이동통신 등의 어플리케이션에서 유용하게 사용되고 있다.
VLIW 구조는 임베디드 시스템(embedded system)에서 자주 사용되는 프로세서 구조로, 임베디드 시스템에서 프로그램 코드 사이즈는 매우 중요한 요소이다. 프로그램 코드 사이즈가 증가하게 되면, 명령어를 페치(fetch)하는 횟수가 증가하며, 결과적으로 캐시 미스율(cache miss rate)을 높이게 된다. 이에 따라, 프로세서의 성능 저하가 발생할 수 있다.
본 발명의 다양한 실시예에 따른 전자 장치는 VLIW 프로세서에서 복수의 슬롯(slot)에 동일한 연산 코드가 사용되는 경우, 동일한 연산 코드의 중복 사용을 줄이기 위한 새로운 VLIW 명령어를 생성할 수 있다.
본 발명의 다양한 실시예들에 따르면, 전자 장치는, 메모리, 및 프로세서를 포함하며, 상기 프로세서는, 어플리케이션 컴파일 시, 상기 메모리에 정의된 복수의 슬롯(slot)에 동일한 연산 코드를 사용하는 경우, 상기 동일한 연산 코드에 기초하여 명령어 코드를 생성하도록 설정되고, 상기 복수의 슬롯에 동일한 연산 코드를 사용하지 않는 경우, 상기 복수의 슬롯 각각의 연산 코드에 기초하여 명령어 코드를 생성하도록 설정될 수 있다.
본 발명의 다양한 실시예들에 따르면, 전자 장치의 명령어 처리 방법은, 프로세서는 어플리케이션 컴파일 시, 메모리에 정의된 복수의 슬롯(slot)에 동일한 연산 코드를 사용하는지 여부를 결정하는 동작, 상기 동일한 연산 코드를 사용하는 것으로 결정되면, 상기 동일한 연산 코드에 기초하여 명령어 코드를 생성하는 동작, 및 상기 동일한 연산 코드를 사용하지 않는 것으로 결정되면, 상기 복수의 슬롯 각각의 연산 코드에 기초하여 명령어 코드를 생성하는 동작을 포함할 수 있다.
본 발명의 다양한 실시예에 따른 전자 장치는 복수의 슬롯에 동일한 연산 코드가 사용되는 경우, 동일한 연산 코드의 중복 사용을 줄이기 위한 새로운 VLIW 명령어를 생성할 수 있다. 새로운 VLIW 명령어가 생성됨에 따라 프로그램 메모리를 사용하는 크기는 감소될 수 있다. 또한, 상기 프로그램 메모리를 사용하는 크기가 감소되어, 칩(chip) 비용을 절감할 수 있을 뿐만 아니라 명령어를 페치하는 횟수와 캐시 미스율을 낮출 수 있다. 이에 따라, 본 발명의 다양한 실시예에 따른 전자 장치의 프로세서 성능은 향상될 수 있다.
도 1은 다양한 실시예들에 따른 네트워크 환경 내의 명령어를 처리하기 위한 전자 장치의 블록도이다.
도 2는 다양한 실시예들에 따른 명령어를 처리하기 위한 전자 장치를 나타내는 블록도이다.
도 3은 다양한 실시예들에 따른 명령어를 처리하는 연산부의 구성을 설명하기 위한 도면이다.
도 4a 및 도 4b는 다양한 실시예들에 따른 명령어 코드를 생성 및 디코딩하는 방법을 설명하기 위한 도면이다.
도 5a 및 도 5b는 다양한 실시예들에 따른 명령어 코드를 생성 및 디코딩하는 방법을 설명하기 위한 도면이다.
도 6은 다양한 실시예들에 따른 명령어 코드를 생성하는 방법을 설명하기 위한 흐름도이다.
도 7은 다양한 실시예들에 따른 새로운 명령어 코드를 디코딩하는 방법을 설명하기 위한 흐름도이다.
도 1은, 다양한 실시예들에 따른, 네트워크 환경(100) 내의 명령어를 처리하기 위한 전자 장치(101)의 블록도이다.
도 1을 참조하면, 네트워크 환경(100)에서 전자 장치(101)는 제 1 네트워크(198)(예: 근거리 무선 통신)를 통하여 전자 장치(102)와 통신하거나, 또는 제 2 네트워크(199)(예: 원거리 무선 통신)를 통하여 전자 장치(104) 또는 서버(108)와 통신할 수 있다. 일실시예에 따르면, 전자 장치(101)는 서버(108)를 통하여 전자 장치(104)와 통신할 수 있다. 일실시예에 따르면, 전자 장치(101)는 프로세서(120), 메모리(130), 입력 장치(150), 음향 출력 장치(155), 표시 장치(160), 오디오 모듈(170), 센서 모듈(176), 인터페이스(177), 햅틱 모듈(179), 카메라 모듈(180), 전력 관리 모듈(188), 배터리(189), 통신 모듈(190), 가입자 식별 모듈(196), 및 안테나 모듈(197)을 포함할 수 있다. 어떤 실시예에서는, 전자 장치(101)에는, 이 구성요소들 중 적어도 하나(예: 표시 장치(160) 또는 카메라 모듈(180))가 생략되거나 다른 구성 요소가 추가될 수 있다. 어떤 실시예에서는, 예를 들면, 표시 장치(160)(예: 디스플레이)에 임베디드된 센서 모듈(176)(예: 지문 센서, 홍채 센서, 또는 조도 센서)의 경우와 같이, 일부의 구성요소들이 통합되어 구현될 수 있다.
프로세서(120)는, 예를 들면, 소프트웨어(예: 프로그램(140))를 구동하여 프로세서(120)에 연결된 전자 장치(101)의 적어도 하나의 다른 구성요소(예: 하드웨어 또는 소프트웨어 구성요소)을 제어할 수 있고, 다양한 데이터 처리 및 연산을 수행할 수 있다. 프로세서(120)는 다른 구성요소(예: 센서 모듈(176) 또는 통신 모듈(190))로부터 수신된 명령 또는 데이터를 휘발성 메모리(132)에 로드하여 처리하고, 결과 데이터를 비휘발성 메모리(134)에 저장할 수 있다. 일실시예에 따르면, 프로세서(120)는 메인 프로세서(121)(예: 중앙 처리 장치 또는 어플리케이션 프로세서), 및 이와는 독립적으로 운영되고, 추가적으로 또는 대체적으로, 메인 프로세서(121)보다 저전력을 사용하거나, 또는 지정된 기능에 특화된 보조 프로세서(123)(예: 그래픽 처리 장치, 이미지 시그널 프로세서, 센서 허브 프로세서, 또는 커뮤니케이션 프로세서)를 포함할 수 있다. 여기서, 보조 프로세서(123)는 메인 프로세서(121)와 별개로 또는 임베디드되어 운영될 수 있다.
이런 경우, 보조 프로세서(123)는, 예를 들면, 메인 프로세서(121)가 인액티브(예: 슬립) 상태에 있는 동안 메인 프로세서(121)를 대신하여, 또는 메인 프로세서(121)가 액티브(예: 어플리케이션 수행) 상태에 있는 동안 메인 프로세서(121)와 함께, 전자 장치(101)의 구성요소들 중 적어도 하나의 구성요소(예: 표시 장치(160), 센서 모듈(176), 또는 통신 모듈(190))와 관련된 기능 또는 상태들의 적어도 일부를 제어할 수 있다. 일실시예에 따르면, 보조 프로세서(123)(예: 이미지 시그널 프로세서 또는 커뮤니케이션 프로세서)는 기능적으로 관련 있는 다른 구성 요소(예: 카메라 모듈(180) 또는 통신 모듈(190))의 일부 구성 요소로서 구현될 수 있다. 메모리(130)는, 전자 장치(101)의 적어도 하나의 구성요소(예: 프로세서(120) 또는 센서모듈(176))에 의해 사용되는 다양한 데이터, 예를 들어, 소프트웨어(예: 프로그램(140)) 및, 이와 관련된 명령에 대한 입력 데이터 또는 출력 데이터를 저장할 수 있다. 메모리(130)는, 휘발성 메모리(132) 또는 비휘발성 메모리(134)를 포함할 수 있다.
프로그램(140)은 메모리(130)에 저장되는 소프트웨어로서, 예를 들면, 운영 체제(142), 미들 웨어(144) 또는 어플리케이션(146)을 포함할 수 있다.
입력 장치(150)는, 전자 장치(101)의 구성요소(예: 프로세서(120))에 사용될 명령 또는 데이터를 전자 장치(101)의 외부(예: 사용자)로부터 수신하기 위한 장치로서, 예를 들면, 마이크, 마우스, 또는 키보드를 포함할 수 있다.
음향 출력 장치(155)는 음향 신호를 전자 장치(101)의 외부로 출력하기 위한 장치로서, 예를 들면, 멀티미디어 재생 또는 녹음 재생과 같이 일반적인 용도로 사용되는 스피커와 전화 수신 전용으로 사용되는 리시버를 포함할 수 있다. 일실시예에 따르면, 리시버는 스피커와 일체 또는 별도로 형성될 수 있다.
표시 장치(160)는 전자 장치(101)의 사용자에게 정보를 시각적으로 제공하기 위한 장치로서, 예를 들면, 디스플레이, 홀로그램 장치, 또는 프로젝터 및 해당 장치를 제어하기 위한 제어 회로를 포함할 수 있다. 일실시예에 따르면, 표시 장치(160)는 터치 회로(touch circuitry) 또는 터치에 대한 압력의 세기를 측정할 수 있는 압력 센서를 포함할 수 있다.
오디오 모듈(170)은 소리와 전기 신호를 쌍방향으로 변환시킬 수 있다. 일실시예에 따르면, 오디오 모듈(170)은, 입력 장치(150)를 통해 소리를 획득하거나, 음향 출력 장치(155), 또는 전자 장치(101)와 유선 또는 무선으로 연결된 외부 전자 장치(예: 전자 장치(102)(예: 스피커 또는 헤드폰))를 통해 소리를 출력할 수 있다.
센서 모듈(176)은 전자 장치(101)의 내부의 작동 상태(예: 전력 또는 온도), 또는 외부의 환경 상태에 대응하는 전기 신호 또는 데이터 값을 생성할 수 있다. 센서 모듈(176)은, 예를 들면, 제스처 센서, 자이로 센서, 기압 센서, 마그네틱 센서, 가속도 센서, 그립 센서, 근접 센서, 컬러 센서, IR(infrared) 센서, 생체 센서, 온도 센서, 습도 센서, 또는 조도 센서를 포함할 수 있다.
인터페이스(177)는 외부 전자 장치(예: 전자 장치(102))와 유선 또는 무선으로 연결할 수 있는 지정된 프로토콜을 지원할 수 있다. 일실시예에 따르면, 인터페이스(177)는 HDMI(high definition multimedia interface), USB(universal serial bus) 인터페이스, SD카드 인터페이스, 또는 오디오 인터페이스를 포함할 수 있다.
연결 단자(178)는 전자 장치(101)와 외부 전자 장치(예: 전자 장치(102))를 물리적으로 연결시킬 수 있는 커넥터, 예를 들면, HDMI 커넥터, USB 커넥터, SD 카드 커넥터, 또는 오디오 커넥터(예: 헤드폰 커넥터)를 포함할 수 있다.
햅틱 모듈(179)은 전기적 신호를 사용자가 촉각 또는 운동 감각을 통해서 인지할 수 있는 기계적인 자극(예: 진동 또는 움직임) 또는 전기적인 자극으로 변환할 수 있다. 햅틱 모듈(179)은, 예를 들면, 모터, 압전 소자, 또는 전기 자극 장치를 포함할 수 있다.
카메라 모듈(180)은 정지 영상 및 동영상을 촬영할 수 있다. 일실시예에 따르면, 카메라 모듈(180)은 하나 이상의 렌즈, 이미지 센서, 이미지 시그널 프로세서, 또는 플래시를 포함할 수 있다.
전력 관리 모듈(188)은 전자 장치(101)에 공급되는 전력을 관리하기 위한 모듈로서, 예를 들면, PMIC(power management integrated circuit)의 적어도 일부로서 구성될 수 있다.
배터리(189)는 전자 장치(101)의 적어도 하나의 구성 요소에 전력을 공급하기 위한 장치로서, 예를 들면, 재충전 불가능한 1차 전지, 재충전 가능한 2차 전지 또는 연료 전지를 포함할 수 있다.
통신 모듈(190)은 전자 장치(101)와 외부 전자 장치(예: 전자 장치(102), 전자 장치(104), 또는 서버(108))간의 유선 또는 무선 통신 채널의 수립, 및 수립된 통신 채널을 통한 통신 수행을 지원할 수 있다. 통신 모듈(190)은 프로세서(120)(예: 어플리케이션 프로세서)와 독립적으로 운영되는, 유선 통신 또는 무선 통신을 지원하는 하나 이상의 커뮤니케이션 프로세서를 포함할 수 있다. 일실시예에 따르면, 통신 모듈(190)은 무선 통신 모듈(192)(예: 셀룰러 통신 모듈, 근거리 무선 통신 모듈, 또는 GNSS(global navigation satellite system) 통신 모듈) 또는 유선 통신 모듈(194)(예: LAN(local area network) 통신 모듈, 또는 전력선 통신 모듈)을 포함하고, 그 중 해당하는 통신 모듈을 이용하여 제 1 네트워크(198)(예: 블루투스, WiFi direct 또는 IrDA(infrared data association) 같은 근거리 통신 네트워크) 또는 제 2 네트워크(199)(예: 셀룰러 네트워크, 인터넷, 또는 컴퓨터 네트워크(예: LAN 또는 WAN)와 같은 원거리 통신 네트워크)를 통하여 외부 전자 장치와 통신할 수 있다. 상술한 여러 종류의 통신 모듈(190)은 하나의 칩으로 구현되거나 또는 각각 별도의 칩으로 구현될 수 있다.
일실시예에 따르면, 무선 통신 모듈(192)은 가입자 식별 모듈(196)에 저장된 사용자 정보를 이용하여 통신 네트워크 내에서 전자 장치(101)를 구별 및 인증할 수 있다.
안테나 모듈(197)은 신호 또는 전력을 외부로 송신하거나 외부로부터 수신하기 위한 하나 이상의 안테나들을 포함할 수 있다. 일시예에 따르면, 통신 모듈(190)(예: 무선 통신 모듈(192))은 통신 방식에 적합한 안테나를 통하여 신호를 외부 전자 장치로 송신하거나, 외부 전자 장치로부터 수신할 수 있다.
상기 구성요소들 중 일부 구성요소들은 주변 기기들간 통신 방식(예: 버스, GPIO(general purpose input/output), SPI(serial peripheral interface), 또는 MIPI(mobile industry processor interface))를 통해 서로 연결되어 신호(예: 명령 또는 데이터)를 상호간에 교환할 수 있다.
일실시예에 따르면, 명령 또는 데이터는 제 2 네트워크(199)에 연결된 서버(108)를 통해서 전자 장치(101)와 외부의 전자 장치(104)간에 송신 또는 수신될 수 있다. 전자 장치(102, 104) 각각은 전자 장치(101)와 동일한 또는 다른 종류의 장치일 수 있다. 일실시예에 따르면, 전자 장치(101)에서 실행되는 동작들의 전부 또는 일부는 다른 하나 또는 복수의 외부 전자 장치에서 실행될 수 있다. 일실시예에 따르면, 전자 장치(101)가 어떤 기능이나 서비스를 자동으로 또는 요청에 의하여 수행해야 할 경우에, 전자 장치(101)는 기능 또는 서비스를 자체적으로 실행시키는 대신에 또는 추가적으로, 그와 연관된 적어도 일부 기능을 외부 전자 장치에게 요청할 수 있다. 상기 요청을 수신한 외부 전자 장치는 요청된 기능 또는 추가 기능을 실행하고, 그 결과를 전자 장치(101)로 전달할 수 있다. 전자 장치(101)는 수신된 결과를 그대로 또는 추가적으로 처리하여 요청된 기능이나 서비스를 제공할 수 있다. 이를 위하여, 예를 들면, 클라우드 컴퓨팅, 분산 컴퓨팅, 또는 클라이언트-서버 컴퓨팅 기술이 이용될 수 있다.
도 2는 다양한 실시예들에 따른 명령어를 처리하기 위한 전자 장치를 나타내는 블록도이다.
도 2를 참조하면, 전자 장치(200)(예: 도 1의 전자 장치(101))는 프로세서(210)(예: 도 1의 프로세서(120)) 및 메모리(230)(예: 도 1의 메모리(130))를 포함할 수 있다.
본 발명의 다양한 실시예들에 따르면, 프로세서(210)(예: 도 1의 프로세서(120))는 전자 장치(200)의 전반적인 동작 및 전자 장치(200)의 내부 구성들 간의 신호 흐름을 제어하고, 데이터 처리를 수행하고, 배터리(예: 도 1의 배터리(189))에서 상기 구성들로의 전원 공급을 제어할 수 있다.
일 실시예에서, 프로세서(210)는 VLIW(very long instruction word) 프로세서일 수 있다.
일 실시예에서, 프로세서(210)는 명령어 페치부(211)(instruction fetch), 스프레딩 로직(213)(spreading logic), 명령어 디코더부(215)(instruction decoder), 제1 내지 제4 연산부(217 내지 223)(execution unit), 및 범용 레지스터부(225)(general purpose register)를 포함할 수 있다.
일 실시예에서, 명령어 페치부(211)(instruction fetch)는 명령어 코드를 프로그램 메모리(231)로부터 페치할 수 있다.
일 실시예에서, 스프레딩 로직(213)(spreading logic)은 상기 명령어 페치부(211)에 의해 페치된 명령어 코드의 상태 비트(state bit)를 확인할 수 있다. 상기 상태 비트는 상기 페치된 명령어 코드가 새로운 명령어 코드인지 여부를 결정하기 위한 필드 및 상기 페치된 명령어 코드를 구성하는 연산 코드와 적어도 하나의 레지스터 인덱스 필드의 연산 코드가 동일한지 여부를 나타내는 필드로 구성될 수 있다. 상기 스프레딩 로직(213)은 상기 상태 비트의 새로운 명령어 코드인지 여부를 결정하기 위한 필드에 기초하여, 상기 페치된 명령어 코드가 새로운 명령어 코드인지 여부를 결정할 수 있다.
일 실시예에서, 상기 새로운 명령어 코드인 것으로 결정되면, 스프레딩 로직(213)은 상기 상태 비트의 상기 페치된 명령어 코드를 구성하는 연산 코드와 적어도 하나의 레지스터 인덱스 필드의 연산 코드가 동일한지 여부를 나타내는 필드를 확인할 수 있다. 스프레딩 로직(213)은 상기 상태 비트를 확인하여, 상기 적어도 하나의 레지스터 인덱스 필드에 대응하는 상태 비트의 값이 활성화된 슬롯으로 연산 코드를 스프레딩 할 수 있다.
일 실시예에서, 명령어 디코더부(215)(instruction decoder)는 상기 스프레딩 로직(213)에 의해 스프레딩된 연산 코드를 해당 레지스터 인덱스 필드에 대응하는 제1 연산부 내지 제4 연산부(217 내지 223) 각각에 전달할 수 있다.
일 실시예에서, 제1 연산부 내지 제4 연산부(217 내지 223)(execution unit) 각각은 상기 명령어 디코더부(215)로부터 수신된 연산 코드에 기초하여 해당 명령어를 디코딩(decoding)할 수 있다.
일 실시예에서, 범용 레지스터부(225)(general purpose register)는 연산 처리, 연산 결과, 복귀 주소 등의 데이터를 기억할 수 있다.
본 발명의 다양한 실시예들에 따르면, 메모리(230)(예: 도 1의 메모리(130))는 전기적으로 프로세서(210)와 연결될 수 있다.
일 실시예에서, 메모리(230)는 프로그램 메모리(231)(program memory) 및 데이터 메모리(232)(data memory)를 포함할 수 있다.
일 실시예에서, 프로그램 메모리(231)는 어플리케이션 컴파일 시 명령어 집합 구조를 구성하는 복수의 슬롯에 동일한 연산 코드를 가짐에 따라 프로세서(210)에 의해 생성된 새로운 명령어 코드를 저장할 수 있다.
일 실시예에서, 데이터 메모리(232)는 명령어 코드(예: 새로운 VLIW 명령어 코드)를 생성하기 위한 명령어 집합 구조(instruction set architecture, ISA) 인코딩 맵을 저장할 수 있다. 상기 명령어 집합 구조 인코딩 맵은 각 명령어 별로 명령어 구조를 정의할 수 있다. 상기 명령어 구조는 연산 코드, 2개의 피연산자 레지스터 인덱스, 결과 값이 저장될 레지스터 인덱스를 포함할 수 있다.
도 3은 다양한 실시예들에 따른 명령어를 처리하는 연산부의 구성을 설명하기 위한 도면이다.
일 실시예에서, 프로세서(예: 도 2의 프로세서(210))는 VLIW(very long instruction word) 프로세서를 포함할 수 있다. 일 실시예에서, 프로세서에 의해 명령어를 인식하고 처리하기 위한 명령어 집합 구조(instruction set architecture, ISA)는 4개의 슬롯(slot)(310, 320, 330, 340)으로 구성될 수 있다. 상기 명령어 집합 구조를 구성하는 각 슬롯(310, 320, 330, 340)은 연산 코드(operation code), 2개의 피연산자 레지스터 인덱스(register index), 결과 값이 저장될 레지스터 인덱스를 포함할 수 있다. 하지만 이에 한정하는 것은 아니며, 명령어 종류에 따라 각 슬롯을 구성하는 요소들은 달라질 수 있다.
일 실시예에서, 명령어 집합 구조를 구성하는 4개의 슬롯(310, 320, 330, 340) 각각은 32bit로 구성될 수 있으며, 상기 4개의 슬롯 모두 사용하는 명령어의 경우, 128bit의 프로그램 메모리(예: 도 2의 프로그램 메모리(231))를 사용하는 형태로 구성될 수 있다. 예컨대, 제1 슬롯(310)은 연산 코드(311)는 17bit, 레지스터 인덱스 필드(313, 315, 317)(register index field) 각각은 5bit로, 총 32bit로 구성될 수 있다. 또한, 제2 슬롯(320)은 연산 코드(321)는 17bit, 레지스터 인덱스 필드(323, 325, 327) 각각은 5bit로, 총 32bit로 구성될 수 있다. 제3 슬롯(330) 및 제4 슬롯(340) 또한 상기 제1 슬롯(310) 및 제2 슬롯(320)과 동일한 형태로 구성될 수 있다.
일 실시예에서, 4개의 슬롯 중 2개 이상의 슬롯이 동일한 연산 코드를 가지는 경우, 프로세서는 상기 동일한 연산 코드를 가지는 2개 이상의 슬롯 중 하나의 슬롯의 32bit(예: 연산 코드의 필드 및 레지스터 인덱스 필드)를 가지도록 하고, 상기 동일한 연산 코드를 가지는 2개 이상의 슬롯 중 상기 하나의 슬롯을 제외한 적어도 하나의 슬롯은 상기 동일한 연산 코드의 필드를 제외하고 적어도 하나의 레지스터 인덱스 필드로 구성된 형태의 새로운 명령어 코드를 생성할 수 있다.
이와 관련하여, 후술하는 도 4a 내지 도 5b에서, 상세히 설명될 것이다.
도 4a 및 도 4b는 다양한 실시예들에 따른 명령어 코드를 생성 및 디코딩하는 방법을 설명하기 위한 도면이다.
일 실시예에서, 프로세서(예: 도 2의 프로세서(210))는 연산 어플리케이션에서 반복 수행되는 복수의 동일한 연산 동작(예: vmul, vadd, mul, add)을 포함하는 커널 코드(kernel code)를 포함할 수 있다. 예컨대, 프로세서는 하기 표 1과 같은 C 코드의 for문 내에서 동일한 연산 동작을 반복 수행할 수 있다.
for(int z = 0 ; z < Max ; z++)
{
int V a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x;
a = b*c; d = e*f; g = h*i; j = k*l;
m = n+o; p = q+r; s = t+u; v = w+x;
a = a*n; d = d*q; g = g*t; j = j-w;
m = m+b; p = p+e; s = s-h; v = v+k;

}
일 실시예에서, 전술한 표 1과 같은 연산 동작은 하나의 명령어로 복수개의 데이터를 동시에 계산하는 방식(예: single instruction multiple data, SIMD)으로, 벡터 타입의 데이터를 처리할 수 있다. 예컨대, 프로세서는 연산 코드 “VMUL”을 상기 SIMD 방식으로, 벡터 데이터의 곱셈(vector data multiplication)을 처리할 수 있다.
일 실시예에서, 전술한 벡터 타입의 데이터를 처리하는 방법으로 가정하여 설명하였지만, 이에 한정하는 것은 아니며, 스칼라 명령어(scalar instruction) 또한 전술한 SIMD 방식으로 처리될 수 있다.
일 실시예에서, 명령어 집합 구조를 구성하는 복수의 슬롯에서 동일한 연산 코드를 가지는 경우, 프로세서는 상기 동일한 연산 코드를 가지는 명령어를 동시에 처리할 수 있다. 예컨대, 1 클럭 사이클(clock cycle)을 기준으로 동일한 연산 코드가 복수의 슬롯에 할당된 경우, 프로세서는 하기 표 2와 같은 어셈블리 코드(assembly code)를 생성할 수 있다.
VMUL v1, v2, v3. VMUL v4, v5, v6. VMUL v7, v8, v9. VMUL v10, v11, v12
VADD v13, v14, v15. VADD v16, v17, v18. VADD v19, v20, v21. VADD v22, v23, v24
VMUL v1, v1, v14. VMUL v4, v4, v17. VMUL v7, v7, v20. VSUB v10, v10, v23
VADD v13, v13, v2. VADD v16, v16, v5. VSUB v19, v19, v8. VADD v22, v22, v11
도 4a는 상기 생성된 어셈블리 코드 중 VMUL v1, v2, v3. VMUL v4, v5, v6. VMUL v7, v8, v9. VMUL v10, v11, v12에 대한 명령어 집합 구조이다.
도 4a를 참조하면, 제1 슬롯(410)은 연산 코드 “VMUL”(411) 및 레지스터 인덱스 필드 “v1, v2, v3”(413)으로 구성되고, 제2 슬롯(420)은 연산 코드 “VMUL”(421) 및 레지스터 인덱스 필드 “v4, v5, v6”(423)으로 구성되고, 제3 슬롯(430)은 연산 코드 “VMUL”(431) 및 레지스터 인덱스 필드 “v7, v8, v9”(433)로 구성되고, 제4 슬롯(440)은 연산 코드 “VMUL”(441) 및 레지스터 인덱스 필드 “v10, v11, v12”(443)로 구성될 수 있다.
도 4a와 같은 명령어 집합 구조에서, 프로세서는 4개의 슬롯(410 내지 440) 각각이 동일한 연산 코드 “VMUL”을 사용하는 것으로 결정할 수 있다. 동일한 연산 코드 “VMUL”을 사용하는 것으로 결정되면, 프로세서는 도 4b의 <450>에 도시된 바와 같이 제1 슬롯 내지 제4 슬롯(410 내지 440)에서의 동일한 연산 코드 “VMUL”(451) 및 상기 제1 슬롯 내지 제4 슬롯(410 내지 440) 각각에 연산 코드(예: “VMUL”(451))가 사용될 레지스터 인덱스 필드(예: “v1, v2, v3”(455), “v4, v5, v6”(457), “v7, v8, v9”(459), “v10, v11, v12”(461)), 및 상태 비트(state bit)(453)로 구성된 형태의 새로운 명령어 코드(예: new VLIW instruction)를 생성할 수 있다.
일 실시예에서, 상기 상태 비트(453)는 새로운 명령어 코드인지 여부를 나타내는 필드와 연산 코드(451)와 레지스터 인덱스 필드(455, 457, 459, 461)의 연산 코드가 동일한지 여부를 나타내는 필드로 구성될 수 있다. 예컨대, 상기 상태 비트(453)는 새로운 명령어 코드인지 여부를 결정하기 위한 1bit(471) 및 연산 코드(451)와 레지스터 인덱스 필드(455, 457, 459, 461) 각각의 연산 코드가 동일한지 여부를 나타내는 필드(473, 475, 477, 479)의 4bit의 5bit로 구성될 수 있다.
일 실시예에서, 상태 비트(453)를 구성하는 필드의 값 각각은 1(471), 1(473), 1(475), 1(477), 1(479)일 수 있다. 상기 상태 비트(453)를 구성하는 필드의 값 중 1(471)은 새로운 명령어 코드인지 여부를 나타내는 값일 수 있다. 예컨대, 상기 상태 비트(453)를 구성하는 필드의 값 중 새로운 명령어 코드인지 여부를 나타내는 값이 1인 경우, 프로세서는 명령어 코드가 새로운 명령어 코드인 것으로 결정할 수 있다. 또는, 상태 비트(453)를 구성하는 필드의 값 중 새로운 명령어 코드인지 여부를 나타내는 값이 0인 경우, 프로세서는 명령어 코드가 새로운 명령어 코드가 아닌 것으로 결정할 수 있다.
일 실시예에서, 상기 상태 비트(453)를 구성하는 필드의 값 중 1(473), 1(475), 1(477), 및 1(479) 각각은 레지스터 인덱스 필드(455, 457, 459, 461)의 연산 코드가 연산 코드(451)과 동일한지 여부를 나타내는 값일 수 있다. 예컨대, 레지스터 인덱스 필드에 대응하는 상태 비트의 값이 1인 경우, 프로세서는 레지스터 인덱스 필드의 연산 코드가 연산 코드(451)와 동일한 것으로 결정할 수 있다. 또는, 레지스터 인덱스 필드에 대응하는 상태 비트의 값이 0인 경우, 프로세서는 레지스터 인덱스 필드의 연산 코드가 연산 코드(451)와 상이한 것으로 결정할 수 있다.
일 실시예에서, 상기 상태 비트(453)는 새로운 명령어 코드인지 여부를 나타내는 1bit만으로 구성될 수 있다.
종래에는, 동일한 연산 코드를 가지는 경우 각 슬롯 별로 32bit, 4개의 슬롯 모두 사용하는 경우 128bit의 프로그램 메모리(예: 도 2의 프로그램 메모리(231))를 사용하였다.
일 실시예에서, 새로운 명령어 코드를 생성함에 따라, 연산 코드 “VMUL”(451) 및 레지스터 인덱스 필드 “v1, v2, v3”(455)의 32bit, 레지스터 인덱스 필드 “v4, v5, v6”(457)의 15bit, 레지스터 인덱스 필드 “v7, v8, v9”(459)의 15bit, 레지스터 인덱스 필드 “v10, v11, v12”(461)의 15bit, 상태 비트(453)의 5bit(또는, 1bit)로, 총 82bit(또는, 78bit)의 프로그램 메모리를 사용할 수 있다.
일 실시예에서, 4개의 슬롯이 모두 동일한 연산 코드를 사용하는 경우, 새로운 명령어 코드는 82bit(또는, 78bit)로, 3개의 슬롯으로 구성 가능하므로 프로그램 메모리를 사용하는 크기는 종래와 비교하여 약 36% 감소될 수 있다.
일 실시예에서, 레지스터 인덱스 필드가 5bit로 구성되는 것으로 가정하여 설명하였으나, 이에 한정하는 것은 아니며, 4bit로 구성될 수 있다.
일 실시예에서, 명령어 코드를 디코딩(decoding)하는 경우, 프로세서는 메모리(예: 도 2의 메모리(230))로부터 상기 명령어 코드를 페치(fetch)할 수 있다.
일 실시예에서, 프로세서는 상기 페치된 명령어 코드가 동일한 연산 코드에 기초하여 생성된 새로운 명령어 코드인지 여부를 결정하기 위해, 상기 페치된 명령어 코드의 상태 비트를 확인할 수 있다.
예컨대, 프로세서는 페치된 명령어 코드(450)가 새로운 명령어 코드인지 여부를 결정하기 위해, 상기 명령어 코드(450)를 구성하는 상태 비트(453)를 확인할 수 있다. 상기 상태 비트(453) 중 새로운 명령어 코드인지 여부를 나타내는 값이 1(471)이므로, 프로세서는 상기 페치된 명령어 코드(450)를 동일한 연산 코드에 기초하여 생성된 새로운 명령어 코드인 것으로 결정할 수 있다.
일 실시예에서, 프로세서는 동일한 연산 코드 예컨대, “VMUL”(451)을 상기 상태 비트(453)가 활성화되어 있는 슬롯 예컨대, 상기 상태 비트(453) 중 1(473), 1(475), 1(477), 및 1(479) 각각에 대응하는 레지스터 인덱스 필드(455, 457, 459, 461)로 스프레딩(spreading) 할 수 있다.
일 실시예에서, 프로세서는 상기 스프레딩된 연산 코드 “VMUL”(451)에 기초하여 명령어를 디코딩할 수 있다. 예컨대, 프로세서는 상기 상태 비트(453)가 활성화되어 있는 슬롯으로 연산 코드(451)를 스프레딩하여, 연산 코드 “VMUL”(451)을 사용하여 레지스터 인덱스 필드(455, 457, 459, 461) 각각을 처리할 수 있다.
일 실시예에서, 프로세서는 상기 상태 비트(453)가 활성화되어 있는 슬롯으로 연산 코드(451)를 스프레딩하며, 도 4a와 같은 명령어 집합 구조의 형태(예: 연산 코드, 2개의 피연산자 레지스터 인덱스 필드, 결과 값이 저장될 레지스터 인덱스 필드를 포함하는 형태)로 복원하여, 명령어를 처리할 수 있다.
도 5a 및 도 5b는 다양한 실시예들에 따른 명령어 코드를 생성 및 디코딩하는 방법을 설명하기 위한 도면이다.
도 5a는 전술한 표 2와 같이 생성된 어셈블리 코드 중 VMUL v1, v1, v14. VMUL v4, v4, v17. VMUL v7, v7, v20. VSUB v10, v10, v23에 대한 명령어 집합 구조이다.
도 5a를 참조하면, 제1 슬롯(510)은 연산 코드 “VMUL”(511) 및 레지스터 인덱스 필드 “v1, v1, v14”(513)로 구성되고, 제2 슬롯(520)은 연산 코드 “VMUL”(521) 및 레지스터 인덱스 필드 “v4, v4, v17”(523)로 구성되고, 제3 슬롯(530)은 연산 코드 “VMUL”(531) 및 레지스터 인덱스 필드 “v7, v7, v20”(533)으로 구성되고, 제4 슬롯(540)은 연산 코드 “VSUB”(541) 및 레지스터 인덱스 필드 “v10, v10, v23”(543)으로 구성될 수 있다.
도 5a와 같은 명령어 집합 구조에서, 프로세서는 4개의 슬롯(510 내지 540) 중 복수의 슬롯 예컨대, 제1 슬롯 내지 제3 슬롯(510 내지 530)이 동일한 연산 코드 “VMUL”을 사용하는 것으로 결정할 수 있다.
일 실시예에서, 복수의 슬롯이 동일한 연산 코드 “VMUL”을 사용하는 것으로 결정되면, 프로세서는 도 5b의 <550>에 도시된 바와 같이 제1 슬롯(510), 제2 슬롯(520), 및 제3 슬롯(530)에서의 동일한 연산 코드 “VMUL”(551), 상기 제1 슬롯(510), 제2 슬롯(520), 및 제3 슬롯(530) 각각에 연산 코드(예: “VMUL”(551))가 사용될 레지스터 인덱스 필드(예: “v1, v1, v14”(555), “v4, v4, v17”(557), “v7, v7, v20”(559)), 제4 슬롯(540)의 연산 코드 “VSUB”(561), 상기 제4 슬롯(540)에서 사용될 레지스터 인덱스 필드 “v10, v10, v23”(563), 및 상태 비트(state bit)(553)로 구성된 형태의 새로운 명령어 코드(예: new VLIW instruction)를 생성할 수 있다.
일 실시예에서, 상기 상태 비트(553)는 새로운 명령어 코드인지 여부를 나타내는 필드와 연산 코드(551)와 레지스터 인덱스 필드(555, 557, 559, 563)의 연산 코드가 동일한지 여부를 나타내는 필드로 구성될 수 있다. 예컨대, 상기 상태 비트(553)는 새로운 명령어 코드인지 여부를 결정하기 위한 1bit(571) 및 연산 코드(551)와 레지스터 인덱스 필드(555, 557, 559, 563) 각각의 연산 코드가 동일한지 여부를 나타내는 필드(573, 577, 579, 581)의 4bit의 5bit로 구성될 수 있다.
일 실시예에서, 상기 상태 비트(453)는 새로운 명령어 코드인지 여부를 나타내는 1bit만으로 구성될 수 있다.
종래에는, 각 슬롯 별로 32bit, 4개의 슬롯 모두 사용하는 경우 128bit의 프로그램 메모리(예: 도 2의 프로그램 메모리(231))를 사용하였다.
일 실시예에서, 새로운 명령어 코드를 생성함에 따라, 연산 코드 “VMUL”(551) 및 레지스터 인덱스 필드 “v1, v1, v14”(555)의 32bit, 레지스터 인덱스 필드 “v4, v4, v17”(557)의 15bit, 레지스터 인덱스 필드 “v7, v7, v20”(559)의 15bit, 연산 코드 “VSUB”(561) 및 레지스터 인덱스 필드 “v10, v10, v23”(563)의 32bit, 상태 비트(553)의 5bit(또는, 1bit)로 총 99bit(또는, 95bit)의 프로그램 메모리를 사용할 수 있다.
일 실시예에서, 새로운 명령어 코드(550)는 99bit(또는, 95bit)로, 종래에 프로그램 메모리를 128bit 사용한 것에 비해 프로그램 메모리를 사용하는 크기는 약 23% 감소될 수 있다.
일 실시예에서, 명령어 코드를 디코딩하는 경우, 프로세서는 메모리(예: 도 2의 메모리(230))로부터 상기 명령어 코드를 페치(fetch)할 수 있다.
일 실시예에서, 프로세서는 상기 페치된 명령어 코드가 동일한 연산 코드에 기초하여 생성된 새로운 명령어 코드인지 여부를 결정하기 위해, 상기 페치된 명령어 코드의 상태 비트를 확인할 수 있다.
예컨대, 프로세서는 페치된 명령어 코드(550)가 새로운 명령어 코드인지 여부를 결정하기 위해, 상기 명령어 코드(550)를 구성하는 상태 비트(553)를 확인할 수 있다. 상기 상태 비트(553) 중 새로운 명령어 코드인지 여부를 나타내는 값이 1(571)이므로, 프로세서는 상기 페치된 명령어 코드(550)를 동일한 연산 코드에 기초하여 생성된 새로운 명령어 코드인 것으로 결정할 수 있다.
일 실시예에서, 프로세서는 동일한 연산 코드 예컨대, “VMUL”(551)을 상기 상태 비트(553)가 활성화되어 있는 슬롯 예컨대, 상기 상태 비트(553) 중 1(573), 1(577), 및 1(579) 각각에 대응하는 레지스터 인덱스 필드(555, 557, 559)로 스프레딩(spreading) 할 수 있다.
일 실시예에서, 프로세서는 상기 상태 비트(553)가 비활성화되어 있는 슬롯 예컨대, 상기 상태 비트(553) 중 0(581)에 대응하는 레지스터 인덱스 필드(563)는 상기 연산 코드 “VMUL”(551)와 상이한 연산 코드(예: “VSUB”(561))이므로, 상기 스프레딩을 수행하지 않을 수 있다.
일 실시예에서, 프로세서는 스프레딩이 수행된 연산 코드(551)에 기초하여 명령어를 디코딩할 수 있다. 예컨대, 상기 상태 비트(553)가 활성화되어 있는 슬롯으로 연산 코드(551)를 스프레딩함에 따라, 프로세서는 연산 코드 “VMUL”(551)로 레지스터 인덱스 필드(555, 557, 559)를 처리하고, 연산 코드 “VSUB”(561)로 레지스터 인덱스 필드(563)를 처리할 수 있다.
일 실시예에서, 프로세서는 상기 상태 비트(553)가 활성화되어 있는 슬롯으로 연산 코드(551)를 스프레딩하며, 도 5a와 같은 명령어 집합 구조의 형태(예: 연산 코드, 2개의 피연산자 레지스터 인덱스 필드, 결과 값이 저장될 레지스터 인덱스 필드를 포함하는 형태)로 복원하여, 명령어를 처리할 수 있다.
도 6은 다양한 실시예들에 따른 명령어 코드를 생성하는 방법을 설명하기 위한 흐름도이다.
도 6을 참조하면, 프로세서(예: 도 2의 프로세서(210))는 601동작에서 어플리케이션 컴파일 시, 명령어 집합 구조를 구성하는 복수의 슬롯이 동일한 연산 코드를 가지는지 여부를 결정할 수 있다. 예컨대, 상기 연산 코드는 산술 연산(예: VMUL, VADD, VSUB, MUL, ADD, SUB) 및 논리 연산(예: AND, OR, NOT)을 포함할 수 있다.
일 실시예에서, 상기 복수의 슬롯이 동일한 연산 코드를 가지는 경우, 프로세서는 603동작에서 상기 동일한 연산 코드에 기초하여 새로운 명령어 코드를 생성할 수 있다.
일 실시예에서, 어플리케이션은 반복 수행되는 복수의 동일한 연산을 포함하는 커널 코드(kernel code)를 포함할 수 있으며, 어플리케이션 컴파일 시, 프로세서는 명령어 코드로서 상기 복수의 동일한 연산보다 적은 수의 연산 코드를 포함하는 어셈블리 코드를 생성할 수 있다. 예컨대, 상기 생성된 새로운 명령어 코드는 상기 복수의 슬롯 중 동일한 연산 코드를 가지는 하나의 슬롯의 연산 코드 및 레지스터 인덱스 필드, 상기 동일한 연산 코드를 가지는 슬롯 중 상기 하나의 슬롯을 제외한 적어도 하나의 슬롯의 상기 동일한 연산 코드의 필드를 제외하고 적어도 하나의 레지스터 인덱스 필드, 및 상태 비트로 구성될 수 있다.
일 실시예에서, 상기 상태 비트는 동일한 연산 코드에 기초하여 생성된 명령어 코드인지 여부를 나타내는 필드와 상기 연산 코드와 상기 복수의 슬롯 각각을 구성하는 레지스터 인덱스 필드의 연산 코드가 동일한지 여부를 나타내는 필드로 구성될 수 있다.
일 실시예에서, 상기 복수의 슬롯이 동일한 연산 코드를 가지지 않는 경우, 프로세서는 상기 복수의 슬롯 각각의 연산 코드에 기초하여 명령어 코드를 생성할 수 있다.
도 7은 다양한 실시예들에 따른 새로운 명령어 코드를 디코딩하는 방법을 설명하기 위한 흐름도이다.
도 7을 참조하면, 프로세서(예: 도 2의 프로세서(210))는 701동작에서 명령어 코드를 페치(fetch)할 수 있다.
일 실시예에서, 프로세서는 703동작에서 상기 페치된 명령어 코드의 상태 비트(state bit)를 확인할 수 있다. 예컨대, 프로세서는 상기 페치된 명령어 코드를 구성하는 상태 비트를 확인하여, 상기 페치된 명령어 코드가 새로운 명령어 코드인지 여부를 결정할 수 있다.
일 실시예에서, 상기 상태 비트는 동일한 연산 코드에 기초하여 생성된 명령어 코드인지 여부를 나타내는 필드와 상기 연산 코드와 복수의 슬롯 각각을 구성하는 레지스터 인덱스 필드의 연산 코드가 동일한지 여부를 나타내는 필드로 구성될 수 있다.
일 실시예에서, 상태 비트 중 새로운 명령어 코드인지 여부를 나타내는 필드의 값이 1인 경우, 프로세서는 명령어 코드가 새로운 명령어 코드인 것으로 결정할 수 있다. 또는, 상태 비트 중 새로운 명령어 코드인지 여부를 나타내는 필드의 값이 0인 경우, 프로세서는 명령어 코드가 새로운 명령어 코드가 아닌 것으로 결정할 수 있다.
일 실시예에서, 레지스터 인덱스 필드에 대응하는 상태 비트의 필드 값이 1인 경우, 프로세서는 레지스터 인덱스 필드의 연산 코드가 연산 코드와 동일한 것으로 결정할 수 있다. 또는, 레지스터 인덱스 필드에 대응하는 상태 비트의 필드 값이 0인 경우, 프로세서는 레지스터 인덱스 필드의 연산 코드가 연산 코드와 상이한 것으로 결정할 수 있다.
일 실시예에서, 페치된 명령어 코드의 상태 비트를 확인하여 상기 페치된 명령어 코드가 새로운 명령어 코드로 결정되면, 프로세서는 705동작에서 상기 상태 비트가 활성화되어 있는 슬롯으로 연산 코드를 스프레딩 할 수 있다.
일 실시예에서, 프로세서는 707동작에서 스프레딩된 연산 코드에 기초하여 명령어를 디코딩할 수 있다. 예컨대, 프로세서는 스프레딩된 연산 코드를 이용하여 해당 레지스터 인덱스 필드의 명령어를 처리할 수 있다.
일 실시예에서, 프로세서는 상기 상태 비트가 활성화되어 있는 슬롯으로 연산 코드를 스프레딩하며, 도 3과 같은 명령어 집합 구조의 형태(예: 연산 코드, 2개의 피연산자 레지스터 인덱스 필드, 결과 값이 저장될 레지스터 인덱스 필드를 포함하는 형태)로 복원하여, 명령어를 처리할 수 있다.
전술한 도 4a 내지 도 5b의 실시예에서, 3개의 벡터 데이터를 가지는 것으로 설명하였지만, 이에 한정하는 것은 아니며 1개 또는 2개의 벡터 데이터를 가질 수 있다. 이 경우, 전술한 도 3과 같은 명령어 집합 구조의 형태로 복원하는 경우, 3개의 레지스터 인덱스 필드 중 해당 레지스터 인덱스 필드에 벡터 데이터를 디코딩하고 나머지 레지스터 인덱스 필드에 “nop”(no operation)을 삽입할 수 있다. 상기 “nop”이 삽입된 레지스터 인덱스 필드는 프로세서의 제어 하에 명령어 처리가 수행되지 않을 수 있다. 다시 말해, 프로세서는 3개의 레지스터 인덱스 필드를 가지는 슬롯을 통해 1개 또는 2개의 벡터 데이터의 명령어 처리를 수행할 수 있다. 이에 따라, 복수의 명령어 집합 구조(예: 1개의 레지스터 인덱스 필드를 가지는 슬롯, 2개의 레지스터 인덱스 필드를 가지는 슬롯)를 정의할 필요 없어, 하드웨어 측면에서 복잡도를 최소화할 수 있다.
본 문서에 개시된 다양한 실시예들에 따른 전자 장치는 다양한 형태의 장치가 될 수 있다. 전자 장치는, 예를 들면, 휴대용 통신 장치 (예: 스마트폰), 컴퓨터 장치, 휴대용 멀티미디어 장치, 휴대용 의료 기기, 카메라, 웨어러블 장치, 또는 가전 장치 중 적어도 하나를 포함할 수 있다. 본 문서의 실시예에 따른 전자 장치는 전술한 기기들에 한정되지 않는다.
본 문서의 다양한 실시예들 및 이에 사용된 용어들은 본 문서에 기재된 기술을 특정한 실시 형태에 대해 한정하려는 것이 아니며, 해당 실시예의 다양한 변경, 균등물, 및/또는 대체물을 포함하는 것으로 이해되어야 한다. 도면의 설명과 관련하여, 유사한 구성요소에 대해서는 유사한 참조 부호가 사용될 수 있다. 단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한, 복수의 표현을 포함할 수 있다. 본 문서에서, "A 또는 B", "A 및/또는 B 중 적어도 하나", "A, B 또는 C" 또는 "A, B 및/또는 C 중 적어도 하나" 등의 표현은 함께 나열된 항목들의 모든 가능한 조합을 포함할 수 있다. "제 1", "제 2", "첫째" 또는 "둘째" 등의 표현들은 해당 구성요소들을, 순서 또는 중요도에 상관없이 수식할 수 있고, 한 구성요소를 다른 구성요소와 구분하기 위해 사용될 뿐 해당 구성요소들을 한정하지 않는다. 어떤(예: 제 1) 구성요소가 다른(예: 제 2) 구성요소에 "(기능적으로 또는 통신적으로) 연결되어" 있다거나 "접속되어" 있다고 언급된 때에는, 상기 어떤 구성요소가 상기 다른 구성요소에 직접적으로 연결되거나, 다른 구성요소(예: 제 3 구성요소)를 통하여 연결될 수 있다.
본 문서에서 사용된 용어 "모듈"은 하드웨어, 소프트웨어 또는 펌웨어로 구성된 유닛을 포함하며, 예를 들면, 로직, 논리 블록, 부품, 또는 회로 등의 용어와 상호 호환적으로 사용될 수 있다. 모듈은, 일체로 구성된 부품 또는 하나 또는 그 이상의 기능을 수행하는 최소 단위 또는 그 일부가 될 수 있다. 예를 들면, 모듈은 ASIC(application-specific integrated circuit)으로 구성될 수 있다.
본 문서의 다양한 실시예들은 기기(machine)(예: 컴퓨터)로 읽을 수 있는 저장 매체(machine-readable storage media)(예: 내장 메모리(136) 또는 외장 메모리(138))에 저장된 명령어를 포함하는 소프트웨어(예: 프로그램(140))로 구현될 수 있다. 기기는, 저장 매체로부터 저장된 명령어를 호출하고, 호출된 명령어에 따라 동작이 가능한 장치로서, 개시된 실시예들에 따른 전자 장치(예: 전자 장치(101))를 포함할 수 있다. 상기 명령이 프로세서(예: 프로세서(120))에 의해 실행될 경우, 프로세서가 직접, 또는 상기 프로세서의 제어하에 다른 구성요소들을 이용하여 상기 명령에 해당하는 기능을 수행할 수 있다. 명령은 컴파일러 또는 인터프리터에 의해 생성 또는 실행되는 코드를 포함할 수 있다. 기기로 읽을 수 있는 저장매체는, 비일시적(non-transitory) 저장매체의 형태로 제공될 수 있다. 여기서, ‘비일시적’은 저장매체가 신호(signal)를 포함하지 않으며 실재(tangible)한다는 것을 의미할 뿐 데이터가 저장매체에 반영구적 또는 임시적으로 저장됨을 구분하지 않는다.
일시예에 따르면, 본 문서에 개시된 다양한 실시예들에 따른 방법은 컴퓨터 프로그램 제품(computer program product)에 포함되어 제공될 수 있다. 컴퓨터 프로그램 제품은 상품으로서 판매자 및 구매자 간에 거래될 수 있다. 컴퓨터 프로그램 제품은 기기로 읽을 수 있는 저장 매체(예: compact disc read only memory (CD-ROM))의 형태로, 또는 어플리케이션 스토어(예: 플레이 스토어TM)를 통해 온라인으로 배포될 수 있다. 온라인 배포의 경우에, 컴퓨터 프로그램 제품의 적어도 일부는 제조사의 서버, 어플리케이션 스토어의 서버, 또는 중계 서버의 메모리와 같은 저장 매체에 적어도 일시 저장되거나, 임시적으로 생성될 수 있다.
다양한 실시예들에 따른 구성 요소(예: 모듈 또는 프로그램) 각각은 단수 또는 복수의 개체로 구성될 수 있으며, 전술한 해당 서브 구성 요소들 중 일부 서브 구성 요소가 생략되거나, 또는 다른 서브 구성 요소가 다양한 실시예에 더 포함될 수 있다. 대체적으로 또는 추가적으로, 일부 구성 요소들(예: 모듈 또는 프로그램)은 하나의 개체로 통합되어, 통합되기 이전의 각각의 해당 구성 요소에 의해 수행되는 기능을 동일 또는 유사하게 수행할 수 있다. 다양한 실시예들에 따른, 모듈, 프로그램 또는 다른 구성 요소에 의해 수행되는 동작들은 순차적, 병렬적, 반복적 또는 휴리스틱하게 실행되거나, 적어도 일부 동작이 다른 순서로 실행되거나, 생략되거나, 또는 다른 동작이 추가될 수 있다.
210: 프로세서
230: 메모리

Claims (15)

  1. 전자 장치에 있어서,
    메모리; 및
    프로세서를 포함하며,
    상기 프로세서는,
    어플리케이션 컴파일 시, 상기 메모리에 정의된 복수의 슬롯(slot)에서 동일한 연산 코드를 사용하는 경우, 상기 동일한 연산 코드에 기초하여 명령어 코드를 생성하도록 설정되고, 상기 복수의 슬롯에서 동일한 연산 코드를 사용하지 않는 경우, 상기 복수의 슬롯 각각의 연산 코드에 기초하여 명령어 코드를 생성하도록 설정되고,
    상기 명령어 코드는, 상기 복수의 슬롯의 개수와 동일한 수의 비트들을 포함하는 상태 비트들을 포함하고,
    상기 상태 비트들 중 제1 비트는 상기 복수의 슬롯 중에서 제1 슬롯의 연산 코드가 상기 명령어 코드를 구성하는 연산 코드와 동일한지 여부를 나타내고, 상기 상태 비트들 중 제2 비트는 상기 복수의 슬롯 중에서 제2 슬롯의 연산 코드가 상기 명령어 코드를 구성하는 연산 코드와 동일한지 여부를 나타내는 전자 장치.
  2. 제 1 항에 있어서,
    상기 프로세서는,
    상기 복수의 슬롯 중 상기 동일한 연산 코드를 가지는 하나의 슬롯을 구성하는 연산 코드 및 레지스터 인덱스 필드, 상기 동일한 연산 코드를 가지는 슬롯 중 상기 하나의 슬롯을 제외한 적어도 하나의 슬롯을 구성하는 적어도 하나의 레지스터 인덱스 필드, 및 상태 비트로 구성된 상기 명령어 코드를 생성하도록 설정된 전자 장치.
  3. 제 2 항에 있어서,
    상기 상태 비트는,
    상기 연산 코드와 상기 복수의 슬롯을 구성하는 복수의 레지스터 인덱스 필드 각각의 연산 코드가 동일한지 여부를 나타내는 복수의 필드, 및 상기 동일한 연산 코드에 기초하여 생성된 명령어 코드인지 여부를 나타내는 필드를 포함하도록 설정된 전자 장치.
  4. 제 1 항에 있어서,
    상기 프로세서는,
    상기 메모리로부터 명령어 코드를 페치하고, 상기 페치된 명령어 코드의 상태 비트에 기초하여, 상기 페치된 명령어 코드가 상기 동일한 연산 코드에 기초하여 생성된 명령어 코드인지 여부를 결정하도록 설정된 전자 장치.
  5. 제 4 항에 있어서,
    상기 프로세서는,
    상기 페치된 명령어 코드가 상기 동일한 연산 코드에 기초하여 생성된 명령어 코드이면, 상기 상태 비트의 필드 중 복수의 레지스터 인덱스 필드 각각에 대응하는 값을 확인하고, 상기 상태 비트의 필드 중 상기 복수의 레지스터 인덱스 필드 각각에 대응하는 값이 활성화된 슬롯으로 상기 동일한 연산 코드를 스프레딩하고, 상기 스프레딩된 연산 코드에 기초하여 상기 페치된 명령어 코드를 디코딩하도록 설정된 전자 장치.
  6. 제 5 항에 있어서,
    상기 프로세서는,
    상기 동일한 연산 코드를 스프레딩한 후, 상기 메모리에 정의된 명령어 집합 구조의 형태로 상기 페치된 명령어 코드를 디코딩하도록 설정된 전자 장치.
  7. 제 1 항에 있어서,
    상기 어플리케이션은 반복 수행되는 복수의 동일한 연산을 포함하는 커널 코드(kernel code)를 포함하고,
    상기 프로세서는,
    상기 어플리케이션 컴파일 시, 상기 명령어 코드로서 상기 복수의 동일한 연산보다 적은 수의 연산 코드를 포함하는 어셈블리 코드를 생성하도록 설정된 전자 장치.
  8. 제 1 항에 있어서,
    상기 프로세서는,
    복수개의 슬롯으로 구성된 VLIW(very long instruction word) 프로세서인 전자 장치.
  9. 전자 장치의 명령어 처리 방법에 있어서,
    프로세서는 어플리케이션 컴파일 시, 메모리에 정의된 복수의 슬롯(slot)에 동일한 연산 코드를 사용하는지 여부를 결정하는 동작;
    상기 동일한 연산 코드를 사용하는 것으로 결정되면, 상기 동일한 연산 코드에 기초하여 명령어 코드를 생성하는 동작; 및
    상기 동일한 연산 코드를 사용하지 않는 것으로 결정되면, 상기 복수의 슬롯 각각의 연산 코드에 기초하여 명령어 코드를 생성하는 동작을 포함하고,
    상기 명령어 코드는, 상기 복수의 슬롯의 개수와 동일한 수의 비트들을 포함하는 상태 비트들을 포함하고,
    상기 상태 비트들 중 제1 비트는 상기 복수의 슬롯 중에서 제1 슬롯의 연산 코드가 상기 명령어 코드를 구성하는 연산 코드와 동일한지 여부를 나타내고, 상기 상태 비트들 중 제2 비트는 상기 복수의 슬롯 중에서 제2 슬롯의 연산 코드가 상기 명령어 코드를 구성하는 연산 코드와 동일한지 여부를 나타내는 방법.
  10. 제 9 항에 있어서,
    상기 동일한 연산 코드에 기초하여 명령어 코드를 생성하는 동작에 의해 생성된 명령어 코드는,
    상기 복수의 슬롯 중 상기 동일한 연산 코드를 가지는 하나의 슬롯을 구성하는 연산 코드 및 레지스터 인덱스 필드, 상기 동일한 연산 코드를 가지는 슬롯 중 상기 하나의 슬롯을 제외한 적어도 하나의 슬롯을 구성하는 적어도 하나의 레지스터 인덱스 필드, 및 상태 비트로 구성되는 방법.
  11. 삭제
  12. 삭제
  13. 삭제
  14. 삭제
  15. 삭제
KR1020170165725A 2017-12-05 2017-12-05 전자 장치 및 이를 이용한 명령어 처리 방법 KR102600283B1 (ko)

Priority Applications (4)

Application Number Priority Date Filing Date Title
KR1020170165725A KR102600283B1 (ko) 2017-12-05 2017-12-05 전자 장치 및 이를 이용한 명령어 처리 방법
US16/205,297 US10860321B2 (en) 2017-12-05 2018-11-30 Electronic device and method for processing instruction using the same
TW107143682A TWI791699B (zh) 2017-12-05 2018-12-05 電子裝置及使用其處理指令的方法
CN201811479903.7A CN110007960A (zh) 2017-12-05 2018-12-05 电子装置及使用其处理指令的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020170165725A KR102600283B1 (ko) 2017-12-05 2017-12-05 전자 장치 및 이를 이용한 명령어 처리 방법

Publications (2)

Publication Number Publication Date
KR20190066208A KR20190066208A (ko) 2019-06-13
KR102600283B1 true KR102600283B1 (ko) 2023-11-08

Family

ID=66659090

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020170165725A KR102600283B1 (ko) 2017-12-05 2017-12-05 전자 장치 및 이를 이용한 명령어 처리 방법

Country Status (4)

Country Link
US (1) US10860321B2 (ko)
KR (1) KR102600283B1 (ko)
CN (1) CN110007960A (ko)
TW (1) TWI791699B (ko)

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050102489A1 (en) * 2000-03-07 2005-05-12 University Of Washington Method and apparatus for compressing VLIW instruction and sharing subinstructions

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7418580B1 (en) * 1999-12-02 2008-08-26 International Business Machines Corporation Dynamic object-level code transaction for improved performance of a computer
TW525091B (en) 2000-10-05 2003-03-21 Koninkl Philips Electronics Nv Retargetable compiling system and method
US7917734B2 (en) * 2003-06-30 2011-03-29 Intel Corporation Determining length of instruction with multiple byte escape code based on information from other than opcode byte
WO2005036384A2 (en) * 2003-10-14 2005-04-21 Koninklijke Philips Electronics N.V. Instruction encoding for vliw processors
US20070129924A1 (en) * 2005-12-06 2007-06-07 Verheyen Henry T Partitioning of tasks for execution by a VLIW hardware acceleration system
US8799882B2 (en) 2005-12-07 2014-08-05 Microsoft Corporation Compiler support for optimizing decomposed software transactional memory operations
KR100875836B1 (ko) * 2007-03-23 2008-12-24 삼성전자주식회사 병렬 처리 vliw 컴퓨터를 위한 인스트럭션 명령어 압축장치 및 그 방법
KR101118593B1 (ko) 2008-12-03 2012-02-27 한국전자통신연구원 Vliw 명령어 처리 장치 및 방법
JP2013257670A (ja) * 2012-06-11 2013-12-26 Fujitsu Ltd プロセッサ、圧縮装置、圧縮方法、および圧縮プログラム
JP6122749B2 (ja) 2013-09-30 2017-04-26 ルネサスエレクトロニクス株式会社 コンピュータシステム

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050102489A1 (en) * 2000-03-07 2005-05-12 University Of Washington Method and apparatus for compressing VLIW instruction and sharing subinstructions

Also Published As

Publication number Publication date
TWI791699B (zh) 2023-02-11
US20190171456A1 (en) 2019-06-06
CN110007960A (zh) 2019-07-12
KR20190066208A (ko) 2019-06-13
TW201926027A (zh) 2019-07-01
US10860321B2 (en) 2020-12-08

Similar Documents

Publication Publication Date Title
US20200401384A1 (en) Electronic device and operation method thereof
US11886884B2 (en) Branch prediction based on coherence operations in processors
KR20200057814A (ko) 뉴럴 네트워크를 이용한 데이터 처리 방법 및 이를 지원하는 전자 장치
US9772863B2 (en) Methods for copying information handling system configuration settings
US20160048376A1 (en) Portable binary image format (pbif) for pre-compiled kernels
US20200257377A1 (en) Electronic device and method for recommending word in same
EP4261702A1 (en) Systems and methods for database scan acceleration
KR102632247B1 (ko) 음성 처리 향상에 위한 가우시안 가중 셀프 어텐션에 대한 방법 및 시스템
KR20220168170A (ko) 최대 일관성 기반 아웃라이어 핸들링을 위한 방법 및 시스템
US20210081531A1 (en) Electronic device for classifying malicious code and operation method thereof
US9823927B2 (en) Range selection for data parallel programming environments
KR102600283B1 (ko) 전자 장치 및 이를 이용한 명령어 처리 방법
CN111211822B (zh) 特征值分解预编码矩阵指示选择
CN112583421A (zh) 用于识别和解码极化码中的里德穆勒码的系统和方法
CN112988194B (zh) 基于设备信息的程序优化方法、装置、电子设备及存储介质
US20120102254A1 (en) Virtualized Peripheral Hardware Platform System
US20220026549A1 (en) Electronic device and electronic device control method
EP3987395B1 (en) Electronic device for executing instructions using processor cores and various versions of instruction set architectures
CN116483736B (zh) 插桩位置确定方法及电子设备
CN111626398A (zh) 运算方法、装置及相关产品
US20230086654A1 (en) Electronic device for analyzing permission for installation file and method of operating the same
CN112346780B (zh) 一种信息处理方法、装置和存储介质
CN112214244A (zh) 一种运算装置及其操作方法
KR20210104521A (ko) 상수 값의 비교 결과에 기반하여 리스토어를 수행하는 전자 장치 및 그 제어 방법
KR102443699B1 (ko) Kvssd 내 데이터 분석 장치 및 방법

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