KR102561619B1 - 인접 메모리 어드레스에서의 데이터 저장 - Google Patents

인접 메모리 어드레스에서의 데이터 저장 Download PDF

Info

Publication number
KR102561619B1
KR102561619B1 KR1020197007881A KR20197007881A KR102561619B1 KR 102561619 B1 KR102561619 B1 KR 102561619B1 KR 1020197007881 A KR1020197007881 A KR 1020197007881A KR 20197007881 A KR20197007881 A KR 20197007881A KR 102561619 B1 KR102561619 B1 KR 102561619B1
Authority
KR
South Korea
Prior art keywords
data
offset
memory
valid
vector
Prior art date
Application number
KR1020197007881A
Other languages
English (en)
Other versions
KR20190056365A (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 KR20190056365A publication Critical patent/KR20190056365A/ko
Application granted granted Critical
Publication of KR102561619B1 publication Critical patent/KR102561619B1/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/30021Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/60General implementation details not specific to a particular type of compression
    • H03M7/6011Encoder aspects
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/60General implementation details not specific to a particular type of compression
    • H03M7/6017Methods or arrangements to increase the throughput
    • H03M7/6023Parallelization

Landscapes

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

Abstract

데이터를 인접 메모리 어드레스들에 저장하기 위한 방법은, SIMD(single-instruction-multiple-data) 프로세서에서, 제1 데이터 벡터의 제1 오프셋을 결정하고, 유효 데이터 및 무효 데이터를 포함하는 제2 데이터 벡터의 제2 오프셋을 결정하기 위한 병렬-프리픽스 유효 카운트 명령을 실행하는 것을 포함한다. 제2 오프셋은 제1 오프셋, 및 유효 데이터와 연관된 제1 데이터 벡터 내의 포지션들의 수에 기반한다. 방법은 또한 제1 데이터 벡터로부터의 제1 유효 데이터를 메모리의 제1 메모리 어드레스에 저장하는 것, 및 제2 데이터 벡터로부터의 제2 유효 데이터를 메모리의 특정 메모리 어드레스에 저장하는 것을 포함한다. 제1 메모리 어드레스는 제1 오프셋에 기반하고, 특정 메모리 어드레스는 제2 오프셋에 기반한다.

Description

인접 메모리 어드레스에서의 데이터 저장
[0001] 본 출원은 2016년 9월 22일에 출원된 미국 특허 출원 제15/273,366호를 우선권으로 주장하며, 상기 출원의 전체 내용들은 인용에 의해 본원에 포함된다.
[0002] 본 개시내용은 일반적으로 데이터 저장소에 관한 것이다.
[0003] 기술에서의 진보는 더 강력한 컴퓨팅 디바이스들을 도출해왔다. 예컨대, 랩톱 및 데스크톱 컴퓨터들 및 서버들과 같은 컴퓨팅 디바이스들뿐만 아니라 휴대용 무선 텔레폰들, PDA(personal digital assistant)들 및 페이징 디바이스들과 같은 무선 컴퓨팅 디바이스들은 향상된 컴퓨팅 능력들을 갖고, 점점 더 복잡한 동작들을 수행할 수 있다. 증가된 컴퓨팅 능력들은 또한 다양한 다른 애플리케이션들에서 향상된 디바이스 능력들을 갖는다. 예컨대, 차량들은 글로벌 포지셔닝 시스템 동작들 또는 다른 로케이션 동작들, 자율-주행(self-driving) 동작들, 대화형 통신 및 엔터테인먼트 동작들 등을 가능하게 하기 위한 프로세싱 디바이스들을 포함할 수 있다. 다른 예들은, 사물 인터넷(internet-of-things)을 사용하는 통신과 같은 향상된 기능을 가능하게 하기 위한 컴퓨팅 디바이스들을 또한 통합한 가전 제품들(household appliances), 보안 카메라들, 계량 장비 등을 포함한다.
[0004] 컴퓨팅 디바이스는 하나 이상의 희소 데이터 벡터들(sparse data vectors)을 프로세싱하도록 동작 가능한 프로세서를 포함할 수 있다. 본원에 사용된 바와 같이, "희소 데이터 벡터"는, 무효 데이터(예컨대, "무관심(don't care)" 데이터 값들, 디폴트 데이터 값들, 널(ull) 데이터 값들 또는 제로 데이터 값들)를 갖는 데이터 엘리먼트들 및 유효 데이터(예컨대, "관심" 데이터 값들)를 갖는 데이터 엘리먼트들을 포함하는 데이터의 벡터이다. 데이터 벡터의 무효 데이터는 비효율적인 컴퓨테이션 및 저장으로 이어진다. 예컨대, 희소 데이터 벡터들이 프로세싱될 필요가 없는 무효 데이터 아이템들을 갖는 데이터 엘리먼트들을 포함하기 때문에, 프로세서에 포함된 컴포넌트들(예컨대, 하드웨어)은 무효 데이터를 프로세싱함으로써 비효율적으로 사용될 수 있다.
[0005] 하드웨어 사용 효율을 향상시키기 위한 하나의 기술은 압축된 데이터 벡터를 생성하기 위해 프로세서의 프로세싱 파이프라인 내에서 희소 데이터 벡터를 압축하는 것을 포함한다. 압축된 데이터 벡터를 생성하기 위해, 프로세서는, 유효 데이터를 갖는 데이터 엘리먼트들이 서로 인접하고, 무효 데이터를 갖는 데이터 엘리먼트들이 서로 인접하도록, (프로세서의 프로세싱 파이프라인 내에서) 데이터를 시프팅할 수 있다. 그러나, 프로세싱 파이프라인 내에서 압축된 데이터 벡터를 생성하는 것은 복잡한 어드레싱 방식들로 비교적 많은 수의 데이터 벡터들을 초래할 수 있다. 부가적으로, 프로세싱 파이프라인 내에서 압축된 데이터 벡터들을 생성하는 것은 하드웨어 비용들을 증가시킬 수 있다.
[0006] 본원에 개시된 기술들의 일 구현에 따라, 방법은, SIMD(single-instruction-multiple-data) 프로세서에서, 유효 데이터 및 무효 데이터를 포함하는 데이터 엘리먼트들의 시퀀스 내의 제1 유효 포지션과 연관된 제1 오프셋을 결정하기 위한 병렬-프리픽스 유효 카운트 명령(parallel-prefix valid count instruction)을 실행하는 것을 포함한다. 병렬-프리픽스 유효 카운트 명령을 실행하는 것은 또한, SIMD 프로세서로 하여금, 데이터 엘리먼트들의 시퀀스 내의 제2 유효 포지션과 연관된 제2 오프셋을 결정하게 한다. 제2 오프셋은 제1 오프셋, 및 유효 데이터와 연관된 데이터 엘리먼트들의 시퀀스 내의 포지션들의 수에 기반한다.
[0007] 본원에 개시된 기술들의 다른 구현에 따라, 장치는 메모리 및 병렬-프리픽스 유효 카운트 명령을 실행하도록 구성된 SIMD(single-instruction-multiple-data) 프로세서를 포함한다. 병렬-프리픽스 유효 카운트 명령을 실행하는 것은, SIMD 프로세서가 유효 데이터 및 무효 데이터를 포함하는 데이터 엘리먼트들의 시퀀스 내의 제1 유효 포지션과 연관된 제1 오프셋을 결정하고, 데이터 엘리먼트들의 시퀀스 내의 제2 유효 포지션과 연관된 제2 오프셋을 결정하는 것을 가능하게 한다. 제2 오프셋은 제1 오프셋, 및 유효 데이터와 연관된 데이터 엘리먼트들의 시퀀스 내의 포지션들의 수에 기반한다.
[0008] 본원에 개시된 기술들의 다른 구현에 따라, 비-일시적인 컴퓨터-판독 가능 매체는 적어도 하나의 명령을 포함하고, 적어도 하나의 명령은, SIMD(single-instruction-multiple-data) 프로세서에 의해 실행될 때, SIMD 프로세서로 하여금, 동작들을 수행하게 하고, 동작들은, 병렬-프리픽스 유효 카운트 명령의 실행에 의해, 유효 데이터 및 무효 데이터를 포함하는 데이터 엘리먼트들의 시퀀스 내의 제1 유효 포지션과 연관된 제1 오프셋을 결정하는 것을 포함한다. 동작들은 또한, 병렬-프리픽스 유효 카운트 명령의 실행에 의해, 데이터 엘리먼트들의 시퀀스 내의 제2 유효 포지션과 연관된 제2 오프셋을 결정하는 것을 포함한다. 제2 오프셋은 제1 오프셋, 및 유효 데이터와 연관된 데이터 엘리먼트들의 시퀀스 내의 포지션들의 수에 기반한다.
[0009] 본원에 개시된 기술들의 다른 구현에 따라, 장치는 유효 데이터 및 무효 데이터를 포함하는 데이터 엘리먼트들의 시퀀스 내의 제1 유효 포지션과 연관된 제1 오프셋을 결정하기 위한 수단을 포함한다. 장치는 또한 데이터 엘리먼트들의 시퀀스 내의 제2 유효 포지션과 연관된 제2 오프셋을 결정하기 위한 수단을 포함한다. 제2 오프셋은 제1 오프셋, 및 유효 데이터와 연관된 데이터 엘리먼트들의 시퀀스 내의 포지션들의 수에 기반한다.
[0010] 도 1은 인접 메모리 어드레스들에 데이터를 저장하도록 동작 가능한 시스템의 도면이다.
[0011] 도 2는 유효 데이터 및 무효 데이터를 포함하는 희소 데이터 벡터들을 예시한다.
[0012] 도 3은 압축된 메모리 데이터 벡터를 예시한다.
[0013] 도 4는 압축된 메모리 데이터 벡터에서 유효 데이터 값들의 오프셋을 식별하기 위한 도표를 도시한다.
[0014] 도 5는 인접 메모리 어드레스들에 데이터를 저장하기 위한 방법을 예시한다.
[0015] 도 6은 인접 메모리 어드레스들에 데이터를 저장하도록 동작 가능한 컴포넌트들을 포함하는 전자 디바이스의 도면이다.
[0016] 도 1을 참조하면, 인접 메모리 어드레스들에 데이터를 저장하도록 동작 가능한 시스템(100)이 도시된다. 시스템(100)은 모바일 폰, PDA(personal digital assistant), 엔터테인먼트 유닛, 내비게이션 디바이스, 뮤직 플레이어, 비디오 플레이어, 디지털 비디오 플레이어, DVD(digital video disc) 플레이어 또는 임의의 다른 디바이스 내에서 구현될 수 있다.
[0017] 시스템(100)은 프로세서(104)에 커플링된 메모리(102)를 포함한다. 일 구현에 따라, 프로세서(104)는 SIMD(single-instruction-multiple-data) 프로세서를 포함할 수 있다. 메모리(102)는, 프로세서(104)에 의해 실행 가능한 명령들을 포함하는 비-일시적 컴퓨터 판독-가능 매체일 수 있다. 예컨대, 메모리(102)는, 프로세서(104)에 의해 실행 가능한 스캐터 명령(106) 및 프로세서(104)에 의해 실행 가능한 병렬-프리픽스 유효 카운트 명령(108)을 포함한다.
[0018] 메모리(102)는 또한 압축된 메모리 데이터 벡터(110)를 포함한다. 아래에 설명된 바와 같이, 상이한 희소 데이터 벡터들로부터의 유효 데이터(무효 데이터와 대조적임)는, 메모리(102)에서 "압축된 데이터 벡터"를 생성하기 위해, 압축된 메모리 데이터 벡터(110)에 저장될 수 있다. 압축된 메모리 데이터 벡터(110)는 복수의 인접 메모리 어드레스들을 포함한다. 예시하자면, 압축된 메모리 데이터 벡터(110)는, 제1 메모리 어드레스(111), 제1 메모리 어드레스(111)에 인접하는 제2 메모리 어드레스(112), 제2 메모리 어드레스(112)에 인접하는 제3 메모리 어드레스(113), 제3 메모리 어드레스(113)에 인접하는 제4 메모리 어드레스(114), 제4 메모리 어드레스(114)에 인접한 제5 메모리 어드레스(115), 제5 메모리 어드레스(115)에 인접하는 제6 메모리 어드레스(116), 제6 메모리 어드레스(116)에 인접하는 제7 메모리 어드레스(117), 제7 메모리 어드레스(117)에 인접하는 제8 메모리 어드레스(118), 제8 메모리 어드레스(118)에 인접하는 제9 메모리 어드레스(119), 제9 메모리 어드레스(119)에 인접하는 제10 메모리 어드레스(120) 등을 포함한다.
[0019] 도 1에서, 압축된 메모리 데이터 벡터(110)는 16개의 메모리 어드레스들을 포함한다. 예컨대, 압축된 메모리 데이터 벡터(110)는, 제15 메모리 어드레스(도시되지 않음)에 인접한 제16 메모리 어드레스(122)를 포함한다. 그러나, 다른 구현들에서, 압축된 메모리 데이터 벡터(110)는 부가적인(또는 더 적은) 인접 메모리 어드레스들을 포함할 수 있다. 비-제한적인 예로서, 압축된 메모리 데이터 벡터(110)는 32개의 인접 메모리 어드레스들을 포함할 수 있다.
[0020] 프로세서(104)는 하나 이상의 레지스터들(130), 메모리 저장 회로(140), 페치 회로(150), 및 SIMD 프로세싱 파이프라인(152)을 포함한다. 하나 이상의 레지스터들(130)이 프로세서(104)에 포함되는 것으로 도시되지만, 다른 구현들에서, 하나 이상의 레지스터들(130)은 프로세서(104)와 별개일(그리고 이에 액세스 가능할) 수 있다. 다른 구현들에서, 프로세서(104)는 부가적인(또는 더 적은) 컴포넌트들을 포함할 수 있다. 비-제한적인 예로서, 다른 구현들에서, 프로세서(104)는 또한 하나 이상의 ALU(arithmetic logic unit)들, 하나 이상의 주문형(application-specific) 실행 유닛들 등을 포함할 수 있다. 프로세서(104)가 메모리 저장 회로(140), 페치 회로(150) 및 SIMD 프로세싱 파이프라인(152)을 포함하는 것으로 도시되지만, 다른 구현들에서, 각각의 컴포넌트(140, 150, 152)의 동작들은 단일 프로세싱 컴포넌트에 의해 수행될 수 있다.
[0021] 하나 이상의 레지스터들(130)은 제1 데이터 벡터(132), 제2 데이터 벡터(134) 및 제3 데이터 벡터(136)를 저장할 수 있다. "데이터 엘리먼트들의 시퀀스"는 데이터 벡터들(132, 134, 136)에 저장된 데이터 엘리먼트들을 포함할 수 있다. 3개의 데이터 벡터들(132, 134, 136)이 하나 이상의 레지스터들(130)에 포함되는 것으로 도시되지만, 다른 구현들에서, 하나 이상의 레지스터들(130)은 부가적인(또는 더 적은) 데이터 벡터들을 포함할 수 있다. 각각의 데이터 벡터(132, 134, 136)는 "희소 데이터 벡터" 또는 "희소 데이터 어레이"일 수 있다. 예컨대, 각각의 데이터 벡터(132, 134, 136)는 유효 데이터(예컨대, 관심 데이터 값들) 및 무효 데이터(예컨대, "무관심" 데이터 값들, 디폴트 데이터 값들 또는 제로 데이터 값들)를 포함할 수 있다. 일 구현에 따라, 데이터 벡터들(132, 134, 136)은 (하나 이상의 레지스터들(130)에 저장되는 것과 대조적으로) 메모리(102)에 저장될 수 있다.
[0022] 도 2를 참조하면, 데이터 벡터들(132, 134, 136)이 더 상세히 도시된다. 각각의 데이터 벡터(132, 134, 136)는 8개의 포지션들(예컨대, "포지션 0" 내지 "포지션 7")을 포함한다. 일 구현에 따라, 각각의 포지션은 "어레이 포지션"에 대응할 수 있다. 각각의 데이터 벡터(132, 134, 136)가 8개의 포지션들을 포함하는 것으로 도시되지만, 다른 구현들에서, 각각의 데이터 벡터(132, 134, 136)는 부가적인(또는 더 적은) 포지션들을 포함할 수 있다. 비-제한적인 예로서, 각각의 데이터 벡터(132, 134, 136)는 16개의 포지션들을 포함할 수 있다. 또 다른 구현에 따라, 상이한 데이터 벡터들은 상이한 수의 포지션들을 포함할 수 있다. 비-제한적인 예로서, 하나의 데이터 벡터는 8개의 포지션들을 포함할 수 있고, 다른 데이터 벡터는 16개의 포지션들을 포함할 수 있다.
[0023] 도 2에 따라, 제1 데이터 벡터(132)는 3개의 유효 데이터 값들 및 5개의 무효 데이터 값들을 포함한다. 예컨대, 제1 데이터 벡터(132)의 "포지션 1"은 유효 데이터 값 "A"를 저장하고, 제1 데이터 벡터(132)의 "포지션 3"은 유효 데이터 값 "B"을 저장하고, 제1 데이터 벡터(132)의 "포지션 6"은 유효 데이터 값 "C"를 저장한다. 제1 데이터 벡터(132)의 다른 포지션들은 무효 데이터 값들을 저장한다. 제2 데이터 벡터(134)는 또한 3개의 유효 데이터 값들 및 5개의 무효 데이터 값들을 포함한다. 예컨대, 제2 데이터 벡터(134)의 "포지션 2"는 유효 데이터 값 "D"를 저장하고, 제2 데이터 벡터(134)의 "포지션 3"은 유효 데이터 값 "E"를 저장하고, 제2 데이터 벡터(134)의 "포지션 6"은 유효 데이터 값 "F"를 저장한다. 제2 데이터 벡터(134)의 다른 포지션들은 무효 데이터 값들을 저장한다. 제3 데이터 벡터(136)는 4개의 유효 데이터 값들 및 4개의 무효 데이터 값들을 포함한다. 예컨대, 제3 데이터 벡터(136)의 "포지션 0"은 유효 데이터 값 "G"를 저장하고, 제3 데이터 벡터(136)의 "포지션 4"는 유효 데이터 값 "H"를 저장하고, 제3 데이터 벡터(136)의 "포지션 5"는 유효 데이터 값 "I"을 저장하고, 제3 데이터 벡터(136)의 "포지션 7"은 유효 데이터 값 "J"를 저장한다. 제3 데이터 벡터(136)의 다른 포지션들은 무효 데이터 값들을 저장한다.
[0024] 다시 도 1을 참조하면, 메모리 저장 회로(140)는 데이터 벡터 분석 회로(142), 기록 회로(144) 및 오프셋 결정 회로(146)를 포함한다. 데이터 벡터 분석 회로(142)는, 제1 데이터 벡터(132)가 유효 데이터를 갖는 포지션들을 포함하는지 여부를 결정하도록 구성될 수 있다. 예컨대, 데이터 벡터 분석 회로(142)는, 유효 데이터 값 "A"가 제1 데이터 벡터(132)의 "포지션 1"(예컨대, 유효 데이터를 갖는 제1 순차적 포지션)에 위치된다고 결정할 수 있다. 기록 회로(144)는 압축된 메모리 데이터 벡터(110)의 인접 메모리 어드레스들에 유효 데이터 값들을 (병렬로) 기록(예컨대, 저장)하도록 구성될 수 있다. 예컨대, 유효 데이터 값 "A"가 제1 데이터 벡터(132)의 "포지션 1"에 위치된다는 결정에 대한 응답으로, 메모리 저장 회로(140)는 기록 회로(144)를 인이에블할 수 있다. 기록 회로(144)는 인에이블되는 것에 대한 응답으로 제1 메모리 어드레스(111)에 유효 데이터 값 "A"를 저장할 수 있다. 예컨대, 기록 회로(144)는 유효 데이터 값 "A"를 제1 메모리 어드레스(111)에 저장하기 위해 스캐터 명령(106)(예컨대, 벡터 저장 명령)을 실행할 수 있다.
[0025] 유효 데이터 값 "A"가 제1 메모리 어드레스(111)에 저장된 후에, 데이터 벡터 분석 회로(142)는, 제1 데이터 벡터(132)가 유효 데이터를 갖는 다른 포지션을 포함하는지 여부를 결정할 수 있다. 예컨대, 데이터 벡터 분석 회로(142)는, 유효 데이터 값 "B"가 제1 데이터 벡터(132)의 "포지션 3"(예컨대, 유효 데이터를 갖는 다음의 순차적인 포지션)에 위치된다고 결정할 수 있다. 예컨대, 유효 데이터 값 "B"가 제1 데이터 벡터(132)의 "포지션 3"에 위치된다는 결정에 대한 응답으로, 메모리 저장 회로(140)는 기록 회로(144)를 인이에블할 수 있다. 기록 회로(144)는, 인에이블되는 것에 대한 응답으로, 유효 데이터 값 "B"를 제2 메모리 어드레스(112)(예컨대, 제1 메모리 어드레스(111)의 인접 메모리 어드레스)에 저장할 수 있다. 예컨대, 기록 회로(144)는 제2 메모리 어드레스(112)에 유효 데이터 값 "B"를 저장하기 위한 스캐터 명령(106)을 실행할 수 있다.
[0026] 유효 데이터 값 "B"가 제2 메모리 어드레스(112)에 저장된 후, 데이터 벡터 분석 회로(142)는, 제1 데이터 벡터(132)가 유효 데이터를 가진 다른 포지션을 포함하는지 여부를 결정할 수 있다. 예컨대, 데이터 벡터 분석 회로(142)는, 유효 데이터 값 "C"가 제1 데이터 벡터(132)의 "포지션 6"(예컨대, 유효 데이터를 갖는 다음의 순차적인 포지션)에 위치된다고 결정할 수 있다. 예컨대, 유효 데이터 값 "C"가 제1 데이터 벡터(132)의 "포지션 6"에 위치된다는 결정에 대한 응답으로, 메모리 저장 회로(140)는 기록 회로(144)를 인이에블할 수 있다. 기록 회로(144)는, 인에이블되는 것에 대한 응답으로, 제3 메모리 어드레스(113)(예컨대, 제2 메모리 어드레스(112)의 인접 메모리 어드레스)에 유효 데이터 값 "C"를 저장할 수 있다. 예컨대, 기록 회로(144)는 제3 메모리 어드레스(113)에 유효 데이터 값 "C"를 저장하기 위한 스캐터 명령(106)을 실행할 수 있다. 따라서, 제1 데이터 벡터(132)의 무효 데이터 값들은 우회될 수 있고, 제1 데이터 벡터(132)의 유효 데이터 값들은 메모리(102) 내의 인접 메모리 어드레스들에 저장될 수 있다.
[0027] 유효 데이터 값 "C"가 제3 메모리 어드레스(113)에 저장된 후에, 데이터 벡터 분석 회로(142)는, 제1 데이터 벡터(132)가 유효 데이터를 갖는 다른 포지션을 포함하는지 여부를 결정할 수 있다. 제1 데이터 벡터(132)가 유효 데이터를 갖는 다른 포지션을 포함하지 않는다는 결정에 대한 응답으로, 데이터 벡터 분석 회로(142)는, 제2 데이터 벡터(134)가 유효 데이터를 갖는 포지션을 포함하는지 여부를 결정할 수 있다. 예컨대, 데이터 벡터 분석 회로(142)는, 유효 데이터 값 "D"가 제2 데이터 벡터(134)의 "포지션 2"(예컨대, 유효 데이터를 갖는 제1 순차적인 포지션)에 위치된다고 결정할 수 있다. 유효 데이터 값 "D"가 제2 데이터 벡터(134)의 "포지션 2"에 위치된다는 결정에 대한 응답으로, 메모리 저장 회로(140)는 기록 회로(144)를 인이에블할 수 있다. 기록 회로(144)는, 인에이블되는 것에 대한 응답으로, 제4 메모리 어드레스(114)(예컨대, 제3 메모리 어드레스(113)의 인접 메모리 어드레스)에 유효 데이터 값 "D"를 저장할 수 있다. 예컨대, 기록 회로(144)는 제4 메모리 어드레스(114)에 유효 데이터 값 "D"를 저장하도록 스캐터 명령(106)을 실행할 수 있다.
[0028] 유효 데이터 값 "D"가 제4 메모리 어드레스(114)에 저장된 후에, 데이터 벡터 분석 회로(142)는, 제2 데이터 벡터(134)가 유효 데이터를 갖는 다른 포지션을 포함하는지 여부를 결정할 수 있다. 예컨대, 데이터 벡터 분석 회로(142)는, 유효 데이터 값 "E"가 제2 데이터 벡터(134)의 "포지션 3"(예컨대, 유효 데이터를 갖는 다음의 순차적인 포지션)에 위치된다고 결정할 수 있다. 유효 데이터 값 "E"가 제2 데이터 벡터(134)의 "포지션 3"에 위치된다는 결정에 대한 응답으로, 메모리 저장 회로(140)는 기록 회로(144)를 인이에블할 수 있다. 기록 회로(144)는, 인에이블되는 것에 대한 응답으로, 유효 데이터 값 "E"를 제5 메모리 어드레스(115)(예컨대, 제4 메모리 어드레스(114)의 인접 메모리 어드레스)에 저장할 수 있다. 예컨대, 기록 회로(144)는 제5 메모리 어드레스(115)에 유효 데이터 값 "E"를 저장하도록 스캐터 명령(106)을 실행할 수 있다.
[0029] 유효 데이터 값 "E"가 제5 메모리 어드레스(115)에 저장된 후에, 데이터 벡터 분석 회로(142)는, 제2 데이터 벡터(134)가 유효 데이터를 갖는 다른 포지션을 포함하는지 여부를 결정할 수 있다. 예컨대, 데이터 벡터 분석 회로(142)는, 유효 데이터 값 "F"가 제2 데이터 벡터(134)의 "포지션 6"(예컨대, 유효 데이터를 갖는 다음의 순차적인 포지션)에 위치된다고 결정할 수 있다. 유효 데이터 값 "F"가 제2 데이터 벡터(134)의 "포지션 6"에 위치된다는 결정에 대한 응답으로, 메모리 저장 회로(140)는 기록 회로(144)를 인이에블할 수 있다. 기록 회로(144)는, 인에이블되는 것에 대한 응답으로, 유효 데이터 값 "F"를 제6 메모리 어드레스(116)(예컨대, 제5 메모리 어드레스(115)의 인접 메모리 어드레스)에 저장할 수 있다. 예컨대, 기록 회로(144)는 제6 메모리 어드레스(116)에 유효 데이터 값 "F"를 저장하도록 스캐터 명령(106)을 실행할 수 있다. 따라서, 제2 데이터 벡터(134)의 무효 데이터 값들은 우회될 수 있고, 제2 데이터 벡터(134)의 유효 데이터 값들은 메모리(102) 내의 인접 메모리 어드레스들에 저장될 수 있다.
[0030] 유효 데이터 값 "F"가 제6 메모리 어드레스(116)에 저장된 후에, 데이터 벡터 분석 회로(142)는, 제2 데이터 벡터(134)가 유효 데이터를 갖는 다른 포지션을 포함하는지 여부를 결정할 수 있다. 제2 데이터 벡터(134)가 유효 데이터를 갖는 다른 포지션을 포함하지 않는다는 결정에 대한 응답으로, 데이터 벡터 분석 회로(142)는, 제3 데이터 벡터(136)가 유효 데이터를 갖는 포지션을 포함하는지 여부를 결정할 수 있다. 예컨대, 데이터 벡터 분석 회로(142)는, 유효 데이터 값 "G"가 제3 데이터 벡터(136)의 "포지션 1"(예컨대, 유효 데이터를 갖는 제1 순차적인 포지션)에 위치된다고 결정할 수 있다. 유효 데이터 값 "G"가 제3 데이터 벡터(136)의 "포지션 1"에 위치된다는 결정에 대한 응답으로, 메모리 저장 회로(140)는 기록 회로(144)를 인이에블할 수 있다. 기록 회로(144)는, 인에이블되는 것에 대한 응답으로, 유효 데이터 값 "G"를 제7 메모리 어드레스(117)(예컨대, 제6 메모리 어드레스(116)의 인접 메모리 어드레스)에 저장할 수 있다. 예컨대, 기록 회로(144)는 제7 메모리 어드레스(117)에 유효 데이터 값 "G"를 저장하도록 스캐터 명령(106)을 실행할 수 있다.
[0031] 유효 데이터 값 "G"가 제7 메모리 어드레스(117)에 저장된 후에, 데이터 벡터 분석 회로(142)는, 제3 데이터 벡터(136)가 유효 데이터를 갖는 다른 포지션을 포함하는지 여부를 결정할 수 있다. 예컨대, 데이터 벡터 분석 회로(142)는, 유효 데이터 값 "H"가 제3 데이터 벡터(136)의 "포지션 4"(예컨대, 유효 데이터를 갖는 다음의 순차적인 포지션)에 위치된다고 결정할 수 있다. 유효 데이터 값 "H"가 제3 데이터 벡터(136)의 "포지션 4"에 위치된다는 결정에 대한 응답으로, 메모리 저장 회로(140)는 기록 회로(144)를 인이에블할 수 있다. 기록 회로(144)는, 인에이블되는 것에 대한 응답으로, 제8 메모리 어드레스(118)(예컨대, 제7 메모리 어드레스(117)의 인접 메모리 어드레스)에 유효 데이터 값 "H"를 저장할 수 있다. 예컨대, 기록 회로(144)는 제8 메모리 어드레스(118)에 유효 데이터 값 "H"를 저장하도록 스캐터 명령(106)을 실행할 수 있다.
[0032] 유효 데이터 값 "H"가 제8 메모리 어드레스(118)에 저장된 후에, 데이터 벡터 분석 회로(142)는, 제3 데이터 벡터(136)가 유효 데이터를 갖는 다른 포지션을 포함하는지 여부를 결정할 수 있다. 예컨대, 데이터 벡터 분석 회로(142)는, 유효 데이터 값 "I"이 제3 데이터 벡터(136)의 "포지션 5"(예컨대, 유효 데이터를 갖는 다음의 순차적인 포지션)에 위치된다고 결정할 수 있다. 유효 데이터 값 "I"가 제3 데이터 벡터(136)의 "포지션 5"에 위치된다는 결정에 대한 응답으로, 메모리 저장 회로(140)는 기록 회로(144)를 인이에블할 수 있다. 기록 회로(144)는, 인에이블되는 것에 대한 응답으로, 제9 메모리 어드레스(119)(예컨대, 제8 메모리 어드레스(118)의 인접 메모리 어드레스)에 유효 데이터 값 "I"를 저장할 수 있다. 예컨대, 기록 회로(144)는 제9 메모리 어드레스(119)에 유효 데이터 값 "I"를 저장하도록 스캐터 명령(106)을 실행할 수 있다.
[0033] 유효 데이터 값 "J"가 제9 메모리 어드레스(119)에 저장된 후, 데이터 벡터 분석 회로(142)는, 제3 데이터 벡터(136)가 유효 데이터를 가진 다른 포지션을 포함하는지 여부를 결정할 수 있다. 예컨대, 데이터 벡터 분석 회로(142)는, 유효 데이터 값 "J"가 제3 데이터 벡터(136)의 "포지션 7"(예컨대, 유효 데이터를 갖는 다음의 순차적인 포지션)에 위치된다고 결정할 수 있다. 유효 데이터 값 "J"가 제3 데이터 벡터(136)의 "포지션 7"에 위치된다는 결정에 대한 응답으로, 메모리 저장 회로(140)는 기록 회로(144)를 인이에블할 수 있다. 기록 회로(144)는, 인에이블되는 것에 대한 응답으로, 제10 메모리 어드레스(120)(예컨대, 제9 메모리 어드레스(119)의 인접 메모리 어드레스)에 유효 데이터 값 "J"를 저장할 수 있다. 예컨대, 기록 회로(144)는 제10 메모리 어드레스(120)에 유효 데이터 값 "J"를 저장하도록 스캐터 명령(106)을 실행할 수 있다. 따라서, 제3 데이터 벡터(136)의 무효 데이터 값들은 우회될 수 있고, 제3 데이터 벡터(136)의 유효 데이터 값들은 메모리(102) 내의 인접 메모리 어드레스들에 저장될 수 있다.
[0034] 메모리(102)의 압축된 메모리 데이터 벡터(110)에 부가적인 유효 데이터 값들을 저장하기 위해 유사한 동작들이 수행될 수 있다. 도 3을 참조하면, 위에 설명된 저장 동작들의 완료 후의 압축된 메모리 데이터 벡터(110)가 도시된다. 데이터 벡터들(132, 134, 136)의 각각의 유효 데이터 값은 압축된 메모리 데이터 벡터(110)의 인접 메모리 어드레스들에 저장될 수 있다. 따라서, 무효 데이터는, 각각의 메모리 어드레스에 유효 데이터를 갖는 압축된 메모리 데이터 벡터(110)를 생성하기 위해, 희소 데이터 벡터들(132, 134, 136)로부터 분리될 수 있다. 아래에 설명되는 바와 같이, 프로세서(150)는, 유효 데이터 및 무효 데이터를 프로세싱하는 것 ― 이는 프로세서(104)의 비효율적인 사용을 초래할 수 있음 ― 과 대조적으로, 유효 데이터를 프로세싱하기 위해 메모리(102)로부터 압축된 메모리 데이터 벡터(110)를 페치할 수 있다.
[0035] 도 1을 다시 참조하면, 오프셋 결정 회로(146)는, 압축된 메모리 데이터 벡터(110)에 대해 각각의 데이터 벡터(132, 134, 136)에 대한 오프셋을 결정(예컨대, 카운팅)하도록 구성될 수 있다. 예컨대, 오프셋 결정 회로(146)는 각각의 데이터 벡터(132, 134, 136)에 대한 기록 인에이블들의 카운트(예컨대, 병렬-프리픽스 유효 카운트)를 결정할 수 있다. 각각의 데이터 벡터(132, 134, 136)에 대한 오프셋은 병렬-프리픽스 유효 카운트에 기반할 수 있다. 특정 데이터 벡터에 대한 "오프셋"은, 특정 데이터 벡터와 연관된 유효 데이터가 저장되는 압축된 메모리 데이터 벡터(110)의 제1 순차적인 메모리 어드레스이다. 오프셋 결정 회로(146)는, 제1 데이터 벡터(132)의 제1 오프셋(162), 제2 데이터 벡터(134)의 제2 오프셋(164) 및 제3 데이터 벡터(136)의 제3 오프셋(166)을 포함하는 데이터 벡터들(132-136)에 대응하는 다수의 오프셋들(160)을 생성할 수 있다. 예컨대, 도 4를 참조하여 추가로 설명되는 바와 같이, 제1 오프셋(162)은 제1 데이터 벡터(132)의 유효 데이터가 압축된 메모리 데이터 벡터(110)의 제1 메모리 어드레스(111)에서 시작한다는 것을 나타내는 "1"의 값을 가질 수 있고, 제2 오프셋(164)은 제2 데이터 벡터(134)의 유효 데이터가 제4 메모리 어드레스(114)에서 시작한다는 것을 나타내는 "4"의 값을 가질 수 있고, 제3 오프셋(166)은 제3 데이터 벡터(136)의 유효 데이터가 압축된 메모리 데이터 벡터(110)의 제7 메모리 어드레스(117)에서 시작한다는 것을 나타내는 "7"의 값을 가질 수 있다. 일 구현에 따라, 프로세서(104)는 오프셋을 결정하기 위해 병렬-프리픽스 유효 카운트 명령(108)을 실행할 수 있다.
[0036] 예시하자면, 각각의 데이터 벡터(132, 134, 136)에 대한 오프셋을 식별하기 위한 도표(400)가 도 4에 도시된다. 도표(400)에 따라, 메모리 어드레스 "0"은 제1 데이터 벡터(132)에 대한 베이스 어드레스로서 사용될 수 있다. 제1 데이터 벡터(132)의 병렬 프리픽스 카운트는, 유효 데이터 값 "A"를 압축된 메모리 데이터 벡터(110)에 저장하는 것과 연관된 인에이블(예컨대, 기록 인에이블)에 대한 응답으로 (0에서 1로) 증가할 수 있다. 병렬 프리픽스 카운트가 증가할 때마다, 메모리 어드레스가 또한 증가한다. 따라서, 도표(400)의 "포지션 1" 열(column) 아래에서, 메모리 어드레스는 메모리 어드레스 "0"에서 메모리 어드레스 "1"(예컨대, 제1 메모리 어드레스(111))로 증가한다. 따라서, 압축된 메모리 데이터 벡터(110)에 대해 제1 데이터 벡터(132)에 대한 오프셋(162)은 제1 메모리 어드레스(111)이며, 제1 메모리 어드레스(111)를 나타내기 위해 "1"의 오프셋 값을 갖는 것으로서 저장될 수 있다. 다른 구현들에서, 오프셋(162)은, 제로-기반 인덱싱 구현에서 "0"의 오프셋 값과 같이, 제1 메모리 어드레스(111)를 나타내는 다른 오프셋 값을 갖는 것으로 저장될 수 있다.
[0037] 병렬 프리픽스 카운트는 유효 데이터 값 "B"를 압축된 메모리 데이터 벡터(110)의 제2 메모리 어드레스(112)에 저장하는 것과 연관된 인에이블에 대한 응답으로 (1에서 2로) 증가할 수 있다. 병렬 프리픽스 카운트는 또한 유효 데이터 값 "C"를 압축된 메모리 데이터 벡터(110)의 제3 메모리 어드레스(113)에 저장하는 것과 연관된 인에이블에 대한 응답으로 (2에서 3으로) 증가할 수 있다. 위에 설명된 바와 같이, 저장된 마지막 유효 데이터 값의 어드레스는 새로운 데이터 벡터에 대한 베이스로서 사용될 수 있다. 메모리 어드레스 "3"(예컨대, 제3 메모리 어드레스(113))이 저장된 마지막 데이터 값(예컨대, 유효 데이터 값 "C")의 어드레스이기 때문에, 제3 메모리 어드레스(113)는 제2 데이터 벡터(134)의 베이스로서 사용될 수 있다. 제2 데이터 벡터(134)의 병렬-프리픽스 카운트가 (0에서 1로) 증가할 때, 대응하는 메모리 어드레스는 제2 데이터 벡터(134)에 대한 오프셋(164)일 수 있다. 따라서, 압축된 메모리 데이터 벡터(110)에 대해 제2 데이터 벡터(134)에 대한 오프셋(164)은 제4 메모리 어드레스(114)이며, "4"(또는 제로-기반 인덱싱 구현에서 "3")의 오프셋 값을 갖는 것으로 표현될 수 있다. 유사한 방식으로, 도표(400)에 따라, 압축된 메모리 데이터 벡터(110)에 대해 제3 데이터 벡터(136)에 대한 오프셋(166)은 제7 메모리 어드레스(117)이며, "7"(또는 제로-기반 인덱싱 구현에서 "6")의 오프셋 값을 갖는 것으로 표현될 수 있다.
[0038] 도 1을 다시 참조하면, 오프셋들(오프셋 결정 회로(146)에 의해 결정됨)은 메모리(102)의 데이터를 데이터 벡터들(132, 134, 136)로 맵핑하는 데 사용될 수 있다. 예컨대, 프로세서(104)는, 제1 데이터 벡터(132)의 오프셋(162)이 제1 메모리 어드레스(111)이고 제2 데이터 벡터(134)의 오프셋(164)이 제4 메모리 어드레스(114)이면, 제1, 제2, 및 제3 메모리 어드레스들(111, 112, 113)이 제1 데이터 벡터(132)와 연관된 데이터를 포함한다고 결정할 수 있다. 유사하게, 프로세서(104)는, 제2 데이터 벡터(134)의 오프셋(164)이 제4 메모리 어드레스(114)이고 제3 데이터 벡터(136)의 오프셋(166)이 제7 메모리 어드레스(117)이면, 제4, 제5 및 제6 메모리 어드레스들(114, 115, 116)이 제2 데이터 벡터(134)와 연관된 데이터를 포함한다고 결정할 수 있다.
[0039] 데이터 값들이 압축된 메모리 데이터 벡터(110)에 저장된 후에, 페치 회로(150)는 압축된 메모리 데이터 벡터(110)에 저장된 데이터를 페칭하도록 구성될 수 있다. 페치 회로(150)는 압축된 메모리 데이터 벡터(110)를 SIMD 프로세싱 파이프라인(152)에 제공할 수 있다. 압축된 메모리 데이터 벡터(110)의 각각의 메모리 어드레스가 유효 데이터 값들을 포함하기 때문에, SIMD 프로세싱 파이프라인(152) 내의 프로세싱 컴포넌트들 및 하드웨어는 효율적으로 사용될 수 있다. 예컨대, SIMD 프로세싱 파이프라인(152)의 프로세싱 컴포넌트들은, 무효 데이터 값들에 사용되는 것과 대조적으로, 유효 데이터 값들에 대해 사용될 수 있다.
[0040] 도 1-4에 대해 설명된 기술들은, SIMD 프로세싱 파이프라인(152)에 의해 프로세싱되는 무효 데이터 값들의 양을 감소시킴으로써, 프로세싱 효율을 개선할 수 있다. 유효 데이터 값들을 메모리(102)의 인접 어드레스들에 저장함으로써, 페치 회로(150)는 유효 데이터 값들(유효 및 무효 데이터 값들과 대조적으로) SIMD 프로세싱 파이프라인(152)에 제공할 수 있다. 부가적으로, 저장 프로세스 동안 각각의 데이터 벡터(132, 134, 136)에 대한 병렬-프리픽스 유효 카운트를 추적함으로써, 비교적 간단한 어드레싱 방식이 달성될 수 있다. 예컨대, 프로세서(104)는, 병렬-프리픽스 유효 카운트에 기반하여, 어떠한 데이터 값들 및/또는 메모리 어드레스들이 각각의 데이터 벡터(132, 134, 136)에 대응하는지를 식별할 수 있다.
[0041] 도 1-4를 참조하여 설명된 바와 같이, 병렬-프리픽스 유효 카운트 명령(108)은, 다수의 데이터 벡터들(132-136)로부터 압축된 메모리 데이터 벡터(110) 내의 조밀한 데이터 어레인지먼트로의 희소 데이터의 압축 동안, 사용될 수 있다. 대안적으로, 또는 게다가, 병렬-프리픽스 유효 카운트 명령(108)은, 압축된 메모리 데이터 벡터(110)로부터 데이터 벡터들(132-136) 내의 희소 데이터 어레인지먼트로의 데이터의 압축해제 동안에, 사용될 수 있다. 예컨대, 데이터를 압축된 메모리 데이터 벡터(110)로 압축한 후에, 압축된 메모리 데이터 벡터(110)의 데이터는, 압축된 메모리 데이터 벡터(110)에서 수정된 데이터를 생성하기 위해 SIMD 프로세싱 파이프라인(152)에 의해 프로세싱될 수 있다. 수정된 데이터는 오리지널 유효 데이터를 수정된 데이터로 덮어쓰기(overwrite) 위해 데이터 벡터들(132-136)의 대응하는 포지션들에 다시 기록될 수 있다. 압축해제 동작에서, 데이터 벡터들(132-136) 내의 각각의 유효 포지션에 대한 인접 오프셋 또는 어드레스는, 도 4 에서 설명된 바와 같이, 이전 벡터의 마지막 카운트로부터의 누적(accumulation)으로, 병렬-프리픽스 유효 카운트 명령(108)을 사용하여 컴퓨팅될 수 있다. 병렬-프리픽스 유효 카운트 명령(108)의 결과들에 기반하여, 압축 메모리 데이터 벡터(110)의 각각의 어드레스 또는 오프셋으로부터의 데이터 벡터들(132-136)의 유효 데이터 포지션들로 데이터를 로딩(load)하기 위해 로드/수집이 수행될 수 있다. 따라서, 병렬-프리픽스 유효 카운트 명령(108)은 데이터 압축 동작들 동안 그리고 또한 데이터 압축해제 동작들 동안 사용될 수 있다.
[0042] 도 5를 참조하면, 인접 메모리 어드레스들에 데이터를 저장하기 위한 방법(500)의 흐름도가 도시된다. 방법(500)은 도 1의 시스템(100)을 사용하여 수행될 수 있다.
[0043] 방법(500)은, 병렬 프리픽스 유효 카운트 명령(502)의 실행에 의해, 유효 데이터 및 무효 데이터를 포함하는 데이터 엘리먼트들의 시퀀스 내의 제1 유효 포지션과 연관된 제1 오프셋을 결정하는 것을 포함한다. 예컨대, 도 1을 참조하면, SIMD 프로세서(104)는, 제1 데이터 벡터(132)의 제1 오프셋(162)을 결정하기 위해 병렬-프리픽스 유효 카운트 명령(108)을 실행할 수 있다.
[0044] 방법(500)은 또한, 병렬-프리픽스 유효 카운트 명령의 실행에 의해, 504에서, 데이터 엘리먼트들의 시퀀스 내의 제2 유효 포지션과 연관된 제2 오프셋을 결정하는 것을 포함한다. 제2 오프셋은 제1 오프셋, 및 유효 데이터와 연관된 데이터 엘리먼트들의 시퀀스 내의 포지션들의 수에 기반할 수 있다. 예컨대, 도 1을 참조하면, SIMD 프로세서(104)는, 제2 데이터 벡터(134)의 제2 오프셋(164)을 결정하기 위해 병렬-프리픽스 유효 카운트 명령(108)을 실행할 수 있다. 일 구현에 따라, 제2 오프셋은, 유효 데이터와 연관된 제1 데이터 벡터(132) 내의 포지션들의 수를 제1 오프셋(162)에 합산함으로써 컴퓨팅될 수 있다.
[0045] 방법(500)은 또한, 506에서, 제1 데이터 벡터로부터의 제1 유효 데이터를 메모리의 제1 메모리 어드레스에 저장하는 것을 포함한다. 제1 메모리 어드레스는 제1 오프셋에 기반할 수 있다. 예컨대, 도 1을 참조하면, 유효 데이터 값 "A"가 제1 데이터 벡터(132)의 "포지션 1"에 위치된다는 결정에 대한 응답으로, 메모리 저장 회로(140)는 기록 회로(144)를 인이에블할 수 있다. 기록 회로(144)는 인에이블되는 것에 대한 응답으로 제1 메모리 어드레스(111)에 유효 데이터 값 "A"를 저장할 수 있다. 예컨대, 기록 회로(144)는 제1 메모리 어드레스(111)에 유효 데이터 값 "A"를 저장하도록 스캐터 명령(106)을 실행할 수 있다.
[0046] 방법(500)은 또한, 508에서, 제2 데이터 벡터로부터의 제2 유효 데이터를 메모리의 특정 메모리 어드레스에 저장하는 것을 포함한다. 특정 메모리 어드레스는 제2 오프셋에 기반할 수 있다. 예컨대, 도 1을 참조하면, 메모리 저장 회로(140)는, 기록 회로(144)를 인이에블할 수 있다. 기록 회로(144)는, 인에이블되는 것에 대한 응답으로, 제4 메모리 어드레스(114)(예컨대, 방법(500)에 따른 "제 2 메모리 어드레스")에 유효 데이터 값 "D"를 저장할 수 있다. 예컨대, 기록 회로(144)는 제4 메모리 어드레스(114)에 유효 데이터 값 "D"를 저장하도록 스캐터 명령(106)을 실행할 수 있다.
[0047] 일 구현에 따라, 방법(500)은, 메모리의 제1 메모리 어드레스에 인접한 부가적인 순차적인 메모리 어드레스들에 제1 데이터 벡터로부터 부가적인 유효 데이터를 저장하는 것을 포함할 수 있다. 특정 메모리 어드레스(제2 유효 데이터가 저장됨)는 부가적인 순차적인 메모리 어드레스의 마지막 메모리 어드레스에 인접할 수 있다. 방법(500)의 일 구현에 따라, 제1 유효 데이터 및 제2 유효 데이터는 병렬로 저장될 수 있다. 예컨대, 제1 유효 데이터와 병렬로 제2 유효 데이터를 저장하는 것은 제1 시간 기간 동안(예컨대, SIMD 프로세서(104)의 단일 클록 사이클 동안) 제1 유효 데이터를 저장하는 것, 및 제1 시간 기간 동안 제2 유효 데이터를 동시에 저장하는 것을 포함한다.
[0048] 방법(500)의 일 구현에 따라, 제1 메모리 어드레스 및 특정 메모리 어드레스는 압축된 메모리 데이터 벡터(예컨대, 압축된 메모리 데이터 벡터(110))의 메모리 어드레스들일 수 있다. 방법(500)은 또한 압축 메모리 데이터 벡터에 저장된 데이터를 페칭하는 것, 및 압축 메모리 데이터 벡터에 저장된 데이터를 페칭하는 것에 대한 응답으로, 압축 메모리 데이터 벡터에 저장된 데이터를 프로세싱하는 것을 포함할 수 있다.
[0049] 방법(500)의 일 구현에 따라, 압축된 메모리 데이터 벡터에 저장된 데이터를 프로세싱한 후에, "압축해제" 동작이 수행될 수 있다. 병렬-프리픽스 유효 카운트 명령은, 인접 메모리 내의 프로세싱된 데이터의 포지션들을 희소 데이터의 시퀀스의 유효 데이터의 포지션들에 맵핑하는 오프셋들을 결정하도록 실행될 수 있다. 이어서, 프로세싱된 데이터는 인접 메모리로부터 희소 데이터의 시퀀스 내의 유효 데이터의 포지션들로 로딩될 수 있다. 따라서, 인접 메모리 내의 프로세싱된 데이터의 압축된 어레인지먼트는, 데이터 벡터들(132-136)에서 유효 데이터의 포지션들에 기반하여, 프로세싱된 데이터의 희소 어레인지먼트로 압축해제될 수 있다.
[0050] 도 5의 방법(500)은, SIMD 프로세싱 파이프라인(152)에 의해 프로세싱되는 무효 데이터 값들의 양을 감소시킴으로써 프로세싱 효율을 개선할 수 있다. 유효 데이터 값들을 메모리(102)의 인접 어드레스들에 저장함으로써, 페치 회로(150)는 유효 데이터 값들(유효 및 무효 데이터 값들과 대조적으로) SIMD 프로세싱 파이프라인(152)에 제공할 수 있다. 부가적으로, 저장 프로세스 동안 각각의 데이터 벡터(132, 134, 136)에 대한 병렬-프리픽스 유효 카운트를 추적함으로써, 비교적 간단한 어드레싱 방식이 달성될 수 있다. 예컨대, 프로세서(104)는, 병렬-프리픽스 유효 카운트에 기반하여, 어떠한 데이터 값들 및/또는 메모리 어드레스들이 각각의 데이터 벡터(132, 134, 136)에 대응하는지를 식별할 수 있다.
[0051] 도 6을 참조하면, 전자 디바이스(600)의 블록도가 도시된다. 전자 디바이스(600)는, 예시적인 예로서, 모바일 디바이스(예컨대, 셀룰러 텔레폰)에 대응할 수 있다. 다른 구현들에서, 전자 디바이스(600)는 컴퓨터(예컨대, 서버, 랩톱 컴퓨터, 태블릿 컴퓨터, 또는 데스크톱 컴퓨터), 웨어러블 전자 디바이스(예컨대, 개인용 카메라, 머리-장착 디스플레이, 또는 시계), 차량 제어 시스템 또는 콘솔, 가전 제품, 셋톱 박스, 엔터테인먼트 유닛, 내비게이션 디바이스, PDA(personal digital assistant), 텔레비전, 모니터, 튜너, 라디오(예컨대, 위성 라디오), 뮤직 플레이어(예컨대, 디지털 뮤직 플레이어 또는 휴대용 뮤직 플레이어), 비디오 플레이어(예컨대, 디지털 비디오 플레이어, 이를테면, DVD(digital video disc) 플레이어 또는 휴대용 디지털 비디오 플레이어), 로봇, 헬스케어 디바이스, 다른 전자 디바이스, 또는 이들의 조합에 대응할 수 있다.
[0052] 전자 디바이스(600)는 프로세서(104), 이를테면, DSP(digital signal processor), CPU(central processing unit), GPU(graphics processing unit), 다른 프로세싱 디바이스, 또는 이들의 조합을 포함한다. 프로세서(104)는 하나 이상의 레지스터들(130), 메모리 저장 회로(140), 페치 회로(150) 및 SIMD 프로세싱 파이프라인(152)을 포함한다. 하나 이상의 레지스터들(110)은 제1 데이터 벡터(132), 제2 데이터 벡터(134) 및 제3 데이터 벡터(136)를 저장한다. 메모리 저장 회로(140)는 데이터 벡터 분석 회로(142), 기록 회로(144) 및 오프셋 결정 회로(146)를 포함한다. 프로세서(104)는 도 1에 대해 설명된 방식과 실질적으로 유사한 방식으로 동작할 수 있다.
[0053] 전자 디바이스(600)는 메모리(102)를 더 포함할 수 있다. 메모리(102)는 프로세서(104)에 커플링되거나 프로세서(104) 내에 통합될 수 있다. 메모리(102)는 RAM(random access memory), MRAM(magnetoresistive random access memory), 플래시 메모리, ROM(read-only memory), PROM(programmable read-only memory), EPROM(erasable programmable read-only memory), EEPROM(electrically erasable programmable read-only memory), 하나 이상의 레지스터들, 하드 디스크, 착탈식 디스크, CD-ROM(compact disc read-only memory), 다른 저장 디바이스, 또는 이들의 조합을 포함할 수 있다. 메모리(102)는 스캐터 명령(106), 병렬-프리픽스 유효 카운트 명령(108), 및 프로세서(610)에 의해 실행 가능한 하나 이상의 다른 명령들(668)을 저장할 수 있다. 예컨대, 프로세서(104)는 (데이터 벡터들(132, 134, 136)의) 유효 데이터 값들을 압축된 메모리 데이터 벡터(110)에 저장하도록 스캐터 명령(106)을 실행할 수 있다. 프로세서(104)는 또한, 압축된 메모리 데이터 벡터(110)에 대해 각각의 데이터 벡터(132, 134, 136)에 대한 오프셋을 결정하기 위해 병렬-프리픽스 유효 카운트 명령(108)을 실행할 수 있다. 프로세서(104)는 또한 도 5의 방법(500)을 수행하기 위해 하나 이상의 다른 명령들(668)을 실행할 수 있다.
[0054] 도 6은 프로세서(104) 및 디스플레이(628)에 커플링된 디스플레이 제어기(626)를 또한 도시한다. CODEC(coder/decoder)(634)는 또한 프로세서(104)에 커플링될 수 있다. 스피커(636) 및 마이크로폰(638)은 CODEC(634)에 커플링될 수 있다. 도 6은 또한, 무선 제어기 및/또는 트랜시버와 같은 무선 인터페이스(640)가 프로세서(104) 및 안테나(642)에 커플링될 수 있음을 나타낸다.
[0055] 특정 예에서, 프로세서(104), 디스플레이 제어기(626), 메모리(102), CODEC(634) 및 무선 인터페이스(640)는 시스템-인-패키지 또는 시스템-온-칩 디바이스(622)에 포함된다. 추가로, 입력 디바이스(630) 및 전력 공급기(644)는 시스템-온-칩 디바이스(622)에 커플링될 수 있다. 또한, 특정 예에서, 도 6에 예시된 바와 같이, 디스플레이(628), 입력 디바이스(630), 스피커(636), 마이크로폰(638), 안테나(642) 및 전원 공급기(644)는 시스템-온-칩 디바이스(622) 외부에 있다. 그러나, 디스플레이(628), 입력 디바이스(630), 스피커(636), 마이크로폰(638), 안테나(642) 및 전원 공급기(644) 각각은 시스템-온-칩 디바이스(622)의 컴포넌트, 이를테면, 인터페이스 또는 제어기에 커플링될 수 있다.
[0056] 개시된 예들과 관련하여, 컴퓨터-판독 가능 매체(예컨대, 메모리(102))는 동작들을 수행하기 위해 프로세서(예컨대, 프로세서(104))에 의해 실행 가능한 명령들을 저장한다. 동작들은 제1 유효 데이터를 메모리의 제1 메모리 어드레스에 저장하는 것을 포함한다. 제1 유효 데이터는, 유효 데이터 및 무효 데이터를 포함하는 제1 데이터 벡터의 제1 특정 포지션에 위치될 수 있다. 제1 특정 포지션은 유효 데이터와 연관될 수 있다. 동작들은 또한, 제1 데이터 벡터가 유효 데이터와 연관된 다른 포지션을 포함하는지 여부를 결정하는 것을 포함한다. 제1 데이터 벡터가 유효 데이터와 연관된 다른 포지션을 포함하면, 동작들은, 제1 메모리 어드레스에 인접한 제2 메모리 어드레스에 다른 포지션에 위치된 유효 데이터를 저장하는 것을 포함한다. 동작들은 또한, 제1 데이터 벡터가 유효 데이터와 연관된 다른 포지션을 포함하지 않는다면, 제2 메모리 어드레스에 제2 유효 데이터를 저장하는 것을 포함한다. 제2 데이터는, 유효 데이터 및 무효 데이터를 포함하는 제2 데이터 벡터의 제2 특정 포지션에 위치될 수 있다. 제2 특정 포지션은 유효 데이터와 연관될 수 있다.
[0057] 설명된 기술과 관련하여, 장치는, 병렬-프리픽스 유효 카운트 명령의 실행을 통해, 데이터 엘리먼트들의 시퀀스 내의 제1 유효 포지션과 연관된 제1 오프셋을 결정하기 위한 수단을 포함한다. 데이터 엘리먼트들의 시퀀스는 유효 데이터 및 무효 데이터를 포함할 수 있다. 예컨대, 제1 오프셋을 결정하기 위한 수단은 도 1 및 6의 메모리 저장 회로(140), 도 1 및 6의 데이터 벡터 분석 회로(142), 도 1 및 6의 오프셋 결정 회로(146), 도 1 및 6의 프로세서(104), 하나 이상의 다른 디바이스들, 회로들, 모듈들 또는 이들의 임의의 조합을 포함할 수 있다.
[0058] 장치는 또한, 병렬-프리픽스 유효 카운트 명령의 실행을 통해, 데이터 엘리먼트들의 시퀀스 내의 제2 유효 포지션과 연관된 제2 오프셋을 결정하기 위한 수단을 포함할 수 있다. 제2 오프셋은 제1 오프셋, 및 유효 데이터와 연관된 데이터 엘리먼트들의 시퀀스 내의 포지션들의 수에 기반할 수 있다. 예컨대, 제2 오프셋을 결정하기 위한 수단은 도 1 및 6의 메모리 저장 회로(140), 도 1 및 6의 데이터 벡터 분석 회로(142), 도 1 및 6의 오프셋 결정 회로(146), 도 1 및 6의 프로세서(104), 하나 이상의 다른 디바이스들, 회로들, 모듈들 또는 이들의 임의의 조합을 포함할 수 있다.
[0059] 앞서 개시된 디바이스들 및 기능들은 컴퓨터 파일들(예컨대, RTL, GDSII, GERBER 등)을 사용하여 설계 및 표현될 수 있다. 컴퓨터 파일들은 컴퓨터-판독 가능 매체 상에 저장될 수 있다. 이러한 파일들 중 일부 또는 전부는 이러한 파일들에 기반하여 디바이스들을 제조하는 제조 조작자들에게 제공될 수 있다. 결과적인 제품들은 웨이퍼들을 포함하고, 이어서 웨이퍼들은, 다이로 커팅되고 집적 회로들(또는 "칩들")에 패키징된다. 이어서, 칩들은 전자 디바이스들, 이를테면, 도 6은 전자 디바이스(600)에서 사용된다.
[0060] 본원에 개시된 구현들과 관련하여 설명된 다양한 예시적인 로직 블록들, 구성들, 모듈들, 회로들, 및 알고리즘 단계들이 전자 하드웨어, 컴퓨터 소프트웨어, 또는 이 둘의 결합들로서 구현될 수 있음을 당업자들은 추가로 인지할 것이다. 다양한 예시적인 컴포넌트들, 블록들, 구성들, 모듈들, 회로들, 및 단계들은 그들의 기능 관점에서 일반적으로 위에서 설명되었다. 이러한 기능이 하드웨어로 구현되는지 또는 소프트웨어로 구현되는지는 전체 시스템에 부과되는 설계 제약들 및 특정 애플리케이션에 의존한다. 당업자들은, 설명된 기능을 각각의 특정 애플리케이션마다 다양한 방식들로 구현할 수 있지만, 이러한 구현 결정들이 본 개시내용의 범위를 벗어나게 하는 것으로 해석되어서는 안 된다.
[0061] 본원에서 개시된 구현들과 관련하여 설명되는 방법 또는 알고리즘의 단계들은 직접적으로 하드웨어로, 프로세서에 의해 실행되는 소프트웨어 모듈로, 또는 이 둘의 결합으로 구현될 수 있다. 소프트웨어 모듈은 RAM(random access memory), 플래시 메모리, ROM(read-only memory), PROM(programmable read-only memory), EPROM(erasable programmable read-only memory), EEPROM(electrically erasable programmable read-only memory), 레지스터들, 하드 디스크, 착탈식 디스크, CD-ROM(compact disc read-only memory), 또는 당분야에 알려진 다른 형태의 저장 매체에 상주할 수 있다. 예시적인 비-일시적인(예컨대, 유형의) 저장 매체는, 프로세서가 저장 매체로부터 정보를 판독하고, 저장 매체에 정보를 기록할 수 있도록 프로세서에 커플링된다. 대안적으로, 저장 매체는 프로세서에 통합될 수 있다. 프로세서 및 저장 매체는 ASIC(an application-specific integrated circuit)에 상주할 수 있다. ASIC는 컴퓨팅 디바이스 또는 사용자 단말에 상주할 수 있다. 대안적으로, 프로세서 및 저장 매체는 컴퓨팅 디바이스 또는 사용자 단말에 이산 컴포넌트들로서 상주할 수 있다.
[0062] 개시된 구현들의 이전 설명은 당업자가 개시된 구현들을 사용하거나 또는 실시할 수 있도록 하기 위해 제공된다. 이러한 구현들에 대한 다양한 수정들은 당업자들에게 용이하게 명백할 것이며, 본원에서 정의된 원리들은 본 개시내용의 범위로부터 벗어남이 없이 다른 구현들에 적용될 수 있다. 따라서, 본 개시내용은 본원에서 도시된 구현들로 제한되도록 의도되는 것이 아니라, 다음의 청구항들에 의해 정의되는 바와 같은 원리들 및 신규한 특징들과 일치하는 가능한 가장 넓은 범위에 부합하도록 의도된다.

Claims (30)

  1. 방법으로서,
    SIMD(single-instruction-multiple-data) 프로세서에서:
    상기 SIMD 프로세서의 특정 클록 사이클 동안:
    유효 데이터 및 무효 데이터를 포함하는 제1 벡터 내의 제1 유효 포지션과 연관된 제1 오프셋을 결정하고; 그리고
    제2 벡터 내의 제2 유효 포지션과 연관된 제2 오프셋을 결정하기 위해
    병렬-프리픽스 유효 카운트 명령(parallel-prefix valid count instruction)을 실행하는 단계를 포함하고,
    상기 제2 오프셋은 상기 제1 오프셋에 기반하고, 그리고 유효 데이터와 연관된, 상기 제1 벡터 내의 포지션들의 수에 추가로 기반하는, 방법.
  2. 제1항에 있어서,
    상기 제1 오프셋은 상기 제2 오프셋과 병렬로 결정되는, 방법.
  3. 제1항에 있어서,
    상기 제2 오프셋을 컴퓨팅하기 위해, 유효 데이터와 연관된, 상기 제1 유효 포지션과 상기 제2 유효 포지션 사이의 포지션들의 수를 상기 제1 오프셋에 합산하는 단계를 더 포함하는, 방법.
  4. 제1항에 있어서,
    상기 방법은:
    상기 제1 벡터로부터의 제1 유효 데이터를 메모리의 제1 메모리 어드레스에 저장하는 단계 ― 상기 제1 메모리 어드레스는 상기 제1 오프셋에 기반함 ―; 및
    상기 제2 벡터로부터의 제2 유효 데이터를 상기 메모리의 특정 메모리 어드레스에 저장하는 단계를 더 포함하고,
    상기 특정 메모리 어드레스는 상기 제2 오프셋에 기반하는, 방법.
  5. 제4항에 있어서,
    상기 제1 벡터로부터의 부가적인 유효 데이터를, 상기 메모리의 상기 제1 메모리 어드레스에 인접한 부가적인 순차적인 메모리 어드레스들에 저장하는 단계를 더 포함하는, 방법.
  6. 제5항에 있어서,
    상기 특정 메모리 어드레스는 상기 부가적인 순차적인 메모리 어드레스들 중 마지막 메모리 어드레스에 인접한, 방법.
  7. 제4항에 있어서,
    상기 제1 유효 데이터 및 상기 제2 유효 데이터는 병렬로 저장되는, 방법.
  8. 제7항에 있어서,
    상기 제1 유효 데이터와 병렬로 상기 제2 유효 데이터를 저장하는 것은:
    제1 시간 기간 동안 상기 제1 유효 데이터를 저장하는 것; 및
    상기 제1 시간 기간 동안 상기 제2 유효 데이터를 동시에 저장하는 것을 포함하는, 방법.
  9. 제4항에 있어서,
    상기 제1 메모리 어드레스 및 상기 특정 메모리 어드레스는 압축된 메모리 데이터 벡터의 메모리 어드레스들인, 방법.
  10. 제9항에 있어서,
    상기 압축된 메모리 데이터 벡터에 저장된 데이터를 페칭(fetch)하는 단계를 더 포함하는, 방법.
  11. 제10항에 있어서,
    상기 압축된 메모리 데이터 벡터에 저장된 데이터를 페칭하는 것에 대한 응답으로, 상기 압축된 메모리 데이터 벡터에 저장된 데이터를 프로세싱하는 단계를 더 포함하는, 방법.
  12. 제11항에 있어서,
    상기 압축된 메모리 데이터 벡터에 저장된 데이터를 프로세싱한 후에:
    인접 메모리 내의 프로세싱된 데이터의 포지션들을 데이터의 희소 시퀀스(sparse sequence) 내의 유효 데이터의 포지션들로 맵핑하는 오프셋들을 결정하기 위해 상기 병렬-프리픽스 유효 카운트 명령을 실행하는 단계; 및
    상기 프로세싱된 데이터를 상기 인접 메모리로부터 상기 데이터의 희소 시퀀스 내의 유효 데이터의 포지션들로 로딩(load)하는 단계를 더 포함하는, 방법.
  13. 제1항에 있어서,
    상기 제1 오프셋 및 상기 제2 오프셋에 기반하는 메모리의 어드레스들에 저장될 압축된 벡터를 전송하는 단계 ― 상기 압축된 벡터는 상기 제1 벡터의 유효 데이터 및 상기 제2 벡터의 제2 유효 데이터를 포함함 ―;
    수집 명령을 실행하는 것에 대한 응답으로, 상기 메모리로부터 상기 압축된 벡터를 수신하는 단계; 및
    상기 제1 오프셋 및 상기 제2 오프셋에 기반하여 상기 압축된 벡터를 압축해제하는 단계를 더 포함하는, 방법.
  14. 장치로서,
    메모리; 및
    SIMD(single-instruction-multiple-data) 프로세서를 포함하고,
    상기 SIMD 프로세서는, 상기 SIMD 프로세서의 특정 클록 사이클 동안:
    유효 데이터 및 무효 데이터를 포함하는 제1 벡터 내의 제1 유효 포지션과 연관된 제1 오프셋을 결정하고; 그리고
    제2 벡터 내의 제2 유효 포지션과 연관된 제2 오프셋을 결정하기 위해
    병렬-프리픽스 유효 카운트 명령을 실행하도록 구성되고,
    상기 제2 오프셋은, 상기 제1 오프셋, 및 유효 데이터와 연관된 상기 제1 벡터 내의 포지션들의 수에 기반하는, 장치.
  15. 제14항에 있어서,
    상기 SIMD 프로세서는 상기 제2 오프셋과 병렬로 상기 제1 오프셋을 결정하도록 추가로 구성되는, 장치.
  16. 제14항에 있어서,
    상기 SIMD 프로세서는, 상기 제2 오프셋을 컴퓨팅하기 위해, 유효 데이터와 연관된, 상기 제1 유효 포지션과 상기 제2 유효 포지션 사이의 포지션들의 수를 상기 제1 오프셋에 합산하도록 추가로 구성되는, 장치.
  17. 제14항에 있어서,
    상기 SIMD 프로세서는:
    상기 제1 벡터로부터의 제1 유효 데이터를 상기 메모리의 제1 메모리 어드레스에 저장하고 ― 상기 제1 메모리 어드레스는 상기 제1 오프셋에 기반함 ― ; 그리고
    상기 제2 벡터로부터의 제2 유효 데이터를 상기 메모리의 특정 메모리 어드레스에 저장하도록
    추가로 구성되고,
    상기 특정 메모리 어드레스는 상기 제2 오프셋에 기반하는, 장치.
  18. 제17항에 있어서,
    상기 SIMD 프로세서는, 상기 제1 벡터로부터의 부가적인 유효 데이터를, 상기 메모리의 상기 제1 메모리 어드레스에 인접한 부가적인 순차적인 메모리 어드레스들에 저장하도록 추가로 구성되는, 장치.
  19. 제18항에 있어서,
    상기 특정 메모리 어드레스는 상기 부가적인 순차적인 메모리 어드레스들 중 마지막 메모리 어드레스에 인접한, 장치.
  20. 제17항에 있어서,
    상기 SIMD 프로세서는 상기 제1 유효 데이터 및 상기 제2 유효 데이터를 병렬로 상기 메모리에 저장하도록 추가로 구성되는, 장치.
  21. 제17항에 있어서,
    상기 제1 메모리 어드레스 및 상기 특정 메모리 어드레스는 압축된 메모리 데이터 벡터의 메모리 어드레스들인, 장치.
  22. 제21항에 있어서,
    상기 SIMD 프로세서는 상기 압축된 메모리 데이터 벡터에 저장된 데이터를 페칭하도록 추가로 구성되는, 장치.
  23. 적어도 하나의 명령을 포함하는 비-일시적인 컴퓨터-판독가능 저장 매체로서,
    상기 적어도 하나의 명령은, SIMD(single-instruction-multiple-data) 프로세서에 의해 실행될 때, 상기 SIMD 프로세서로 하여금, 동작들을 수행하게 하고, 상기 동작들은:
    상기 SIMD 프로세서의 특정 클록 사이클 동안 병렬-프리픽스 유효 카운트 명령의 실행에 의해, 유효 데이터 및 무효 데이터를 포함하는 제1 벡터 내의 제1 유효 포지션과 연관된 제1 오프셋을 결정하는 것; 및
    상기 SIMD 프로세서의 상기 특정 클록 사이클 동안 상기 병렬-프리픽스 유효 카운트 명령의 실행에 의해, 제2 벡터 내의 제2 유효 포지션과 연관된 제2 오프셋을 결정하는 것
    을 포함하고,
    상기 제2 오프셋은, 상기 제1 오프셋, 및 유효 데이터와 연관된 상기 제1 벡터 내의 포지션들의 수에 기반하는, 비-일시적인 컴퓨터-판독가능 저장 매체.
  24. 제23항에 있어서,
    상기 제1 오프셋은 상기 제2 오프셋과 병렬로 결정되는, 비-일시적인 컴퓨터-판독가능 저장 매체.
  25. 제23항에 있어서,
    상기 동작들은, 상기 제2 오프셋을 컴퓨팅하기 위해, 유효 데이터와 연관된, 상기 제1 유효 포지션과 상기 제2 유효 포지션 사이의 포지션들의 수를 상기 제1 오프셋에 합산하는 것을 더 포함하는, 비-일시적인 컴퓨터-판독가능 저장 매체.
  26. 제23항에 있어서,
    상기 동작들은:
    상기 제1 벡터로부터의 제1 유효 데이터를 메모리의 제1 메모리 어드레스에 저장하는 것 ― 상기 제1 메모리 어드레스는 상기 제1 오프셋에 기반함 ―; 및
    상기 제2 벡터로부터의 제2 유효 데이터를 상기 메모리의 특정 메모리 어드레스에 저장하는 것
    을 더 포함하고,
    상기 특정 메모리 어드레스는 상기 제2 오프셋에 기반하는, 비-일시적인 컴퓨터-판독가능 저장 매체.
  27. 제26항에 있어서,
    상기 동작들은, 상기 제1 벡터로부터의 부가적인 유효 데이터를, 상기 메모리의 상기 제1 메모리 어드레스에 인접한 부가적인 순차적인 메모리 어드레스들에 저장하는 것을 더 포함하는, 비-일시적인 컴퓨터-판독가능 저장 매체.
  28. 장치로서,
    데이터를 저장하기 위한 수단; 및
    특정 클록 사이클 동안, 병렬-프리픽스 유효 카운트 명령의 실행을 통해 제1 벡터 내의 제1 유효 포지션과 연관된 제1 오프셋을 결정하고 ― 상기 제1 벡터는 유효 데이터 및 무효 데이터를 포함함 ―, 그리고 상기 특정 클록 사이클 동안, 상기 병렬-프리픽스 유효 카운트 명령의 실행을 통해 제2 벡터 내의 제2 유효 포지션과 연관된 제2 오프셋을 결정하기 위해, SIMD(single-instruction-multiple-data) 동작들을 수행하기 위한 수단을 포함하고,
    상기 제2 오프셋은 상기 제1 오프셋, 및 유효 데이터와 연관된 상기 제1 벡터 내의 포지션들의 수에 기반하는, 장치.
  29. 제28항에 있어서,
    상기 SIMD 동작들을 수행하기 위한 수단은 상기 제2 오프셋과 병렬로 상기 제1 오프셋을 결정하도록 구성되는, 장치.
  30. 제28항에 있어서,
    상기 SIMD 동작들을 수행하기 위한 수단은, 유효 데이터와 연관된, 상기 제1 유효 포지션과 상기 제2 유효 포지션 사이의 포지션들의 수를 상기 제1 오프셋에 합산함으로써 상기 제2 오프셋을 결정하도록 구성되는, 장치.
KR1020197007881A 2016-09-22 2017-07-27 인접 메모리 어드레스에서의 데이터 저장 KR102561619B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/273,366 2016-09-22
US15/273,366 US10162752B2 (en) 2016-09-22 2016-09-22 Data storage at contiguous memory addresses
PCT/US2017/044227 WO2018057115A1 (en) 2016-09-22 2017-07-27 Data storage at contiguous memory addresses

Publications (2)

Publication Number Publication Date
KR20190056365A KR20190056365A (ko) 2019-05-24
KR102561619B1 true KR102561619B1 (ko) 2023-07-28

Family

ID=59558510

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020197007881A KR102561619B1 (ko) 2016-09-22 2017-07-27 인접 메모리 어드레스에서의 데이터 저장

Country Status (9)

Country Link
US (1) US10162752B2 (ko)
EP (1) EP3516774B1 (ko)
JP (1) JP6985377B2 (ko)
KR (1) KR102561619B1 (ko)
CN (1) CN109690956B (ko)
BR (1) BR112019005612A2 (ko)
CA (1) CA3033960A1 (ko)
ES (1) ES2967320T3 (ko)
WO (1) WO2018057115A1 (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111158757B (zh) * 2019-12-31 2021-11-30 中昊芯英(杭州)科技有限公司 并行存取装置和方法以及芯片

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130024654A1 (en) * 2011-07-20 2013-01-24 Gove Darryl J Vector operations for compressing selected vector elements
US20140013077A1 (en) * 2011-12-08 2014-01-09 Oracle International Corporation Efficient hardware instructions for single instruction multiple data processors

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0731669B2 (ja) * 1986-04-04 1995-04-10 株式会社日立製作所 ベクトル・プロセツサ
JP2000022707A (ja) 1998-07-03 2000-01-21 Fujitsu Ltd データ伝送方法、およびデータ伝送システム
CN1400754A (zh) 2001-05-28 2003-03-05 松下电器产业株式会社 数据传送装置
US7889765B2 (en) 2005-11-30 2011-02-15 Time Warner Cable Inc. Apparatus and methods for utilizing variable rate program streams in a network
KR101490327B1 (ko) 2006-12-06 2015-02-05 퓨전-아이오, 인크. 뱅크 인터리브를 이용한 솔리드-스테이트 스토리지의 명령 관리 장치, 시스템 및 방법
US9792117B2 (en) * 2011-12-08 2017-10-17 Oracle International Corporation Loading values from a value vector into subregisters of a single instruction multiple data register
US9274937B2 (en) 2011-12-22 2016-03-01 Longitude Enterprise Flash S.A.R.L. Systems, methods, and interfaces for vector input/output operations
CN107729018A (zh) * 2012-09-28 2018-02-23 英特尔公司 循环向量化方法和设备
US9268571B2 (en) * 2012-10-18 2016-02-23 Qualcomm Incorporated Selective coupling of an address line to an element bank of a vector register file
US9606961B2 (en) * 2012-10-30 2017-03-28 Intel Corporation Instruction and logic to provide vector compress and rotate functionality
US11113054B2 (en) * 2013-09-10 2021-09-07 Oracle International Corporation Efficient hardware instructions for single instruction multiple data processors: fast fixed-length value compression
US10133570B2 (en) * 2014-09-19 2018-11-20 Intel Corporation Processors, methods, systems, and instructions to select and consolidate active data elements in a register under mask into a least significant portion of result, and to indicate a number of data elements consolidated

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130024654A1 (en) * 2011-07-20 2013-01-24 Gove Darryl J Vector operations for compressing selected vector elements
US20140013077A1 (en) * 2011-12-08 2014-01-09 Oracle International Corporation Efficient hardware instructions for single instruction multiple data processors

Also Published As

Publication number Publication date
BR112019005612A2 (pt) 2019-10-08
EP3516774B1 (en) 2023-11-29
EP3516774A1 (en) 2019-07-31
US10162752B2 (en) 2018-12-25
KR20190056365A (ko) 2019-05-24
CN109690956A (zh) 2019-04-26
US20180081803A1 (en) 2018-03-22
CN109690956B (zh) 2024-02-13
ES2967320T3 (es) 2024-04-29
JP6985377B2 (ja) 2021-12-22
JP2019530091A (ja) 2019-10-17
CA3033960A1 (en) 2018-03-29
WO2018057115A1 (en) 2018-03-29

Similar Documents

Publication Publication Date Title
CN111492343B (zh) 浮点乘法运算处理的系统和方法
EP3033670B1 (en) Vector accumulation method and apparatus
CN111651205B (zh) 一种用于执行向量内积运算的装置和方法
CN111651203B (zh) 一种用于执行向量四则运算的装置和方法
KR20140073553A (ko) Fifo 로드 명령
TWI803634B (zh) 子向量數值之加載及複製之處理器、操作一處理器之方法、處理設備及包含指令的非暫時性電腦可讀媒體
WO2020198223A1 (en) General purpose register and wave slot allocation in graphics processing
WO2013036950A1 (en) Instruction packet including multiple instructions having a common destination
KR102561619B1 (ko) 인접 메모리 어드레스에서의 데이터 저장
KR102092049B1 (ko) Simd 슬라이딩 윈도우 연산
US10706316B2 (en) System and method of feature descriptor processing
CN109478199B (zh) 分段线性逼近的系统及方法
US20170046168A1 (en) Scalable single-instruction-multiple-data instructions
CN111857822B (zh) 一种运算装置及其操作方法
US20150154144A1 (en) Method and apparatus for performing single instruction multiple data (simd) operation using pairing of registers
WO2022191859A1 (en) Vector processing using vector-specific data type
CN111209041A (zh) 神经网络处理器、片上系统及电子设备

Legal Events

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