KR102318531B1 - 스트리밍 메모리의 치환 동작 - Google Patents

스트리밍 메모리의 치환 동작 Download PDF

Info

Publication number
KR102318531B1
KR102318531B1 KR1020140053340A KR20140053340A KR102318531B1 KR 102318531 B1 KR102318531 B1 KR 102318531B1 KR 1020140053340 A KR1020140053340 A KR 1020140053340A KR 20140053340 A KR20140053340 A KR 20140053340A KR 102318531 B1 KR102318531 B1 KR 102318531B1
Authority
KR
South Korea
Prior art keywords
data
unit
sub
instruction
memory
Prior art date
Application number
KR1020140053340A
Other languages
English (en)
Other versions
KR20140131284A (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 삼성전자주식회사
Publication of KR20140131284A publication Critical patent/KR20140131284A/ko
Application granted granted Critical
Publication of KR102318531B1 publication Critical patent/KR102318531B1/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/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/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/3017Runtime instruction translation, e.g. macros

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Executing Machine-Instructions (AREA)
  • Advance Control (AREA)

Abstract

본 발명은 집적회로에 관한 것으로, 좀더 구체적으로는 데이터를 메모리로부터 로딩하거나 저장하는 기술에 관한 것이다. 본 발명의 기술적 사상에 따른 장치는 명령에 응답하여, 메모리로부터 데이터를 로드하고 상기 데이터를 실행 유닛에 전송하는 로드 유닛; 상기 데이터에 대한 수학적 동작을 수행하는 실행 유닛을 포함하며, 상기 메모리는 복수의 요소들을 포함하고, 상기 로드 유닛이 상기 데이터를 상기 실행 유닛에 전송할 때에, 치환 없이 상기 로드 유닛과 상기 실행 유닛 사이에서 상기 데이터를 통신하는 제 1 데이터 경로를 경유하거나, 또는 치환을 수반하여 상기 로드 유닛과 상기 실행 유닛 사이에 상기 데이터를 통신하는 제 2 데이터 경로를 경유하며, 상기 치환은 상기 명령에 따라 상기 복수의 요소들 중에서 상기 데이터의 부분들을 직접적으로 분배하는 것을 포함한다. 본 발명은 실행 유닛과 메모리 사이의 데이터 포맷의 불일치를 능동적으로 해소할 수 있는 장치를 제공함으로써, 그 효율을 개선할 수 있다.

Description

스트리밍 메모리의 치환 동작{STREAMING MEMORY TRANSPOSE OPERATIONS}
본 발명은 집적회로에 관한 것으로, 좀더 구체적으로는 데이터를 메모리로부터 로딩하거나 저장하는 기술에 관한 것이다.
일반적으로, 컴퓨터 회로(computer circuit) 또는 프로세서 아키텍처(processor architecture)는 소정의 동작 또는 논리 계산을 수행하는 일련의 또는 복수의 기능 유닛 블록들(funtional unit blocks, FUBs)을 포함한다. 기능 유닛 블록들에 대한 다양한 예들은 IFUs(instruction fetch units), IDUs(instruction decode units) 뿐만 아니라, LSUs(load/sotre units), FPUs(floating point units), ALUs(arithmetic logic units) 등과 같은 명령 수행 유닛을 포함한다.
현대의 프로세서들은 자주 SIMD(single instruction multiple data) 또는 이와 유사한 명령들을 지원하며, 이는 복수의 데이터 조각들(예를 들어, 값들(values)의 배열, 값들의 벡터 등)로 하여금 하나의 싱글 명령(single instruction)의 결과로 동일한 계산 또는 동작을 하게끔 한다. 이러한 동작들은 많은 경우에 멀티미디어 데이터(예를 들어, 비디오, 그래픽, 오디오 등)를 처리하는데 사용된다. 종종 이러한 명령들은 미리 정해진 스킴에 따라 데이터가 포맷될 것을 요구한다. 종종 실행 유닛(execution unit, 예를 들어 SIMD FPU 등)에 의하여 요구되는 데이터 포맷(data format)은 컴퓨터의 메모리 내에 데이터를 저장하는 때에 사용되는 포맷과 대응하지 않는다. 상술한 설명은 단지 하나의 실시 예에 불과하며, 개시된 주된 내용은 이에 한정되지 않음이 이해될 것이다.
본 발명의 목적은 실행 유닛과 메모리 사이의 데이터 포맷의 불일치를 해소할 수 있는 장치를 제공하는데 있다.
본 발명의 기술적 사상에 따른 장치는 명령에 응답하여, 메모리로부터 데이터를 로드하고 상기 데이터를 실행 유닛에 전송하는 로드 유닛; 상기 데이터에 대한 수학적 동작을 수행하는 실행 유닛을 포함하며, 상기 메모리는 복수의 요소들을 포함하고, 상기 로드 유닛이 상기 데이터를 상기 실행 유닛에 전송할 때에, 치환(transposition) 없이 상기 로드 유닛과 상기 실행 유닛 사이에서 상기 데이터를 통신하는 제 1 데이터 경로를 경유하거나, 또는 치환을 수반하여 상기 로드 유닛과 상기 실행 유닛 사이에 상기 데이터를 통신하는 제 2 데이터 경로를 경유하며, 상기 치환은 상기 명령에 따라 상기 복수의 요소들 중에서 상기 데이터의 부분들(portions)을 직접적으로 분배하는 것을 포함한다.
실시 예로써, 상기 제 2 데이터 경로는 임시로 상기 데이터를 저장하는 버퍼 메모리와, 상기 명령에 기초하여 상기 복수의 요소들 중에서 상기 데이터의 부분들을 이동시키는 치환 유닛(transposition unit)을 포함한다.
실시 예로써, 상기 제 2 데이터 경로는 각각 대응하는 데이터를 임시로 저장하는 복수의 버퍼 메모리들을 포함하며, 상기 복수의 버퍼 메모리들은 대응하는 실질적으로 동시에 복수의 데이터들을 임시로 저장한다.
실시 예로써, 상기 데이터는 복수의 요소들을 포함하며, 각 요소는 동일한 비트 길이(bit length)를 갖는다.
실시 예로써, 상기 명령은 복수의 서브-명령들로 변환되며, 상기 복수의 요소들은 각각 상기 복수의 서브-명령들 중 대응하는 하나의 서브-명령과 연관된다.
실시 예로써, 각 서브-명령은 상기 데이터의 일부분(a portion)과, 각각의 목적지 레지스터와 연관된 태그를 포함하며, 상기 태그는 상기 데이터의 상기 일부분과 직접적으로 연관되지는 않고, 상기 제 2 데이터 경로는 상기 데이터를 치환된 데이터로 치환하고, 각 서브-명령을 위하여 상기 가각의 태그를 상기 치환된 데이터의 각 부분에 연관시키는 치환 유닛을 포함하며, 각각의 태그는 상기 치환된 데이터의 대응하는 부분에 직접적으로 연관된다.
실시 예로써, 상기 로드 유닛은 차례차례 데이터의 각 요소를 상기 제 2 데이터 경로의 버퍼 메모리로 로드하며, 상기 제 2 데이터 경로는, 일단 상기 데이터의 모든 요소들이 상기 버퍼 메모리로 로드되면, 상기 데이터를 치환된 데이터로 전환하고, 상기 치환된 데이터는 복수의 요소들을 포함하며, 상기 실행 유닛은 복수의 메모리 레지스터들을 포함하고, 상기 제 2 데이터 경로는 상기 치환된 데이터의 각 요소를 상기 실행 유닛의 각각의 메모리 레지스터에 저장한다.
본 발명의 실시 예에 따른 장치는 복수의 요소들을 포함하는 데이터의 세트를 제공하는 실행 유닛; 저장-치환 명령(store-transpose) 명령에 응답하여, 상기 데이터를 메모리에 저장하는 저장 유닛; 및 상기 저장-치환 명령에 따라 상기 실행 유닛과 상기 저장 유닛 사이에서 상기 데이터를 통신하여 상기 요소들의 순서를 재배열하는 치환 데이터 경로를 포함하며, 상기 치환 데이터 경로는 상기 데이터의 치환에 앞서 상기 데이터를 수집하는 버퍼 구조; 및 상기 요소들의 상기 순서를 재배열하는 치환 유닛을 포함한다.
실시 예로써, 상기 실행 유닛은 상기 데이터를 복수의 레지스터들에 저장하며, 상기 버퍼 구조는 싱글 클럭 사이클(single clock cycle) 내에 상기 복수의 레지스터들 중 적어도 두 개의 레지스터들에 기입된다.
실시 예로써, 상기 실행 유닛은 싱글 서브-명령(single sub-instruction)을 통하여 상기 데이터를 상기 버퍼에 기입한다.
실시 예로써, 상기 실행 유닛은 실행 유닛 서브-명령들의 제 1 숫자를 통하여 상기 데이터를 상기 버퍼 구제에 기입하며, 상기 저장 유닛은 저장 유닛 서브-명령들의 제 2 숫자를 통하여 상기 치환 데이터 경로로부터 상기 데이터를 읽으며, 상기 제 1 숫자는 상기 제 2 숫자에 비하여 적다.
실시 예로써, 각 저장 유닛 서브-명령(store unit sub-instruction)은 식별 태그(identification tag)와 연관되며, 각 저장 유닛 서브-명령의 각 식별 태그는 제 1 실행 유닛 서브-명령으로부터 파생된다.
실시 예로써, 상기 제 1 실행 유닛 서브-명령의 식별 태그는 재-순서 버퍼 식별기(reorder buffer identifier)로부터 파생된다.
본 발명의 실시 예에 따른 방법은 제 1 기능 유닛 블록에 의하여, 데이터를 제 1 포맷에 제공하는 단계; 제 2 기능 유닛 블록에 의하여 수신되기 이전에 상기 데이터가 제 2 포맷으로 변환되는지의 여부를 판단하는 단계; 상기 판단 결과에 응답하여 상기 데이터를 치환 데이터 경로의 스토리지 버퍼(storage buffer)에 저장하는 단계; 일단 상기 데이터가 상기 스토리지 버퍼에 저장되면, 상기 데이터를 제 2 포맷으로 치환하는 단계; 그리고 상기 제 2 포맷 내의 상기 데이터를 상기 제 2 기능 유닛 블록으로 전송하는 단계를 포함한다.
실시 예로써, 상기 스토리지 버퍼에 상기 데이터를 저장하는 단계는 상기 제 1 기능 유닛 블록에 의하여, 일련의 서브-명령들을 발생하는 단계; 및 각 서브-명령을 실행하는 단계를 포함하며, 각 서브-명령은 상기 제 2 기능 유닛 블록 및 상기 데이터의 일부분과 연관되고, 각 서브-명령은 수행될 때에 상기 제 1 기능 유닛 블록이 상기 데이터의 대응하는 부분을 상기 스토리지 버퍼로 복사할 것을 야기한다.
실시 예로써, 상기 데이터는 제 1 데이터를 포함하고, 상기 스토리지 버퍼는 제 1 스토리지 버퍼를 포함하며, 상기 방법은, 일단 상기 제 1 데이터가 상기 제 1 스토리지 버퍼에 저장되면, 상기 제 1 데이터를 치환하는 단계; 및 제 2 데이터를 상기 치환 데이터 경로의 제 2 스토리지 버퍼에 저장하는 단계를 더 포함한다.
실시 예로써, 상기 전송하는 단계는 상기 치환 데이터 경로를 경유하여 전송된 제 2 포맷 내의 상기 데이터와 비-치환 데이터 경로를 경유하여 전송된 데이터의 제 2 세트 사이에서의 상기 제 2 기능 유닛 블록으로의 액세스를 중재하는 단계를 포함한다.
실시 예로써, 상기 제 1 기능 유닛 블록은 상기 데이터를 상기 제 1 기능 유닛 블록 내의 복수의 레지스터들에 저장하고, 상기 복수의 레지스터들 각각은 상기 데이터의 일부분을 저장하며, 상기 데이터를 상기 스토리지 버퍼에 저장하는 단계는, 상기 데이터의 상기 복수의 일부분들을 실질적으로 동시에 상기 스토리지 버퍼로 복사하는 단계를 포함한다.
실시 예로써, 상기 제 1 기능 유닛 블록에 의하여, 일단 상기 데이터가 상기 스토리지 버퍼에 저장되면, 제 2 데이터에 대한 동작을 수행하는 단계를 포함한다.
실시 예로써, 복수의 쓰기 서브-명령들을 경유하여, 상기 전송하는 단계는 상기 제 2 포맷의 상기 데이터의 부분들을 상기 제 2 기능 유닛 블록으로 기입한다.
본 발명의 실시 예에 따른 시스템은 적어도 하나의 데이터의 세트를 저장하는 메모리; 명령에 따라 상기 데이터에 대한 동작을 수행하는 프로세서; 및 상기 메모리와 상기 프로세서를 통신하도록 연결하는 시스템 버스를 포함하며, 상기 데이터는 복수의 요소들을 포함하고, 상기 프로세서는, 상기 명령에 응답하여, 상기 메모리로부터 상기 데이터를 로드하고 상기 데이터를 제 1 로드 데이터 경로 또는 제 2 로드 데이터 경로 중 어느 하나를 경유하여 실행 유닛에 전송하는 로드 유닛과, 상기 데이터에 대한 상기 동작을 수행하는 상기 실행 유닛을 포함하며, 상기 제 1 로드 데이터 경로는 치환 없이 상기 데이터를 상기 로드 유닛과 상기 실행 유닛 사이에서 전송하고, 상기 제 2 로드 데이터 경로는 상기 데이터에 기초하여, 치환된 데이터를 발생하고 상기 치환된 데이터를 상기 실행 유닛에 전송하며, 상기 치환된 데이터는 상기 데이터의 순서가 재배열된 상기 데이터의 버전을 포함한다.
실시 예로써, 상기 데이터는 구조들(structures)의 배열(array)로 포맷되며 상기 치환된 데이터는 배열들(arrays)의 구조(structure)로 치환된다.
실시 예로써, 상기 실행 유닛은 상기 데이터에 대한 상기 동작을 수행하는 것의 부분으로, 상기 치환된 데이터 또는 상기 데이터 중 어느 하나에 기초하여 처리된 데이터(processed data)를 발생하며, 상기 처리된 데이터는 제 1 저장 데이터 경로 또는 제 2 저장 데이터 경로 중 어느 하나를 경우하여 저장 유닛으로 전송하고, 상기 프로세서는, 치환 없이, 상기 처리된 데이터를 상기 실행 유닛과 상기 저장 유닛 사이에 전송하는 상기 제 1 저장 데이터 경로, 상기 처리된 데이터에 기초하여, 치환되어 처리된 데이터를 발생하고 상기 치환되어 처리된 데이터를 상기 저장 유닛에 전송하는 상기 제 2 저장 데이터 경로, 그리고 상기 처리된 데이터 또는 상기 치환되어 처리된 데이터를 상기 메모리에 저장하는 상기 저장 유닛을 포함하며, 상기 처리된 데이터는 상기 처리된 데이터의 순서가 재배열된 상기 처리된 데이터의 버전을 포함한다.
실시 예로써, 상기 프로세서는 상기 로드 유닛과 상기 저장 유닛을 포함하는 로드-저장 유닛을 포함한다.
실시 예로써, 상기 로드 유닛은 상기 제 2 로드 데이터 경로의 적어도 일부분을 포함하며, 상기 저장 유닛은 상기 제 2 로드 데이터 경로의 적어도 일부분을 포함한다.
실시 예로써, 상기 프로세서는, 상기 로드 유닛과 적어도 하나의 실행 유닛 사이에서 데이터를 전송하는 로드 버스(load bus)를 더 포함하며, 상기 로드 버스는 상기 제 1 로드 데이터 경로 및 상기 제 2 로드 데이터 경로를 포함하고, 상기 제 1 및 제 2 로드 데이터 경로들은 중재 스킴에 따라 상기 로드 버스를 제어한다.
실시 예로써, 상기 제 2 로드 데이터 경로가 전송하는 동안에 상기 로드 유닛과 상기 실행 유닛 사이에 제 2 데이터의 세트를 전송하는 동안에, 상기 제 1 로드 데이터 경로는 상기 로드 유닛과 상기 실행 유닛 사이에서 제 1 데이터의 세트를 중첩하여 전송한다.
실시 예로써, 상기 실행 유닛은 상기 치환된 데이터를 발생하지 않는다.
본 발명은 실행 유닛과 메모리 사이의 데이터 포맷의 불일치를 능동적으로 해소할 수 있는 장치를 제공함으로써, 그 효율을 개선할 수 있다.
도 1은 데이터를 처리하는 시스템을 보여주는 블록도이다.
도 2a는 본 발명의 기술적 사상의 실시 예에 따른 메모리 시스템의 일 예를 보여주는 도면이다.
도 2b는 본 발명의 기술적 사상의 실시 예에 따른 메모리 시스템의 일 예를 보여주는 도면이다.
도 3a는 전통적인 시스템에 따른 일련의 명령들의 일 예를 보여주는 도면이다.
도 3b는 본 발명의 기술적 사상의 실시 예에 따른 일련의 명령들의 일 실시 예를 보여주는 도면이다.
도 4는 본 발명의 기술적 사상의 실시 예에 따른 시스템의 일 실시 예를 보여주는 도면이다.
도 5a는 종래의 시스템에 따른 명령들의 시리즈의 일 예를 보여주는 도면이다.
도 5b는 본 발명의 기술적 사상의 실시 예에 따른 명령들의 시리즈의 일 예를 보여주는 도면이다.
도 5c는 본 발명의 기술적 사상의 실시 예에 따른 시스템의 일 실시 예를 보여주는 블록도이다.
도 6은 본 발명의 기술적 사상의 실시 예에 따른 기술의 일 실시 예를 보여주는 순서도이다.
도 7은 본 발명의 기술적 사상의 실시 예에 따라 형성된 반도체 장치들을 포함하는 정보 처리 시스템을 보여주는 블록도이다.
도 1은 데이터를 처리하는 시스템(100)을 보여주는 블록도이다. 다양한 실시 예들에 있어서, 시스템(100)은 프로세서(101)와 메모리(190)를 포함할 것이다. 다양한 실시 예들에 있어서, 프로세서(101)는 중앙 처리 장치(CPS), 코-프로세싱 집적회로(co-processing integrated circuit, IC), 칩셋 컴포넌트, 또는 다른 행태의 논리 회로를 포함할 것이다. 몇몇의 실시 예들에 있어서, 시스템(100)은 이하에서 설명될 바와 같이, 하나 또는 그 이상의 기능 유닛 블록들(functional unit blocks, FUBs) 또는 조합 논리 블록들(combinational logic blocks, CLBs)을 포함할 것이다.
이러한 실시 예에 있어서, 조합 논리 블록은 다양한 Boolean 논리 동작들(예들 들어, NAND, NOR, NOT, XOR 등), 안정화 논리 장치들(예를 들어, 플립플롭, 래치 등), 다른 논리 장치들, 또는 이것들의 조합을 포함할 것이다. 이러한 조합 논리 동작들은 원하는 결과를 달성하기 위하여 입력 신호들을 단순한 또는 복잡한 방식으로 처리하는데 특징이 있을 것이다. 비록 동기식(synchronous) 조합 논리 동작들이 일 예로써 설명되었다고 하더라도, 본 발명의 기술적 사상은 이에 한정되지 않으며, 비동기식(asynchronous) 동작들 또는 그것들의 조합을 포함할 수 있을 것이다. 일 실시 예에 있어서, 조합 논리 동작들은 복수의 CMOS 트랜지스터들을 포함할 것이다. 다양한 실시 예들에 있어서, 이러한 CMOS 트랜지스터들은 논리 동작들을 수행하는 게이트들(gates)에 배열될 것이다. 한편, 상술한 실시 예 이외에 다른 기술들이 사용될 수도 있으며, 이는 본 발명의 기술적 사상의 범주 내에 속함이 이해될 것이다.
도시된 실시 예에 있어서, 단순화된 파이프라인 또는 컴퓨터 아키텍처가 도시되어 있다. 이하의 설명은 단지 일 실시 예에 불과하며, 본 발명의 기술적 사상은 이에 한정되지 않음이 이해될 것이다.
도시된 실시 예에 있어서, 프로세서(101)는 복수의 기능 유닛 블록들(FUBs) 또는 조합 논리 블록들(CUBs)을 포함할 것이다. 도시된 실시 예에 있어서, 프로세서(101)는 명령 패치 유닛(instruction fetch unit; IFU)(102), 명령 디코드 유닛(instruction decode unit; IDU)(104), 로드/저장 유닛(load/store unit; LSU)(106) 그리고 적어도 하나의 실행 유닛(108)을 포함할 것이다. 한편, 실행 유닛(108)은 계산 유닛 또는 연산 유닛이라고도 칭해질 수 있다. 몇몇의 실시 예들에 있어서, 프로세서(101)는 레벨 1-명령 캐쉬(level 1 instruction cache)(114), 레벨 1-데이터 캐쉬(level 1 data cache)(116), 레벨 2 메모리 시스템(level 2 memory system)(112), 그리고 메모리 인터페이스(110)를 포함 할 것이다. 한편, 상술한 설명은 단지 일 실시 예에 불과하며, 본 발명의 기술적 사상은 이에 한정되지 않음이 이해될 것이다.
몇몇의 실시 예들에 있어서, 명령 패치 유닛(102)은, 예를 들어, 더하기(Add), 로드(Load), 저장(Store), 점프(Jump) 등과 같은 어셈블리 명령(assembly instruction)을 패치(fetch)하거나 회수(retrieve)하는 것을 특징으로 할 것이다. 다양한 실시 예들에 있어서, 명령 패치 유닛(102)은 레벨 1-명령 캐쉬(114)와 같은 명령 캐쉬(instruction cache)로부터의 명령 포인터(instruction pointer)에 따라 명령을 회수(retrieve)할 것이다. 이러한 실시 예에 있어서, 레벨 1-명령 캐쉬(114)는 복수의 메모리 요소들을 포함할 것이며 명령 패치 유닛(102) 또는 다른 기능 유닛 블로들에 의한 빠른 회수를 위하여 복수의 명령들을 임시로 저장할 것이다.
도시된 실시 예에 있어서, 패치된 명령은 명령 디코드 유닛(104)을 통과할 것이다. 다양한 실시 예들에 있어서, 명령 디코드 유닛(104)은 어떤 동작들이 해당 명령에 응답하여 수행될 필요가 있는지를 판단할 것이다. 예를 들어, 몇몇의 명령들은 분기 예측(branch prediction)을 요구할 것이며, 어떠한 명령들은 플로팅 포인트 연산(floating point computation)을 요구할 것이며, 어떠한 명령들은 메모리로부터의 데이터의 회수 또는 로딩을 요구할 것이다. 이러한 예 및 도시된 예에 있어서, 구체적으로 고려되고 도시된 명령들은 (캐쉬를 직접적으로 또는 비직접적으로 경유하여) 메모리(190)로부터의 로드 또는 읽기 동작을 수행하거나, (캐쉬를 직접적으로 또는 비직접적으로 경유하여) 메모리(190)에 대한 저장 또는 쓰기 동작을 수행하거나, 실행 유닛(108)으로 하여금 데이터에 대한 수학적 또는 논리적 동작을 수행하도록 야기한다. 한편, 상술한 설명은 단지 일 실시 예에 불과하며, 본 발명의 기술적 사상은 이에 한정되지 않음이 이해될 것이다.
도시된 실시 예에 있어서, 로드 또는 저장 동작을 요구하는 명령은 로드/저장 유닛(106)으로 전송될 것이다. 다양한 실시 예들에 있어서, 시스템(100)은 분리된 별도의 저장 유닛들 및 분리된 별도의 저장 유닛들을 포함할 수도 있을 것이다. 도시된 실시 예에 있어서, 로드/저장 유닛(106)은 레벨 1-데이터 캐쉬(116)로부터 (읽기/쓰기) 데이터에 액세스(access)할 것이다.
메모리(190) 내의 모든 정보 또는 이를 복사한 정보가 "데이터(data)"라고 칭해지는 반면에, 컴퓨터 아키텍처의 용어 및 본 출원에 있어서, "명령(instruction)"은 프로세서(101)로 하여금 어떠한 논리 동작 또는 수학적 연산을 하도록 하는 정보를 일컫는다. 반대로, 본 출원의 설명에 있어서, "데이터(data)"라는 용어는 입력으로 동작하거나 사용되는 정보 또는 수학적 연산의 결과의 정보를 일컫는 용어일 수 있다. 예를 들어, "ADD M0, M1, M2"를 나타내는 정보는 머신(machine)으로 하여금 메모리 위치 0(memory location 0)의 값(M0)을 메모리 위치 1의 값(M1)에 더하도록 하고(즉, 수학적 동작을 야기하고), 그 결과를 메모리 위치 2(M2)에 저장(deposit)하도록 하는 명령일 것이다. "ADD"는 명령의 명령어(operation)이며, M0, M1, M2는 명령의 피연산자(operand)일 것 이다. 메모리 위치 0과 1에 입력된 값들(예를 들어, 1234, 7890의 숫자들)과 메모리 위치 2에 저장된 출력 결과 값(예를 들어, 9124의 숫자들)은 "데이터(data)"라고 칭해질 수 있을 것이다.
일반적으로 컴퓨터 아키텍처에 있어서 메모리는 계측적인 메모리 구조들(memory structures)에 연속하여 배열된다. 도시된 실시 예에 있어서, 메모리(190)는 시스템(100) 내의 모든 데이터, 명령들, 정보를 포함할 것이며, 또한 시스템 레벨 랜덤 액세스 메모리(RAM), 하드 드라이브(hard drives) 그리고 다른 대량 저장 장치 또는 그것들의 조합을 포함할 것이다. 도시된 실시 예에 있어서, 보다 효과적인 설명을 위하여, 메모리(190)는 시스템(100) 내에서 가장 느린 메모리인 것으로 고려될 것이다. 이러한 메모리(190)는 프로세서(101)에 의하여 메모리 인터페이스(110)를 통하여 (쓰기 또는 읽기 동작 등이 수행되도록) 액세스될 것이다. 이러한 정보는 레벨 2 메모리 시스템(112) 내에 임시적으로 저장될 것이다. 몇몇의 실시 예에 있어서, 레벨 2 메모리 시스템(112)은 메모리(190)에 비하여 더 작고 더 빠를 것이며, 도시된 실시 예에 있어서, 조합된 명령과 데이터 캐쉬를 포함할 것이다. 레벨 2 메모리 시스템(112)으로부터 명령들의 서브-세트(sub-set)가 레벨 1-명령 캐쉬(114) 내에 저장될 것이며, 데이터의 서브-세트가 레벨 1-데이터 캐쉬(116) 내에 저장될 것이다. 다양한 실시 예들에 있어서, 레벨 1 캐쉬들(114, 116)은 레벨 2 메모리 또는 캐쉬(112)에 비하여 더 작고 빠를 것이다. 다만, 상술한 설명은 단지 일 실시 예에 불과하며, 본 발명의 기술적 사상은 이에 한정되지 않음이 이해될 것이다.
도시된 실시 예에 있어서, 다양한 명령들(예를 들어, SIMD 명령들 등)은 프로세서(101)가 메모리(메모리(190) 또는 캐쉬(112, 116) 등)로부터 데이터를 로딩하고 해당 데이터를 소정 프로세싱 또는 실행 유닛(108)의 레지스터(예를 들어, 레지스터(125) 등)에 저장하거나 일반적인 레지스터(미도시)에 저장하도록 할 것이다. 반대로, 몇몇의 명령들은 실행 유닛(108)의 다양한 레지스터들 또는 일반적인 레지스터들에 저장된 데이터를 다시 메모리에 저장하도록 야기할 것이다. 이러한 명령들은 일반적으로 로드(LOAD(LD)) 또는 저장(STORE(ST)) 명령들이라 칭해질 수 있다.
몇몇의 실시 예들 및 이하의 도 2a 및 2b에서 예시적으로 도시된 바와 같이, 데이터는 어레이, 벡터, 또는 보다 일반적인 복수의 요소들(elements)을 포함할 것이다. 다양한 실시 예들에 있어서, 데이터는 메모리 또는 캐쉬(116) 내에 레지스터(125) 또는 실행 유닛(108) 내에 저장하기에 바람직하지 않은 포맷(format) 또는 형태로 저장될 수 있을 것이다. 이러한 실시 예에 있어서, 로드/저장 유닛(106) 또는 실행 유닛(108)은, 이하에서 설명될 바와 같이, 명령들을 로드 또는 저장하는 동안에 해당 데이터를 다시 포맷(reformat)하거나 치환(transpose)할 것이다.
도시된 실시 예에 있어서, 프로세서(101)는 포르세서 또는 실행 유닛(108)을 포함할 것이다. 다양한 실시 예들에 있어서, 프로세서 또는 실행 유닛(108)은 하나 또는 그 이상의 레지스터들(125) 및 하나 또는 그 이상의 실행 또는 연산 유닛들 또는 서브-유닛들(미도시)을 포함할 것이다. 예를 들어, 몇몇의 실행 유닛(108)은, 이하의 도 3a에서 설명될 바와 같이, 복잡한 명령을 가지고 해당 명령을 복수의 보다 작은 마이크로 또는 서브-명령들(micro or sub-instructions)로 분할 명령 또는 서브-분할 명령 디코드 서브-유닛들(instruction or sub-divide instruction decode sub-units)을 포함할 수 있을 정도로 복잡할 수 있다. 이와 유사하게, 다양한 실시 예들에 있어서, 로드/저장 유닛(106)은 도 3b에서 설명될 바와 같이 명령 디코드 서브-유닛(instruction decode sub-unit)(미도시)을 포함할 수 있을 것이다.
몇몇의 실시 예들에 있어서, 실행 유닛(108)은 실행 유닛(108)에 의하여 처리된 데이터를 저장하는 로드 (및/또는 저장) 큐(queue)를 포함할 것이다. 예를 들어, SIMD 명령들에 있어서, (싱글 명령 싱글 데이터(single instruction single data; SISD)에 비하여) 대량의 데이터가 레지스터들(125)의 엔트리(entry)를 위하여 또는 실행 유닛(108)에 의하여 처리되기 위하여 로드 큐(load queue)에 저장될 것이다.
도 2a는 본 발명의 기술적 사상의 실시 예에 따른 메모리 시스템(200)의 일 예를 보여주는 도면이다. 일 실시 예에 있어서, 메모리 시스템(200)은 (a, b, c, d, e, f, g, h, i, j, k, l, m, n, p 등의 문자로 도시된 바와 같이) 데이터(202)의 스트림(stream) 또는 그룹(group)을 포함할 것이다.
다양한 실시 예들에 있어서, 명령 세트 아키텍처(instruction set architecture) 또는 컴퓨터 아키텍처는 데이터(202)의 블록 또는 세트를 메모리로부터 로드하고, 이 데이터를 치환 또는 재-포맷하고, 치환된 데이터를 레지스터들의 세트에 저장 또는 로드하는 하나 또는 그 이상의 명령(204)을 지원할 것이다. 이와 유사하게, 이러한 명령 세트는 레지스트터들의 세트로부터 데이터를 읽고 해당 데이터를 치환하고 치환된 데이터를 메모리에 저장하는 반대 기능을 수행하는 명령들의 세트(204)를 지원할 수도 있다.
다양한 실시 예들에 있어서, 이러한 명령들(204)은 메모리가 AOS 포맷(array of structures format) 내에 정보를 가지고 있으나 SIMD 머신(machine) 또는 실행 유닛이 SOA 포맷(structures-of-arrays format)의 데이터를 요구하는 비디오(video) 또는 오디오 처리(audio processing)에 사용될 수 있을 것이다. 이와 같이, 로드 또는 명령의 저장 동안에 재-포맷(re-formatting) 또는 데이터(202) 부분들의 치환(transposition)이 요구될 것이다.
다양한 실시 예들에 있어서, 명령들의 세트(204)는 다양한 크기의 어레이 또는 벡터(예를 들어, 2-요소 어레이(2-element array), 3-요소 어레이, 4-요소 어레이 등)를 지원하는 명령을 포함할 것이다. 이와 유사하게, 각 요소가 8-비트, 16-비트, 32-비트, 64-비트와 같은 다양한 크기 또는 숫자의 비트인 데이터를 지원하는 명령을 포함할 것이다. 다양한 실시 예들에 있어서, 이러한 비트-너비(bit-widths)는 각각 1 바이트(byte), 1 하프-워드(harf-word), 1 워드(word), 1 더블 워드(double word) 등과 같이 정의될 수 있다. 한편, 상술한 설명은 단지 하나의 실시 예에 불과하며, 본 발명의 기술적 사상은 이에 한정되지 않음이 이해될 것이다.
도시된 실시 예에 있어서, 명령들(204)은 요소 당 1 16-비트 하프 워드의 4-요소 벡터 로드(4-element vector load of 1 16-bit half word per element: VLD4.h)와 요소 당 1 하프 워드의 4-요소 벡터 저장(4-element vector store of 1 half word per element; VST4.h)에 의하여 표현된다. 다만, 이는 하나의 실시 예에 불과하며, 본 발명의 기술적 사상은 이에 한정되지 않음이 이해될 것이다.
도시된 실시 예에 있어서, VLD4.h 명령이 수행될 때, 데이터(202)는 4 레지스터들(d0, d1, d2, d3)(206) 내에 놓여진다. 앞서 설명된 바와 같이, 데이터(202)는 레지스터(206)의 포맷 요구(formatting requirements)을 이행하기 위하여 치환(transpose) 된다.
도시된 실시 예에 있어서, VLD4.h 명령을 수행할 때, 데이터(202)의 첫 번째 16 비트가 제 1 레지스터(d0)에 놓여지며, 데이터(202)의 두 번째 16 비트가 제 2 레지스터(d1)에 놓여진다. 이러한 실시 예에 있어서, 레지스터(d0)는 "miea" 값을 포함한다. 레지스터(d1)는 "njfb"를 포함하며, 레지스터(d2)는 "okgc"를 포함하고, 레지스터(d3)는 "plhd" 값을 포함한다. 반대로, 명령(VST4.w)이 수행될 때, 레지스터(206)의 값은 반대로 치환되거나 재배열되고 데이터(202)("p-a"의 순서)는 메모리에 기입된다.
도 2b는 본 발명의 기술적 사상의 실시 예에 따른 메모리 시스템(250)의 일 예를 보여주는 도면이다. 도시된 실시 예에 있어서, 조금 덜 추상적인 예로, 픽셀을 위한 8-비트 컬러 값의 데이터가 주어진다. 픽셀 데이터(pixel data)(252)는 메인 메모리(또는 그것의 캐쉬 버전) 내에 저장되나, 처리 동작을 위하여 SIMD 실행 유닛의 레지스터로 로드 된다. 한편, 도시된 실시 예는 단지 일 실시 예에 불과하며, 본 발명의 기술적 사상은 이에 한정되지 않음이 이해될 것이다.
도시된 실시 예에 있어서, 데이터(252)는 컬러 당 8-비트 데이터 또는 픽셀을 갖는 Red-Green-Blue(RGB) 픽셀 값 어레이를 포함한다. 데이터(252)는 메모리 위치들(memory locations)(m0, m1, m2) 내에 저장된다. 도시된 바와 같이, Red(R), Green(G), Blue(B)는 각각 (예를 들어, 컬러가 아닌 비트 단위로) 서로 나란히 저장된다.
도시된 실시 예에 있어서, VLD3.8 명령(각각 8 비트의 3 요소를 로드)이 수행될 때, 데이터(252)는 세 개의 레지스터들(d0, d1, d2)(254)로 치환된다. 도시된 바와 같이, 레지스터는 소정 컬러를 위한 비트 값을 저장하며(예를 들어, d0은 Red, d1은 Green을 저장함), 이에 데이터 어레이는 더 이상 비트가 아닌 컬러 단위로 저장된다.
이와 유사하게, 데이터가 실행 레지스터들(254)(d0, d1, d2)로부터 메인 메모리(252)(m0, m1, m2)로 저장될 때, 데이터는, 예를 들어 컬러 대신 비트 단위인 것과 같이, 본래의 포맷으로 재-치환되거나 또는 재-배열된다.
도 3a는 전통적인 시스템에 따른 일련의 명령들(300)의 일 예를 보여주는 도면이다. 다양한 실시 예들에 있어서, 프로세서(예를 들어, 도 1의 프로세서(101) 등)는 보다 작은 일련의 마이크로 또는 서브-명령들로서 복잡한 명령들(예를 들어, VLD4.w 등)을 수행한다. 도 3a에서는 어떻게 종래의 시스템이 로드-치환 명령(load-transpose instruction)(302)(예를 들어, VLD4.h)을 수행하여 왔는지가 설명된다. 도시된 실시 예는 요소(element)의 크기가 16-비트 하프 워드(16-bit half word)인 치환 명령을 보여주나, 로드는 *.d이며 이는 목적지 레지스터 너비(destination register width)이기 때문이다.
도시된 실시 예에 있어서, 로드-치환 명령(302)은 어떤 목적지가 등록(register)되어 사용되는지(예를 들어, 레지스터들(d0, d1, d2, d3))를 상세히 보여주는 레지스터 섹션(register section)(304)과 어떤 메모리 위치에 데이터가 저장되는지(예를 들어, 메모리 위치 0-31)를 상세히 보여주는 데이터 섹션(306)을 포함한다.
전통적으로, 명령(302)을 수행하기 위하여, 프로세서는 일련의 서브-명령들(312)을 발생한다. 전통적으로, 서브-명령들은 프로세서로 하여금 버퍼 또는 임시 레지스터들(322) 내의 액세스된 데이터의 서브-부분들(324)에 로드 하게 하고, 버퍼 또는 임시 레지스터(322)로부터 읽은 데이터를 가지고 실행 유닛(예를 들어, 플로팅-포인트 유닛의 대부분에 공통인 셔플 유닛(shuffle unit) 등)의 실행 부분을 경유하여 치환을 수행하게 하고, 이 후 치환된 데이터를 목적지 아키텍처 레지스터(destination architectural register)(304)로 기입하게 한다. 도시된 실시 예에 있어서, 이는 8개의 서브-명령들(312)을 경유하여 수행되며, 이 중 4개의 서브-명령들(314)은 데이터 서브-부분들(324)을 임시 레지스터들(322)에 로드하고, 4 개의 서브-명령들(316)은 데이터(306)를 치환하고 치환된 결과를 아키텍처 레지스터(304)에 로드한다.
이러한 실시 예에 있어서, 이러한 서브-명령들(312)은 데이터가 리드-인(read-in)되거나 로드 되고, 그 후 플로팅 포인트 유닛(FPU)의 셔플 유닛(또는 다른 서브-유닛)이 치환의 목적으로 이용됨에 따라 플로팅 포인트 유닛(floating point unit; FPU)이 8 클럭 사이클(clock cycles) 동안에 이용되는 결과를 야기할 것이다. 이러한 4 사이클 동안에 다른 동작 또는 명령은 로드-치환 명령(load-transpose instruction)(302)에 의하여 치환 유닛이 사용됨에 따라, 치환 유닛(예를 들어, 셔플 유닛)을 사용하지 않을 것이다. 또한, 이는 서브-명령들(312)이 4개의 목적지 레지스터들(304)을 이용하여 4개의 임시 레지스터들(322)을 더함에 따라, 플로팅 포인트 유닛(또는 다른 유닛)의 8개의 레지스터들은 데이터(306)의 두 개의 복사들을 저장하는데 이용되는 결과를 야기할 것이다.
도 3b는 본 발명의 기술적 사상의 실시 예에 따른 일련의 명령들(301)의 일 실시 예를 보여주는 도면이다. 다시 로드-치환 명령(load-transpose instruction)(302)이 설명을 위하여 사용된다. 명령(302)은 목적지 레지스터들(304)을 타겟(target)으로 하고, 메모리 위치(306)에 저장된 데이터를 이용한다.
그러나, 도시된 실시 예에 있어서, 프로세서는 도시된 기술적 사상을 이용할 것이며 로드-치환 명령(302)을 전면적으로 또는 최소한 부분적으로 사용하는 회로(예를 들어, 도 4의 회로(400) 등)를 포함할 것이다. 몇몇의 실시 예들에 있어서, 이는 실행 유닛의 도움 없이 야기될 것이다. 예를 들어, 도 3a의 명령들의 세트(300)와 달리, 플로팅 포인트 유닛(FPU)은 로드-치환 명령을 수행하기 위하여 많은 사이클들(예를 들어, 8 사이클들 등)을 사용할 필요가 없을 것이다. 다만, 이는 단지 하나의 실시 예에 불과하며, 본 발명의 기술적 사상은 이에 한정되지 않음이 이해될 것이다.
도시된 실시 예에 있어서, 명령(302)은 4 개의 서브-명령들(352)(fpld.h.transpose)을 야기할 것이다. 이러한 실시 예에 있어서, 각 명령은 치환된 데이터가 저장될 목적지 레지스터(예를 들어, d0, d1 등)를 가리키는 태그(354)를 포함하거나 이와 연관될 것이다. 또한, 보다 큰 데이터(306)(예를 들어, 32-비트 데이터)는 복수의 서브-부분들(sub-portions, 예를 들어, 8-비트의 4 서브-부분들)(356)을 경유하여 버퍼로 복사될 것이다. 이러한 실시 예에 있어서, 함께 취하여진 4개의 서브-명령들은 4개의 목적지 레지스터들(304) 및 본래의 명령(302) 내에 본래 존재하던 데이터(306)의 모든 비트들에 대하여 자세히 알려주는 정보를 포함하거나 가리킬 것이다.
이러한 실시 예에 있어서, (도 4에서 설명되는 바와 같이) 전면적으로 또는 적어도 부분적으로 이를 채용하는 하드웨어 또는 논리 장치들을 이용하여, 로드-치환 명령(302)은 실행 유닛(예를 들어, 플로팅 포인트 유닛의 셔플 유닛 등)을 점유하지 않고 그리고 임시적인 레지스터들을 사용하지 않고 수행될 것이다. (따라서 이러한 레지스터들이 다른 명령들에 의하여 사용되는 것을 방지할 수 있다) 다양한 실시 예들에 있어서, 로드-치환 명령(302)은 전통적인 기술과 비교하여 보다 적은 클럭 사이클 동안에 수행될 것이다. (예를 들어, 서브-명령들(352)은 4 사이클 동안 수행되는데 반하여, 서브-명령들(312)은 8 사이클들 동안 수행될 것이다.) 다만, 이는 단지 일 실시 예에 불과하며, 본 발명의 기술적 사상은 이에 한정되지 않음이 이해될 것이다.
도 4는 본 발명의 기술적 사상의 실시 예에 따른 시스템(400)의 일 실시 예를 보여주는 도면이다. 도시된 실시 예에 있어서, 데이터는 입력 신호 또는 버스를 통하여 제공된다. 다양한 실시 예들에 있어서, 입력 버스는 제공되거나 로드/저장 유닛(LSU)과 같은 입력 기능 유닛 블록(FUB) 또는 조합 논리 블록(CLB)(402)의 출력일 것이다. 도시된 실시 예에 있어서, 데이터는 출력 신호 또는 버스에 제공될 것이다. 이러한 실시 예에 있어서, 출력 버스는 플로팅-포인트 유닛(FPU), SIMD 유닛, 또는 다른 실행 유닛과 같은 출력 기능 유닛 블록 또는 조합 유닛 블록(406)의 입력이거나 또는 이에 제공될 것이다.
다양한 실시 예들에 있어서, 시스템(400)은 복수의 데이터 경로들(data paths)을 포함할 것이다. 본 설명에 있어서, "데이터 경로"는 버스 또는 신호 선로(예를 들어, 금속 와이어 등) 뿐만 아니라, 논리 게이트(예를 들어, AND 게이트, OR 게이트 등) 또는 회로들(예를 들어, 메모리들(memories), 응답기(repeaters) 등)과 같이 데이터를 하나의 기능 유닛 블록(FUB)으로부터 다른 기능 유닛 블록으로 전송하거나 동일한 기능 유닛 블록 내에서 데이터를 이동시키는 수단 및 경로를 포함한다. 다양한 실시 예들에 있어서, 도시된 데이터 경로들은 입력 기능 유닛 블록(402), 출력 기능 유닛 블록(406)에 포함되거나, 또는 이들의 조합에 포함된다.
도시된 실시 예에 있어서, 시스템(400)은 두 개의 데이터 경로들(491, 492)을 포함한다. 일 실시 예에 있어서, 제 1 데이터 경로(491)는 데이터 신호(404)를 로드/저장 유닛(LSU, 402)로부터 실행 유닛(406)으로 전송하거나 통신하는 연결(connection)을 포함할 것이다. 도시된 실시 예에 있어서, 제 1 데이터 경로(491)는 이 신호(404)를 치환 없이 전송할 것이다. 다양한 실시 예들에 있어서, 제 1 데이터 경로(491)는 데이터를 재-포맷(re-formatting)하는 것을 수반 하지 않는 로드 동작(예를 들어, 비-벡터 로드 명령(non-vector load instruction 등))을 위하여 사용될 것이다. 몇몇의 실시 예들에 있어서, 제 1 데이터 경로(491)는 로드/저장 유닛(402)과 다양한 실행 유닛들(406) 사이의 일반적인 로드 버스(load bus)로 고려될 수 있다. 다만, 상술한 설명은 예시적인 것이며, 본 발명의 기술적 사상은 이에 한정되지 않음이 이해될 것이다.
도시된 실시 예에 있어서, 시스템(400)은 제 2 데이터 경로(492)를 포함할 것이다. 다양한 실시 예들에 있어서, 제 2 데이터 경로(492)는 데이터 신호(404) 또는 그 안에 포함된 정보를 로드/저장 유닛(402)과 실행 유닛(406) 사이에서 통신하거나 전송하는데 시용될 것이다. 그러나, 제 2 데이터 경로(491)와 달리, 제 2 데이터 경로(492)는 데이터 신호(404)를 도중에 치환 또는 재-포맷 할 것이다. 이러한 실시 예에 있어서, 실행 유닛(406)에 의하여 수신된 신호는 치환되거나 재-포맷된 데이터 신호(418)일 것이다. 몇몇의 실시 예들에 있어서, 제 2 데이터 경로(492)는 치환 데이터 경로(transposing data path)라 칭해질 수 있으며, 반면에 제 1 데이터 경로(491)는 비-치환 데이터 경로(non-transposing data path)라 칭해질 수 있다.
도시된 실시 예에 있어서, 시스템(400) 및 보다 구체적인 제2 데이터 경로(492)는 하나 또는 그 이상의 스토리지 버퍼들(storage buffer, 410) 및 치환 유닛(transposition unit, 416)을 포함할 것이다. 다양한 실시 예들에 있어서, 스토리지 버퍼(410)는 데이터 신호(404) 또는 그것의 부분들을 임시적으로 저장할 것이다. 이러한 실시 예에 있어서, 만약 로드-치환 명령(예를 들어, VLD4.h 등) 또는 서브-명령(예를 들어, fpld.h.transpose 등)이 탐지된다면, 데이터 신호(404)는 스토리지 버퍼(410) 또는 그것의 부분에 로드 되거나 저장될 것이다. 몇몇의 실시 예들에 있어서, 이는 활성화 신호(enable signal, 411)의 사용과 연관될 것이다. 로드-치환 명령이 복수의 서브-명령들을 초래하는 다양한 실시 예들에 있어서, 데이터의 전체 세트가 스토리지 버퍼(410) 내에 있게 될 때까지, 스토리지 버퍼(410)는 데이터 신호(404)의 다양한 부분들을 여러 차례에 걸쳐 래치(latch)하거나 저장할 것이다. 이는 각 서브-명령이 전체 데이터(예를 들어, 256-비트)의 단지 일 부분(예를 들어, 64 비트 등)을 제공함으로써 야기될 것이다.
도시된 실시 예에 있어서, 치환 유닛(416)은 로드-치환 명령(load-transpose instruction)에 따라 스토리지 버퍼(410) 내에 저장된 데이터를 재배열(rearrange), 재-포맷(re-format), 또는 치환(transpose) 할 것이다. 예를 들어, 다양한 실시 예들에 있어서, 치환 유닛(416)은 도 2a 또는 도 2b에 도시된 것과 같거나 유사한 치환된 데이터를 발생할 것이다. 다만, 이는 단지 일 실시 예에 불과하며, 본 발명의 기술적 사상은 이에 한정되지 않음이 이해될 것이다. 다양한 실시 예들에 있어서, 일단 전체 데이터 세트가 스토리지 버퍼(410)에 저장되면, 치환 유닛(416)은 치환 또는 재-포맷을 수행할 것이다.
몇몇의 실시 예들에 있어서, 치환 유닛(416)은 (예를 들어, FPU의 셔플 유닛 등과 같이) 다양한 실행 유닛들(406)의 선재 유닛(preexisting unit) 또는 서브-유닛(sub-unit)과 유사할 것이다. 그러나, 다양한 실시 예들에 있어서, 치환 유닛(416)은 수학적 연산이나 명령의 수행을 수행하는 실행 유닛에 의하여 사용되지 않는 전용 기능 유닛 블록(dedicated FUB) 또는 전용 조합 유닛 블록(dedicated CLB)일 것이다. 더욱이, 치환 유닛(416)은 소정의 목적 또는 기능을 위하여 사용되기 때문에, 유닛의 논리 및 회로는 그러한 역할에 최적화될 것이다. 이러한 실시 예에 있어서, 치환 유닛(416)은 그것이 대부분 와이어들 또는 멀티플렉서들(multiplexers, MUXs)을 포함함에 따라 상대적으로 작을 것이다. 다만, 상술한 설명은 단지 하나의 실시 예에 불과하며, 본 발명의 기술적 사상은 이에 한정되지 않을 것이다.
다른 실시 예에 있어서, 제 2 데이터 경로(492) 또는 추가적인 데이터 경로(미도시)는 하나 이상의 스토리지 버퍼(예를 들어, 스토리지 버퍼(410n)과 활성화 신호(411n))를 포함할 것이다. 이러한 실시 예에 있어서, 제 2 데이터 경로에 의하여 수행되는 동작(예를 들어, 임시 저장 및 치환 등)은 파이프라인(pipeline)될 것이다. 이러한 실시 예에 있어서, 만약 제 1 스토리지 버퍼(410)가 가득 찬다면(즉, full 상태라면), 제 2 스토리지 버퍼(410n)가 제 2 데이터 세트를 받아들이거나 저장하는 동안에, 치환 유닛(416)은 제 1 데이터 세트를 처리하거나 치환할 것이다. 이러한 실시 예에 있어서, 제 2 데이터 경로(492)의 처리량은 증가할 것이다.
도시된 실시 예에 있어서, 멀티플렉서(412)는 어느 데이터 세트가 처리를 위하여 치환 유닛(416)에 제공될 것인지의 여부를 결정할 것이다. 다양한 실시 예들에 있어서, 이는 활성화 신호(enable signal) 또는 버퍼 선택 신호(buffer selection signal)의 사용을 포함할 것이다. 다른 실시 예에 있어서, 두 개 이상의 스토리지 버퍼들(410)이 사용될 것이다. 더욱이, 또 다른 실시 예에 있어서, 복수의 치환 유닛들(416)은 동일할 것이다. 다른 실시 예에 있어서, 하나 또는 그 이상의 치환 유닛들(416)은 서로 다른 재-포맷 동작을 수행할 것이다.
도시된 실시 예에 있어서, 치환 유닛(416)은 치환된 데이터 신호(418)을 생산하거나 발생할 것이다. 다양한 실시 예들에 있어서, 이는 제 1 데이터 경로(491)와 재-결합(re-join)할 것이다. 다른 실시 예에 있어서, 치환된 데이터 신호(418)는 제 1 데이터 경로(491)로 분리된 채로 유지될 것이다. 도시된 실시 예에 있어서, 중재 유닛(arbitration unit, 420)(멀티플렉서로 도시됨)은 언제 실행 유닛(406)이 입력으로 치환되지 않은 데이터(404)를 수신하고 언제 실행 유닛(406)이 입력으로 치환된 데이터(418)를 수신하는지를 결정할 것이다. 다양한 실시 예들에 있어서, 이는 중재 신호(421)에 의하여 제어될 것이다.
몇몇의 실시 예들에 있어서, 로드/저장 유닛(LSU, 402)은 (예를 들어, 사이클 카운팅 등을 통하여) 제 2 데이터 경로(492)를 통하여 공급된 데이터가 치환 유닛(416)에 의하여 언제 전부 처리되고 실행 유닛(406)에 의한 연산이 언제 가능하게 되는지를 알 수 있을 것이다. 이러한 실시 예에 있어서, 로드/저장 유닛(402)은 중재 신호(421)로 하여금 제 1 데이터 경로(491)에서 제 2 데이터 경로(492)로 실행 유닛(406)에 대한 입력을 스위치(switch)하도록 야기할 것이다. 이러한 실시 예에 있어서, 치환된 데이터 신호(418)는 실행 유닛(406)의 다양한 레지스터들 내에 저장될 것이다.
도 3b에 도시된 바와 같이, 각 서브-명령은 실행 유닛(406)의 어느 레지스터(예를 들어, d0, d1 등)에 치환된 데이터(418)의 각 부분이 저장되는지를 표시하는 태그 또는 표시를 포함할 것이다. 다양한 실시 예들에 있어서, 각 서브-명령은 치환 유닛(416)으로부터 각각의 실행 유닛(406)의 레지스터에의 쓰기 동작이 이루어지도록 야기할 것이다. 몇몇의 실시 예들에 있어서, 이러한 쓰기 동작은 연속하여 직렬적으로 발생할 것이다. 다른 실시 예에 있어서, 이러한 쓰기 동작은 병렬적으로 발생할 것이다. 다만 상기의 내용은 단지 하나의 실시 예에 불과하며, 본 발명의 기술적 사상은 이에 한정되지 않음이 이해될 것이다.
비록 하나의 실행 유닛(406)만이 도시되어 있으나, 복수의 실행 유닛들(406)이 존재할 수 있음이 이해될 것이다. 이러한 실시 예에 있어서, 로드 버스 또는 중재 유닛(420)은 치환된 데이터 신호(418)를 적당한 실행 유닛(406)에 분배(route)할 것이다. 몇몇의 실시 예들에 있어서, 소정의 명령 또는 서브-명령(예를 들어, FPU의 구체적 명령 등)의 결과로서, 또는 목적지 또는 타겟 레지스터(예를 들어, d0, d1, d2 등)로서, 또는 다른 요인들에 의하여 발생할 것이다. 다만, 상술한 설명은 예시적인 것이며, 본 발명의 기술적 사상은 이에 한정되지 않음이 이해될 것이다.
더욱이, 다양한 실시 예들에 있어서, 제 2 데이터 경로(492)는 제 2 데이터 경로(492)가 사용되지 않을 때에 제 2 데이터 경로(492)의 전부 또는 일부를 파워-다운(power-down)하거나 로우 파워 상태 또는 모두(low power state/mode)에 진입하도록 하는 다양한 로우-파워(low-power) 구조들을 포함할 것이다. 몇몇의 실시 예들에 있어서, 이는 동기화 논리 기능들 또는 제 2 데이터 경로(492)의 게이트들을 제어하는데 사용되는 클럭 신호를 정지하게 하는 것을 포함할 것이다. 다만, 상술한 설명은 예시적이 것이며, 본 발명의 기술적 사상은 이에 한정되지 않음이 이해될 것이다.
도 5a는 종래의 시스템에 따른 명령들의 시리즈(550)의 일 예를 보여주는 도면이다. 다양한 실시 예들에 있어서, 프로세서(예를 들어, 도 1의 프로세서(101) 등)는 보다 작은 마이크로 또는 서브-명령들의 시리즈로서 복잡한 명령(예를 들어, VST4.w 등)을 수행할 것이다. 도 5a는 전통적인 시스템이 어떻게 저장-치환 명령(예를 들어, VST4.h)을 수행하는지를 보여준다. 도시된 실시 예에 있어서, 실시 예는 요소 사이즈(element size)가 16-비트 하프 워드(16-bit half word)이며, 그러나 목적지 레지스터 너비인 로드(load)가 *.d인 치환 명령(transpose instruction)을 보여준다.
도시된 실시 예에 있어서, 저장-치환 명령(552)은 어느 소스 레지스터들(source registers)이 사용되는지를 알려주는 레지스터 섹션(556) 및 어떤 메모리 위치(예를 들어, 메모리 위치(0-31))에 데이터가 저장되는지의 여부를 알려주는 데이터 섹션(554)을 포함할 것이다.
전통적으로, 명령(552)을 수행하기 위하여, 프로세서는 서브-명령들(562)의 시리즈를 발생하였다. 전통적으로 서브-명령들은 프로세서로 하여금 실행 유닛에 존재하는 부분(예를 들어, 대부분의 플로팅-포인트 유닛에 공통적으로 존재하는 셔플 유닛 등)을 통하여 소스 레지스터들(556)로부터 독출되고 버퍼/임시 레지스터들(558)에 저장된 데이터를 이용하여 치환 동작을 수행하고, 그 후 치환된 데이터를 목적지 메모리(destination memory)(554)에 기입하였다. 도시된 실시 예에 있어서, 이는 8개의 서브-명령들(562)을 통하여 수행되었으며, 8개의 서브-명령들(562)은 데이터(556)를 치환하고 치환된 결과를 임시 레지스터들(558)로 로드하는 4개의 서브-명령들(566)과 임시 레지스터들(558)로부터 데이터 서브-부분들(554)을 저장하는 4개의 서브-명령들(564)을 포함한다.
상술한 바와 같이, 이러한 실시 예에 있어서, 데이터가 독출(read-in)되거나 로드되고 이후 플로팅 포인트 유닛(FPU)의 셔플 유닛(또는 다른 서브-유닛)이 치환의 용도로 사용됨에 따라, 이러한 서브-명령들(562)은 플로팅 포인트 유닛(floating point unit, FPU)이 8 클럭 사이클 동안 이용되도록 한다. 이러한 사이클들 중 4 사이클 동안에, 저장-치환 명령(store-transpose instruction)(552)에 의하여 사용되기 때문에, 다른 동작 또는 명령은 치환 유닛을 사용하지 않을 것이다. 또한, 이는, 서브-명령들(562)이 4개의 소스 레지스터들(556)을 사용하여 4개의 임시 레지스터들(558)에 더함에 따라, 플로팅 포인트 유닛(또는 다른 유닛)의 8개의 레지스터들이 데이터(556)의 두 개의 복사를 저장하는데 사용되도록 할 것이다.
도 5b는 본 발명의 기술적 사상의 실시 예에 따른 명령들의 시리즈(551)의 일 예를 보여주는 도면이다. 설명의 목적으로, 저장-치환 명령(552)이 다시 한번 도시되어 있다. 명령(552)은 소스 레지스터들(556)을 사용하며 데이터를 메모리 위치(554)에 저장한다.
그러나, 도시된 실시 예에 있어서, 프로세서는 본 발명의 기술적 사상을 사용하며, 저장-치환 명령(552)을 수행하기 위한 전용의 또는 적어도 부분적으로 전용인 하드웨어 또는 논리 장치(예를 들어, 도 5c의 회로 등)를 포함할 것이다. 몇몇의 실시 예에 있어서, 이는 실행 유닛의 도움 없이도 수행될 것이다. 예를 들어, 도 5a의 명령들의 세트(550)와 달리, 플로팅 포인트 유닛(FPU)은 저장-치환 명령을 수행하기 위하여 복수의 사이클들(예를 들어, 8 사이클 등)을 사용할 필요가 없다. 다만, 이는 일 실시 예에 불과하며, 본 발명의 기술적 사상은 이에 한정되지 않음이 이해될 것이다.
도시된 실시 예에 있어서, 명령(552)은 플로팅 포인트 유닛(FPU)의 각도로부터의 하나의 싱글 서브-명령들(single sub-instructions)(572)(fpaostosoa.h)과 로드-저장 유닛(LSU)의 각도로부터의 4개의 서브-명령들(sub-instructions)(574)(fpst.d)를 초래할 것이다. 이와 유사하게, 이러한 실시 예에 있어서, 플로팅 포인트 유닛은 그것의 서브-명령들(572)을 완료하고 다른 동작들로 옮겨질 것이며, 반면에 로드-저장 유닛(LSU)은 여전히 그것의 서브-명령들(574)을 수행하거나 또는 전용 치환 유닛(예를 들어, 도 5c의 회로(500) 등) 내의 지연으로 인하여 그것의 서브-명령들(574)의 수행을 시작하지 못할 것이다.
도시된 실시 예에 있어서, 플로팅 포인트 유닛(FPU)은 그것의 서브-명령(572)을 수행하고 소스 레지스터들(556)의 내용을 메모리 위치(554) 내의 최후 저장을 위하여 저장 버스(store bus) 또는 데이터 경로(data path)에 놓아둔다. 도 5c와 관련하여 이하에서 설명될 바와 같이, 치환 유닛 또는 보다 일반적으로 전용 치환 데이터 경로는 소스 레지스터들(556)에 저장되기 이전에 데이터의 치환을 수행한다. 치환이 완료되면, 치환 유닛(또는 다른 회로)은 로드/저장 유닛(LSU) 서브-명령들(574)을 발생하거나 그 발생을 야기한다. 이러한 로드/저장 유닛 서브-명령들(574)은 메모리 위치(554)에 놓이기 위하여 4개의 치환 유닛 레지스터들(599)에 임시로 저장된 현재의 치환된 데이터를 야기한다. 다만, 상술한 내용은 하나의 실시 예에 불과하며, 본 발명의 기술적 사상은 이에 한정되지 않음이 이해될 것이다.
도 5c는 본 발명의 기술적 사상의 실시 예에 따른 시스템(500)의 일 실시 예를 보여주는 블록도이다. 로드-치환 파이프라인(load-transpose pipeline) 또는 다른 데이터 경로를 설명한 도 4와 달리, 도 5c는 저장-치환 파이프라인(store-transpose pipeline) 또는 다른 데이터 경로를 일 실시 예로 설명한다. 이러한 실시 예에 있어서, 일단 데이터 세트가 실행 유닛(506)(예를 들어, 플로팅 포인트 유닛(FPU) 등)에 의하여 처리되거나 발생되면, 데이터는 메모리 내에 다시 기입되거나 저장될 것이다. 이는 로드/저장 유닛(LSU)(02)에 의하여 수행될 것이다. 다양한 실시 예들에 있어서, 시스템(500)은 로드/저장 유닛(502) 또는 저장 버스에 포함될 것이다.
앞서 설명된 바와 같이, 저장-치환 명령은 하나 또는 그 이상의 서브-명령들로 전환되거나 분할될 것이다. 예를 들어, 전통적으로, 명령(VST4.h[mem],{d0, d1, d2, d3})은 복수의 임시 레지스터들을 사용하는 서브-명령들의 시리즈를 야기하며, 이 후 치환된 데이터(또는 치환되지 않은 데이터)를 로드/저장 유닛(502)에 제공하기 전에 치환을 위한 셔플 서브-유닛(shuffle sub-unit)을 사용할 것이다.
그러나, 도시된 실시 예에 이어서, 도 5c의 전용 제 3 데이터 경로(592)를 이용하여, 명령(VST4.h[mem],{d0, d1, d2, d3})은 싱글 실행 유닛의 서브 명령(예를 들어, fpaostosoa.h[mem],{d0, d1, d2, d3})로 하여금 로드/저장 유닛(502)에 주어지기 전에 레지스터들(d0, d1, d2, d3)의 내용을 처리하기 위하여 제 2 데이터 경로(592)에 놓이도록 할 것이다. 이러한 실시 예에 있어서, 앞서 설명된 바와 유사하게, 실행 유닛(506)은 프리-업(free-up) 되거나 또는 치환 동작 또는 임시 저장을 위하여 점유되지 않을 것이다.
앞서 설명된 바와 같이, 서브-명령 또는 다른 결정 요소(determining factor)에 의존하여, 데이터 신호(504)는 실행 유닛(506)으로부터 출력되어 제 1 데이터 경로(591) 또는 제 2 데이터 경로(592) 중 어느 하나에 놓여질 것이다.
다양한 실시 예들에 있어서, 제 2 데이터 경로(592)는 데이터 신호(504) 또는 그것의 일부분을 임시적으로 저장하는 스토리지 버퍼(510)를 포함할 것이다. 도시된 실시 예에 있어서, 스토리지 버퍼(510)의 저장 동작은 제어 신호(511)에 의하여 제어될 것이다.
몇몇의 실시 예에 있어서, 일단 스토리지 버퍼(510)가 데이터(504)에 의하여 채워지면, 치환 유닛(516)은 데이터를 치환하거나 재-포맷할 것이다. 이러한 실시 예에 있어서, 치환 유닛(516)은 치환된 데이터(518)를 발생할 것이다.
다양한 실시 예들에 있어서, 제 2 데이터 경로(592) 또는 시스템(500)은 로드/저장 유닛(502)이 제 1 데이터 경로(591) 또는 제 2 데이터 경로(592)로부터의 입력 중 어느 하나를 수신하는지의 여부를 지시하는 중재 유닛(520)을 포함할 것이다. 이러한 실시 예에 있어서, 중재 유닛(520)은 중재 신호(521)에 의하여 제어될 것이다.
다양한 실시 예들에 있어서, 제 1 데이터 경로(591)를 사용하는 기초(basic) 또는 비-치환 저장 명령(non-transposition store instruction)은 모든 대응하는 실행 유닛(506) 서브-명령을 위한 싱글 로드/저장 유닛(502) 서브 명령(예를 들어, fpst.d[data],[memory address] 등)을 초래할 것이다. 이러한 실시 예에 있어서, 모든 실행 유닛 저장 옵 또는 서브-명령(execution unit store op or sub-instruction) 및 모든 대응하는 로드/저장 유닛 저장 옵 또는 서브-명령(LSU store op or sub-instruction)은 공통의 태그를 통하여 연관되거나 관련될 것이다.
그러나, 제 2 데이터 경로(592)를 사용하는 치환 저장 명령의 경우에, 싱글 실행 유닛 저장 옵 또는 서브-명령(예를 들어, fpaostosoa.h)은 복수의 로드/저장 유닛 저장 옵 또는 서브-명령(예를 들어, fpst.d)을 초래할 것이다. 예를 들어, 만약 실행 유닛이 4개의 레지스터들(d0, d1 등)로부터 데이터를 출력한다면, 4 개의 로드/저장 유닛 저장 옵 또는 서브-명령들이 생성될 것이다.
일 실시 예에 있어서, 싱글 실행 유닛 저장 옵 또는 서브-명령을 4개의 로드/저장 유닛 저장 옵 또는 서브-명령과 연관시키기 위하여, 명령의 리오더 버퍼(reorder buffer; ROB) 식별기(identifier; ID)가 그것의 공통 태그 또는 기초로 사용될 것이다. 이러한 실시 예에 있어서, 만약 제 1 로드/저장 유닛 옵(first LSU op)의 ROB ID(예를 들어 fpst.d)가 실행 유닛 옵(예를 들어, fpaostosoa.h)에 의하여 알려져 있다면 (또는 실행 유닛의 ROB ID로 동일하다면), 남아있는 연관된 로드/저장 유닛 옵스(LSU ops)의 ROB ID들은 제 1 ROB ID로부터 발생할 것이다. 다양한 실시 예들에 있어서, 이는 상기 제 1 ROB ID의 수적 증가(numerical increment)로써 발생할 것이다. 이러한 실시 예에 있어서, 이러한 태그의 발생은 그것이 4개의 저장 패킷(store packets) 또는 치환된 데이터(518)의 저장 부분(store portions)을 발생함에 따라 치환 유닛(516)에 의하여 수행될 것이다. 다만, 상기의 설명은 예시적인 것에 불과하며, 본 발명의 기술적 사상은 이에 한정되지 않음이 이해될 것이다.
다양한 실시 예들에 있어서, 만약 실행 유닛(506)이 원하는 숫자의 레지스터들로부터의 읽기 동작을 지원하지 않는다면(예를 들어, 단지 2개의 레지시터들에 대하여 동시에 읽기 동작이 수행될 수 있지만, 명령에 의하여 4개의 레지스터들이 필요한 경우 등), 추가적인 실행 옵스 또는 서브-명령들(additional execution ops or sub-instructions) 발생될 것이다. 이러한 실시 예에 있어서, 복수이 서브-명령들이 스토리지 버터(511)를 채우거나 로드하기 위하여 사용될 것이다. 다시, 다양한 실시 예들에 있어서, 일단 스토리지 버퍼(511)가 채워지거나, 또는 명령이 허가하는 것 만큼 채워진다면, 치환 유닛(516)은 그것의 내용을 처리할 것이다.
다양한 실시 예들에 있어서, 제 2 데이터 경로(592)는, 앞서 설명된 바와 같이, 복수의 스토리지 버퍼들(510) 및/또는 치환 유닛들(516)을 포함할 것이다. 몇몇의 실시 예들에 있어서, 중재 유닛(520)은 저장 버스 또는 데이터 경로들(591, 592)로의 실행 유닛(506)의 액세스를 가능하게 하고, 또는 언급된 다른 방법은 데이터 경로(591) 및/또는 데이터 경로(592)를 포함하는 데이터 또는 저장 버스 실행 유닛(506)의 액세스를 가능하게 할 것이다. 이러한 실시 예에 있어서, 저장 버스(store bus)는 복수의 실행 유닛들(506) 사이에서 공유될 것이다. 다만, 상술한 설명은 단지 하나의 실시 예에 불과하며, 본 발명의 기술적 사상은 이에 한정되지 않음이 이해될 것이다.
도 6은 본 발명의 기술적 사상의 실시 예에 따른 기술(600)의 일 실시 예를 보여주는 순서도이다. 다양한 실시 예들에 있어서, 기술(technique, 600)은 도 1, 도 4 또는 도 5와 같은 시스템에 의하여 사용되거나 생성될 것이다. 더욱이, 기술(600)의 부분들은 도 3b와 같은 명령들 또는 서브-명령들에 의하여 사용되거나 생산될 것이며, 반면에 기술(600)의 부분들은 도 2a 및/또는 도 2b와 같은 데이터 구조에 기초하여 사용되거나 이를 생성할 것이다. 한편, 상술한 설명은 단지 하나의 실시 예에 불과하며, 본 발명의 기술적 사상은 이에 한정되지 않음이 이해될 것이다. 또한, 설명되는 기술(600)의 각 단계의 순서 또는 숫자는 본 발명의 기술적 사상을 한정하지 않음이 이해될 것이다.
블록(602)에 도시된 바와 같이, 일 실시 예로, 제 1 포맷 내의 데이터가 앞서 설명된 바와 같이 제 1 기능 유닛 블록(FUB)에 의하여 제공될 것이다. 일 실시 예로, 제 1 기능 유닛 블록은, 앞서 설명된 바와 같이, 플로팅 포인트 유닛(FPU)을 포함할 것이다. 다른 실시 예로, 제 1 기능 유닛 블록은, 앞서 설명된 바와 같이, 로드/저장 유닛(LSU)을 포함할 것이다. 다양한 실시 예들에 있어서, 본 블록에 의하여 설명되는 하나 또는 그 이상의 동작들은, 앞서 설명된 바와 같이, 도 1, 4, 5c, 7의 장치 또는 시스템, 도 1의 기능 유닛 블록들(106, 108), 도 4의 기능 유닛 블록들(402, 406), 도 5c의 기능 유닛 블록들(506, 502)에 의하여 수행될 것이다.
블록(604)에 도시된 바와 같이, 일 실시 예로, 앞서 설명된 바와 같이, 제 2 기능 유닛 블록에 의하여 수신되기 전에, 데이터가 제 2 포맷으로 변환되는지의 여부가 판단될 것이다. 일 실시 예로, 제 1 기능 유닛 블록(FUB)은, 앞서 설명된 바와 같이, 플로팅 포인트 유닛(FPU)을 포함할 것이다. 다른 실시 예에 있어서, 제 1 기능 유닛 블록은, 앞서 설명된 바와 같이, 로드/저장 유닛(LSU)을 포함할 것이다. 다양한 실시 예들에 있어서, 이러한 결정은, 앞서 설명된 바와 같이, 장치에 의하여 수행되는 명령(예를 들어, VLD4.h, VST4.h 등)에 기초할 것이다. 다양한 실시 예들에 있어서, 본 블록에 의하여 설명되는 하나 또는 그 이상의 동작들은, 앞서 설명된 바와 같이, 도 1, 4, 5c, 7의 장치 또는 시스템, 도 1의 기능 유닛 블록들(106, 108), 도 4의 기능 유닛 블록들(402, 406), 도 5c의 기능 유닛 블록들(506, 502)에 의하여 수행될 것이다.
블록(606)에 도시된 바와 같이, 일 실시 예로, 데이터는, 앞서 설명된 바와 같이, 치환 데이터 경로의 스토리지 버퍼 내에 저장될 것이다. 몇몇의 실시 예들에 있어서, 앞서 설명된 바와 같이, 저장 동작은 제 1 기능 유닛 블록에 의하여 서브-명령들의 시리즈를 발생하고 각 서브-명령을 수행하는 동작을 포함할 것이다. 이러한 실시 예에 있어서, 앞서 설명된 바와 같이, 각 서브-명령은 제 2 기능 유닛 블록의 레지스터 및 데이터의 일 부분과 연관되며, 각 서브-명령은 수행될 때에 제 1 기능 유닛 블록으로 하여금 대응하는 데이터의 부분을 각각 스토리지 버퍼에 복사하는 것을 야기할 것이다.
일 실시 예에 있어서, 앞서 설명된 바와 같이, 제 1 유닛 블록은 제 1 기능 유닛 블록의 복수의 레지스터들 내에 데이터를 저장할 것이며, 각각의 레지스터는 데이터의 일 부분들을 저장할 것이다. 이러한 실시 예에 있어서, 앞서 설명된 바와 같이, 스토리지 버퍼 내에 데이터를 저장하는 것은 데이터의 복수의 부분들을 스토리지 버퍼로 실질적으로 동시에 복사하는 것을 포함할 것이다. 다른 실시 예에 있어서, 앞서 설명된 바와 같이, 일단 데이터가 스토리지 버퍼에 저장되면, 제 1 기능 유닛 블록은 제 2 데이터에 대한 동작을 수행할 수 있을 것이다.
다양한 실시 예들에 있어서, 본 블록에 의하여 설명되는 하나 또는 그 이상의 동작들은, 앞서 설명된 바와 같이, 도 1, 4, 5c, 7의 장치 또는 시스템, 도 1의 기능 유닛 블록들(106, 108), 도 4의 스토리지 버퍼들(410, 410n), 도 5c의 스토리지 버퍼(510)에 의하여 수행될 것이다.
블록(608)에 도시된 바와 같이, 일 실시 예로, 일단 데이터가 스토리지 버퍼 내에 저장되면, 앞서 설명된 바와 같이 데이터는 제 2 포맷으로 치환될 것이다. 다양한 실시 예들에 있어서, 본 블록에 의하여 설명되는 하나 또는 그 이상의 동작들은, 앞서 설명된 바와 같이, 도 1, 4, 5c, 7의 장치 또는 시스템, 도 4의 치환 유닛(416), 도 5c의 치환 유닛(516)에 의하여 수행될 것이다.
블록(610)에 도시된 바와 같이, 일 실시 예로, 앞서 설명된 바와 같이, 제 2 포맷 내의 데이터는 제 2 기능 유닛 블록으로 전성될 것이다. 다양한 실시 예들에 있어서, 전송 동작은 데이터의 두 개의 조각들(two pieces) 사이에서 제 2 기능 유닛 블록으로의 액세스를 중재하는 것을 포함할 것이다. 앞서 설명된 바와 같이, 제 1 데이터의 조각은 치환 데이터 경로를 경유하여 전송된 제 2 포맷 내의 데이터일 것이며, 제 2 데이터의 조각은 비-치환 데이터 경로를 경유하여 전송된 제 2 데이터 세트일 것이다. 다른 실시 예에 있어서, 앞서 설명된 바와 같이, 전송 동작은 제 2 포맷 내의 데이터의 부분들을 복수의 쓰기 서브-명령들을 통하여 제 2 기능 유닛 블록들로 기입하는 것을 포함할 것이다. 다양한 실시 예들에 있어서, 본 블록에 의하여 설명되는 하나 또는 그 이상의 동작들은, 앞서 설명된 바와 같이, 도 1, 4, 5c, 7의 장치 또는 시스템, 도 1의 기능 유닛 블록들(106, 108), 도 4의 치환 유닛(416) 또는 중재 유닛(420) 블록들(402, 406), 도 5c의 치환 유닛(516) 또는 중재 유닛(520)에 의하여 수행될 것이다.
도 7은 본 발명의 기술적 사상의 실시 예에 따라 형성된 반도체 장치들을 포함하는 정보 처리 시스템(700)을 보여주는 블록도이다.
도 7을 참조하면, 정보 처리 시스템(700)은 본 발명의 기술적 사상에 따라 형성된 하나 또는 그 이상의 장치들을 포함할 것이다. 다른 실시 예에 있어서, 정보 처리 시스템(700)은 본 발명의 기술적 사상에 따른 하나 또는 그 이상의 기술(technique)을 수행할 것이다.
다양한 실시 예들에 있어서, 정보 처리 시스템(700)은, 예를 들어, 랩탑, 데스크탑, 워크스테이션, 서버, 블레이드 서버(blade server), 개인용 디지털 어시스턴트(personal digital assistant), 스마트폰, 태블릿, 그리고 다른 적당한 컴퓨터들, 또는 가상 기계(virtual machine) 또는 가상 컴퓨팅 장치(virtual computing device)와 같은 컴퓨팅 장치를 포함할 것이다. 다양한 실시 예들에 있어서, 정보 처리 시스템(700)은 사용자(미도시)에 의하여 사용될 것이다.
본 발명의 기술적 사상의 실시 예에 따른 정보 처리 시스템(700)은 중앙 처리 장치(CPU), 프로세서 및/또는 로직(710)을 더 포함할 것이다. 몇몇의 실시 예들에 있어서, 프로세서(710)는 하나 또는 그 이상의 기능 유닛 블록들(FUBs) 또는 콤비네이션 로직 블록(combinational logic blocks, CLBs)(615)을 포함할 것이다. 이러한 실시 예에 있어서, 콤비네이션 로직 블록은 다양한 Boolean 로직 동작들(예를 들어, NAND, NOR, NOT, XOR 등), 안정화 로직 장치(stabilizing logic devices)(예를 들어, 플립플롭, 래치 등), 다른 로직 장치들 또는 이의 결합들을 포함할 것이다. 이러한 콤비네이션 로직 동작들은 원하는 결과를 얻기 위하여 단순하거나 복잡한 방식으로 입력 신호들을 처리할 것이다. 비록 몇몇의 설명된 실시 예들이 동기화 콤비네이션 로직 동작들(synchronous combinational logic operation)로 설명되었으나, 본 발명의 기술적 사상은 이에 한정되지 않으며 비동기화 동작들(asynchronous operation) 또는 그것의 혼합을 포함할 것이다. 일 실시 예에 있어서, 동기화 로직 동작들은 복수의 CMOS 트랜지스터들을 포함할 것이다. 다양한 실시 예들에 있어서, 이러한 CMOS 트랜지스터들은 논리 동작을 수행하는 게이트들에 배열될 것이다. 한편, 본 발명의 기술적 사상은 앞서 설명된 기술들 이외에 다른 기술들에 대하여도 적용될 수 있음이 이해될 것이다.
본 발명의 기술적 사상의 실시 예에 따른 정보 처리 시스템(700)은 휘발성 메모리(720)(예를 들어, Random Access Memory, RAM)를 포함할 것이다. 본 발명의 기술적 사상의 실시 예에 따른 정보 처리 시스템(700)은 비휘발성 메모리(730)(예를 들어, 하드 드라이브, 광학 메모리, NAND 또는 플래시 메모리 등)를 포함할 것이다. 몇몇의 실시 예들에 있어서, 휘발성 메모리(620), 비휘발성 메모리(730), 또는 이들의 결합 또는 그 각 부분은 "저장 매체(storage medium)"라 칭해질 수 있다. 다양한 실시 예들에 있어서, 메모리들(720, 730)은 반-영구적으로 또는 실질적으로 영구적으로 데이터를 저장할 것이다.
본 발명의 기술적 사상의 실시 예에 따른 정보 처리 시스템(700)은 통신 네트워크를 통하여 통신하도록 하는 하나 또는 그 이상의 네트워크 인터페이스(740)를 포함 것이다. 예를 들어, Wi-Fi 프로토콜은, 예를 들어, Institute of Electrical and Electronics Engineers (IEEE) 802.11g, IEEE 802.11n 등을 포함하나 이에 한정되지는 않는다. 예를 들어, 셀룰러 프로토콜(cellular protocol)은, 예를 들어, IEEE802.16m (a.k.a. Wireless-MAN (Metropolitan Area Network) Advanced), Long Term Evolution(LTE) Advanced), Enhanced Data rates for GSM (Global System for Mobile Communications)Evolution (EDGE), Evolved High-Speed Packet Access (HSPA+) 등을 포함하나 이에 한정되지는 않는다. 예를 들어, 와이어드 프로토콜(wired protocol)은 IEEE 802.3 (a.k.a. Ethernet), Fibre Channel, Power
30 Line communication (e.g., HomePlug, IEEE 1901, 등) 등을 포함하나 이에 한정되지는 않는다. 한편, 앞선 설명은 일 실시 예에 불과하며, 본 발명의 기술적 사상은 이에 한정되지 않음이 이해될 것이다.
본 발명의 기술적 사상의 실시 예에 따른 정보 처리 시스템(700)은 사용자 인터페이스 유닛(750)(예를 들어, 디스플레이 어댑터(display adapter), 햅틱 인터페이스(haptic interface), 휴먼 인터페이스 장치 등)을 더 포함할 것이다. 다양한 실시 예들에 있어서, 이러한 사용자 인터페이스 유닛(650)은 사용자로부터 입력을 수신하거나 및/또는 사용자에게 출력을 제공할 것이다. 다른 종류의 장치들이 사용자와의 상호 작용을 제공하기 위하여 사용될 수 있다. 예를 들어, 사용자에 의하여 제공된 피드백(feedback)은 예를 들어 시각 피드백, 청각 피드백, 촉각 피드백과 같은 감지 피드백의 형태일 수 있으며, 사용자로부터의 입력은 음향, 스피치 또는 촉각 입력과 같은 다양한 형태로 수신될 수 있다.
다양한 실시 예들에 있어서, 정보 처리 시스템(700)은 하나 또는 그 이상의 하드웨어 구성 또는 장치(760)(예를 들어, 디스플레이 또는 모니터, 키보드, 마우스, 카메라, 핑거프린트 리더, 비디어 프로세서 등)을 포함할 수 있다. 다만 이는 일 실시 예에 불과하며, 본 발명의 기술적 사상은 이에 한정되지 않음이 이해될 것이다.
본 발명의 기술적 사상에 따른 정보 처리 시스템(700)은 하나 또는 그 이상의 시스템 버스들(705)을 포함할 것이다. 이러한 실시 예들에 있어서, 시스템 버스(705)는 프로세서(710), 메모리들(720, 730), 네트워크 인터페이스(740), 사용자 인터페이스(750), 하나 또는 그 이상의 하드웨어 구성(760)이 상호 통신하도록 연결할 것이다. CPU(710)에 의하여 처리된 데이터 또는 비휘발성 메모리(710)의 외부로부터 입력된 데이터는 비휘발성 메모리(730) 또는 휘발성 메모리(720)에 저장될 것이다.
다양한 실시 예들에 있어서, 정보 처리 시스템(700)은 하나 또는 그 이상의 소프트웨어 컴포넌트들(770)을 포함하거나 수행할 것이다. 몇몇의 실시 예들에 있어서, 소프트웨어 컴포넌트들(770)은 오퍼레이팅 시스템(OS) 및/또는 어플리케이션을 포함할 것이다. 몇몇의 실시 예들에 있어서, 오퍼레이팅 시스템은 하나 또는 그 이상의 서비스를 어플리케이션에 제공하고 어플리케이션과 정보 처리 시스템(700)의 다양한 하드웨어 컴포넌트들(예를 들어, 프로세서(710) 또는 네트워크 인터페이스(740) 등) 사이에서 중개자로 운영하거나 동작한다. 이러한 실시 예에 있어서, 정보 처리 시스템(700)은 지엽적으로 설치되며(예를 들어, 비휘발성 메모리(730) 내에) 프로세서(710)에 의하여 직접적으로 수행되고 오퍼레이팅 시스템과 직접적으로 상호통신하는 하나 또는 그 이상의 네이티브 어플리케이션(native application)을 포함할 것이다. 이러한 실시 예에 있어서, 네이티브 어플리 케이션은 소스 또는 목적 코드(object code)를 실행 코드(executable code)로 번역하고 이후 프로세서(710)에 의하여 수행되는 script interpreter (예를 들어, C shell (csh), AppleScript, AutoHotkey, 등.) 또는 a virtual execution machine (VM) (예를 들어, the Java Virtual Machine, the Microsoft Common Language Runtime, 등)을 포함할 것이다.
앞서 설명된 반도체 장치들은 다양한 패키징 기술들(packaging techniques)을 이용하여 패키징될 것이다. 예를 들어, 반도체 장치들은 a package on package(POP) technique, a ball grid arrays (BGAs) technique, a chip scale packages (CSPs) technique, a plastic leaded chip carrier (PLCC) technique, a plastic dual in-line package (PDIP) technique, a die in waffle pack technique, a die in wafer form technique, a chip on board (COB) technique, a ceramic dual in-line package (CERDIP) technique, a plastic metric quad flat package (PMQFP) technique, a plastic quad flat package (PQFP) technique, a small outline package (SOIC) technique, a shrink small outline package (SSOP) technique, a thin small outline package (TSOP) technique, a thin quad flat package (TQFP) technique, a system in package (SIP) technique, a multi chip package (MCP) technique, a wafer-level fabricated package (WFP) technique, a wafer-level processed stack package (WSP) technique, 또는 당업자에게 잘 알려진 기술 중 어느 하나를 사용하여 패키징 될 것이다.
방법들의 각 단계는 프로그램 가능한 프로세서들이 입력 데이터를 동작시키고 출력을 생성하는 동작을 수행하도록 컴퓨터 프로그램을 구동함으로써 수행될 것이다. 방법의 각 단계 또는 장치는, 예를 들어, FPGA (field programmable gate array) 또는 an ASIC (application-specific integrated circuit)과 같은 특별한 목적의 로직 회로를 구동함으로써 수행될 것이다.
한편, 상술한 설명은 예시적인 것으로 이해되어야 하며, 본 발명의 기술적 사상은 이에 한정되지 않음이 이해될 것이다. 예를 들어, 본 발명의 기술분야에 있어서 통상의 지식을 가진 자는 본 발명의 기술적 사상을 이용하여 이를 용이하게 적용하거나 변경을 할 수 있으며, 이러한 적용 예 및 변경 예는 본 발명의 보호범위에 모두 포함됨이 이해될 것이다. 또한 앞서 설명된 본 발명의 실시 예들은 단순히 본 발명의 기술적 사상을 설명하기 위한 것이며, 본 발명의 보호범위는 본 발명의 기술적 사상을 포함하는 적용 예 및 응용 예까지 미칠 수 있음이 이해될 것이다.
instruction fetch unit : 명령 패치 유닛
instruction decode unit : 명령 디코드 유닛
load/store unit : 로드/저장 유닛
execution/computation unit : 실행 유닛
memory interface : 메모리 인터페이스
L2 memory system : 레벨 2 메모리 시스템
L1-I cache : 레벨 1-명령 캐쉬
L1-D cache : 레벨 1-데이터 캐쉬

