KR101602020B1 - 프레디케이트 카운터 - Google Patents

프레디케이트 카운터 Download PDF

Info

Publication number
KR101602020B1
KR101602020B1 KR1020130126826A KR20130126826A KR101602020B1 KR 101602020 B1 KR101602020 B1 KR 101602020B1 KR 1020130126826 A KR1020130126826 A KR 1020130126826A KR 20130126826 A KR20130126826 A KR 20130126826A KR 101602020 B1 KR101602020 B1 KR 101602020B1
Authority
KR
South Korea
Prior art keywords
predicate
counter
predicate counter
loop
processor
Prior art date
Application number
KR1020130126826A
Other languages
English (en)
Other versions
KR20140051805A (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
Priority claimed from US13/720,624 external-priority patent/US9201828B2/en
Priority claimed from US13/963,793 external-priority patent/US9342306B2/en
Application filed by 아날로그 디바이시즈 글로벌 filed Critical 아날로그 디바이시즈 글로벌
Publication of KR20140051805A publication Critical patent/KR20140051805A/ko
Application granted granted Critical
Publication of KR101602020B1 publication Critical patent/KR101602020B1/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
    • 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

Landscapes

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

Abstract

예시적인 실시예에 따르면, 디지털 신호 프로세서(DSP)와 같은 프로세서는 프레디케이트 카운터로 작용하는 레지스터를 구비한다. 상기 프레디케이트 카운터는 2개를 초과하는 유용한 값(useful value)을 포함할 수 있고, 명령을 실행하는 조건으로 작용하는 외에, 또한 루프 또는 조건부 브랜치(loop or conditional branch) 내 네스팅 레벨(nesting level)을 추적할 수 있다. 일부 경우에, 상기 프레디케이트 카운터는 단일 명령, 다중 데이터(single-instruction, multiple data: SIMD) 모드 또는 레지스터 내 SIMD(SIMD-within-a-register: SWAR) 모드에서 동작하도록 구성될 수 있다.

Description

프레디케이트 카운터{PREDICATE COUNTER}
관련 출원에 대한 상호 참조
본 출원은 전체 내용이 본 명세서에 참조 문헌으로 병합된 미국 가출원 제61/717,541호(출원일: 2012년 10월 23일, 발명의 명칭: "Predicate Counter")의 우선권을 청구한다. 공동 계류 중인 미국 출원 제13/720,624호(발명의 명칭: "Memory Interconnect Network Architecture for Vector Processors", 출원일: 2012년 12월 19일)("'624 출원")이 또한 본 명세서에 참조 문헌으로 병합된다.
기술 분야
본 발명은 일반적으로 병렬 처리에 관한 것으로, 보다 상세하게는 프레디케이트 카운터(predicate counter)를 사용하는 벡터 프로세서(vector processor)에 관한 것이다.
프로세서에 의하여 병렬 처리(parallel processing)가 예를 들어, 디지털 신호 프로세서(digital signal processor: DSP)에 의해 처리 애플리케이션(processing application)을 최적화하고 디지털 신호 처리 애플리케이션을 최적화하기 위하여 종종 구현된다. 프로세서는 단일 명령, 다중 데이터(single instruction, multiple data: SIMD), 또는 데이터 병렬 프로세서로 동작하며 병렬 처리를 달성할 수 있다. SIMD 연산(operation)에서, 단일 명령은 프로세서의 다수의 처리 요소로 송신되고, 여기서 각 처리 요소는 상이한 데이터에 동일한 연산을 독립적으로 수행할 수 있다. 지속적으로 더 높은 처리량과 증가된 성능을 요구하는 증가하는 수요(demand) 때문에 처리 요소들은 또한 그 연관된 레지스터 내 다중 세트의 데이터에 연산할 수 있는 레지스터 내 SIMD(SIMD-within-a-register: (SWAR)를 야기하였다. 예를 들어, 단일 32-비트 레지스터는 4개의 8-비트 데이터, 8개의 4-비트 데이터, 또는 3개의 10-비트 데이터를 포함할 수 있고, 이들 데이터 각각은 단일 처리 요소에 의해 병렬로 연산될 수 있다.
SWAR이 프로세서의 하드웨어에 구현하는 것이 상대적으로 저렴하지만, SWAR은 프로그래밍 관점에서는 문제를 야기한다. 예를 들어, SWAR 프로그래밍은 일반적으로 내재성(intrinsics), 인라인 어셈블리(inline assembly), 및/또는 C/C++와 같은 하이 레벨 언어 중에서 ISO C 또는 C++ 표준의 일부가 아닌 특수한(specialized) 벡터 데이터 유형(예를 들어, float2, int4, short4 등)을 필요로 한다. 이러한 프로그래밍 옵션(특수한 벡터 데이터 유형, 내재성 및/또는 인라인 어셈블리)은 프로세서에 특정되게 하므로, SWAR 프로그래밍은 포팅 레거시 코드(porting legacy code)에 어려움을 제기한다. 나아가, SWAR 프로그래밍은 추가적인 레벨의 병렬 처리를 벡터 프로세서에 추가하므로, 종래의 프로세서는 프로세서가 2개의 레벨의 병렬 연산(2가지 방식의 병렬성), 즉(SWAR을 사용하는) 처리 요소 내에서 하나의 레벨의 병렬 처리 및 프로세서의 벡터 유닛의 처리 요소들 사이에 다른 레벨의 병렬 처리를 인식하는 것을 보장하는 데 있어 프로그래머에 부담을 준다. 따라서, 병렬 처리를 수행하는 기존의 프로세서 아키텍처, 및 연관된 방법은 일반적으로 그 의도된 목적에는 적절하였을지라도, 이들은 모든 측면에서 전체적으로 만족스러운 것은 아니다.
본 발명은 첨부 도면과 함께 판독할 때 이하 상세한 설명으로부터 더 잘 이해될 것이다. 산업계 표준 실무에 따라, 여러 특징부는 축척에 맞게 그려져 있지 않고 단지 예시를 위한 목적으로만 사용된 것으로 이해된다. 사실, 여러 특징부의 치수는 설명을 명확히 하기 위하여 임의로 증가된 것이거나 감소된 것일 수 있다.
도 1은 프레디케이트 카운터를 포함하는 예시적인 디지털 신호 프로세서의 블록도;
도 2는 레지스터 내 SIMD 연산을 수행하도록 구성된 디지털 신호 프로세서 내 레지스터의 블록도.
발명의 내용
일 측면에서, 처리 요소; 상기 처리 요소에 조건부로-실행가능한 명령(conditionally-executable instruction)을 제공하도록 구성된 시퀀서(sequencer)로서, 상기 조건은 프레디케이트 카운터(predicate counter)에서 인코딩된 프레디케이트에 의해 제공된 것인, 상기 시퀀서; 및 2개를 초과하는 의미있는 값(meaningful value)을 수신하고 그 값을 프레디케이트 카운터로 제공하도록 구성된 프레디케이트 카운터 레지스터를 포함하는 프로세서가 개시된다.
또 다른 측면에서, 컴퓨터에 의해 수행되는 방법으로서, 2개를 초과하는 유용한 값(useful value)을 수신하도록 구성된 프레디케이트 카운터와 연관된 명령을 수신하는 단계; 상기 프레디케이트 카운터가 제1 값이면, 상기 명령을 실행하는 단계; 및 상기 프레디케이트 카운터가 상기 제1 값이 아니면, 상기 명령을 무시하는 단계를 포함하는 방법이 개시된다.
더 다른 실시예에서, 소프트웨어 명령을 저장한 유형적인 컴퓨터-판독가능한 매체로서, 상기 명령은, 실행될 때, 2개를 초과하는 유용한 값을 구비하는 프레디케이트 카운터를 판독하는 동작; 조건부 명령을 판독하는 동작; 상기 프레디케이트 카운터가 제1 값이면 상기 명령을 실행하는 동작; 및 상기 프레디케이트 카운터가 상기 제1 값이 아니면, 상기 명령을 무시하고 상기 프레디케이트 카운터의 값에 기초하여 상기 프레디케이트 카운터를 조작(manipulate)하는 동작을 프로세서에 수행하게 하는 컴퓨터-판독가능한 매체가 개시된다.
이하 상세한 설명은 본 발명의 상이한 특징을 구현하기 위한 많은 상이한 실시예 또는 예를 제공한다. 성분 및 배열의 특정 예는 본 발명을 간략화하도록 이하에 설명된다. 이들은 물론 단지 예시일 뿐이며 발명을 제한하는 것으로 의도된 것이 전혀 아니다. 나아가, 본 발명은 여러 예에서 참조 부호 및/또는 문자를 반복할 수 있다. 본 상세한 설명은 간략화와 명확화를 위한 것일 뿐, 개시된 여러 실시예 및/또는 구성들 사이의 관계를 이들 개시된 것으로 한정하려는 것이 전혀 아니다. 상이한 실시예는 상이한 장점을 구비할 수 있고, 특정 장점이 임의의 실시예에 반드시 요구되는 것은 아니다.
명령 프레디케이션(instruction predication)은 캐시(cache) 성능 및 명령 파이프라이닝(pipelining)을 실질적으로 개선시킬 수 있는 브랜치된 연산(branched operation)을 선형화(linearizing)하는 것에 관한 것이다. 전통적인 브랜치된 형태(topology)에서, 조건부 명령은 다음 형식(form)일 수 있다:
Figure 112013096085310-pat00001
새로운 위치로 브랜치하는 것은 파이프라이닝 및 메모리 캐시를 파기(break)하는 것이므로, 조건부 코드(conditional code)를 실행하는 것은 클록 사이클(clock cycle) 면에서 매우 값비싼 것일 수 있다. 프레디케이션은 다음과 같이 명령을 선형화하는 것에 의해 브랜치 효과를 개선한다:
Figure 112013096085310-pat00002
프레디케이트된 명령은 이에 따라 서로 인라인(inline)으로 나타나지만, 각 명령에 첨부된 프레디케이트가 참(true)인 경우에만 실행된다. 프레디케이션은 그리하여 제어 종속성(control dependence)을 데이터 종속성으로 전환(turn)시키며, 이는 프로세서로 하여금 파이프라이닝 및 캐시를 위태롭게 하지 않고 많은 연산을 병렬로 실행할 수 있게 한다.
본 발명의 예시적인 실시예에 따르면, 정수 카운터가 명령에 프레디케이트로 사용되어, 프레디케이트 및 명령을 위한 네스팅 상태(nesting state)를 인코딩할 수 있다. 예를 들어, "0"과 같은 특정 값이 명령을 실행할 수 있는 프레디케이트로 작용하는 반편, 임의의 비제로(nonzero) 값은 이 명령을 실행하지 않는 것을 나타낼 수 있다.
이하 상세한 설명을 위하여, "프레디케이트 카운터"는 명령의 실행을 제어하는 프레디케이트로 사용되는 카운터이고, 이와 달리 단순한 부울리안(Boolean) "플래그"는 2개를 초과하는 의미있는 값을 구비한다. 프레디케이트 카운터는 예를 들어 네스팅된 IF-ELSE-ENDIF 구조 내에서, 또는 네스팅된 루프 내에서 프레디케이트 및 네스팅 상태를 인코딩할 수 있다. 고유한 값은 카운터와 연관된 명령을 인에이블할 수 있고, 모든 다른 값은 연관된 명령이 일부 레벨의 네스팅에서 디스에이블되는 것을 나타낸다. 예를 들어, 카운터가 제로로 설정(set)되면, 카운터에 의해 제어되는 명령은 정상적(normally)으로 실행이 허용되는 반면, 그렇지 않은 경우에 이 명령은 실행이 금지된다. 다른 예시적인 실시예에서, 이 고유한 값은 비 제한적인 예로서, 1(one), MAXINT(정수 레지스터의 최대 값), -MAXINT(부호 있는 정수 레지스터의 음의 최대 값), 및 무한대, 음의 무한대, 및 레지스터에서 특수 코드로 표현될 수 있는 비숫자(not-a-number)일 수 있다.
프레디케이트 카운터는 아래에서 보다 상세히 설명된 바와 같이 명령을 선형화하는데, 및 단일 명령에서, SWAR 연산을 선형화하는데 유용하다.
이제 첨부 도면을 참조하면, 도 1은 본 발명의 여러 측면에 따른 예시적인 디지털 신호 프로세서(DSP)(100)의 개략 블록도이다. 도 1은 본 발명의 신규한 개념을 간략화하여 더 잘 이해할 수 있게 하기 위하여 간략화된 것이다. 추가적인 특징부는 DSP(100)에 추가될 수 있고, 이하 설명된 특징부 중 일부는 DSP(100)의 다른 실시예에서 교체되거나 제거될 수 있다.
DSP(100)는 제어 유닛(110), 메모리(120), 및 컴퓨트 어레이(compute array)(130)를 포함할 수 있다. 일례에서, 제어 유닛(110) 및 컴퓨트 어레이(130)는 DSP(100)의 컴퓨테이션(computation) 및 데이터 처리 기능을 수행할 수 있는 코어 프로세서를 구성한다. DSP(100)의 일부 실시예는 마이크로제어기 명령을 실행하는 마이크로제어기, 직접 메모리 액세스(direct memory access: DMA) 유닛, 및 오프 칩 디바이스에 대한 여러 인터페이스와 같은 다른 성분을 포함할 수 있다. 나아가, 메모리(120)는 여기서 단일 논리 블록인 것으로 도시되어 있으나, 이 기술 분야에 통상의 지식을 가진 자라면 메모리(120)가 시스템 메인 메모리, 여러 레벨의 온 칩 캐시, 및/또는 다른 휘발성 또는 비 휘발성 메모리 기술을 포함할 수 있다는 것을 인식할 수 있을 것이다.
제어 유닛(110)은 DSP(100)의 프로그램 실행을 가능하게 한다. 제어 유닛(110)은 산술 논리 유닛 및 데이터 어드레스 생성(arithmetic logic unit and data address generation: ALU-DAG) 유닛(112), 프로그램 시퀀서(114), 및 프로그램 메모리(116)를 포함할 수 있다. 제어 유닛(110)은 명령 캐시, 타이머, 및 명령 레지스터와 같은 다른 성분을 더 포함할 수 있다. ALU-DAG 유닛(112)은 일반 목적 정수 컴퓨테이션을 지원하고 메모리 어드레스를 위한 어드레스를 공급한다. 예를 들어, ALU-DAG(112)는 데이터가 메모리(120) 및 레지스터(아래에 설명된 컴퓨트 어레이(130)의 레지스터 파일과 같은 것) 사이에서 전송될 때 메모리 어드레스를 제공한다. ALU-DAG 유닛(112)은 데이터 메모리(예를 들어, 메모리(120)) 및/또는 프로그램 메모리(116)에 어드레스를 공급할 수 있다. 프로그램 시퀀서(114)는 명령 페치(fetch)를 위해 프로그램 메모리(116)에 명령 어드레스를 제공한다. 프로그램 메모리(116)는 DSP(100)가 데이터(메모리(120)에 저장된 것과 같은)를 처리하도록 구현하는 프로그램을 저장하고 처리 데이터를 더 저장할 수 있다. 프로그램은 하나 이상의 명령을 구비하는 명령 세트를 포함하고, DSP(100)는 명령을 페치, 명령을 디코딩, 및 명령을 실행하는 것에 의해 프로그램을 구현한다. 일례에서, 프로그램은 프레디케이트 카운터에 의존하는 알고리즘을 포함하는 여러 DSP 알고리즘을 구현하는 명령 세트를 포함할 수 있다.
메모리(120)는 DSP(100)(데이터 메모리)에 의해 처리되는 정보/데이터, 정보/데이터를 처리하는데 DSP(100)에 의해 구현되는 프로그램(프로그램 메모리), 또는 이들의 조합을 저장한다. 도시된 실시예에서, 메모리(120)는 다중 뱅크 인터리빙된 메모리 구조(multi-banked interleaved memory structure)를 구비하여, 메모리(120)는 메모리 뱅크(M1, M2, M3, … Mn)를 포함하고, 여기서 n은 메모리(120)의 메모리 뱅크의 총 개수이다. 일례에서, 메모리(120)는 SRAM(static random-access memory), DRAM(dynamic RAM), 플래시 또는 다른 적절한 메모리 기술과 같은 랜덤 액세스 메모리이다. 일례에서, 하나 이상의 메모리 뱅크(M)는 별개의(separate) RAM이다. 대안적으로, 여러 구현예에서, 메모리(120)는 또 다른 적절한 유형의 메모리이다.
상호연결 네트워크(140), 상호연결 네트워크(142) 및 상호연결 네트워크(144)는 제어 유닛(110), 메모리(120) 및 컴퓨트 어레이(130)를 상호 연결하여, 제어 유닛(110), 메모리(120) 및 컴퓨트 어레이(130) 사이에 통신 경로를 제공한다. 상호연결 네트워크(140), 상호연결 네트워크(142) 및 상호연결 네트워크(144)는 단일 버스, 다중 버스, 크로스바(crossbar) 네트워크, 단일-스테이지 네트워크, 다중스테이지 네트워크, 다른 유형의 상호연결 네트워크, 또는 이들의 조합을 포함할 수 있다. 제어 유닛(110)은 명령 및 데이터 어드레스를 컴퓨트 어레이(130)에 상호연결 네트워크(142)를 통해 발송한다. 상호연결 네트워크(142)는 명령 및 데이터를 위한 어드레스를 컴퓨트 어레이(130)의 여러 처리 요소(processing element: PE)에 상호연결 네트워크(142)를 통해 전달한다. 상호연결 네트워크(144)는 메모리(예를 들어, 메모리(120), 프로그램 메모리(116), 다른 메모리, 또는 이들의 조합)로부터 데이터 및/또는 명령을 전달하여, DSP(100) 내 임의의 레지스터의 컨텐츠가 임의의 다른 레지스터로 또는 임의의 메모리 위치로 전달될 수 있게 하고 메모리(120)는 데이터 오퍼랜드(operand)(값)를 컴퓨트 어레이(130)에 제공할 수 있게 한다.
일부 실시예에서, 컴퓨트 어레이(130)는 복수의 처리 요소(PE1, PE2, PE3, … PEN)를 포함하며, 여기서 N은 컴퓨트 어레이(130)의 처리 요소의 총 개수이다. 일례에서, 컴퓨트 어레이(110)는 4개의 처리 요소(PE1, PE2, PE3 및 PE4)를 포함할 수 있다. 처리 요소(PE)는 예를 들어 DSP 알고리즘을 위해 수치 처리를 수행한다. 처리 요소(PE)는 독립적으로, 병렬로, 또는 SIMD 엔진으로 동작할 수 있다. 본 예에서, 각 처리 요소(PE)는 벡터 프로세서일 수 있다. 대안적으로, 처리 요소(PE)는 스칼라 프로세서 및 벡터 프로세서의 조합일 수 있다.
처리 요소(PE) 각각은 각 컴퓨테이션 유닛(computation unit: CU)(152)를 포함한다. 도시된 실시예에서, 컴퓨테이션 유닛(152)은 동일할 수 있으나, 본 발명은 컴퓨테이션 유닛(152)이 동일하지 않는 실시예를 고려한다. 본 발명은 하나 이상의 처리 요소(PE)가 컴퓨테이션 유닛(152)을 포함하지 않는 구성을 더 고려한다. 본 예에서, 컴퓨테이션 유닛(152) 각각은 산술 논리 유닛(arithmetic logic unit: ALU), 승산기-누산기(multiplier-accumulator: MAC), 시프터(shifter), 다른 컴퓨테이션 유닛, 또는 이들의 조합을 포함한다. ALU는 산술 연산과 논리 연산, 예를 들어, 가산 연산(add), 감산 연산(subtract), 부정 연산(negate), 증분 연산(increment), 감분 연산(decrement), 절대값 연산(absolute), AND 연산, OR 연산, EXCLUSIVE OR 연산, NOT 연산, 분할 프리미티브(divide primitive) 연산, 다른 산술 연산, 다른 논리 연산, 또는 이들의 조합을 수행할 수 있다. 예시적인 MAC는 승산 연산 및 승산 및 누산 연산, 예를 들어 단일-사이클 승산, 승산/가산, 승산/감산, 다른 연산, 또는 이들의 조합을 수행할 수 있다. 시프터는 논리 및 산술 시프트, 비트 조작, 정규화(normalization), 역정규화(denormalization), 지수 유도(derive-exponent) 연산, 다른 연산, 또는 이들의 조합을 수행할 수 있다. 여러 산술 연산, 논리 연산, 및 다른 연산은 고정 소수점(fixed-point) 및 부동 소수점 포맷(floating-point format)으로 수행될 수 있다. 여러 실시예에서, ALU, MAC 및/또는 시프터는 이와 연관된 레지스터를 포함한다.
처리 요소(PE)는 각각 각 레지스터 파일(154)을 더 포함할 수 있다. 도시된 실시예에서, 레지스터 파일(154)은 동일할 수 있으나, 본 발명은 레지스터 파일(154)이 동일하지 않은 실시예를 고려한다. 본 발명은 하나 이상의 처리 요소(PE)가 레지스터 파일(154)을 포함하지 않는 구성을 더 고려한다. 레지스터 파일(154)은 처리 요소(PE) 및 데이터 상호연결 네트워크(예를 들어, 상호연결 네트워크(144)) 사이에 데이터를 전송하는 레지스터를 포함하고 결과를 저장한다. 본 예에서, 레지스터 파일(154)은 32-비트 일반 목적 레지스터, 40-비트 일반 목적 레지스터, 64-비트 일반 목적 레지스터, 128-비트 일반 목적 레지스터, 다른 폭 일반 목적 레지스터, 또는 이들의 조합과 같은 DSP(100)의 설계 요구사항에 따라 폭을 구비하는 일반 목적 레지스터를 포함하는 각 일반 목적 레지스터 세트(155)를 포함할 수 있다. 이하 상세한 설명을 위하여, 일반 목적 레지스터(155)는 32-비트 일반 목적 레지스터를 포함한다. 본 예에서, 레지스터 파일(154) 각각은 프레디케이트 카운터를 보유하도록 구성될 수 있는 각 프레디케이트 레지스터(158)를 포함한다. 레지스터 파일(154)은 DSP(100)의 설계 요구사항에 따라 추가적인 레지스터를 포함할 수 있다. 더욱이, 여러 구현예에서, 프레디케이트 레지스터(158)는 일반 목적 레지스터 세트(155)로부터 일반 목적 레지스터(154)일 수 있다. 하나의 예시적인 실시예에서, 각 PE는 32-비트 폭의 적어도 하나의 전용 프레디케이트 카운터(158)를 포함한다. 다른 실시예에서, 각 PE는 복수의 프레디케이트 카운터를 포함할 수 있다.
DSP(100)는 여러 병렬 연산을 수행할 수 있다. 예를 들어, 단일 사이클 동안, 처리 요소(PE)는(상호연결 네트워크(142)를 통해) 명령에 액세스하고 동기 처리를 위해(상호연결 네트워크(144)를 통해) 메모리로부터 N개의 데이터 오퍼랜드에 액세스할 수 있다. SIMD 모드에서, DSP(100)는 다중 데이터 스트림을 병렬로 처리할 수 있다. 예를 들어, SIMD 모드에 있을 때, DSP(100)는 단일 사이클에서, 단일 명령을 각 또는 복수의 처리 요소(PE)에 상호연결 네트워크(142)를 통해 디스패치(dispatch)하고; 상호연결 네트워크(144)를 통해 메모리(메모리(120), 프로그램 메모리(116), 다른 메모리, 또는 이들의 조합)로부터 N 개의 데이터 세트(각 처리 요소(PE)를 위한 하나의 데이터 세트(일례에서, 각 데이터 세트는 2개의 데이터 오퍼랜드를 포함할 수 있음)를 로딩하고; 처리 요소(PE)에서 동시에 단일 명령을 실행하고; 동기 실행으로부터 데이터 결과 메모리(120)에 저장할 수 있다.
특정 실시예에서, DSP(100)는 임의의 처리 요소(PE)의 레지스터(예를 들어, 일반 목적 레지스터)가 하나를 초과하는 처리 레인으로 분할가능하여, 임의의 처리 요소(PE)가 각 처리 레인에서 병렬 연산을 개별적으로 수행할 수 있는 레지스터 내 SIMD(SWAR)를 더 수행할 수 있다. 예를 들어, SWAR 모드에서, 임의의 처리 요소(PE)는 k/n 비트 폭을 각각 구비하는 n개의 레인(lane)에 병렬 연산을 수행할 수 있는데, 여기서 k는 레지스터의 비트 폭이다.
도 2는 본 발명의 여러 측면에 따라 SWAR를 구현할 수 있는 DSP(100)의 처리 요소(PE)와 같은 처리 요소와 연관된 레지스터의 예시적인 세트를 개략적으로 도시한다. 도 2에서, 레지스터의 세트는 레지스터(R1), 레지스터(R2), 및 레지스터(R3)를 포함하며, 여기서 연산 OP, 예를 들어 가산 연산이 레지스터(R1) 및 레지스터(R2)의 요소(데이터 오퍼랜드)를 사용하여 수행되고 레지스터(R3)에 결과를 생성한다. 레지스터(R1, R2 및 R3)는 예를 들어 일반 목적 레지스터 세트(155) 중에 있는 일반 목적 레지스터일 수 있다. SIMD 모드에서 일반 목적 레지스터가 32-비트 폭(k = 32)인 본 예에서, 임의의 처리 요소(PE)는 레지스터(R1 및 R2)에 저장된 32-비트 요소에 연산을 수행하고 그 결과를 레지스터(R3)에 둘 수 있다. 본 예의 개선에서, SWAR 모드에서, 레지스터(R)는 병렬 연산을 위한 하나를 초과하는 처리 레인으로 분할되어, 임의의 처리 요소(PE)는 레지스터(R1 및 R2)에 저장된 16-비트 요소의 2개의 레인(L1 및 L2)에 병렬 연산을 수행하고 그 결과를 레지스터(R3)에 두거나 (2 x 16-비트 SWAR 처리라고 지칭됨), 또는 레지스터(R1 및 R2)에 저장된 8-비트 요소의 4개의 레인(L1 내지 L4)에 병렬 연산을 수행하고 그 결과를 레지스터(R3)에 둘 수 있다(4 x 8-비트 SWAR 처리라고 지칭된다).
더 넓은 데이터 유형(예를 들어, 64-비트 부동 소수점(floating point), 32-비트 콤플렉스(complex) 등)의 고성능을 지원하는 디지털 신호 프로세서를 요구하는 증가하는 수요는, DSP(100)의 처리 요소(PE)와 같은 디지털 신호 프로세서의 처리 요소 내에 증가하는 컴퓨테이션 능력 및 레지스터 폭을 야기하였다. 이들 더 넓은 레지스터는 SWAR을 구현하는 것에 의해 더 좁은 데이터 유형(예를 들어, 32-비트 부동 소수점(floating point), 16-비트 고정 소수점 등)의 디지털 신호 프로세서 성능 매니폴드(manifold)를 증가시킨다. 예를 들어, DSP(100)는 처리 요소를 더 추가함이 없이 SWAR를 구현하는 것에 의해 2배 내지 4배 빠른 연산을 실행할 수 있다. 32-비트 폭의 레지스터를 구비하는 4개의 처리 요소(PE1, PE2, PE3 및 PE4)가 있는 예에서, DSP(100)는 SIMD 또는 비-SIMD 모드에서 4개의 병렬 32-비트 연산, 2 x 16-비트 SWAR 모드에서 8개의 병렬 연산, 또는 4 x 8-비트 SWAR 모드에서 16 병렬 연산을 동일한 시간의 양에서 수행할 수 있다. 유사하게, 처리 요소(PE)가 128-비트 폭의 레지스터를 구비하는 일례에서, DSP(100)는 SIMD 또는 비-SIMD 모드에서 4개의 병렬 128-비트 연산, 2 x 64-비트 SWAR 모드에서 8개의 병렬 64-비트 연산, 4 x 32-비트 SWAR 모드에서 16 병렬 32-비트 연산, 8 x 16-비트 SWAR 모드에서 32 병렬 16-비트 연산, 또는 16 x 8-비트 SWAR 모드에서 64개의 병렬 8-비트 연산을 동일한 시간의 양에서 수행할 수 있다.
SWAR 모드는 하드웨어로 구현하는 것이 상대적으로 저렴하지만, SWAR는 프로그래밍 관점에서는 문제를 야기한다. 예를 들어, SWAR 프로그래밍은 일반적으로 내재성, 인라인 어셈블리 및/또는 C/C++와 같은 하이 레벨 언어 중에서 ISO C 또는 C++ 표준의 일부가 아닌 특수한 벡터 데이터 유형(예를 들어, float2, int4, short4 등)을 필요로 한다. 이러한 프로그래밍 옵션(특수한 벡터 데이터 유형, 내재성 및/또는 인라인 어셈블리)은 프로세서에 특정되게 하므로, SWAR 프로그래밍은 포팅 레거시 코드(porting legacy code)에 어려움을 제기한다. 나아가, SWAR 프로그래밍은 추가적인 레벨의 병렬 처리를 벡터 프로세서에 추가하므로, 종래의 디지털 신호 프로세서는 DSP(100)가 2개의 레벨의 병렬 연산(2가지 방식의 병렬성), 즉 (SWAR을 사용하는) 처리 요소 내에서 하나의 레벨의 병렬 처리 및 벡터 유닛의 처리 요소들 사이에 다른 레벨의 병렬 처리를 인식하는 것을 보장하는 데 있어 프로그래머에 부담을 준다.
유리하게는, 본 명세서에 개시된 바와 같이, '624 출원에서 더 설명된 바와 같이, 본 발명의 예시적인 DSP(100)는 프로그래머(및 이에 따라 DSP(100)용 컴파일러)로 하여금 병렬 처리 유닛을 단일 벡터 레인으로 볼 수 있게 하는데, 여기서 각 처리 레인(SWAR 레인)은 개별 처리 요소로 볼 수 있다. 각 처리 요소(PE)가 동일한 개수의 처리 레인으로 분할되는 일례에서, 프로그래머는 처리 요소마다 처리(SWAR) 레인의 수에 실제 처리 요소의 수를 곱한 것과 같은 유효 개수의 처리 요소를 본다. 따라서, 프로그래머의 관점(및 이에 따라 컴파일러의 관점)으로부터 4개의 처리 레인(예를 들어, 4 x 8 비트 SWAR를 지원하는 32-비트 폭의 레지스터)를 지원하는 4개의 처리 요소(PE1, PE2, PE3 및 PE4)들이 있는 예에서, 처리 요소의 유효 개수는 16(PE의 유효 개수 = PE의 개수 x PE마다 SWAR 레인의 개수 = 4 x 4 = 16)이다. 다른 예에서, 8개의 처리 요소들이 있고 각 처리 요소는 프로그래머의 관점으로부터 2개의 처리 레인(예를 들어, 2개의 32-비트 부동 소수점(floating point) 연산)을 지원하는 다른 예에서, 처리 요소의 유효 개수는 16(PE의 유효 개수 = PE의 개수 x PE마다 SWAR 레인의 개수 = 8 x 2 = 16)이다. '624 출원에 보다 상세히 설명된 바와 같이, DSP(100)는 (1) 처리 레인(SWAR 레인)마다 마스킹(masking)을 수행, (2) 예를 들어 프레디케이트 카운터를 사용하여 처리 레인마다 조건부 실행을 수행, (3) 처리 레인을 통해 및/또는 처리 요소를 통해 감소 연산을 수행 및/또는 (4) 처리 레인마다 독립적으로 어드레스를 생성하는 것을 구현하는 것에 의해 SWAR 처리(특히, 2가지 방식의 병렬성)를 프로그래머에 끊김 없게 만든다. 이러한 메커니즘은 실질적으로 DSP(100)에 요구되는 프로그래밍 노력을 감소시킨다.
이하 설명은 프로세서에서 프레디케이트 카운터의 여러 구현예를 설명한다. 명확화를 위하여, 일부 논리는 예시적인 의사(pseudo) 코드로 제공된다. 여러 예에서, 구현예는 전체 내용이 본 명세서에 참조 문헌으로 병합된, 아날로그 디바이스사(Analog Devices, Inc.)에 의한 혼합된 신호 및 DSP 설계 기술(Mixed-Signal and DSP Design Techniques)에 설명된 바와 같은 개념 및 프로세서를 사용하여 수행된다. 여러 예에서, 이하 연산은 또 다른 것을 더 수행하는 기계 명령 또는 기계 명령의 일부로 구현된다. 예를 들어, 카운터-프레디케이트를 설정(setting)하는 것은 플래그를 설정하는 것과 같은 산술 명령의 부작용일 수 있다.
여러 구현예에서, 프레디케이트 카운터의 그룹은 단일 명령, 다중 데이터(SIMD) 명령 아키텍처를 제어하며, 여기서 각 SIMD 레인은 상이한 프레디케이트 카운터에 의해 제어된다.
IF-ELSE-ENDIF 구조
하나의 예시적인 아키텍처에서, 프레디케이트 카운터는 IF-ELSE-ENDIF 구조의 제어를 제공한다. IF-ELSE-ENDIF 구조는 3개의 이산 선언문(statement) 또는 프리미티브 연산(primitive operation), 즉 IF, ELSE, 및 ENDIF에 의해 제어된다. 이들은 프리미티브 연산, 또는 프리미티브라고 지칭되는데, 그 이유는 일부 경우에, 이들 연산이 프로그래머에 이용가능한 이산 명령이 아닐 수 있기 때문이다. 오히려, 이들 연산은 다른 유저-액세스가능한 명령에 내부 연산일 수 있다. 다른 경우에, 이들 연산은 유저-액세스가능한 명령일 수 있으나, 이들 연산은 본 명세서에 한정된 특정 이름을 구비할 필요가 없다. 이 3개의 연산은 다음과 같이 한정된다:
IF: If는 프레디케이트 카운터(이들 예에서 "카운터") 및 테스트되는 조건("조건")에 의존한다. 카운터가 0이고 조건이 참이면, 액션이 일어나지 않고, 이는 카운터가 0에 있는 것을 의미하며, 이는 이후 명령이 실행될 수 있게 한다. 이후에 오는 임의의 코드는 거짓(false) 조건이 나타날 때까지 "참" 브랜치로 취급된다. 예를 들어, 카운터는 A, B, 및 C가 모두 참이라고 가정하면 이후에 오는 3개의 네스팅된 "if" 선언문(statement) 전체에 걸쳐 0에 있다.
Figure 112013096085310-pat00003
카운터는 상기 예에서 0에 있으므로, 연산1()은 실행된다.
IF의 정의를 계속하면, 카운터가 0이고 조건이 거짓이면, 카운터는 1로 증분되고, 이는 이후에 오는 명령이 실행되지 않고 "거짓" 브랜치가 입력된 것(예를 들어, A가 이전의 예에서 거짓이면 "if(B)" 및 "if(C)"는 거짓 브랜치 내에 있고, 어떤 코드도 실행되지 않는다)을 의미한다. 이 경우에, 카운터는 포화된 산술(saturated arithmetic)을 사용하여 단순히 증분된다(다시 말해, 카운터는 하이 엔드(high end) 상의 최대 값에서, 예를 들어 프레디케이트 카운터의 최대 정수값에서, 또는 로우 엔드(low end) 상의 0에서 "클램핑(clamped)된다"). IF는 다음과 같이 의사 코드로 쓸 수 있다:
Figure 112013096085310-pat00004
ELSE: Else는 카운터에서만 동작(operate)한다. 카운터가 정확히 1이면, 거짓 브랜치 내 마지막 레벨이 네스팅(만약 있다면)이 이전의 명령에서 도달되어 "else" 조건이 실행되었다는 것을 의미한다("if" 조건은 반드시 실행되지 않는 것은 아닌데, 그 이유는 이것이 실행된 경우에는, 카운터는 0이 되기 때문이다). 그래서 카운터는 0으로 설정되고, 이는 이후에 오는 명령(즉, "else" 브랜치)이 실행되게 한다. 카운터가 0이면, 이 "else" 브랜치를 위한 "if" 브랜치는 실행되었고(및 임의의 후속 네스팅이 언롤링(unrolled)되었고), 이 브랜치는 실행되어서는 안 된다. 그래서 카운터는 1로 설정되고, 이는 이후에 오는 명령의 실행을 금지할 수 있다. 카운터가 임의의 다른 값이면, 이는 단독으로 유지되고, 이하에 오는 명령은 실행되지 않는다. ELSE는 다음과 같이 의사 코드로 쓸 수 있다:
Figure 112013096085310-pat00005
ENDIF: ELSE와 같이, ENDIF는 카운터에서만 동작한다. 카운터가 비제로(non-zero)이면, 이것은 거짓 루프의 네스팅된 브랜치이고, 카운터는 감분된다. 그렇지 않으면, 어떤 액션도 일어나지 않는다. ENDIF 명령의 결과는 네스팅된 레벨의 조건부 논리가 ENDIF 선언문(statement)이 나타나는 시간에 "언롤링된" 것이라는 것이다. ENDIF는 다음과 같이 의사 코드로 쓸 수 있다:
Figure 112013096085310-pat00006
IF, ELSE, 및 ENDIF 연산은 카운터에 의해 프레디케이트된 알고리즘 명령을 가지는 명령 스트림에서 나타난다. IF, ELSE, ENDIF 연산의 위치지정은 네스팅된 제어 영역을 표시(mark)한다.
예를 들어, 간단한 네스팅된 if-else 루프는 프레디케이션으로 언롤링될 수 있다. 전통적인 비-프레디케이트된 언어에서, 루프는 다음과 같이 쓸 수 있다:
Figure 112013096085310-pat00007
따라서, A가 참이면, B에 상관없이 연산1()만이 실행된다. A가 거짓이고 B가 참이면, 연산2() 및 연산3()이 모두 실행된다. A가 거짓이고 B가 거짓이면, 연산2()만이 실행된다.
전술된 프레디케이트된 IF-ELSE 구조를 사용하면, 다음 테이블이 구성될 수 있다.
Figure 112013096085310-pat00008

다른 예시적인 실시예에서, 프레디케이트 카운터의 그룹은 SIMD 명령 세트를 제어할 수 있다. 이 경우에, 프레디케이트 카운터는 SIMD-할 수 있는 IF, ELSE 및 ENDIF 연산에 의해 설정될 수 있다. 여기서, 전술된 의사 코드가 다시 적용되고 여기서 "카운터"는 카운터의 그룹을 나타내고, 조건은 부울리안 값의 벡터를 나타낸다.
스테이지 루프(Stage Loop)
더 다른 예시적인 실시예에서, SIMD 스테이지 루프(본 명세서에 참조 문헌으로 병합된 공동 계류 중인 미국 특허 출원 제13/537,731호(출원일: 2012년 6월 29일, 발명의 명칭: "Staged Loop Instructions")에 개시된 바와 같은)가 프레디케이트 카운터를 가지고 구현될 수 있다. 이 경우에, 프레디케이트 카운터 그룹은 소프트웨어 파이프라이닝된 루프의 각 스테이지에 대해 제공된다. 2개의 프리미티브가 SIMD 스테이지 루프 구현예, 즉 루프(LOOP) 및 그 다음 스테이지(NEXT_STAGE)에 대해 제공된다. LOOP 연산은 루프에서 제1 명령 전에 실행된다. NEXT_STAGE 연산은 언롤링된 루프의 사본(copy)들을 분리시키고 또한 루프백 전에 실행된다.
LOOP: 다음에 오는 의사 코드는 LOOP 프리미티브의 거동(behavior)을 제공한다. 이전의 프리미티브에서와 같이, LOOP는 유저-액세스가능한 명령이거나, 또는 다른 명령에 내재된(intrinsic) 것으로 제공될 수 있다. 다음에 오는 의사 코드에서, NUM_LANES는 처리 요소의 수를 나타내고, COUNTER_GROUPS는 스테이지의 수를 나타낸다. "Iters"는 루프의 반복(iteration)의 총 개수를 나타낸다.
Figure 112013096085310-pat00009

SIMD 스테이지 연결된 루프에서 개별 연산은 스테이지의 수를 구비한다. 본 예에서, 각 스테이지 수는 프레디케이트 카운터 그룹을 색인(index)한다. 예를 들어, 언롤링된 도트 제품 루프는 이하와 같이 보일 수 있는데, 여기서 스테이지 카운트는 {}로 주어진다:
Figure 112013096085310-pat00010

다음에 오는 예시는 NUM_LANES=8, NUM_COUNTER_GROUPS=4, Iters=13, 및 Precount[0]가 초기에 모두 제로인 일례를 제공한다. 각 스테이지는 그 입력이 넘버링이 낮은 스테이지()에서 컴퓨팅된 후에 실행되고, 각 스테이지는 초기에 레인 0 내지 7에서 실행된 다음에 후속적으로 레인 0 내지 4에서 실행되어 모두 13번의 반복(iteration)을 제공한다.
Figure 112013096085310-pat00011
Figure 112013096085310-pat00012

SIMD 또는 벡터 프로세서에서 프레디케이션을 구현하는 또 다른 예시적인 구조(scheme)는 프레디케이트 비트를 포함하는 마스크 레지스터의 사용을 포함한다. 각 비트는 결과의 요소의 컴퓨테이션을 제어한다. 이러한 프레디케이션 구조는 서브 워드 SIMD에 및/또는 레지스터(SWAR) 연산을 구비하는 SIMD에 사용될 수 있다. 유리하게는, 프레디케이트 카운터의 사용은 별개의(separate) 프레디케이트 비트에 대한 요구를 제거한다.
네스팅(Nesting)
본 명세서의 특정 실시예는 또한 IF-ELSE-ENDIF 및 SIMD 스테이지 루프 구조의 네스팅을 가능하게 한다. 이를 위해, SIMD IF, ELSE, ENDIF 및 스테이지 루프 프리미티브와 연관된 연산이 결합될 수 있다.
하나의 예시적인 실시예에서, SIMD 스테이지 루프는 스테이지 0에 대한 카운터가 프레디케이트로 사용되는 IF-ELSE-ENDIF 영역 내에 네스팅된다. 스테이지 0에 대한 카운터 그룹의 초기 상태는 루프에 진입(entry)시 저장되고 나서, 이 카운터를 각 NEXT_STAGE 연산으로 설정하고 루프로부터 종료(exit)시 상태를 복원하는데 사용된다. 루프에 진입 시 인에이블되지 않은 이들 레인은 인에이블되지 않는다.
다른 예시적인 실시예에서, IF-ELSE-ENDIF 영역은 SIMD 스테이지 루프 내에 네스팅된다. 이 경우에, 의미론(semantics)은 비-언롤링된, 비-소프트웨어 파이프라이닝된 루프 내에 네스팅된 IF-ELSE-ENDIF 블록에 적절하다. 일단 루프가 소프트웨어 파이프라이닝되면, ENDIF 연산은 대응하는 IF 또는 ELSE보다 더 늦은 스테이지에서 있을 수 있다. 이 경우에, 이 연산은 상이한 프레디케이트 카운터 그룹을 변경(modify)할 수 있다. ENDIF는 이에 따라 이것이 변경하는 카운터가 에러 있게 감분되게 할 수 있다. 그러나, 모든 프레디케이트 카운터는 스테이지 0에 대한 것을 제외하고는 MAX로 초기화될 수 있다. MAX가 가능한 스테이지의 최대 개수보다 더 크다면, 카운터는 제로(0)로 감분되지 않는다. 예를 들어, 이 비-소프트웨어 파이프라이닝된 루프를 고려해 보자:
Figure 112013096085310-pat00013

이 루프는 다음과 같이 소프트웨어 파이프라이닝될 수 있다:
Figure 112013096085310-pat00014

이하 예시적인 실시예에서, NUM_LANES=8, NUM_COUNTER_GROUPS=4, Iters=13, 및 Precount[0]는 초기에 모두 제로이다. 스테이지 1에 저장은 스테이지 0에 로딩된 값이 제로보다 더 작으면 실행된다.
Figure 112013096085310-pat00015
Figure 112013096085310-pat00016
Figure 112013096085310-pat00017

레지스터 내 SIMD
예시적인 실시예에서, 프레디케이트 카운터는 SWAR 명령을 제어하는데 사용된다. 예시적인 SWAR 기계는 요소 사이즈*요소의 수와 같은 길이를 구비하는 고정된 길이 벡터를 지원할 수 있다. 상이한 요소 사이즈가 요구되는 경우, 프레디케이트 카운터는 상이한 개수의 요소에 대처하도록 구성된다.
SWAR 명령의 l개의 레인을 각각 실행할 수 있는 n개의 PE를 포함하는 예시적인 기계에서, 프레디케이트 카운터 그룹은 n×l개의 카운터를 포함한다. 따라서, l개의 카운터의 각 세트는 단일 PE에 있는 SWAR 레인을 제어한다. 요소 사이즈가 최소 레인 폭보다 더 크고, 각 PE가 l보다 더 적은 수의 레인을 실행하고 있다면, 단일 카운터는 각 레일에 대해 프레디케이트로서 사용될 수 있다.
n*l보다 더 적은 수의 요소를 가지는 조건을 가지는 IF 연산이 모든 카운터를 변경할 수 있고, 그래서 상이한 수의 요소를 가지는 명령의 프레디케이션이 예측가능하다.
상이한 루프는 PE마다 상이한 요소 사이즈 및 상이한 수의 SWAR 레인에 컴퓨테이션을 위해 쓸 수 있다. SWAR이 지원되는 하나의 예시적인 구현예에서, LOOP 프리미티브는 파라미터로서 l을 취하도록 재한정된다.
Figure 112013096085310-pat00018

이 실시예에서, NEXT_STAGE 프리미티브를 위한 의사 코드는 이전과 같이 유지될 수 있다.
도면을 참조하여 전술한 동작은 신호 처리를 수반하는 임의의 집적 회로, 특히 일부가 디지털화된 실시간 데이터를 처리하는 것과 연관될 수 있는 전문적인 소프트웨어 프로그램 또는 알고리즘을 실행할 수 있는 집적 회로에 적용가능하다는 것이 주목된다. 특정 실시예는 다중 DSP 신호 처리, 부동 소수점 처리, 신호/제어 처리, 고정된 기능의 처리, 마이크로제어기 애플리케이션 등과 관련될 수 있다.
특정 문맥에서, 본 명세서에 설명된 특징은 의료 시스템, 과학적 도구, 무선 및 유선 통신, 레이더, 산업 처리 제어, 오디오 및 비디오 장비, 전류 센싱, (고정밀할 수 있는) 도구 및 다른 디지털 처리 기반 시스템에 적용될 수 있다. 나아가, 전술한 특정 실시예는 의료 이미징, 환자 모니터링, 의료 도구 및 홈 헬스캐어를 위한 디지털 신호 처리 기술에 제공될 수 있다. 이것은 폐 모니터, 가속도계, 심박수 모니터, 심박조율기 등을 포함할 수 있다. 다른 응용은 안전 시스템(예를 들어, 안정 제어 시스템, 드라이버 지원 시스템, 브레이크 시스템, 임의의 종류의 인포테인먼트(infotainment) 및 인테리어 응용)을 위한 자동차 기술을 수반할 수 있다. 나아가, (예를 들어, 하이브리드 및 전기 차량에서) 동력 전달 시스템이 배터리 모니터링, 제어 시스템, 레포팅 제어, 유지보수 동작 등에 고정밀 데이터 변환 제품을 사용할 수 있다.
또 다른 예시적인 시나리오에서, 본 발명의 개시 내용은 생산성, 에너지 효율 및 신뢰성을 촉진하는 것을 지원하는 처리 제어 시스템을 포함하는 산업 시장에서 응용할 수 있다. 소비자 응용에서, 전술된 신호 처리 회로의 개시 내용은 (예를 들어, 디지털 스틸 카메라, 캠코더 등에 대해) 이미지 처리, 자동 초점, 및 이미지 안정화에 사용될 수 있다. 다른 소비자 응용은 홈 씨어터 시스템, DVD 레코더, 및 고선명 텔레비전을 위한 오디오 및 비디오 프로세서를 포함할 수 있다. 또 다른 소비자 응용은 (예를 들어, 임의의 유형의 휴대용 미디어 디바이스에 대해) 개선된 터치 스크린 제어기를 수반할 수 있다. 그리하여, 이러한 기술은 용이하게 스마트폰, 태블릿, 보안 시스템, 퍼스널 컴퓨터(PC), 게임 기술, 가상 현실, 시뮬레이션 트레이닝 등의 일부일 수 있다.
본 명세서에 개시된 측면과 관련하여 설명된 여러 예시적인 논리 블록, 모듈, 코어, 및 회로는 집적 회로(integrated circuit: IC), 액세스 단자, 또는 액세스 포인트 내에 구현되거나 이에 의해 수행될 수 있다. IC는 일반 목적 프로세서, 디지털 신호 프로세서(DSP), 응용 주문형 집적 회로(application specific integrated circuit: ASIC), 전계 프로그래밍가능한 게이트 어레이(field programmable gate array: FPGA) 또는 다른 프로그래밍가능한 논리 디바이스, 이산 게이트 또는 트랜지스터 논리, 이산 하드웨어 성분, 전기 성분, 광 성분, 기계적 성분, 또는 본 명세서에 설명된 기능을 수행하도록 설계된 임의의 조합을 포함할 수 있고, IC 내부에, IC 외부에, 또는 이들 둘 모두에 상주하는 코드 또는 명령을 실행할 수 있다. 논리 블록, 모듈, 코어, 및 회로는 네트워크 내 또는 디바이스 내에 있는 여러 성분과 통신하는 안테나 및/또는 트랜시버를 포함할 수 있다. 일반 목적 프로세서는 마이크로프로세서일 수 있으나, 대안적으로 프로세서는 임의의 프로세서, 제어기, 마이크로제어기, 또는 상태 기계일 수 있다. 프로세서는 또한 컴퓨팅 디바이스의 조합으로, 예를 들어, DSP 및 마이크로프로세서, 복수의 마이크로프로세서, DSP 코어와 함께 하나 이상의 마이크로프로세서, 또는 임의의 다른 이러한 구성의 조합으로 구현될 수 있다. 모듈 또는 코어의 기능(functionality)은 본 명세서에 개시된 바와 일부 다른 방식으로 구현될 수 있다. 나아가, (예를 들어, 첨부 도면 중 하나 이상에 대해) 본 명세서에 설명된 기능은 일부 측면에서 첨부된 청구범위에서 유사하게 지시된 기능을 "수행하는 수단"에 대응할 수 있다.
설명된 기능(function)은 하드웨어, 소프트웨어, 펌웨어, 또는 이들의 임의의 조합으로 구현될 수 있다. 소프트웨어로 구현된다면, 이 기능은 유형적인, 비일시적인 컴퓨터-판독가능한 매체 상에 저장되거나 또는 이 매체 상에 하나 이상의 명령 또는 코드로 전송될 수 있다. 컴퓨터-판독가능한 매체는 하나의 장소로부터 또 다른 장소로 컴퓨터 프로그램의 전송을 가능하게 하는 임의의 매체를 포함하는 통신 매체 및 컴퓨터 저장 매체를 포함한다. 저장 매체는 컴퓨터에 의해 액세스될 수 있는 임의의 이용가능한 매체일 수 있다. 예를 들어, 비제한적인 예로서, 이러한 컴퓨터-판독가능한 매체는 RAM, ROM, EEPROM, CD-ROM 또는 다른 광 디스크 저장, 자기 디스크 저장 또는 다른 자기 저장 디바이스, 또는 명령 또는 데이터 구조의 형태로 원하는 프로그램 코드를 운반하거나 저장하는데 사용될 수 있고 컴퓨터에 의해 액세스될 수 있는 임의의 다른 매체를 포함할 수 있다. 컴퓨터-판독가능한 매체는 비일시적인 또는 일시적인 컴퓨터-판독가능한 매체의 형태일 수 있다. 또한, 임의의 연결은 컴퓨터-판독가능한 매체라고 적절히 명명될 수 있다. 예를 들어, 소프트웨어가 웹사이트, 서버, 또는 다른 원격 소스로부터 동축 케이블, 광섬유 케이블, 트위스티드 페어(twisted pair), 디지털 가입자 라인(digital subscriber line: DSL), 또는 무선 기술, 예를 들어 적외선, 무선, 및 마이크로파를 사용하여 전송된다면, 동축 케이블, 광섬유 케이블, 트위스티드 페어, DSL 또는 무선 기술, 예를 들어 적외선, 무선 및 마이크로파가 매체의 정의에 포함된다. 본 명세서에 사용된 바와 같이, 디스크(disk) 및 디스크(disc)는 콤팩트 디스크(CD), 레이저 디스크, 광 디스크, 디지털 다용도 디스크(DVD), 플로피 디스크 및 블루레이 디스크를 포함하며, 여기서 디스크(disk)는 통상적으로 데이터를 자기적으로 재생하는 것인 반면 디스크(disc)는 데이터를 레이저를 사용하여 광으로 재생하는 것을 포함한다. 이들의 조합이 또한 컴퓨터-판독가능한 매체의 범위 내에 포함된다. 요약하면, 컴퓨터-판독가능한 매체는 임의의 적절한 컴퓨터-프로그램 제품으로 구현될 수 있는 것으로 이해된다.
전술된 사항은 이 기술 분야에 통상의 지식을 가진 자가 본 발명의 측면을 더 잘 이해할 수 있게 하는 여러 실시예의 특징을 약술한다. 이 기술 분야에 통상의 지식을 가진 자라면 동일한 목적을 수행하고 및/또는 본 명세서에 도입된 실시예와 동일한 장점을 달성하는 다른 공정 및 구조를 설계하거나 변경하는 기초로서 본 발명을 용이하게 사용할 수 있는 것으로 이해된다. 이 기술 분야에 통상의 지식을 가진 자라면 또한 본 발명의 사상과 범위를 벗어남이 없이 이러한 균등한 구성을 실현할 수 있고, 본 발명의 사상과 범위를 벗어남이 없이 본 명세서에 있는 내용의 여러 변형, 대체 및 변경을 시도할 수 있는 것으로 이해된다.
본 발명의 특정 실시예는 시스템온칩(system on chip: SOC) 중앙 처리 유닛(central processing unit: CPU) 패키지를 용이하게 포함할 수 있다. SOC는 컴퓨터 또는 다른 전자 시스템의 성분들을 단일 칩으로 집적한 집적 회로(IC)를 나타낸다. 이 SOC는 디지털, 아날로그, 혼합된 신호, 또는 무선 주파수 기능(function)을 포함할 수 있고, 이들 기능 모두는 단일 칩 기판 상에 제공될 수 있다. 다른 실시예는 다중 칩-모듈(multi-chip-module: MCM)을 포함할 수 있고, 여기서 복수의 칩은 단일 전자 패키지 내에 위치되고 이 전자 패키지를 통해 서로 긴밀히 상호작용하도록 구성된다. 여러 다른 실시예에서, 디지털 신호 처리 기능은 응용 주문형 집적 회로(ASIC), 전계 프로그래밍가능한 게이트 어레이(FPGA), 및 다른 반도체 칩에서 하나 이상의 실리콘 코어로 구현될 수 있다.
예시적인 구현예에서, 본 명세서에서 약술된 처리 동작 중 적어도 일부는 또한 소프트웨어로 구현될 수 있다. 일부 실시예에서, 이들 특징 중 하나 이상은 개시된 도면의 요소의 외부에 제공되거나, 또는 의도된 기능을 달성하도록 임의의 적절한 방식으로 결합된 하드웨어로 구현될 수 있다. 이 여러 성분은 본 명세서에 약술된 바와 같이 연산을 달성하기 위하여 통합(coordinate)될 수 있는 소프트웨어(또는 응답 소프트웨어)를 포함할 수 있다. 또 다른 실시예에서, 이들 요소는 이들의 연산을 가능하게 하는 임의의 적절한 알고리즘, 하드웨어, 소프트웨어, 성분, 모듈, 인터페이스 또는 오브젝트를 포함할 수 있다.
추가적으로, 설명된 마이크로프로세서와 연관된 성분 중 일부는 제거되거나 또는 통합될 수 있다. 일반적인 의미에서, 도면에 도시된 배열은 그 표현이 더 논리적일 수 있는 반면, 물리적 아키텍처는 이들 요소의 여러 치환(permutation), 조합(combination) 및/또는 하이브리드(hybrid)를 포함할 수 있다. 본 명세서에 약술된 연산 오브젝트를 달성하는데 카운트 없이 가능한 설계 구성이 사용될 수 있는 것으로 이해된다. 따라서, 연관된 인프라스트럭처는 수많은 대체 배열, 설계 선택, 디바이스 가능성, 하드웨어 구성, 소프트웨어 구현예, 장비 옵션 등을 구비한다.
임의의 적절히 구성된 프로세서 성분이 본 명세서에 상세히 설명된 연산을 달성하기 위해 데이터와 연관된 임의의 유형의 명령을 실행할 수 있다. 본 명세서에 개시된 임의의 프로세서는 하나의 상태 또는 것으로부터 또 다른 상태 또는 것으로 요소 또는 항목(article)(예를 들어, 데이터)을 변환할 수 있다. 다른 예에서, 본 명세서에 약술된 일부 동작은 고정된 논리 또는 프로그래밍가능한 논리(예를 들어, 프로세서에 의해 실행되는 소프트웨어 및/또는 컴퓨터 명령)로 구현될 수 있고, 본 명세서에 식별된 요소는 일부 유형의 프로그래밍가능한 프로세서, 프로그래밍가능한 디지털 논리(예를 들어, 전계 프로그래밍가능한 게이트 어레이(FPGA), 소거가능한 프로그래밍가능한 판독 전용 메모리(EPROM), 전기적으로 소거가능한 프로그래밍가능한 판독 전용 메모리(EEPROM)), 디지털 논리, 소프트웨어, 코드, 전자 명령을 포함하는 ASIC, 플래시 메모리, 광 디스크, CD-ROM, DVD ROM, 자기 또는 광 카드, 전자적 명령을 저장하는데 적절한 다른 유형의 기계-판독가능한 매체, 또는 이들의 임의의 적절한 조합일 수 있다. 연산 시, 프로세서는 임의의 적절한 유형의 비일시적인 저장 매체(예를 들어, 랜덤 액세스 메모리(RAM), 판독 전용 메모리(ROM), 전계 프로그래밍가능한 게이트 어레이(FPGA), 소거가능한 프로그래밍가능한 판독 전용 메모리(EPROM), 전기적으로 소거가능한 프로그래밍가능한 ROM(EEPROM) 등), 소프트웨어, 하드웨어에, 또는 적절한 경우 임의의 다른 적절한 성분, 디바이스, 요소 또는 오브젝트에 특정 요구에 따라 정보를 저장할 수 있다. 나아가, 프로세서에서 추적되거나 프로세서로 송신되거나 수신되거나 저장된 정보는 임의의 데이터베이스, 레지스터, 테이블, 캐시, 큐, 제어 리스트, 또는 저장 구조에, 특정 요구 및 구현예에 기초하여 제공될 수 있고, 이들 모두는 임의의 적절한 시간 프레임에서 참조될 수 있다. 본 명세서에 설명된 메모리 항목(memory item)은 그 어느 것도 광의어인 '메모리' 내에 포함되는 것으로 해석되어야 한다. 유사하게, 본 명세서에 설명된 잠재적인 처리 요소, 모듈, 및 기계는 그 어느 것도 광의어인 '마이크로프로세서' 또는 '프로세서' 내에 포함되는 것으로 해석되어야 한다.
본 명세서에 설명된 기능의 전부 또는 일부를 구현하는 컴퓨터 프로그램 논리는 소스 코드 형태, 컴퓨터 실행가능한 형태, 여러 중간 형태(예를 들어, 어셈블러, 컴파일러, 링커 또는 로케이터(locator)에 의해 생성된 형태)를 포함하나 이들로 제한되지 않는 여러 형태로 구현된다. 일례에서, 소스 코드는 여러 운영 시스템 또는 운영 환경에 사용하기 위한 오브젝트 코드, 어셈블리 언어, 또는 하이 레벨 언어, 예를 들어 OpenCL, 포트란(Fortran), C, C++, JAVA 또는 HTML과 같은 여러 프로그래밍 언어로 구현된 일련의 컴퓨터 프로그램 명령을 포함한다. 소스 코드는 여러 데이터 구조 및 통신 메시지를 한정하여 사용할 수 있다. 소스 코드는 (예를 들어, 인터프리터를 통해) 컴퓨터 실행가능한 형태이거나, 또는 소스 코드는 (예를 들어, 번역기, 어셈블러 또는 컴파일러를 통해) 컴퓨터 실행가능한 형태로 변환될 수 있다.
상기 실시예의 설명에서, 커패시터, 버퍼, 그래픽 요소, 상호연결 보드, 클록, DDR, 카메라 센서, 디바이더, 인덕터, 저항기, 증폭기, 스위치, 디지털 코어, 트랜지스터, 및/또는 다른 성분이 특정 회로의 요구를 조절(accommodate)하기 위해 용이하게 교체되거나, 대체되거나, 또는 그렇지 않은 경우 변형될 수 있다. 나아가, 상보적인 전자 디바이스, 하드웨어, 비일시적인 소프트웨어 등의 사용은 본 발명의 개시 내용을 구현하는데 동등하게 실행가능한 옵션을 제공할 수 있는 것으로 이해된다.
하나의 예시적인 실시예에서, 도면에서 임의의 개수의 전기 회로가 연관된 전자 디바이스의 보드에 구현될 수 있다. 이 보드는, 전자 디바이스의 내부 전자 시스템의 여러 성분을 보유하고, 나아가 다른 주변 장치를 위한 커넥터를 제공할 수 있는 일반 회로 보드일 수 있다. 보다 구체적으로, 이 보드는 시스템의 다른 성분이 전기적으로 통신할 수 있는 전기적 연결을 제공할 수 있다. 임의의 적절한 프로세서(디지털 신호 프로세서, 마이크로프로세서, 지원 칩셋 등을 포함하는), 메모리 요소 등이 특정 구성 요구, 처리 수요, 컴퓨터 설계 등에 기초하여 이 보드에 적절히 연결될 수 있다. 외부 저장, 추가적인 센서, 오디오/비디오 디스플레이를 위한 제어기 및 주변 장치 디바이스와 같은 다른 성분이 케이블을 통해 플러그인 카드로서 이 보드에 부착되거나, 또는 이 보드 그 자체에 집적될 수 있다. 또 다른 예시적인 실시예에서, 도면의 전기 회로는 독립 모듈로서 구현되거나 (예를 들어, 특정 응용 또는 기능을 수행하도록 구성된 연관된 성분 및 회로를 구비하는 디바이스) 또는 전자 디바이스의 응용 주문형 하드웨어에 플러그인 모듈로 구현될 수 있다.
본 명세서에 제공된 다수의 예에서 상호작용은 2개, 3개, 4개 이상의 전기적 성분 면에서 기술된 것일 수 있는 것으로 이해된다. 그러나, 이것은 단지 예시를 위한 목적을 위하여 단지 예시로서 이루어진 것이다. 그러므로 이 시스템은 임의의 적절한 방식으로 통합될 수 있는 것으로 이해된다. 유사한 설계 대안에 따르면, 도면에 도시된 성분, 모듈, 및 요소는 그 어느 것도 여러 가능한 구성으로 조합될 수 있고 이들 조합은 모두 본 명세서의 넓은 범위 내에 명확히 있는 것으로 이해된다. 특정 경우에, 제한된 개수의 전기 요소만을 참조하는 것에 의해 주어진 흐름 세트의 기능 중 하나 이상의 기능을 설명하는 것이 더 용이할 수 있다. 도면 및 그 개시 내용의 전기 회로는 용이하게 스케일러블하고 다수의 성분, 및 보다 복잡한/정교한 배열 및 구성을 수용(accommodate)할 수 있는 것으로 이해된다. 따라서, 제공된 예들은 잠재적으로 수많은 다른 아키텍처에도 적용될 수 있기 때문에 그 범위를 제한하는 것이라거나 이 전기 회로의 넓은 개시 내용을 방해하는 것으로 해석되어서는 안 된다.
이 기술 분야에 통상의 지식을 가진 자에게는 다수의 다른 변경, 대체, 변화, 변개, 및 변형이 일어날 수 있으므로, 본 발명은 모든 이러한 변경, 대체, 변화, 변개, 및 변형을 첨부된 청구범위 내에 있는 것으로 포함하는 것으로 의도된다. 미국 특허 상표청(USPTO) 및 추가적으로 본 출원에 제기된 임의의 특허 문헌의 임의의 독자들이 본 명세서에 첨부된 청구범위를 해석하는 것을 지원하기 위하여, "∼하는 수단" 또는 "∼하는 단계" 라는 단어가 특정 청구범위에서 구체적으로 사용되지 않는 한, 본 출원인은, (a) 출원일에 존재하는 그대로 35 U.S.C. 제112조 제육(6)절을 적용하기 위하여 첨부된 청구범위를 의도한 것은 전혀 아니라는 것; 및 (b) 본 명세서에 있는 임의의 진술에 의하여, 첨부된 청구범위에 반영되지 않은 임의의 방식으로 본 발명을 제한하는 것으로 의도된 것은 아니라는 것을 주지하기를 희망한다.

Claims (22)

  1. 프로세서로서,
    처리 요소;
    상기 처리 요소에 조건부로-실행가능한 명령(conditionally-executable instruction)을 제공하도록 구성된 시퀀서(sequencer)로서, 상기 조건은 프레디케이트 카운터(predicate counter)에서 인코딩된 프레디케이트에 의해 제공된 것인, 상기 시퀀서; 및
    2개를 초과하는 의미있는 값(meaningful value)을 수신하고 그 값을 상기 프레디케이트 카운터로서 제공하도록 구성된 프레디케이트 카운터 레지스터를 포함하는 프로세서.
  2. 제1항에 있어서, 복수의 처리 요소를 포함하고, 각 처리 요소는 프레디케이트 카운터 레지스터를 포함하고, 상기 프로세서는 단일 명령, 다중 데이터(single-instruction, multiple data: SIMD) 모드에서 동작하도록 구성된 것인 프로세서.
  3. 제2항에 있어서,
    각 처리 요소는 복수의 ℓ개의 레인(lane)으로 분할되고;
    상기 프로세서는 레지스터 내 SIMD 모드에서 동작하도록 구성되며;
    상기 프로세서는 프레디케이트 카운터 그룹을 더 포함하되, 상기 프레디케이트 카운터 그룹은 적어도 n×ℓ개의 프레디케이트 카운터를 포함하고, n은 처리 요소의 개수인 것인 프로세서.
  4. 제1항에 있어서, 상기 프로세서는 레지스터 모드 내 단일 명령, 다중-데이터에서 동작하도록 구성된 것인 프로세서.
  5. 제4항에 있어서, 상기 프로세서는 상기 프레디케이트 카운터에 따라 IF, ELSE 및 ENDIF 프리미티브(primitive)를 제공하는 회로를 포함하는 것인 프로세서.
  6. 제5항에 있어서, 상기 IF 프리미티브는,
    조건을 수신하는 동작;
    상기 프레디케이트 카운터가 제로(zero)가 아니면, 상기 프레디케이트 카운터를 증분시키는 동작;
    상기 프레디케이트 카운터가 제로이고 상기 조건이 거짓(false)이면, 상기 프레디케이트 카운터를 1(one)로 설정하는 동작을 포함하는 것인 프로세서.
  7. 제5항에 있어서, 상기 ELSE 프리미티브는,
    상기 프레디케이트 카운터가 제로이면, 상기 프레디케이트 카운터를 1로 설정하는 동작; 및
    상기 프레디케이트 카운터가 1이면, 상기 프레디케이트 카운터를 제로로 설정하는 동작을 포함하는 것인 프로세서.
  8. 제5항에 있어서, 상기 ENDIF 프리미티브는,
    상기 프레디케이트 카운터가 제로가 아니면, 상기 프레디케이트 카운터를 감분(decrementing)하는 동작을 포함하는 것인 프로세서.
  9. 제1항에 있어서, 상기 프로세서는 LOOP 및 NEXT_STAGE 프리미티브를 구현하는 회로를 포함하며,
    상기 LOOP 프리미티브는 언롤링된 스테이지 루프(unrolled stage loop)의 제1 명령에 앞서 실행되도록 구성되고;
    상기 NEXT_STAGE 프리미티브는 파이프라이닝된 스테이지 루프(pipelined stage loop)의 스테이지들 사이에 실행되도록 구성된 것인 프로세서.
  10. 제9항에 있어서, 상기 LOOP 프리미티브는 레지스터 내 단일 명령, 다중-데이터(single-instruction, multiple-data-within-a-register: SWAR) 모드에서 동작하도록 구성되고, 상기 LOOP 프리미티브는 SWAR 레인의 개수를 파라미터로 수신하도록 구성된 것인 프로세서.
  11. 컴퓨터에 의해 수행된 방법으로서,
    2개를 초과하는 유용한 값(useful value)을 수신하도록 구성된 프레디케이트 카운터와 연관된 명령을 수신하는 단계;
    상기 프레디케이트 카운터가 제1 값이면, 상기 명령을 실행하는 단계; 및
    상기 프레디케이트 카운터가 상기 제1 값이 아니면, 상기 명령을 무시하는 단계를 포함하는, 컴퓨터에 의해 수행된 방법.
  12. 제11항에 있어서, 상기 제1 값은 제로인 것인, 컴퓨터에 의해 수행된 방법.
  13. 제11항에 있어서, 상기 제1 값은 제로, 1, MAXINT, -MAXINT, 무한대, 음(negative)의 무한대 및 비숫자(not-a-number)로 이루어진 군으로부터 선택된 것인, 컴퓨터에 의해 수행된 방법.
  14. 제11항에 있어서,
    상기 프레디케이트 카운터가 상기 제1 값이 아니면, 추가적인 액션을 취하는 단계를 더 포함하는, 컴퓨터에 의해 수행된 방법.
  15. 제11항에 있어서,
    상기 프레디케이트 카운터에 따라 IF, ELSE 및 ENDIF 프리미티브를 실행하는 단계를 더 포함하는, 컴퓨터에 의해 수행된 방법.
  16. 제15항에 있어서,
    상기 IF 프리미티브는,
    조건을 수신하는 단계;
    상기 프레디케이트 카운터가 제로가 아니면, 상기 프레디케이트 카운터를 증분시키는 단계; 및
    상기 프레디케이트 카운터가 제로이고 상기 조건이 거짓이면, 상기 프레디케이트 카운터를 1로 설정하는 단계를 포함하고;
    상기 ELSE는,
    상기 프레디케이트 카운터가 제로이면, 상기 프레디케이트 카운터를 1로 설정하는 단계; 및
    상기 프레디케이트 카운터가 1이면, 상기 프레디케이트 카운터를 제로로 설정하는 단계를 포함하며;
    상기 ENDIF 프리미티브는,
    상기 프레디케이트 카운터가 제로가 아니면, 상기 프레디케이트 카운터를 감분하는 단계를 포함하는 것인, 컴퓨터에 의해 수행된 방법.
  17. 제11항에 있어서,
    파이프라이닝된 스테이지 루프에서 제1 명령 전에 LOOP를 실행하고 언롤링된 루프의 스테이지들 사이에 NEXT_STAGE 프리미티브를 실행하는 단계를 더 포함하되, LOOP 프리미티브 및 NEXT_STAGE 프리미티브를 실행하는 것은 각각 상기 프레디케이트 카운터에 의존하는 것인, 컴퓨터에 의해 수행된 방법.
  18. 소프트웨어 명령을 저장한 유형적인(tangible) 컴퓨터-판독가능한 매체로서, 상기 명령은, 실행될 때, 프로세서로 하여금,
    2개를 초과하는 유용한 값을 구비하는 프레디케이트 카운터를 판독하는 동작;
    조건부 명령을 판독하는 동작;
    상기 프레디케이트 카운터가 제1 값이면, 상기 명령을 실행하는 동작; 및
    상기 프레디케이트 카운터가 상기 제1 값이 아니면, 상기 명령을 무시하고 상기 프레디케이트 카운터의 값에 기초하여 상기 프레디케이트 카운터를 조작하는 동작을 수행하게 하는 것인, 컴퓨터-판독가능한 매체.
  19. 제18항에 있어서, 상기 조작은 상기 프레디케이트 카운터의 상기 값을 증분하는 것, 감분하는 것 및 유지하는 것으로 이루어진 군으로부터 선택된 것인, 컴퓨터-판독가능한 매체.
  20. 제18항에 있어서, 부울리안 조건(Boolean condition) 및 상기 프레디케이트 카운터에 의해 지시된 정수 네스팅 레벨(integer nesting level)에 기초하여 명령을 조건부로 실행하도록 구성된 네스팅된 조건부 브랜치(nested conditional branch)를 더 포함하는, 컴퓨터-판독가능한 매체.
  21. 제18항에 있어서, 언롤링된 스테이지 루프를 더 포함하고, 상기 언롤링된 스테이지 루프는 상기 언롤링된 스테이지 루프의 헤드(head)에 LOOP 프리미티브를 가지고, 상기 언롤링된 스테이지 루프의 각 스테이지 사이에 NEXT_STAGE 프리미티브를 가지는, 컴퓨터-판독가능한 매체.
  22. 제18항에 있어서, 레지스터 내 단일 명령, 다중-데이터 연산 내에 상기 프레디케이트 카운터를 사용하는 명령을 더 포함하는 컴퓨터-판독가능한 매체.
KR1020130126826A 2012-10-23 2013-10-23 프레디케이트 카운터 KR101602020B1 (ko)

Applications Claiming Priority (6)

Application Number Priority Date Filing Date Title
US201261717541P 2012-10-23 2012-10-23
US61/717,541 2012-10-23
US13/720,624 2012-12-19
US13/720,624 US9201828B2 (en) 2012-10-23 2012-12-19 Memory interconnect network architecture for vector processor
US13/963,793 2013-08-09
US13/963,793 US9342306B2 (en) 2012-10-23 2013-08-09 Predicate counter

Publications (2)

Publication Number Publication Date
KR20140051805A KR20140051805A (ko) 2014-05-02
KR101602020B1 true KR101602020B1 (ko) 2016-03-25

Family

ID=50570211

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020130126826A KR101602020B1 (ko) 2012-10-23 2013-10-23 프레디케이트 카운터

Country Status (2)

Country Link
KR (1) KR101602020B1 (ko)
CN (1) CN103777922B (ko)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107659305A (zh) * 2017-10-19 2018-02-02 郑州云海信息技术有限公司 一种基于cpld的时钟计数方法、装置及介质
TWI783310B (zh) * 2020-11-26 2022-11-11 華邦電子股份有限公司 計數方法以及計數裝置

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1267256A2 (en) 2001-06-11 2002-12-18 Broadcom Corporation Conditional execution of instructions with multiple destinations
US20080016320A1 (en) 2006-06-27 2008-01-17 Amitabh Menon Vector Predicates for Sub-Word Parallel Operations

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090327674A1 (en) * 2008-06-27 2009-12-31 Qualcomm Incorporated Loop Control System and Method
US9182959B2 (en) * 2008-08-15 2015-11-10 Apple Inc. Predicate count and segment count instructions for processing vectors
US8464031B2 (en) * 2008-08-15 2013-06-11 Apple Inc. Running unary operation instructions for processing vectors
US8078852B2 (en) * 2009-05-28 2011-12-13 International Business Machines Corporation Predictors with adaptive prediction threshold

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1267256A2 (en) 2001-06-11 2002-12-18 Broadcom Corporation Conditional execution of instructions with multiple destinations
US20080016320A1 (en) 2006-06-27 2008-01-17 Amitabh Menon Vector Predicates for Sub-Word Parallel Operations

Also Published As

Publication number Publication date
KR20140051805A (ko) 2014-05-02
CN103777922B (zh) 2018-05-22
CN103777922A (zh) 2014-05-07

Similar Documents

Publication Publication Date Title
US9342306B2 (en) Predicate counter
US10241793B2 (en) Paralleizing loops in the presence of possible memory aliases
Lomont Introduction to intel advanced vector extensions
US9557993B2 (en) Processor architecture and method for simplifying programming single instruction, multiple data within a register
JP6466388B2 (ja) 方法及び装置
US9201828B2 (en) Memory interconnect network architecture for vector processor
KR101048234B1 (ko) 마이크로프로세서 내부의 다수의 레지스터 유닛들을 결합하기 위한 방법 및 시스템
EP2725498A2 (en) DMA vector buffer
TWI564795B (zh) 四維摩頓座標轉換處理器、方法、系統及指令
CN111651203B (zh) 一种用于执行向量四则运算的装置和方法
TWI582692B (zh) 三維摩頓座標轉換處理器,方法,系統,及指令
TWI483126B (zh) 提供向量線性內插功能之指令與邏輯
US8127117B2 (en) Method and system to combine corresponding half word units from multiple register units within a microprocessor
TW201723815A (zh) 用於偶數與奇數向量取得操作之指令及邏輯
TWI564733B (zh) 快速向量動態記憶衝突檢測
KR101602020B1 (ko) 프레디케이트 카운터
US9697005B2 (en) Thread offset counter
EP2725483A2 (en) Predicate counter
JP5753603B2 (ja) データ要素内のビットをゼロ化するためのシステム、装置、および方法
US20130159667A1 (en) Vector Size Agnostic Single Instruction Multiple Data (SIMD) Processor Architecture

Legal Events

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