Claims (10)

  1. 명령에 응답하여, 메모리로부터 데이터를 로드하고 상기 데이터를 실행 유닛에 전송하는 로드 유닛; 그리고
    상기 데이터에 대한 수학적 동작을 수행하는 실행 유닛을 포함하며,
    상기 메모리는 복수의 요소들을 포함하고,
    상기 로드 유닛이 상기 데이터를 상기 실행 유닛에 전송할 때에, 치환(transposition) 없이 상기 로드 유닛과 상기 실행 유닛 사이에서 상기 데이터를 통신하는 제 1 데이터 경로를 경유하거나, 또는 치환을 수반하여 상기 로드 유닛과 상기 실행 유닛 사이에 상기 데이터를 통신하는 제 2 데이터 경로를 경유하며,
    상기 치환은 상기 명령에 따라 상기 복수의 요소들 중에서 상기 데이터의 부분들(portions)의 위치를 변경하는 것을 포함하고,
    상기 제 2 데이터 경로는,
    각각 대응하는 데이터를 파이프라인 방식에 따라 임시로 저장하는 복수의 버퍼 메모리들;
    상기 복수의 버퍼 메모리들의 출력을 선택하는 멀티플렉서; 그리고
    상기 명령에 따라 상기 멀티플렉서에서 출력되는 데이터에 대한 상기 치환을 적용하는 치환 유닛을 포함하는 컴퓨팅 장치.
  2. 삭제
  3. 삭제
  4. 제 1 항에 있어서,
    상기 명령은 복수의 서브-명령들로 변환되며,
    상기 복수의 요소들은 각각 상기 복수의 서브-명령들 중 대응하는 하나의 서브-명령과 연관되는 컴퓨팅 장치.
  5. 제 4 항에 있어서,
    각 서브-명령은
    상기 데이터의 일부분(a portion)과,
    각각의 목적지 레지스터와 연관된 태그를 포함하며,
    상기 태그는 상기 데이터의 상기 일부분과 직접적으로 연관되지는 않고,
    상기 제 2 데이터 경로는 상기 데이터를 치환된 데이터로 치환하고, 각 서브-명령을 위하여 상기 각각의 태그를 상기 치환된 데이터의 각 부분에 연관시키는 치환 유닛을 포함하며, WX201301006
    각각의 태그는 상기 치환된 데이터의 대응하는 부분에 직접적으로 연관되는 컴퓨팅 장치.
  6. 제 1 항에 있어서,
    상기 로드 유닛은 차례차례 데이터의 각 요소를 상기 제 2 데이터 경로의 버퍼 메모리로 로드하며,
    상기 제 2 데이터 경로는, 일단 상기 데이터의 모든 요소들이 상기 버퍼 메모리로 로드되면, 상기 데이터를 치환된 데이터로 전환하고,
    상기 치환된 데이터는 복수의 요소들을 포함하며,
    상기 실행 유닛은 복수의 메모리 레지스터들을 포함하고,
    상기 제 2 데이터 경로는 상기 치환된 데이터의 각 요소를 상기 실행 유닛의 각각의 메모리 레지스터에 저장하는 컴퓨팅 장치.
  7. 제 1 기능 유닛 블록에 의하여, 데이터를 제 1 포맷으로 제공하는 단계;
    제 2 기능 유닛 블록에 의하여 수신되기 이전에 상기 데이터가 제 2 포맷으로 변환되는지의 여부를 판단하는 단계;
    상기 판단 결과에 응답하여 상기 데이터를 치환 데이터 경로의 복수의 스토리지 버퍼(storage buffer)들 중 적어도 하나에 파이프라인 방식에 따라 저장하는 단계;
    상기 복수의 스토리지 버퍼들을 선택하여 저장된 데이터를 출력하는 단계;
    상기 출력되는 데이터를 상기 제 2 포맷으로 치환하는 단계; 그리고
    상기 제 2 포맷으로 치환된 상기 데이터를 상기 제 2 기능 유닛 블록으로 전송하는 단계를 포함하는 데이터 처리 방법.
  8. 제 7 항에 있어서,
    상기 스토리지 버퍼에 상기 데이터를 저장하는 단계는
    상기 제 1 기능 유닛 블록에 의하여, 일련의 서브-명령들을 발생하는 단계; 및
    각 서브-명령을 실행하는 단계를 포함하며,
    각 서브-명령은 상기 제 2 기능 유닛 블록 및 상기 데이터의 일부분과 연관되고,
    각 서브-명령은 수행될 때에 상기 제 1 기능 유닛 블록이 상기 데이터의 대응하는 부분을 상기 복수의 스토리지 버퍼들 중 적어도 하나로 복사되도록 하는 데이터 처리 방법.
  9. 제 7 항에 있어서,
    상기 데이터는 제 1 데이터를 포함하고, 상기 복수의 스토리지 버퍼들은 제 1 스토리지 버퍼 및 제 2 데이터 버퍼를 포함하며,
    일단 상기 제 1 데이터가 상기 제 1 스토리지 버퍼에 저장되면, 상기 제 1 데이터를 치환하는 단계; 및
    제 2 데이터를 상기 치환 데이터 경로의 상기 제 2 스토리지 버퍼에 저장하는 단계를 더 포함하는 데이터 처리 방법.
  10. 제 7 항에 있어서,
    상기 전송하는 단계는
    상기 치환 데이터 경로를 경유하여 전송된 상기 제 2 포맷의 상기 데이터와, 비-치환 데이터 경로를 경유하여 전송된 상기 제 1 포맷의 데이터 사이에서 상기 제 2 기능 유닛 블록으로의 액세스를 중재하는 단계를 포함하는 데이터 처리 방법.
KR1020140053340A 2013-05-03 2014-05-02 스트리밍 메모리의 치환 동작 KR102318531B1 (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201361819454P 2013-05-03 2013-05-03
US61/819,454 2013-05-03
US14/017,238 2013-09-03
US14/017,238 US9513908B2 (en) 2013-05-03 2013-09-03 Streaming memory transpose operations

Publications (2)

Publication Number Publication Date
KR20140131284A KR20140131284A (ko) 2014-11-12
KR102318531B1 true KR102318531B1 (ko) 2021-10-29

Family

ID=51842145

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020140053340A KR102318531B1 (ko) 2013-05-03 2014-05-02 스트리밍 메모리의 치환 동작

Country Status (2)

Country Link
US (1) US9513908B2 (ko)
KR (1) KR102318531B1 (ko)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9880845B2 (en) * 2013-11-15 2018-01-30 Qualcomm Incorporated Vector processing engines (VPEs) employing format conversion circuitry in data flow paths between vector data memory and execution units to provide in-flight format-converting of input vector data to execution units for vector processing operations, and related vector processor systems and methods
US9632801B2 (en) 2014-04-09 2017-04-25 Intel Corporation Banked memory access efficiency by a graphics processor
US10338920B2 (en) * 2015-12-18 2019-07-02 Intel Corporation Instructions and logic for get-multiple-vector-elements operations
US20170177352A1 (en) * 2015-12-18 2017-06-22 Intel Corporation Instructions and Logic for Lane-Based Strided Store Operations
US20170177358A1 (en) * 2015-12-20 2017-06-22 Intel Corporation Instruction and Logic for Getting a Column of Data
US20170177364A1 (en) * 2015-12-20 2017-06-22 Intel Corporation Instruction and Logic for Reoccurring Adjacent Gathers
US10019262B2 (en) * 2015-12-22 2018-07-10 Intel Corporation Vector store/load instructions for array of structures
US10838734B2 (en) * 2018-09-24 2020-11-17 Intel Corporation Apparatus and method for processing structure of arrays (SoA) and array of structures (AoS) data
US10970072B2 (en) * 2018-12-21 2021-04-06 Intel Corporation Systems and methods to transpose vectors on-the-fly while loading from memory
CN112817638A (zh) * 2019-11-18 2021-05-18 北京希姆计算科技有限公司 一种数据处理装置及方法

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6957317B2 (en) * 2002-10-10 2005-10-18 Intel Corporation Apparatus and method for facilitating memory data access with generic read/write patterns
TWI335764B (en) * 2007-07-10 2011-01-01 Faraday Tech Corp In-loop deblocking filtering method and apparatus applied in video codec
WO2010093828A1 (en) 2009-02-11 2010-08-19 Quartics, Inc. Front end processor with extendable data path
US20110314253A1 (en) 2010-06-22 2011-12-22 Jacob Yaakov Jeffrey Allan Alon System, data structure, and method for transposing multi-dimensional data to switch between vertical and horizontal filters

Also Published As

Publication number Publication date
KR20140131284A (ko) 2014-11-12
US20140331032A1 (en) 2014-11-06
US9513908B2 (en) 2016-12-06

Similar Documents

Publication Publication Date Title
KR102318531B1 (ko) 스트리밍 메모리의 치환 동작
KR101599604B1 (ko) 제한 범위 벡터 메모리 액세스 인스트럭션들, 프로세서들, 방법들 및 시스템들
JP3547139B2 (ja) プロセッサ
JP6849274B2 (ja) 融合された単一のサイクルのインクリメント−比較−ジャンプを実施するための命令及びロジック
US6295599B1 (en) System and method for providing a wide operand architecture
KR101597774B1 (ko) 마스킹된 전체 레지스터 액세스들을 이용한 부분적 레지스터 액세스들을 구현하기 위한 프로세서들, 방법들 및 시스템들
TWI525537B (zh) 具有為向量衝突指令與置換指令所共享的全連接互連的處理器
TWI644208B (zh) 藉由對硬體資源之限制實現的向後相容性
JP5764257B2 (ja) レジスタをアライメントするためのシステム、装置、および方法
EP2241968A2 (en) System with wide operand architecture, and method
JP7244046B2 (ja) 遠隔アトミックオペレーションの空間的・時間的マージ
KR20130137702A (ko) 데이터 요소들의 스트라이드 패턴 수집 및 데이터 요소들의 스트라이드 패턴 분산을 위한 시스템, 장치 및 방법
KR20030067892A (ko) 가변길이 vliw 명령어를 위한 디스패치 장치 및 방법
KR20140113580A (ko) 연산 마스크들의 마스킹되지 않는 요소들을 통합하기 위한 프로세서들, 방법들, 시스템들, 및 명령어들
KR20170035974A (ko) 데이터 요소 선택 및 통합 프로세서, 방법, 시스템, 및 명령어
US9965275B2 (en) Element size increasing instruction
EP2309382B1 (en) System with wide operand architecture and method
CN108319559B (zh) 用于控制矢量内存存取的数据处理装置及方法
JP2018506096A (ja) ベクトルビットシャッフルを実行するための方法および装置
JP2018500651A (ja) マスクレジスタとベクトルレジスタとの間で可変に拡張するための方法および装置
JP2017534114A (ja) Z順序曲線において次のポイントの座標を計算するためのベクトル命令
TWI613590B (zh) 處理器流水線中的靈活的指令執行
JP2018506094A (ja) 多倍長整数(big integer)の算術演算を実行するための方法および装置
JP2018500652A (ja) マスクをマスク値のベクトルに拡張するための方法および装置
KR102500357B1 (ko) 메모리 로드 및 산술 로드 유닛 융합

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