KR20140051797A - Dma 벡터 버퍼 - Google Patents
Dma 벡터 버퍼 Download PDFInfo
- Publication number
- KR20140051797A KR20140051797A KR1020130126017A KR20130126017A KR20140051797A KR 20140051797 A KR20140051797 A KR 20140051797A KR 1020130126017 A KR1020130126017 A KR 1020130126017A KR 20130126017 A KR20130126017 A KR 20130126017A KR 20140051797 A KR20140051797 A KR 20140051797A
- Authority
- KR
- South Korea
- Prior art keywords
- memory
- dma
- protection
- processor
- data
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/20—Handling requests for interconnection or transfer for access to input/output bus
- G06F13/28—Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Memory System (AREA)
- Multi Processors (AREA)
Abstract
하나의 예시적인 실시예에 따라, 직접 메모리 액세스(DMA) 엔진 및 버퍼가 개시된다. 상기 벡터 버퍼는 명시적으로 프로그래밍가능할 수 있고, 비단위-스트라이드(non-unity stride) 벡터 데이터를 재정렬하기 위한 진보된 로직을 포함할 수 있다. 예시적인 MEMCPY 명령은 액세스 요청을 상기 DMA 버퍼에 제공할 수 있고, 이후 상기 요청을 비동기적으로 서비스할 수 있다. 비트방식의 보호는 사용되고 있는 메모리에 걸쳐 설정되고, 각 비트로 소거되고 판독된다.
Description
관련 출원에 대한 상호 참조
본 출원은, 전체 내용이 본 명세서에 참조 문헌으로 병합된, 미국 가출원 제61/717,564호(출원일: 2012년 10월 23일, 발명의 명칭: "Compiler Directed Direct Memory Access (DMA) Vector Buffer")의 우선권을 주장한다.
기술 분야
본 발명은 일반적으로 컴퓨터 프로세서에 관한 것으로, 보다 상세하게는, 직접 메모리 액세스 버퍼에 관한 것이다.
프로세서에 의하여 종종 병렬 프로세싱이 구현되어 예를 들어, 디지털 신호 프로세서(digital signal processor: DSP)에 의해 프로세싱 애플리케이션(processing application)을 최적화하고 디지털 신호 프로세싱 애플리케이션을 최적화한다. 프로세서는 단일 명령, 다중 데이터(single instruction, multiple data: SIMD) 프로세서, 또는 데이터 병렬 프로세서로 동작하며 병렬 프로세싱을 달성할 수 있다. SIMD 연산(operation)에서, 단일 명령은 프로세서의 다수의 프로세싱 요소(processing element)로 송신되고, 여기서 각 프로세싱 요소는 상이한 데이터에 동일한 연산을 독립적으로 수행할 수 있다.
벡터 프로세싱에서, "스트라이드"(stride)는 각 요소의 증분 단계 사이즈(incremental step size)를 말하며 이는 요소 사이즈와 동일하거나 동일하지 않을 수 있다. 예를 들어, 32-비트(4 바이트) 요소의 어레이는 특히 32-비트 데이터 워드 사이즈를 가지는 프로세서에서 4 바이트의 스트라이드를 구비할 수 있다. 이것은 단위 스트라이드(unity stride)라고 지칭된다. 비단위 스트라이드(non-unity stride)는 매 N번째 요소마다 하나의 항목(item)이 액세스될 때 발생한다. 예를 들어, 스트라이드가 4이면, 매 4번째 워드가 액세스된다.
본 발명은 첨부 도면과 함께 판독할 때 이하 상세한 설명으로부터 가장 잘 이해된다. 산업계 표준 실무에 따라, 여러 특징은 축척에 맞게 그려져 있지 않고 단지 예시를 위한 목적으로만 사용되는 것으로 이해된다. 사실, 여러 특징의 치수는 설명의 명확화를 위해 임의로 증가되거나 감소될 수 있다.
도 1은 본 발명의 여러 성분 및 서브시스템 사이에 상호연결을 도시한 블록도;
도 2는 본 발명의 여러 측면에 따른 예시적인 메모리 서브시스템의 블록도;
도 3은 본 발명의 여러 측면에 따른 프로세서 시스템의 개략 블록도;
도 4는 본 발명의 여러 측면에 따라 도 1의 프로세서 시스템의 동작(operation)으로부터 초래되는 예시적인 데이터 흐름을 도시한 블록도;
도 5는 본 발명의 여러 측면에 따라 메모리 버퍼들 사이에 예시적인 판독 및 기록 사이클의 블록도;
도 6은 본 발명의 여러 측면에 따라 보호 버퍼(guarded buffer)의 블록도;
도 7은 본 발명의 여러 측면에 따라 보호 버퍼의 추가적인 블록도;
도 8은 본 발명의 여러 측면에 따른 DMA 엔진에 의해 수행되는 예시적인 방법의 흐름도;
도 9는 본 발명의 여러 측면에 따른 예시적인 하드웨어 명령의 블록도.
도 1은 본 발명의 여러 성분 및 서브시스템 사이에 상호연결을 도시한 블록도;
도 2는 본 발명의 여러 측면에 따른 예시적인 메모리 서브시스템의 블록도;
도 3은 본 발명의 여러 측면에 따른 프로세서 시스템의 개략 블록도;
도 4는 본 발명의 여러 측면에 따라 도 1의 프로세서 시스템의 동작(operation)으로부터 초래되는 예시적인 데이터 흐름을 도시한 블록도;
도 5는 본 발명의 여러 측면에 따라 메모리 버퍼들 사이에 예시적인 판독 및 기록 사이클의 블록도;
도 6은 본 발명의 여러 측면에 따라 보호 버퍼(guarded buffer)의 블록도;
도 7은 본 발명의 여러 측면에 따라 보호 버퍼의 추가적인 블록도;
도 8은 본 발명의 여러 측면에 따른 DMA 엔진에 의해 수행되는 예시적인 방법의 흐름도;
도 9는 본 발명의 여러 측면에 따른 예시적인 하드웨어 명령의 블록도.
개요
본 명세서의 일 측면에 따르면, 메모리 블록 지향 DMA 요청을 수신하고; DMA 전송을 시작하며; 상기 DMA 전송이 진행됨에 따라, DMA 전송이 완료(complete)된 메모리 블록 부분과 연관된 보호를 업데이트하도록 구성된 로직을 포함하는 직접 메모리 액세스(DMA) 엔진이 개시된다.
본 명세서의 또 다른 측면에 따르면, 메모리 블록과 연관된 보호를 테스트하고; 상기 보호가 설정되어 있으면, 상기 명령을 스톨(stall)하며; 상기 보호가 설정되어 있지 않으면, 자유로운 DMA 채널을 식별하고, 상기 메모리 블록에 대한 DMA 요청을 DMA 엔진에 송신하도록 구성된 메모리 블록 지향 메모리 명령을 제공하는 회로를 포함하는 프로세서가 개시된다.
본 명세서의 더 다른 측면에 따르면, 어드레스된 메모리 영역 지향 메모리 액세스 요청을 수신하는 단계; 메모리 영역에 적어도 하나의 보호를 설정하는 단계; 자유로운 메모리 채널을 식별하여 메모리 액세스 요청을 서비스하는 단계; 데이터 전송을 개시하여 메모리 액세스 요청을 서비스하는 단계; 및 데이터 전송의 적어도 일부분을 완료한 후, 완료된 부분과 연관된 보호를 해제하는 단계를 포함하는 컴퓨터로 구현되는 방법이 개시된다.
예시적인 실시예의 상세한 설명
예를 들어 중앙 프로세싱 유닛(CPU) 및 디지털 신호 프로세서(DSP)를 포함하는 프로세서는 메모리 기술보다 더 빠른 속도로 그 속도 및 복잡성이 계속 증가하고 있다. 증가된 능력은 또한 프로세서가 단일 시간 증분에 더 많은 데이터를 처리할 수 있다는 것을 의미하기 때문에, 프로세서 속도 대(versus) 메모리 속도의 외견상 차이(apparent divergence)는 더 악화된다. 이것은 수행되는 사용가능한 초당 동작(OPS: operation per second)의 수를 제한하는 요인이 될 수 있다. 예를 들어, 고속(fast) 프로세서가 느린(slow) 메모리에 의존하는 경우, 이것은 데이터 오퍼랜드(operand)가 레지스터에 기록입력(write into)하는 것을 대기하거나, 또는 오래된 컴퓨테이션 결과가 레지스터로부터 판독(write out)되는 것을 대기하는데 대부분의 아이들 시간(time idle)을 소비할 수 있다. 추가적으로, 프로세서의 속도로 또는 이 부근의 속도로 실행되는 메모리는 프로세서에 비해 느린 메모리보다 비용이 수 자리수만큼 더 비쌀 수 있다.
하나의 솔루션은 캐시 또는 로컬 L1 메모리와 같은 로컬(local) 메모리, 온-칩(on-chip) 메모리 또는 칩 부근(near-chip) 메모리에 하나 이상의 레벨(level)을 제공하는 것이다. 로컬 메모리는 프로세서의 속도로 또는 이 부근의 속도로 실행되어, 프로세서의 관점(perspective)으로부터 거의 순간적으로 데이터를 제공할 수 있다. 캐시는 더 느린 메인 메모리에 홈 위치를 가지는 데이터의 사본(copy)을 유지하여, 로컬 메모리에 있는 현재 데이터 및 메인 메모리에 있는 동일한 데이터의 일관성(consistency)을 추적(track)하는 테이블을 제공한다. 따라서, 프로세서는 메인 메모리 어드레스에 의해 데이텀을 어드레스지정할 수 있으나, 사본이 로컬 메모리에 저장되어 있다면 로컬 메모리로부터 사본을 수신할 수 있다. 일부 실시예에서, 로컬 L1 메모리는 직접 어드레스가능할 수 있다.
성능에 영향을 미치는 메모리 아키텍처의 또 다른 측면은 데이터 배치(data placement)이다. 메모리 및 프로세서 사이에 경로는 데이터가 이들 사이를 이동하는 방식에 제한이 있는 경우 보다 효율적으로 구현될 수 있다. 예를 들어, 벡터 프로세서의 각 프로세싱 요소는 특정 어드레스 정렬(address alignment)을 가지는 것과 같은 특정 데이터만에 액세스하는 것으로 제한될 수 있다. 그리하여, 알고리즘은 데이터가 간단한 선형 블록이 아닐 수 있는 특정 방식으로 배열되는 경우 보다 효율적일 수 있다.
캐시 또는 로컬 메모리에 로딩할 데이터를 선택하는 작업은 별개의 하드웨어로 처리될 수 있고, 이 별개의 하드웨어는 메모리를 선택하는 특정 알려진 알고리즘을 사용하여 대규모 연속된 메모리 블록을 프리-로딩, 종종 페치(fetching)하는데, 이는 연속된 블록에서 동작하는 것이 일반적이기 때문이다. 그러나, 요청된 데이터가 이미 캐시에 프리-페치(pre-fectched)되어 있지 않은 캐시 "미스"(miss)의 경우에, 프로세서는, 사용가능한 데이터가 메인 메모리로부터 페치되는 동안 때때로 수 십 또는 수 백 클록 사이클만큼 "스톨"한다.
예를 들어, 최근에 액세스된 데이터는 곧 다시 요청될 가능성이 있고(시간적 로컬성), 요청된 데이터가 캐시에 있을 가능성(likelihood)은 요청된 항목에 인접한 항목을 페치하는 것(공간적 로컬성)과 같은 아직 액세스되지 않은 항목을 페치하는 학습 및 액세스 패턴을 분석하여 후속 액세스를 예측(predict)하는 것에 의해 증가된다.
일부 경우에, 프로그래머는 캐시의 동작의 알지 못할 수 있다. 프로그래머는 단지 메인 메모리 어드레스에 따라 데이터를 어드레스지정하고, 데이터를 메인 메모리에 이동시키거나 메인 메모리로부터 외부로 이동시키는 것은 하드웨어에 의해 완전히 관리된다. 그러나, 일부 경우에, 캐시 공간은 쓸모없는 데이터에 낭비될 수 있고, 일부 캐시 미스(miss)는 불가피하고, 이에 프로세서 스톨을 초래할 수 있다. 비-명시적인 캐시 제어기는 또한 비-선형 데이터 배치 문제를 처리하지 않는다.
대안적인 방법은 고속 및 저속 메모리를 모두 직접 어드레스가능하게 만들고 직접 메모리 액세스(DMA) 제어기를 명시적으로 프로그래밍하여 데이터를 전송하는 것이다. 알고리즘 지식이 있는 프로그래머라면 사용가능한 데이터만이 로컬 메모리에 로딩되고, 사용가능한 데이터는 요청될 때 이용가능하다는 것을 보장할 수 있다. 일부 DMA 제어기는 또한 데이터가 이동된 후에 데이터를 재구성(reorganize)하도록 프로그래밍될 수 있어서, 데이터 배치 문제를 해결할 수 있다.
비-캐시 또는 캐시-플러스-L1 메모리 프로세서는 데이터를 프로세서의 메모리에 효율적으로 복사하거나 이 메모리로부터 외부로 복사하는데 DMA 엔진에 의존할 수 있다. 일부 DMA 아키텍처는 프로세서 명령 실행과 동기화되지 않아(또는 기껏해야, 이와 느슨하게 연결되어 있어), 그리하여 데이터를 적시에 도달하도록 (또는 판독되도록) 프로그래밍하는 것이 곤란하다. DMA 엔진은 효과적으로 코어와 병렬로 동작하는 별개의 프로세서이므로, 데이터 이동은 코어가 데이터를 사용하기 전에 코어에 의해 요청되는 메모리를 오버라이트(overwriting)하는 것을 회피하도록 배열될 수 있고, 또 그 역으로 될 수 있다.
와이드(wide) 벡터 프로세서라 지칭되는 또 다른 유형(class)의 프로세서는 통계적으로 스케줄링되고, 예측가능하게 루프 수행되는 코드로 대부분 효율적으로 실행될 수 있어서, 길고 연속된 벡터를 효율적으로 소비하고 생성할 수 있다. 일반 목적 PC와는 달리, 벡터 프로세서는 종종 소형 세트의 고정 반복 작업만을 수행하도록 프로그래밍된다. 전통적인 캐시 대신에 또는 이에 추가하여, 벡터 프로세서는 로컬 "L1" 메모리에 의존할 수 있다. 벡터 프로세서를 위한 데이터 버퍼는 또한 L1 메모리 외부에 연속된 벡터로 구성되지 않을 수 있다.
본 발명의 특정 측면에 따르면, 명시적인 프리-페치 메커니즘은 유저 또는 컴파일러에 의해 프로그래밍될 수 있다. 특히, 본 발명의 일 실시예는 명시적으로 프로그래밍가능한, 비동기적인, DMA-기반 데이터 프리-페처(pre-fetcher)를 통해 최악의 경우의 레이턴시를 최소화하여, DMA 제어기를 프로그래밍하는 명령-기반 방법을 가능하게 하고, 코어와 DMA 전송을 동기화하는 프로세서 아키텍처 및 방법을 제공한다. 추가적으로, 개시된 DMA 제어기는 비단위 스트라이드된 메모리로부터 프로세서의 로컬 L1 메모리로 효율적인 맵핑을 가능하게 하는데 충분한 어드레스 복잡성을 가질 수 있다.
또한, 본 발명의 특정 측면에 따르면, 프로세서 아키텍처는 프로세싱 코어와 DMA 데이터 이동을 동기화하는 것을 가능하게 한다. 예를 들어, 아래에서 더 설명되는 바와 같이, 명령 레벨 프로세서에 명시적인, 동기화된 데이터 프리-로딩/후 저장을 제공하는 방법이 개시되고, "프리미티브"(primitive)로 구현될 수 있다. 이 문맥(context)에서 프리미티브 라는 것은 다른 프리미티브 또는 더 고차-레벨 동작과 함께 더 고차-레벨 동작을 형성하는데 사용될 수 있는 베이직(basic) 또는 프리미티브 동작을 의미하고, 이는 비제한적인 예로서 유저-액세스가능한 하드웨어 명령, 또 다른 하드웨어 명령의 일부로서 수행되는 비-유저-액세스가능한 동작, 유저-액세스가능한 소프트웨어 프로시저(procedure), 또는 상이한 유저-액세스가능한 소프트웨어 프로시저의 일부로서 수행되는 비-유저-액세스가능한 소프트웨어 프로시저일 수 있다. 본 방법은 L1 메모리와 같은 프로세서 레벨 메모리를 지원하는데 하나 이상의 DMA 채널을 전용하는 것에 의해 달성될 수 있다. 예시적인 실시예에서, DMA 채널은 프로세서 로딩/저장 유닛과 하드웨어 상호연동(interlock)을 공유하고 데이터 캐시와 상당한 하드웨어를 공유한다. 하나 이상의 프로세서 명령은 DMA 채널에 효율적인 통신을 제공할 수 있다. 또한, 구체적으로 벡터 프로세싱에서, DMA 채널은 복잡한, 심지어 비단위의 스트라이드/분산-수집(scatter-gather) 어드레싱 패턴을 프로세서의 L1 메모리 내 연속적인 벡터 버퍼 영역으로/으로부터 맵핑할 수 있다. 특히, 아래에서 더 설명되는 바와 같이, 본 발명은 비제한적인 예로서 다음 사항을 포함하는 특정 예시적인 실시예를 제공한다:
a. 비동기적으로 완료될 메모리 요청을 단순히 발송(issue)하는 코어와 동기적으로 실행하는 MEMCPY 프리미티브;
b. 메모리(예를 들어, L1 메모리) 상의 보호 비트, 또는 비교기와 같은 다른 대안적인 보호;
c. 보호 비트가 설정되어 있을 때 프로세서 판독 또는 기록 동작의 스톨;
d. MEMCPY 프리미티브 설정(setting) 또는 소거(clearing) 보호 비트;
e. 위치가 판독되거나 기록될 때 비동기적인 메모리 전송 설정 또는 소거 보호 비트;
f. 스트라이드 패턴(즉, 2차원(2d) DMA)을 가지는 MEMCPY-유형 프리미티브; 및
g. 스트라이드 패턴(즉, 1차원(1d) DMA)이 없는 MEMCPY-유형 프리미티브.
이제 첨부 도면을 참조하면, 도 1은 본 발명의 예시적인 실시예에 따른 디지털 신호 프로세싱 시스템(100)의 블록도이다. 도 1에서, 시스템 버스(220)는 예를 들어 코어(300), 로컬 L1 메모리(120), DMA 엔진(212), 메인 메모리(320), 및 I/O 디바이스(310)를 포함하는 여러 서브시스템 사이에 통신을 중재한다. DMA 엔진(212)은 메인 메모리(320)(또는 일부 다른 I/O 디바이스(310))로부터 L1 메모리(120)로 데이터(예를 들어, 오퍼랜드)를 전송하도록 구성된다. 코어(300)는 이들 데이터에 작용하여 그 결과를 L1 메모리(120)에서 생성한 다음, DMA 엔진(212)은 이 결과를 메인 메모리(320) 또는 I/O 디바이스(310)에 전송한다.
도 2는 본 발명의 여러 측면에 따른 메모리 서브시스템(200)의 개략 블록도이다. 메모리 서브시스템(200)은 하나 이상의 프로세싱 요소를 포함할 수 있는 코어(300), 및 시스템 버스(220)와 통신한다. 메모리 서브시스템(200)은 로컬 L1 메모리(120), DMA 채널(210)을 포함하는 DMA 엔진(212)을 포함하고, 일부 실시예는 컴퓨트 어레이(compute array)(130)(도 3)의 프로세싱 요소(PE)를 서비스하는데 특히 전용된 DMA 엔진이거나, 또는 이에 특히 전용된 DMA 채널을 포함할 수 있다. 메모리 서브시스템(200)은 시스템 버스(220)를 통해 입력/출력(I/O) 디바이스(310), 다른 디바이스, 또는 이들의 조합과 상호연결될 수 있다. 로컬 L1 메모리(120)는 일부 실시예에서 단일 칩에 컴퓨트 어레이(130)와 집적된 고속의 소형 메모리일 수 있는 반면, 메인 메모리(320)(도 1)는 더 대형이고 상대적으로 느린 오프-칩 메모리일 수 있다. 그러나, 이 기술 분야에 통상의 지식을 가진 자라면 다른 조합 및 구성의 메모리도 알려져 있고 일반적으로 사용된다는 것을 인식할 수 있을 것이다.
DMA 엔진(212)은 디지털 신호 프로세싱 시스템(100)(도 1)의 여러 디바이스들 사이에 데이터를 직접 전송하도록 제공된다. 일 실시예에서, L1 메모리(120) 및 메인 메모리(320)(도 1)는 모두 직접 어드레스가능하여, 프로그래머는 시스템 성분들 사이에 데이터를 전송하는데 DMA 엔진(212)을 명시적으로 프로그래밍할 수 있다.
예시적인 실시예에서, DMA 엔진(212)은 복수의 DMA 채널(210)에 액세스한다. 동작시, 아래에서 더 설명되는 예시적인 MEMCPY 프리미티브는 DMA 요청을 발송하고, DMA 엔진(212)은 자유로운 DMA 채널(210)을 찾는다(look for). 자유로운 채널이 없으면, DMA 엔진(212)은 "DMA 차단" 신호를 제공하여 코어(300)(도 3)에 이용가능한 DMA 채널이 없다는 것을 통지(warn)한다. 채널이 일단 이용가능하게 되면, DMA 엔진(212)은 "DMA 차단 해제"를 제공한다. DMA 요청을, 예를 들어 MEMCPY 프리미티브의 일부로 제공하기 위해, 코어(300)는 소스 시작 어드레스, 타깃 시작 어드레스, 소스 종료 어드레스, 및 타깃 종료 어드레스를 채널의 레지스터(214)에 기록하고 나서, 프리미티브를 종료한다.
DMA 엔진(212)은 라운드 로빈(round robin) 방식으로 활성 DMA 채널(210)을 서비스하고, 소스 시작 어드레스로부터 단일 전송을 수행하고 나서, 그 다음 채널로 이동하기 전에 시작 레지스터에 있는 어드레스를 증분시킨다. 시작 어드레스가 대응하는 종료 어드레스를 넘어서 증분되면, DMA 채널은 차후 MEMCPY 프리미티브에 의해 재사용하기 위해 자유로워진다. 다른 실시예에서, 채널들 사이를 중재하는 다른 방법, 예를 들어 전송을 완료한지 가장 오래된 채널을 서비스하거나 또는 채널을 랜덤하게 선택하는 방법이 사용될 수 있다.
예시적인 보호 메커니즘이 비교기(230)에 의해 제공될 수 있다. 예를 들어, 코어(300)가 로딩 명령을 실행할 때, 그 어드레스는 모든 타깃 시작 및 종료 어드레스와 비교되고, 이 어드레스가 그 범위 안에 있다면, 시작 어드레스가 로딩 명령의 어드레스를 지나 증분될 때까지 로딩이 스톨된다. 유사하게, 그 어드레스가 소스 범위 내에 있는 동안 저장 명령이 스톨된다.
도 3은 코어(300)에서 L1 메모리(120)를 제 위치(in situ)에 도시한 본 발명의 여러 측면에 따른 예시적인 디지털 신호 프로세서(DSP) 코어(300)의 개략 블록도이다. 도 1은 명확화를 위하여 및 본 발명의 신규한 개념의 일부를 더 잘 이해하기 위하여 간략화된 것이다. 추가적인 특징이 (300) 또는 DSP 시스템(100)에 전체적으로 추가될 수 있고, 아래에 설명된 특징 중 일부는 DSP(300)의 다른 실시예에서 대체되거나 제거될 수 있다. 나아가, DSP 시스템(100)은 본 발명으로부터 유익을 얻을 수 있는 프로세서의 단 하나의 예시적인 실시예로서 제공된다. 중앙 프로세싱 유닛 및 다른 프로그래밍가능한 디바이스를 포함하는 다른 유형의 프로세서들도 사용될 수 있고, 일반적인 의미에서 본 발명의 개시 내용은 잘 알려진 폰 노이만(von Neuman) 아키텍처를 만족하는 임의의 기계와 관련하여 사용될 수 있다.
코어(300)는 상호연결 네트워크(144)를 통해 L1 메모리(120)에 통신가능하게 연결된 제어 유닛 110 및 컴퓨트 어레이(130)를 포함할 수 있다. 예를 들어, 컴퓨트 어레이(130)는 컴퓨테이션 및 데이터 프로세싱 기능을 수행할 수 있는 복수의 프로세싱 요소(PE)를 포함한다. 코어(300)의 일부 실시예는 다른 성분, 예를 들어 마이크로제어기 명령을 실행하는 마이크로제어기, 직접 메모리 액세스(DMA) 유닛, 및 오프-칩 디바이스와의 여러 인터페이스를 포함할 수 있다. 또한, 메모리(120)는 본 명세서에서 L1 메모리의 단일 로직 블록으로 도시되어 있으나, 이 기술 분야에 통상의 지식을 가진 자라면 메모리(120)는 시스템 메인 메모리, 여러 레벨의 온-칩 캐시, 및/또는 다른 휘발성 또는 비-휘발성 메모리 기술을 포함할 수 있다는 것을 인식할 수 있을 것이다. 이 예시적인 실시예를 위하여, 메모리(120)는 비-캐시 로컬 L1 메모리인 것으로 취급되는 반면, 메인 메모리(320)는 상대적으로 더 느린 메인 시스템 메모리인 것으로 취급된다.
제어 유닛(110)은 코어(300)에서 프로그램 실행을 가능하게 한다. 제어 유닛(110)은 산술 논리 유닛 및 데이터 어드레스 생성(ALU-DAG) 유닛(112), 프로그램 시퀀서(114), 및 프로그램 메모리(116)를 포함할 수 있다. 제어 유닛(110)은 명령 캐시, 타이머, 및 명령 레지스터와 같은 다른 성분을 더 포함할 수 있다. ALU-DAG 유닛(112)은 일반 목적 정수 컴퓨테이션을 지원하고 메모리 어드레스를 위한 어드레스를 공급한다. 예를 들어, ALU-DAG(112)는 데이터가 L1 메모리(120) 및 레지스터(아래에 설명된 컴퓨트 어레이(130)의 레지스터 파일과 같은 것) 사이에서 전송될 때 메모리 어드레스를 제공한다. ALU-DAG 유닛(112)은 데이터 메모리(예를 들어, L1 메모리(120) 또는 메인 메모리(320)) 및/또는 프로그램 메모리(116)에 어드레스를 공급할 수 있다. 프로그램 시퀀서(114)는 명령 페치(fetch)를 위해 프로그램 메모리(116)에 명령 어드레스를 제공한다. 프로그램 메모리(116)는 코어(300)가 데이터(메모리(120)에 저장된 것과 같은)를 처리하도록 구현하는 프로그램을 저장하고 처리 데이터를 더 저장할 수 있다. 프로그램은 하나 이상의 명령을 구비하는 명령 세트를 포함하고, 코어(300)는 명령을 페치, 명령을 디코딩, 및 명령을 실행하는 것에 의해 프로그램을 구현한다. 일례에서, 프로그램은 여러 DSP 알고리즘을 구현하는 명령 세트를 포함할 수 있다.
L1 메모리(120)는 코어(300))에 의해 처리되는 정보/데이터(데이터 메모리, 정보/데이터를 처리하는데 코어(300)에 의해 구현되는 프로그램(프로그램 메모리), 또는 이들의 조합을 저장한다. 도시된 실시예에서, L1 메모리(120)는 다중 뱅크 인터리빙된 메모리 구조(multi-banked interleaved memory structure)를 구비하여, 메모리(120)는 메모리 뱅크(M1, M2, M3, … Mn)를 포함하고, 여기서 n은 L1 메모리(120)의 메모리 뱅크의 총 개수이다. 일례에서, L1 메모리(120)는 SRAM(static random-access memory), DRAM(dynamic RAM), 플래시 또는 다른 적절한 메모리 기술과 같은 랜덤 액세스 메모리이다. 일례에서, 하나 이상의 메모리 뱅크(M)는 별개의(separate) RAM이다. 대안적으로, 여러 구현예에서, L1 메모리(120)는 또 다른 적절한 유형의 메모리이다.
상호연결 네트워크(140, 142, 및 144)는 제어 유닛(110), L1 메모리(120), 및 컴퓨트 어레이(130)를 상호 연결하여, 제어 유닛(110), 메모리(120), 및 컴퓨트 어레이(130) 사이에 통신 경로를 제공한다. 상호연결 네트워크(140), 상호연결 네트워크(142) 및 상호연결 네트워크(144)는 단일 버스, 다중 버스, 크로스바(crossbar) 네트워크, 단일-스테이지 네트워크, 다중스테이지 네트워크, 다른 유형의 상호연결 네트워크, 또는 이들의 조합을 포함할 수 있다. 제어 유닛(110)은 명령 및 데이터 어드레스를 컴퓨트 어레이(130)에 상호연결 네트워크(142)를 통해 발송한다. 상호연결 네트워크(142)는 명령 및 데이터를 위한 어드레스를 컴퓨트 어레이(130)의 여러 프로세싱 요소(PE)에 상호연결 네트워크(142)를 통해 전달한다. 상호연결 네트워크(144)는 메모리(예를 들어, L1 메모리(120), 프로그램 메모리(116), 다른 메모리, 또는 이들의 조합)로부터 데이터 및/또는 명령을 전달하여, 코어(300) 내 임의의 레지스터의 컨텐츠가 임의의 다른 레지스터로 또는 임의의 메모리 위치로 전달될 수 있게 하고 메모리(120)는 데이터 오퍼랜드(값)를 컴퓨트 어레이(130)에 제공할 수 있게 한다.
일부 실시예에서, 컴퓨트 어레이(130)는 복수의 프로세싱 요소(PE1, PE2, PE3, … PEN)를 포함하며, 여기서 N은 컴퓨트 어레이의 프로세싱 요소의 총 개수이다. 일례에서, 컴퓨트 어레이(110)는 4개의 프로세싱 요소(PE1, PE2, PE3, 및 PE4)를 포함할 수 있다. 프로세싱 요소(PE)는 DSP 알고리즘을 위해 수치 처리를 수행한다. 프로세싱 요소(PE)는 독립적으로, 병렬로, 또는 SIMD 엔진으로 동작할 수 있다. 본 예에서, 각 프로세싱 요소(PE)는 벡터 프로세서일 수 있다. 대안적으로, 프로세싱 요소(PE)는 스칼라 프로세서 및 벡터 프로세서의 조합일 수 있다.
프로세싱 요소(PE) 각각은 각 컴퓨테이션 유닛(computation unit: CU)(152)을 포함한다. 도시된 실시예에서, 컴퓨테이션 유닛(152)은 동일할 수 있으나, 본 발명은 컴퓨테이션 유닛(152)이 동일하지 않는 실시예를 고려한다. 본 발명은 하나 이상의 프로세싱 요소(PE)가 컴퓨테이션 유닛(152)을 포함하지 않는 구성을 더 고려한다. 본 예에서, 컴퓨테이션 유닛(152) 각각은 산술 논리 유닛(ALU), 승산기(multiplier)-누산기(accumulator)(MAC), 시프터(shifter), 다른 컴퓨테이션 유닛, 또는 이들의 조합을 포함한다. ALU는 산술 연산과 논리 연산, 예를 들어, 가산 연산(add), 감산 연산(subtract), 부정 연산(negate), 증분 연산(increment), 감분 연산(decrement), 절대값 연산(absolute), 논리곱(AND), 논리합(OR), 배타적 논리합(EXCLUSIVE OR), 부정(NOT), 분할(divide) 프리미티브, 다른 산술 연산, 다른 논리 연산, 또는 이들의 조합을 수행할 수 있다. 예시적인 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-비트 일반 목적 레지스터, 다른 폭을 갖는 일반 목적 레지스터, 또는 이들의 조합과 같은 코어(300)의 설계 요구사항에 따라 폭을 구비하는 일반 목적 레지스터를 포함하는 각 일반 목적 레지스터 세트(155)를 포함할 수 있다. 이하 설명을 위하여, 일반 목적 레지스터(155)는 32-비트 일반 목적 레지스터를 포함한다.
코어(300)는 여러 병렬 동작을 수행하도록 구성될 수 있다. 예를 들어, 단일 사이클 동안, 프로세싱 요소(PE)는 동기적 프로세싱을 위해 (상호연결 네트워크(142)를 통해) 명령에 액세스하고 및 (상호연결 네트워크(144)를 통해) 메모리로부터 N개의 데이터 오퍼랜드에 액세스할 수 있다. SIMD 모드에서, 코어(300)는 다수의 데이터 스트림(stream)을 병렬로 프로세싱할 수 있다. 예를 들어, SIMD 모드에 있을 때, 코어(300)는 단일 사이클에서 상호연결 네트워크(142)를 통해 단일 명령을 각 또는 복수의 프로세싱 요소(PE)에 디스패치(dispatch)하고; 상호연결 네트워크(144)를 통해 메모리(메모리(120), 프로그램 메모리 116, 다른 메모리, 또는 이들의 조합)로부터 N개의 데이터 세트를 각 프로세싱 요소(PE)에 대해 하나의 데이터 세트씩 로딩하고(예를 들어, 각 데이터 세트는 2개의 데이터 오퍼랜드를 포함할 수 있다); 프로세싱 요소(PE)에서 단일 명령을 동기적으로 실행하고; 동기적 실행으로부터 데이터 결과를 메모리(120)에 저장할 수 있다.
도 4는 본 발명의 여러 측면에 따라 코어(300)의 동작 동안 발생할 수 있는 예시적인 데이터 흐름을 도시한다. 이 동작은 L1 메모리(120)에 다수의 버퍼를 할당하여 DMA 엔진(212)이 병렬로 전송하게 하고 코어 동작이 병렬로 발생할 수 있도록 최적화될 수 있고, 여기서 L1 메모리(120)는 다수의 버퍼(예를 들어, 도 5에 도시된 바와 같이 4개의 버퍼(버퍼 1, 버퍼 2, 버퍼 3, 및 버퍼 4))를 포함한다. 도 4의 블록도는 DMA 엔진(212)이 메인 메모리(120)로부터 L1 버퍼1(120-1)로 데이터를 직접 전송하는 전체 데이터 흐름을 도시한다. 동시에, DMA 엔진(212)은 L1 메모리 버퍼(120-2)로부터 메인 메모리(120)로 기록을 처리할 수 있다.
예를 들어, 도 5에 도시된 바와 같이, 제1 시간 기간(t1)에서, DMA 버퍼(210-1)가 버퍼3(510-3)으로부터 (코어(300)에 의해 이전에 컴퓨팅된) 결과를 전송하고 또 다른 DMA 버퍼(210-2)가 (코어(300)에 의한 컴퓨테이션을 위해) 장래 데이터를 버퍼4(510-4)(도 5)에 전송하는 동안 코어(300)는 버퍼(510-1)로부터 데이터(오퍼랜드)를 판독하고 그 결과를 버퍼(510-2)에 기록할 수 있다. 이것은 다음 의사코드(pseudocode)에서 볼 수 있다:
이들 활동(activity)이 일단 완료되면, 버퍼는 스위칭되고 프로세스는 다시 시작될 수 있다. 예를 들어,
제3 시간 기간 동안, 버퍼는 다음과 같이 다시 스위칭될 수 있다:
이 병렬 활동을 프로그래밍하는데 하나의 곤란함은 코어(300) 및 DMA 버퍼(210) 사이를 동기화하는 것이다. 이 곤란함을 해결하기 위하여, DMA 엔진(212)은 DMA 엔진(212)에 의해 기록된 데이터가 코어(300)가 이를 판독하려고 하기 전에 이용가능하게 하는 것과 코어(300)에 의해 기록된 데이터가 DMA 엔진(212)이 이를 판독하려고 하기 전에 이용가능하게 하는 것을 보장하기 위해 명시적으로 코딩될 수 있다. 재능 있는 프로그래머라면 이론적으로 고정된 양의 데이터를 프로세싱하는데 드는 최대 시간 및 최소 시간을 각각 추정(predict)하고 이들 2개의 시간 사이에 판독기가 기록기를 따라잡지 못할 만큼 충분한 지연을 배열할 수 있을 것이다. 그러나, 시스템이 진화에 따라, 원래의 계산(original calculation)이 기초하고 있는 가설(assumption)이 유효하지 않게 될 수 있다.
도 6에 도시된 바와 같이, 메모리 버퍼의 이용가능성을 보장하는 하나의 예시적인 방법은 코어(300) 및 DMA 엔진(212) 중 하나의 것이 기록을 끝마쳤을 때(finished) 다른 것이 판독을 시작할 수 있도록 이들이 모두 인지할 수 있도록 소프트웨어 핸드쉐이크(handshake)를 구현하는 것이다.
그러나, 도 7에 도시된 바와 같이, 본 발명의 예시적인 실시예는 보호 비트, 비교기, 또는 유사한 플래그(flagging) 메커니즘과 같은 보호(610)를 추가하여, 코어(300) 및 DMA 엔진(210) 사이에 동기화를 가능하게 한다. 이것은 도 6에 도시된 소프트웨어 핸드쉐이크 아키텍처에 요구되는 것보다 더 적은 메모리 버퍼(510)를 소비하는 동안 안전한 메모리 동작을 할 수 있게 한다. 보호(610)는 코어(300)로 하여금 DMA 엔진(212)이 사용하고 있는 메모리 버퍼(510) 부분에는 액세스하지 못하게 한다. 메모리 동작이 시작할 때, 전체 메모리 버퍼(510)는 보호되고, 전송이 진행됨에 따라, 보호된 영역은 프로세스에 남아있는 메모리 버퍼(510) 부분으로만 감소된다. 보호된 메모리 전송은 일부 실시예에서 "보호된 전송"이라고 지칭될 수 있다.
따라서, 일부 실시예에 따르면, 코어(300) 및 DMA 엔진(212)은 도 7에 도시된 바와 같이 동일한 버퍼(510)를 안전하게 사용할 수 있다. 도 7에서, DMA 엔진(212)이 결과를 DMA 버퍼(210-1)에서 외부로 전송하는 동안, 코어(300)는 결과를 메모리 버퍼(510-3)에 기록하고, DMA 엔진(212)이 데이터를 DMA 버퍼(210-2)에 전송하는 동안 코어(300)는 메모리 버퍼(510-4)로부터 오퍼랜드를 판독한다.
본 발명의 일 특정 실시예에서, 보호 비트 세트 610는 L1 메모리(120)에 추가되어, 각 보호 비트(610)는 L1 메모리(120)의 일부 개수의 워드와 연관된다. 프리미티브는 또한 벌크 데이터 전송을 개시하기 위해 추가될 수 있다. 예를 들어, 본 발명은 외부 어드레스(예를 들어, 메인 메모리(320))로부터 L1 메모리(120) 내 어드레스로 특정 사이즈의 데이터 블록의 전송을 개시하는 "메모리 사본 입력(copy in)" (MEMCPY_IN) 프리미티브를 제안한다:
MEMCPY_IN(address_in_L1, external_address, size)
"메모리 사본 출력(copy out)" (MEMCPY_OUT) 프리미티브가 또한 어드레스 in L1 메모리(120) 내 어드레스로부터 외부 어드레스(예를 들어, 메인 메모리(120) 내)로 특정 사이즈의 데이터의 블록의 전송을 개시하기 위해 추가된다:
MEMCPY_OUT(address_in_L1, external_address, size)
이 기술 분야에 통상의 지식을 가진 자라면 본 실시예에 따른 MEMCPY 프리미티브는 특정 이름 MEMCPY을 구비할 필요가 없거나 또는 본 명세서에 개시된 예시적인 프리미티브와 동일할 필요가 없다는 것을 인식할 수 있을 것이다.
도 8은 DMA 엔진(212)의 관점으로부터 예시적인 MEMCPY 방법의 흐름도이다. 블록(800)에서 시작하여, DMA 엔진(212)은 블록(810)에서 이 기술 분야에 알려진 방법에 따라 모두 전송하기 위해 예를 들어 시작 어드레스, 워드 사이즈 또는 버스트 사이즈, 및 워드의 개수(number)를 포함하는 메모리 블록 지향 메모리 액세스 요청을 수신한다. 블록(830)에서, DMA 엔진(212)은 자유로운 DMA 채널(210)이 있는지를 체크한다. 자유로운 DMA 채널(210)이 없다면, 블록(840)에서, DMA 엔진(212)은 코어(300)에 DMA 채널(210)이 소거될 때까지 DMA 동작이 시작될 수 없다는 것을 알려주는 DMA 차단(block)을 설정한다. 일단 자유로운 DMA 채널이 발견되면, 블록(850)에서 DMA 차단 해제가 설정된다.
블록(860)에서, DMA 엔진(212)은 블록(870)에서 요청된 메모리 동작의 제1 부분이 완료된 것을 의미하는 부분 전송을 시작하는 DMA 전송을 개시한다. 예를 들어 DMA 요청이 메모리로부터 4개의 워드를 로딩하는 것이라면, DMA 엔진(212)은 제1 클록 사이클에 제1 워드의 로딩을 끝마칠 수 있다. 블록(882)에서, DMA 엔진(212)은 제1 워드와 연관된 보호 비트와 같은 제1 워드와 연관된 임의의 보호를 소거할 수 있다. 보호 비트는 예시적인 보호 메커니즘으로 사용되지만, 본 명세서에 개시된 임의의 보호가 사용될 수 있고, 이 기술 분야에 통상의 지식을 가진 자라면 다른 가능한 보호 메커니즘을 인식할 수 있을 것이다. 나아가, 이 실시예는 보호를 "소거"하는 것이지만, 이 기술 분야에 통상의 지식을 가진 자라면 보호는 메모리 영역이 이용가능하게 된 것을 나타내는 여러 방식으로 업데이트될 수 있다는 것을 인식할 수 있을 것이다.
보호 비트를 소거한 후, 결정 블록(880)에서, DMA 엔진(212)은 전체 블록 메모리에 액세스가 완료되었는지 여부를 체크한다. 이것이 완료되지 않았다면, 본 방법은 블록(870)으로 리턴하여 요청된 메모리의 그 다음 부분을 전송한다. 이것이 완료되었다면, 블록(890)에서 DMA는 종료(terminate)한다.
도 9는 코어(300)의 관점으로부터 메모리 로딩 및 저장 동작을 수행하는 예시적인 방법의 흐름도이다. 본 방법은 DMA 엔진(212)이 이전의 메모리 요청을 계속 서비스하는 동안 수행될 수 있고, MEMCPY 프리미티브의 일부로서 또는 MEMCPY 프리미티브와 관련하여 수행될 수 있다. 코어(300)가 이들 동작을 별개의 명령 또는 프리미티브로 취급하도록 구성되어 있는 경우에도 특정 동작은 함께 고려되는 것으로 명시적으로 의도된다. 예를 들어, 코어(300)는 로딩 및 저장 프리미티브는 별개로 제공되는 동안 전술한 보호 비트를 별개로 설정하기 위해 별개의 MEMCPY 프리미티브를 제공할 수 있다. 그러나, 대안적인 실시예에서, 로딩 및 저장 프리미티브 그 자체는 본 명세서에 개시된 방법의 사상을 실질적으로 변경함이 없이 보호 비트를 설정하도록 구성될 수 있다.
블록(900)에서 시작하여, 코어(300)는 블록(910)에서 판독("로딩") 또는 기록("저장") 액세스 요청을 발송한다. 블록(920)에서, 코어(300)는 요청된 메모리 블록에 걸쳐 설정된 보호가 있는지 여부를 찾는 체크를 한다. 요청된 블록의 전부 또는 일부가 보호되어 있으면, MEMCPY 명령은 스톨하고 블록(930)에서 대기 상태에 진입한다. 일단 요청된 메모리 영역에 대한 보호 비트가 소거되면, 블록(960)에서, 코어(300)는 DMA 엔진(212) 지향일 수 있는 블록 메모리 액세스 요청을 발송한다. DMA 요청을 발송한 후, 블록(970)에서, MEMCPY 프리미티브는 DMA 엔진(212)이 메모리 동작을 완료하기를 대기함이 없이 종료할 수 있다.
MEMCPY 프리미티브의 또 다른 실시예는 예를 들어, 2차원 DMA의 방식으로 외부 또는 내부 메모리를 통해 스트라이드를 지정하는 추가적인 파라미터를 구비할 수 있다.
대안적인 보호 방법은 또한 다른 실시예에서 제공될 수 있다. 예를 들어, 코어(300)로부터 액세스 요청시, 요청된 어드레스는 도 2에서 보는 바와 같이 비교기를 사용하여 활성 MEMCPY 동작의 범위(bound)와 직접 비교될 수 있다. 이 방법은 MEMCPY 프리미티브를 간단한 블록 데이터 동작으로 제한하지만, 또한 개시 스테이지에 더 적은 지연을 수반한다. 이것은 또한 L1 메모리(120) 외 영역이 보호될 수 있게 한다.
더 또 다른 실시예에서, 판독기는 고속 메모리에 데이터 전송의 무결성(integrity)을 보장하는데 사용된 표준 하드웨어 핸드쉐이크 프로토콜을 통해 스톨을 야기하게 된다. 예를 들어 AXI(Advanced Extensible Interface) 슬레이브 포트(slave port)를 통해 L1 메모리(120)를 판독하는 DMA 제어기(212)는 어드레스가 수용된 것을 나타내는 ARREADY를 선언(assert)하는 슬레이브 및 데이터가 이용가능하다는 것을 나타내는 RVALID를 선언하는 슬레이브 사이에 잠재적으로 긴 지연에 의해 스톨될 수 있다.
DMA 엔진(120)(또는 코어(300))을 스톨하는 것은 수용되지 않을 수 있다. 그래서 본 발명의 또 다른 실시예에 따라, 하드웨어 플래그는 도 9에서와 같이 전송과 스톨을 맹목적으로 개시하는 대신 메모리 트랜잭션을 개시하는 VSTORE 이벤트시에 DMA 엔진(212)에 인터럽트를 생성한다. 프로세서 측에서, 플래그 상태 전이(flag state transition)는 (하드웨어-스레스(hardware-threaded)된 프로세서의 경우에) 고속 스레드 스왑(fast thread swap)을 개시할 수 있다. 이 실시예는 다수의 DMA 채널(210)이 허용된 경우에 DMA 채널(210) 인터럽트에 유효 비트를 맵핑하는 메커니즘을 요구한다.
본 발명의 특정 실시예에 따라, 벡터 버퍼의 판독기 및 기록기는 자동으로 동기화 유지되므로, 프로그래머는 DMA를 그 애플리케이션에 증분적으로 도입할 수 있다. 예를 들어, 버퍼는 애플리케이션이 개발되고 있는 동안 정렬 제한(alignment constraint)을 갖는 루프 기간 동안만 할당될 수 있고, 이것이 동작하고 있는 경우에만 코어(300) 및 DMA 엔진(212)의 동시 동작을 최대화하도록 조절된 수명을 구비할 수 있다. 애플리케이션이 튜닝된 후에도 보호 비트(610)는 판독기가 이상(extraordinary) 시스템 상태 하에서 기록기를 따라 잡는다면 올바른 동작을 보장한다.
본 발명의 여러 실시예에 따라, MEMCPY 프리미티브는 소프트웨어로 구현되어 API를 통해 액세스되거나, 또는 하드웨어로 구현되어 하드웨어 명령을 통해 액세스될 수 있다.
본 발명의 또 다른 예시적인 실시예에서, 되는데, 목적지 범위(destination range)를 제로아웃(zero out)시키는 MEMZERO 프리미티브가 또한 추가된다.
본 발명의 더 또 다른 예시적인 실시예에서, 하드웨어 큐(queue)가 보호된 전송을 위해 추가되어 여러 보호된 전송이 큐잉(queued)될 수 있고, 각각은 선입선출(first-in-first-out)(FIFO) 배열로 끝마칠 수 있다. 큐가 가득 차 있을 때 이 MEMCPY 발송되면, 이 큐는 스톨될 수 있다.
스톨 동안 인터럽트가 발생하면, MEMCPY 프리미티브는 이전의 MEMCPY 프리미티브가 끝마치기를 대기하는 경우 허용되지 않을만큼 긴 시간 동안 스톨할 수 있다. 인터럽트를 무한히 지연시키지 않게 하기 위해, 예시적인 실시예에서, MEMCPY 프리미티브는 인터럽트를 처리하도록 구성된다. 특히, MEMCPY 프리미티브는 실행을 시작하지 않았으므로, 인터럽트 메커니즘은 인터럽트 프로세싱이 완료된 후에 리턴하여 MEMCPY 프리미티브를 재실행할 수 있다.
더 또 다른 예시적인 실시예에서, 큐가 비어 있을 때, MEMCPY 프리미티브는 인터럽트 비트를 선언할 수 있다. 인터럽트 비트는 인터럽트가 실제로 발생하지 않도록 마스킹(masked)될 수 있다. 대기(WAIT) 명령이 또한 특정 인터럽트 비트가 선언될 때까지 스톨을 위해 추가될 수 있다. 이것은 다른 마스킹되지 않은 인터럽트에 의해 프리-엠프팅(pre-empted)될 수 있으나, 인터럽트 프로세싱이 완료된 후에, 이것은 대기로 리턴할 수 있다. 다만 지정된 인터럽트만이 대기 명령이 완료하게 할 수 있다.
더 또 다른 예시적인 실시예에서, 타임아웃(timeout) 카운터 제어 레지스터가 불량 전송이 무한 대기를 야기하지 않도록 추가된다. 이 예시적인 레지스터는 대기 명령이 활성일 때에만 카운트를 할 수 있다. 특정 임계 시간, 예를 들어 3,000 사이클 후에, 레지스터는 WAIT 대기를 오프 상태로 가도록 구성될 수 있다.
더 또 다른 예시적인 실시예에서, 대기는 L1 캐시(120) 내 버퍼(510)를 보호하는 "유효"(valid) 또는 "더티"(dirty) 비트로 구현될 수 있다. 이 더티 비트는 버퍼(510)가 수정된 것을 나타내기 위해 데이터가 버퍼(510)에 기록될 때마다 설정될 수 있다. DMA 요청을 큐잉한 후, 예시적인 MEMCPY 프리미티브는 또한 타깃 버퍼(510)를 무효 또는 "더티"인 것으로 마크(mark)할 수 있다. DMA 엔진(212)이 데이터를 버퍼(510)의 일부로 이동하거나 이로부터 외부로 이동하면, 이는 버퍼(510)를 유효 또는 "클린"(clean)으로 마크한다.
더 또 다른 예시적인 실시예에서, MEMCPY 프리미티브 및 DMA 전송은 캐시가능한 메모리 영역에서 동작하도록 구성될 수 있다. 이것은 예를 들어 하나 이상의 캐시 라인의 소유권을 얻기 위해 캐시 제어기와 상호작용을 요구할 수 있다. 보호 비트는 이후 라이트백(writeback) 캐시 제어기의 "표준" 유효 및 더티 비트로부터 코어(300) 및 DMA 엔진(212)을 동기화하도록 합성(synthesized)될 수 있다. 표준 비트는 다음 사항을 포함하는 정의를 구비할 수 있다:
a. 무효(invalid): 라인은 캐시에서 논리적이지 않다. (DMA 엔진(212) 또는 코어(300) 중 어느 것에 의한) 판독은 라인이 유효인 것으로 마크될 때까지 스톨하여야 한다.
b. 유효: 데이터는 판독될 준비가 되어 있고, 라인은 메모리에 라이트백될 필요가 없다.
유효 및 더티 상태 모두는 라인이 "누락"(dropped)될 수 없다는 것을 의미한다. 이것은 상태 변화 전에 메인 메모리에 라이트백되어야 한다.
DMA 엔진(212)이 데이터를 캐시 메모리로 이동하면, 즉, 버퍼에 기록하면, 이것은 캐시 제어기와 상호작용하여 코어(300)가 메모리 어드레스, 제일 먼저 예를 들어 로딩 명령을 통해 메모리 어드레스에 액세스하고자 시도하면 제어기가 의도치 않게 라인 충전을 시도하는 것을 방지한다. 유효 비트는 버퍼의 캐시 라인 부분에 DMA의 기록이 완료된 후에 설정될 수 있다(따라서 스톨 상태를 해결하여, 이 캐시 라인 영역에의 로딩 명령이 진행될 수 있다).
DMA 엔진(212)이 캐시로부터 메인 메모리(320)로 데이터를 이동시키면, 이것은 버퍼에 맵핑하는 라인을 제어하기 위해 캐시 제어기와 통신할 필요가 있을 수 있다. DMA 엔진(212)은 이후 버퍼 영역의 각 캐시 라인이 코어(300)로부터 기록 동작 후에 캐시 제어 로직에 의해 설정된 바와 같은 유효 및 더티인 것으로 마크되기를 대기할 수 있다. DMA 엔진(212)은 이후 캐시로부터 메인 메모리(320)로 DMA의 기록이 완료된 후에 유효 및 더티 비트를 소거할 수 있다.
더 또 다른 실시예에 따라, L1 캐시는 액세스하고 코어는 유효 비트가 설정될 때까지 무효 데이터 스톨을 판독한다. 더티 영역에 기록하는 것은 또한 DMA 엔진(212)이 이 더티 영역을 클린으로 마크할 때까지 지연된다. 유리하게는, 더티 비트를 사용하는 것은 표준 C "memcpy()" 호(call)와 동일한 의미를 가지는 MEMCPY 프리미티브를 가능하게 하고, 그래서 코드는 휴대용 방식으로 기록될 수 있다.
더 또 다른 실시예에서, L1 메모리 내 이중-버퍼된 루틴(double-buffered routine)은 아래 코드로 표현되고, 여기서 1개의 입력 버퍼(dram_buffer0) 및 1개의 출력 버퍼(dram_buffer1)가 있고, 여기서 a 및 b는 L1 메모리에 있는 2개의 버퍼이다. 이 코드는 적어도 3개의 패스(pass)를 행하며, 여기서 처음 것은 입력을 프리페치하고, 중간(middle) 것은 작업(work)을 행하며, 마지막 것은 최종 출력을 저장한다.
이 전체 시퀀스는 매크로(macro)로 제공될 수 있고, 또는 커널 루틴은 인라인(in-lined)으로 마크될 수 있다.
본 발명은 스트리밍 커널을 위한 메모리 대역폭을 최대화하기 위해 다음 사항을 더 고려한다. 2차원 MEMCPY 프리미티브가 제공될 수 있다. 이러한 형태의 프리미티브는 3개의 추가적인 파라미터: 소스 라인 스트라이드, 목적지 라인 스트라이드, 및 행 카운트를 수신할 수 있다. 이 경우에, 단일 프리미티브는 총 6개의 오퍼랜드를 요구할 수 있다.
일부 예시적인 실시예에서, 애플리케이션 프로그래밍 인터페이스(API)는 벡터 버퍼에 제공된다. 예를 들어:
여기서, *vbuf는 버퍼에 count*elsize를 할당하고, *vbuf2d는 버퍼에 ycount*elsize 바이트를 할당한다.
이 경우는 비단위 스트라이드가 연속된 캐시 라인 영역으로 맵핑되지 않는 경우에도 캐시 라인 유효 비트 입도(granularity)를 사용할 수 있다.
보다 일반적인 API는 느린 및 빠른(외부/내부), 직접 메모리 액세스(시작 어드레스, 카운트, 스트라이드, elsize)를 완전히 독립적으로 지정할 수 있다. 이것은 elsize-입도 유효 비트를 사용할 수 있다.
DMA는 또한 가상 대 물리적 맵핑(virtual to physical mapping)을 찾기 위해 자기 자신의 페이지 테이블을 구비할 수 있지만(또는 프로세서의 것을 워킹(walk)할 수 있지만), 일부 경우에 이것은 더 많은 사이클과 더 많은 하드웨어를 요구할 수 있다.
더 또 다른 실시예에서, 방법은 다음과 같이 다른 API 호(call)에 사용하기 위해 벡터 버퍼 처리를 리턴하도록 제공될 수 있다:
void *vload(VBuf *);
일 실시예에서, 이 방법은 VBuf와 이전에 연관된 임의의 버퍼를 무효화하고, VBuf로부터 파라미터를 사용하여 버퍼로 DMA 전송을시작하고, 포인터를 벡터 버퍼의 시작으로 리턴할 수 있다.
더 또 다른 실시예에서, 방법은 다음과 같이 벡터 저장 동작을 개시하도록 제공될 수 있다:
void *vstore(VBuf *);
일 실시예에서, 이 방법은 VBuf와 이전에 연관된 임의의 버퍼를 무효화하고, 데이터가 이용가능하게 될 때까지 (또는 제1 유효 비트 세트 후에 제1 DMA 인터럽트를 생성할 때까지) 스톨하는, 버퍼로부터 DMA 전송을 시작하고, 포인터를 벡터 버퍼의 시작으로 리턴할 수 있다.
더 또 다른 실시예에서, 방법은 다음과 같이 벡터 버거(bugger)로의 포인터를 해제하도록 제공된다.
void vrelease(VBuf *);
일 실시예에서, 이 방법은 임의의 미완의 DMA 전송이 완료될 때까지 대기하고, 버퍼 및 모든 연관된 자원을 해제한다.
API는 또한 다음과 같이 버퍼 상태의 더 정밀한 입도 제어를 제공하는 루틴을 포함할 수 있다.
버퍼를 로컬 할당하여 사용하는 일례는 다음을 포함한다:
차후에 데이터 이동은 vbuf 및 vload 호(call)를 루프보다 더 높이 상승(hoist)시키고 vrelease를 루프보다 더 아래로 하강(sink)시키는 것에 의해 최적화될 수 있다.
더 또 다른 예시적인 실시예에서, 유효 비트는 판독기 및 기록기로 하여금 동일한 버퍼에 동시에 액세스할 수 있게 하는데 사용될 수 있어서, 애플리케이션이 완료하는데 대기하는데 소비되는 시간을 감소시키는 것에 의해 애플리케이션의 성능을 개선시킬 수 있다. 그러나, 레이스 상태(race condition)를 회피하기 위해 유효 비트 그 자체는 DMA 전송이 개시되기 전에 무효 상태로 설정되어야 한다.
기록될 필요가 있는 유효 비트의 수는 각 비트가 설명(describe)하는 데이터 바이트의 수를 증가시키는 것에 의해 감소될 수 있다. 그러나, 이것은 또한 버퍼 사이즈 및 정렬(alignment)에 대한 옵션을 감소시킨다. 하나의 예시적인 솔루션은 캐시 라인 길이와 유사한 데이터 폭, 예를 들어 32 내지 128 바이트를 설정하는 것이다. 병렬로 기록될 수 있는 유효 비트의 수는 이를 물리적 메모리의 동일한 서브 뱅크에 패킹(packing)하는 것에 의해 증가될 수 있다.
더 또 다른 실시예에서, 코어(300)는 2개의 명령을 사용하는 것에 의해 인터럽트를 디스에이블함이 없이 유효 비트가 설정될 때까지 대기한다. 제1 명령은 비트를 설정한 프로세싱 요소(PE)에 비동기적으로 실행하는 상태 기계를 시작한다. 인터럽트가능한 제2 명령은 상태 기계가 완료하기를 대기한다.
전술한 것과 같은 API는 더 많은 개수의 버퍼에 대해 더 작은 수의 DMA 채널을 사용할 수 있다. 이것은 DMA 제어기(212)에 의해 프로세싱되고 있는 리스트에 각 트랜잭션에 대한 디스크립터(descriptor)를 링크시키는 것에 의해 디스크립터 기반 DMA 제어기(212)로 달성될 수 있다. 버퍼로의 전송을 보장하는 것은 별개의 채널이 각 방향에 사용되어야 하는 버퍼로부터 전송된 뒤에는 스톨되지 않는다.
일부 DSP는 캐시로 구성될 수 있는 L1 메모리(220)를 구비하여, 유효 비트를 포함하는 캐시 태그(tag)들이 이미 존재한다. L1의 일부분이 본 발명에 따라 벡터 버퍼로 사용될 수 있게 하는 방식과 일부분이 캐시로 사용될 수 있게 하는 방식을 결합하면 두 목적을 위해 동일한 유효 비트를 재사용할 수 있게 된다.
상기 실시예의 설명에서, 임의의 커패시터, 클록, DFF, 디바이더(divider), 인덕터, 저항기, 증폭기, 스위치, 디지털 코어, 트랜지스터 및/또는 다른 성분은 특정 회로 요구를 수용하기 위해 용이하게 대체되거나 교체되거나 또는 달리 수정될 수 있다. 더욱이, 상보적인 전자 디바이스, 하드웨어, 소프트웨어 등을 사용하는 것은 종종 본 발명의 개시 내용을 구현하는데 동등한 실행가능한 옵션을 제공하는 것으로 이해된다.
일 예시적인 실시예에서, 도면에서 임의의 개수의 전기 회로는 연관된 전자 디바이스의 보드 상에 구현될 수 있다. 이 보드는, 전자 디바이스의 내부 전자 시스템의 여러 성분을 유지하고, 다른 주변 장치를 위한 커넥터를 더 제공할 수 있는 일반적인 회로 보드일 수 있다. 보다 구체적으로, 이 보드는 시스템의 다른 성분들이 전기적으로 통신할 수 있게 하는 전기적 연결을 제공할 수 있다. 임의의 적절한 프로세서(디지털 신호 프로세서, 마이크로프로세서, 지원 칩셋 등을 포함), 메모리 요소 등은 특정 구성 요구, 프로세싱 요구, 컴퓨터 디자인 등에 기초하여 이 보드에 적절히 연결될 수 있다. 외부 저장매체, 추가적인 센서, 오디오/비디오 디스플레이를 위한 제어기, 및 주변 디바이스와 같은 다른 성분들은 보드에 플러그인 카드(plug-in card)로 부착되거나, 케이블을 통해 부착되거나, 또는 보드 그 자체에 집적될 수 있다.
또 다른 예시적인 실시예에서, 도면의 전기 회로는 독립형 모듈(예를 들어, 특정 애플리케이션 또는 기능을 수행하도록 구성된 연관된 성분 및 회로를 구비하는 디바이스)로 구현되거나 또는 전자 디바이스의 애플리케이션 특정 하드웨어에 플러그인 모듈로 구현될 수 있다. 본 발명의 특정 실시예는 부분적으로 또는 전체적으로 시스템온 칩(SOC) 패키지에 용이하게 포함될 수 있는 것으로 이해된다. SOC는 컴퓨터 또는 다른 전자 시스템의 성분을 단일 칩으로 집적하는 IC를 나타낸다. 이것은 디지털, 아날로그, 혼합된-신호, 및 종종 무선 주파수 기능을 포함할 수 있으며, 이들은 전부 단일 칩 기판에 제공될 수 있다. 다른 실시예는 다중-칩-모듈(MCM)을 포함할 수 있고, 복수의 별개의 IC은 단일 전자 패키지 내에 위치되고 전자 패키지를 통해 서로 긴밀히 상호작용하도록 구성된다. 여러 다른 실시예에서, 증폭 기능은 응용 특정 집적 회로(ASIC), 전계 프로그래밍가능한 게이트 어레이(FPGA), 및 다른 반도체 칩에 하나 이상의 실리콘 코어로 구현될 수 있다.
또한 본 명세서의 전부, 본 명세서에 설명된 치수 및 관계(예를 들어, 프로세서의 수, 로직 동작)는 단지 예시와 개시를 위하여 제공된 것이라는 것이 주목된다. 이러한 정보는 본 발명의 사상, 또는 부속된 청구범위를 벗어남이 없이 상당히 변경될 수 있다. 본 명세서는 하나의 비제한적인 예로서만 적용되고, 따라서, 비제한적인 예로서 해석되어야 한다. 상세한 설명에서, 예시적인 실시예는 특정 프로세서 및/또는 성분 배열을 참조하여 설명되었다. 그러나 부속된 청구범위를 벗어남이 없이 이러한 실시예에 여러 변형과 변경이 이루어질 수 있다. 따라서, 이러한 상세한 설명과 도면은 발명을 제한하는 것을 의미하는 것이 아니라 예시하는 것으로 고려되어야 한다.
도면을 참조하여 전술한 활동은 신호 프로세싱을 수반하는 임의의 집적 회로, 특히 그 일부가 디지털화된 실시간 데이터 처리와 연관된 것일 수 있는 전문화된 소프트웨어 프로그램, 또는 알고리즘을 실행하는 집적 회로에 적용가능한 것으로 이해된다. 특정 실시예는 다중-DSP 신호 프로세싱, 부동 소수점(floating point) 프로세싱, 신호/제어 프로세싱, 고정된-기능 프로세싱, 마이크로제어기 애플리케이션 등과 관련될 수 있다.
특정 상황에서, 본 명세서에 설명된 특징은 의료 시스템, 과학 기구, 무선 및 유선 통신, 레이더, 산업 프로세스 제어, 오디오 및 비디오 장비, 전류 센싱, (고정밀일 수 있는) 도구, 및 다른 디지털-프로세싱-기반 시스템에 적용될 수 있다.
더욱이, 전술한 특정 실시예는 의료 이미징, 환자 모니터링, 의료 기구, 및 홈 헬스케어를 위한 디지털 신호 프로세싱 기술에 제공될 수 있다. 이것은 폐질환 모니터, 가속도계, 심박수 모니터, 맥박조정기(pacemakers) 등을 포함할 수 있다. 다른 애플리케이션은 안전 시스템(예를 들어, 안정 제어 시스템, 드라이버 보조 시스템, 브레이크 시스템, 인포테인먼트(infotainment) 및 임의의 종류의 내부 애플리케이션)을 위한 자동차 기술을 수반할 수 있다. 나아가, 동력 전달 시스템(예를 들어, 하이브리드 및 전기 차량에서)은 배터리 모니터링, 제어 시스템, 레포팅 제어, 유지보수 활동 등에 고정밀 데이터 변환 제품을 사용할 수 있다.
또 다른 예시적인 시나리오에서, 본 발명의 개시 내용은 생산성, 에너지 효율, 및 신뢰성을 촉진하는 것을 도와주는 프로세스 제어 시스템을 포함하는 산업 시장에 적용될 수 있다. 소비자 애플리케이션에서, 전술한 신호 프로세싱 회로의 개시 내용은 이미지 프로세싱, 자동 초점(auto focus), 및 이미지 안정화(stabilization)(예를 들어, 디지털 스틸 카메라, 캠코더 등을 위해)에 사용될 수 있다. 다른 소비자 애플리케이션은 홈 씨어터 시스템, DVD 레코더, 및 고선명 텔레비전을 위한 오디오 및 비디오 프로세서를 포함할 수 있다. 또 다른 소비자 애플리케이션은 진보된 터치 스크린 제어기(예를 들어, 임의의 유형의 휴대용 매체 디바이스를 위해)를 수반할 수 있다. 그리하여, 이러한 기술은 스마트폰, 태블릿, 보안 시스템, PC, 게임 기술, 가상 현실, 시뮬레이션 훈련 등의 일부를 용이하게 형성할 수 있다.
본 명세서에 제공된 다수의 예에서 상호작용은 2개, 3개, 4개 이상의 전기적 성분 면에서 기술된 것일 수 있는 것으로 이해된다. 그러나, 이것은 단지 예시를 위한 목적을 위하여 단지 예시로서 이루어진 것이다. 그러므로 이 시스템은 임의의 적절한 방식으로 통합될 수 있는 것으로 이해된다. 유사한 설계 대안에 따라, 도면에 도시된 성분, 모듈, 및 요소는 그 어느 것도 여러 가능한 구성으로 조합될 수 있고 이들 조합은 모두 본 명세서의 넓은 범위 내에 명확히 있는 것으로 이해된다. 특정 경우에, 제한된 개수의 전기 요소만을 참조하는 것에 의해 주어진 흐름 세트의 기능 중 하나 이상의 기능을 설명하는 것이 더 용이할 수 있다. 도면 및 그 개시 내용의 전기 회로는 용이하게 스케일러블하고 다수의 성분, 및 보다 복잡한/정교한 배열 및 구성을 수용(accommodate)할 수 있는 것으로 이해된다. 따라서, 제공된 예들은 잠재적으로 수많은 다른 아키텍처에도 적용될 수 있기 때문에 그 범위를 제한하는 것이라거나 이 전기 회로의 넓은 개시 내용을 방해하는 것으로 해석되어서는 안 된다.
본 명세서에서, "일 실시예", "예시적인 실시예", "실시예", "또 다른 실시예", "일부 실시예", "여러 실시예", "다른 실시예", "대안적인 실시예"에 포함된 여러 특징(예를 들어, 요소, 구조물, 모듈, 성분, 단계, 동작, 특성 등)에 대한 언급은 이러한 특징이 본 발명의 하나 이상의 실시예에 포함되지만, 동일한 실시예에서 결합되거나 결합되지 않을 수도 있는 것을 의미하는 것으로 의도된다.
이 기술 분야에 통상의 지식을 가진 자에게는 다수의 다른 변경, 대체, 변화, 변경 및 변형이 일어날 수 있으므로, 본 발명은 모든 이러한 변경, 대체, 변화, 변경 및 변형을 첨부된 청구범위 내에 있는 것으로 포함하는 것으로 의도된다. 미국 특허 상표청(USPTO) 및 추가적으로 본 출원에 제기된 임의의 특허 문헌의 임의의 독자들이 본 명세서에 첨부된 청구범위를 해석하는 것을 지원하기 위하여, "∼하는 수단" 또는 "∼하는 단계" 라는 단어가 특정 청구범위에서 구체적으로 사용되지 않는 한, 본 출원인은, (a) 출원일에 존재하는 그대로 35 U.S.C. 제112조 제6절을 상기하는 것으로 첨부된 청구범위를 의도한 것이 전혀 아니라는 것; 및 (b) 본 명세서에 있는 임의의 진술에 의하여, 첨부된 청구범위에 반영되지 않은 임의의 방식으로 본 발명을 제한하는 것으로 의도된 것이 아니라는 것을 주지할 것을 희망한다.
다른 주석, 예시 및 구현예
전술한 장치의 모든 선택적인 특징은 또한 본 명세서에 설명된 방법 또는 프로세스에 대하여 구현될 수 있고 이 예시에 있는 특정사항은 하나 이상의 실시예에서 어디엔가 사용될 수 있는 것으로 이해된다.
제1 예시에서, 복수의 전자 성분에 연결된 회로 보드를 더 포함할 수 있는 임의의 유형의 컴퓨터의 일부일 수 있는 (임의의 적절한 회로, 디바이더, 커패시터, 저항기, 인덕터, ADC, DFF, 로직 게이트, 소프트웨어, 하드웨어, 링크 등을 포함할 수 있는) 시스템이 제공된다. 이 시스템은, 디지털 코어로부터 제1 클록을 사용하여 매크로의 제1 데이터 출력으로 데이터를 클록킹하는 수단(여기서 제1 클록은 매크로 클록이다); 제2 클록을 사용하여 매크로의 제1 데이터 출력으로부터 물리적 인터페이스로 데이터를 클록킹하는 수단(여기서 제2 클록은 물리적 인터페이스 클록임); 매크로 클록을 사용하여 디지털 코어로부터 매크로의 리셋 출력으로 제1 리셋 신호를 클록킹하는 수단(여기서 제1 리셋 신호 출력은 제2 리셋 신호로서 사용됨); 샘플링된 리셋 신호를 생성하기 위해 제2 클록의 율보다 더 큰 클록 율을 제공하는, 제3 클록을 사용하여 제2 리셋 신호를 샘플링하는 수단; 및 샘플링된 리셋 신호의 전이에 응답하여 물리적 인터페이스에서 미리 결정된 상태로 제2 클록을 리셋하는 수단을 포함할 수 있다.
이들 (상기) 예에서 '∼하기 위한 수단'은 임의의 적절한 소프트웨어, 회로, 허브, 컴퓨터 코드, 로직, 알고리즘, 하드웨어, 제어기, 인터페이스, 링크, 버스, 통신 경로 등과 함께 본 명세서에 설명된 임의의 적절한 성분을 사용하는 것을 포함할 수 있다(그러나, 이들로 제한되는 것은 아니다). 제2 예시에서, 본 시스템은 실행될 때 시스템으로 하여금 전술한 활동 중 임의의 것을 수행하게 하는 기계-판독가능한 명령을 더 포함하는 메모리를 포함한다.
Claims (20)
- 로직을 포함하는 직접 메모리 액세스(direct memory access: DMA) 엔진으로서, 상기 로직은,
메모리 블록 지향 DMA 요청을 수신하는 동작;
DMA 전송을 시작하는 동작; 및
상기 DMA 전송이 진행함에 따라, 상기 DMA 전송이 완료된 상기 메모리 블록 부분과 연관된 보호(guard)를 업데이트하는 동작을 수행하도록 구성된 것인 DMA 엔진. - 제1항에 있어서, 상기 로직은,
상기 DMA 요청을 수신한 후에,
DMA 차단 신호를 제공하는 동작;
자유로운 DMA 채널을 식별하는 동작; 및
자유로운 DMA 채널을 식별한 후에, DMA 차단 해제 신호를 제공하는 동작을 수행하도록 더 구성된 것인 DMA 엔진. - 제1항에 있어서, 상기 보호를 업데이트하는 동작은 보호 비트를 소거하는 단계를 포함하는 것인 DMA 엔진.
- 제3항에 있어서, 상기 보호 비트는 또한 캐시 메모리를 위한 더티 비트(dirty bit) 또는 무효 비트(invalid bit)로 사용되는 것인 DMA 엔진.
- 제1항에 있어서, 상기 보호를 업데이트하는 동작은 이미 전송된 메모리 부분을 배제하도록 보호된 메모리 블록의 저장된 범위(bound)를 한정하는 버퍼를 변경하는 동작을 포함하는 것인 DMA 엔진.
- 제1항에 있어서, 다수의 DMA 요청을 처리하는 큐(queue)를 더 포함하되, 상기 큐는 선입 선출 순서로 동작되는 것인 DMA 엔진.
- 제1항에 있어서, 비단위-스트라이드(non-unity stride) 벡터를 포함하는 데이터를 자동으로 재정렬(reorder)하도록 더 구성된 것인 DMA 엔진.
- 메모리 블록 지향 메모리 명령을 제공하는 회로를 포함하는 프로세서로서, 상기 명령은,
상기 메모리 블록과 연관된 보호를 테스트하는 동작;
상기 보호가 설정되어 있으면, 상기 명령을 스톨하는 동작; 및
상기 보호가 설정되어 있지 않으면,
자유로운 DMA 채널을 식별하는 동작; 및
상기 메모리 블록에 대한 DMA 요청을 DMA 엔진에 송신하는 동작을 수행하도록 구성된 것인 프로세서. - 제8항에 있어서, 상기 프로세서는 상기 DMA 요청을 송신할 때 상기 명령을 종료하도록 구성된 것인 프로세서.
- 제8항에 있어서, 상기 보호는 보호 비트를 포함하는 것인 프로세서.
- 제10항에 있어서, 상기 보호를 설정하는 동작은 복수의 보호 비트를 설정하는 동작을 포함하고, 각 상기 보호 비트는 상기 메모리 블록의 일부와 연관된 것인 프로세서.
- 제8항에 있어서, 상기 보호는 사용 시 메모리 블록에 대한 어드레스 범위를 식별하는 버퍼를 포함하고, 상기 보호를 테스트하는 동작은 상기 요청된 메모리 블록을 상기 사용시 메모리 블록에 대한 상기 어드레스 범위와 비교하는 동작을 포함하는 것인 프로세서.
- 제8항에 있어서, 보호를 설정하는 동작은 표준 하드웨어 핸드쉐이크 프로토콜을 사용하는 동작을 포함하는 것인 프로세서.
- 제8항에 있어서, 상기 프로세서는, 상기 DMA 전송을 개시한 후,
인터럽트를 디스에이블시키지 않는 동작;
상태 기계를 시작하는 제1 명령을 발송하는 동작; 및
인터럽트가능하고 상기 상태 기계가 완료하기를 대기하는 제2 명령을 발송하는 동작을 수행하도록 구성된 것인 프로세서. - 제8항에 있어서, 상기 메모리 명령은 상기 메모리 블록으로부터 상기 프로세서로 데이터를 전송하도록 구성된 로딩 명령인 것인 프로세서.
- 제8항에 있어서, 상기 메모리 명령은 상기 프로세서로부터 상기 메모리 블록으로 데이터를 전송하도록 구성된 저장 명령인 것인 프로세서.
- 컴퓨터로 구현되는 방법으로서,
어드레스된 메모리 영역 지향 메모리 액세스 요청을 수신하는 단계;
상기 메모리 영역에 적어도 하나의 보호를 설정하는 단계;
상기 메모리 액세스 요청을 서비스하기 위해 자유로운 메모리 채널을 식별하는 단계;
상기 메모리 액세스 요청을 서비스하기 위해 데이터 전송을 개시하는 단계; 및
상기 데이터 전송의 적어도 일부분을 완료한 후, 완료된 부분과 연관된 상기 보호를 해제하는 단계를 포함하는, 컴퓨터로 구현되는 방법. - 제17항에 있어서,
상기 보호는 하나 이상의 메모리 영역을 사용되고 있는 것으로 식별하는 메모리 버퍼를 포함하고;
상기 보호를 설정하는 단계는 상기 메모리 영역을 사용되고 있는 메모리 영역인 것으로 식별하는 단계를 포함하고;
상기 보호를 해제하는 단계는 상기 메모리 버퍼로부터 상기 데이터 전송이 완료된 상기 메모리 영역 부분을 제거하는 단계를 포함하는 것인, 컴퓨터로 구현되는 방법. - 제17항에 있어서, 상기 데이터 전송을 개시한 후에, 상기 메모리 액세스 요청을 제공한 명령을 종료하는 단계를 더 포함하는, 컴퓨터로 구현되는 방법.
- 제17항에 있어서, 상기 보호를 설정하는 단계는 보호 비트를 설정하는 단계를 포함하고, 상기 보호를 해제하는 단계는 상기 보호 비트를 해제하는 단계를 포함하는 것인, 컴퓨터로 구현되는 방법.
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201261717564P | 2012-10-23 | 2012-10-23 | |
US61/717,564 | 2012-10-23 | ||
US14/040,367 | 2013-09-27 | ||
US14/040,367 US9092429B2 (en) | 2012-10-23 | 2013-09-27 | DMA vector buffer |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20140051797A true KR20140051797A (ko) | 2014-05-02 |
KR101572204B1 KR101572204B1 (ko) | 2015-11-26 |
Family
ID=49447990
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020130126017A KR101572204B1 (ko) | 2012-10-23 | 2013-10-22 | Dma 벡터 버퍼 |
Country Status (4)
Country | Link |
---|---|
US (1) | US9092429B2 (ko) |
EP (1) | EP2725498B1 (ko) |
KR (1) | KR101572204B1 (ko) |
CN (1) | CN103777923B (ko) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20160115833A (ko) * | 2015-03-27 | 2016-10-06 | 인피니언 테크놀로지스 아게 | 레이더 신호를 프로세싱하는 방법 및 디바이스 |
Families Citing this family (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9342306B2 (en) | 2012-10-23 | 2016-05-17 | Analog Devices Global | Predicate counter |
US9201828B2 (en) | 2012-10-23 | 2015-12-01 | Analog Devices, Inc. | Memory interconnect network architecture for vector processor |
JP6155723B2 (ja) * | 2013-03-18 | 2017-07-05 | 富士通株式会社 | レーダ装置及びプログラム |
CN107250995B (zh) * | 2014-11-25 | 2021-11-16 | 领特投资两合有限公司 | 存储器管理设备 |
US9563572B2 (en) | 2014-12-10 | 2017-02-07 | International Business Machines Corporation | Migrating buffer for direct memory access in a computer system |
CN105335130B (zh) * | 2015-09-28 | 2018-06-26 | 深圳市中兴微电子技术有限公司 | 一种处理器及其处理任务的方法 |
US20170155717A1 (en) * | 2015-11-30 | 2017-06-01 | Intel Corporation | Direct memory access for endpoint devices |
US10929339B2 (en) * | 2016-10-17 | 2021-02-23 | Yokogawa Electric Corporation | Generation of multiple worksheet exportation |
US10503434B2 (en) | 2017-04-12 | 2019-12-10 | Micron Technology, Inc. | Scalable low-latency storage interface |
US10503552B1 (en) * | 2017-04-28 | 2019-12-10 | Ambarella, Inc. | Scheduler for vector processing operator readiness |
US10783240B2 (en) * | 2017-09-29 | 2020-09-22 | Stmicroelectronics, Inc. | Secure environment in a non-secure microcontroller |
US10515036B2 (en) * | 2017-10-25 | 2019-12-24 | Microchip Technology Incorporated | Bit manipulation capable direct memory access |
DE102017126723B4 (de) | 2017-11-14 | 2024-10-10 | Infineon Technologies Ag | Vorrichtung und Verfahren zum Verarbeiten von Radarsignalen |
JP2020004247A (ja) * | 2018-06-29 | 2020-01-09 | ソニー株式会社 | 情報処理装置、情報処理方法およびプログラム |
US10606775B1 (en) | 2018-12-28 | 2020-03-31 | Micron Technology, Inc. | Computing tile |
US11301295B1 (en) * | 2019-05-23 | 2022-04-12 | Xilinx, Inc. | Implementing an application specified as a data flow graph in an array of data processing engines |
TWI773106B (zh) * | 2021-01-28 | 2022-08-01 | 華邦電子股份有限公司 | 具有運算功能的記憶體裝置及其操作方法 |
US20240168762A1 (en) * | 2022-11-21 | 2024-05-23 | Nvidia Corporation | Application programming interface to wait on matrix multiply-accumulate |
Family Cites Families (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5247689A (en) | 1985-02-25 | 1993-09-21 | Ewert Alfred P | Parallel digital processor including lateral transfer buses with interrupt switches to form bus interconnection segments |
DE68928980T2 (de) | 1989-11-17 | 1999-08-19 | Texas Instruments Inc. | Multiprozessor mit Koordinatenschalter zwischen Prozessoren und Speichern |
US5355508A (en) | 1990-05-07 | 1994-10-11 | Mitsubishi Denki Kabushiki Kaisha | Parallel data processing system combining a SIMD unit with a MIMD unit and sharing a common bus, memory, and system controller |
WO1995009399A1 (fr) | 1993-09-27 | 1995-04-06 | Ntt Mobile Communications Network Inc. | Multiprocesseur |
US6782440B2 (en) * | 2000-07-26 | 2004-08-24 | T.N.S. Holdings, Inc. | Resource locking and thread synchronization in a multiprocessor environment |
GB2409063B (en) | 2003-12-09 | 2006-07-12 | Advanced Risc Mach Ltd | Vector by scalar operations |
US20060090025A1 (en) | 2004-10-25 | 2006-04-27 | Tufford Robert C | 9U payload module configurations |
JP5748935B2 (ja) | 2004-11-03 | 2015-07-15 | インテル コーポレイション | Simd命令をサポートするプログラマブルデータ処理回路 |
US7451249B2 (en) * | 2005-03-21 | 2008-11-11 | Hewlett-Packard Development Company, L.P. | Method and apparatus for direct input and output in a virtual machine environment containing a guest operating system |
US7664889B2 (en) * | 2005-09-29 | 2010-02-16 | Intel Corporation | DMA descriptor management mechanism |
US20110022754A1 (en) | 2007-12-06 | 2011-01-27 | Technion Research & Development Foundation Ltd | Bus enhanced network on chip |
US20100082894A1 (en) * | 2008-09-26 | 2010-04-01 | Mediatek Inc. | Communication system and methos between processors |
US20120054379A1 (en) * | 2010-08-30 | 2012-03-01 | Kafai Leung | Low power multi-touch scan control system |
US9146743B2 (en) | 2012-07-11 | 2015-09-29 | International Business Machines Corporation | Generalized bit manipulation instructions for a computer processor |
US20140115278A1 (en) | 2012-10-23 | 2014-04-24 | Analog Devices, Inc. | Memory architecture |
US9201828B2 (en) | 2012-10-23 | 2015-12-01 | Analog Devices, Inc. | Memory interconnect network architecture for vector processor |
US9342306B2 (en) | 2012-10-23 | 2016-05-17 | Analog Devices Global | Predicate counter |
-
2013
- 2013-09-27 US US14/040,367 patent/US9092429B2/en active Active
- 2013-10-18 EP EP13189405.7A patent/EP2725498B1/en active Active
- 2013-10-22 KR KR1020130126017A patent/KR101572204B1/ko active IP Right Grant
- 2013-10-23 CN CN201310502511.9A patent/CN103777923B/zh active Active
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20160115833A (ko) * | 2015-03-27 | 2016-10-06 | 인피니언 테크놀로지스 아게 | 레이더 신호를 프로세싱하는 방법 및 디바이스 |
US10852409B2 (en) | 2015-03-27 | 2020-12-01 | Infineon Technologies Ag | Method and device for processing radar signals |
Also Published As
Publication number | Publication date |
---|---|
EP2725498A2 (en) | 2014-04-30 |
KR101572204B1 (ko) | 2015-11-26 |
CN103777923A (zh) | 2014-05-07 |
CN103777923B (zh) | 2017-09-05 |
EP2725498B1 (en) | 2017-12-13 |
US20140115195A1 (en) | 2014-04-24 |
US9092429B2 (en) | 2015-07-28 |
EP2725498A3 (en) | 2015-08-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101572204B1 (ko) | Dma 벡터 버퍼 | |
US11567780B2 (en) | Apparatus, systems, and methods for providing computational imaging pipeline | |
JP2020191122A (ja) | ノンブロッキング高性能トランザクションクレジットシステムを備えるマルチコアバスアーキテクチャ | |
US8732416B2 (en) | Requester based transaction status reporting in a system with multi-level memory | |
CN102375800B (zh) | 用于机器视觉算法的多处理器片上系统 | |
US7373437B2 (en) | Multi-channel DMA with shared FIFO | |
JP4934356B2 (ja) | 映像処理エンジンおよびそれを含む映像処理システム | |
EP2725497A1 (en) | Memory arbitration circuit and method | |
KR101642646B1 (ko) | 인터럽트가능 저장 익스클루시브 | |
US11163710B2 (en) | Information processor with tightly coupled smart memory unit | |
US7506114B2 (en) | Data transfer device which executes DMA transfer, semiconductor integrated circuit device and data transfer method | |
JP2008027305A (ja) | データ処理装置 | |
US10223312B2 (en) | Quality of service ordinal modification | |
US7386642B2 (en) | IO direct memory access system and method | |
US7774513B2 (en) | DMA circuit and computer system | |
JPH11194995A (ja) | Dram内蔵マイクロプロセッサ及びdram内蔵マイクロプロセッサのデータ転送方法 | |
US6785743B1 (en) | Template data transfer coprocessor | |
US8706923B2 (en) | Methods and systems for direct memory access (DMA) in-flight status | |
JP2006079394A (ja) | データ処理装置 | |
US20090265515A1 (en) | Information Processing Apparatus, Information Processing Method, and Computer Program | |
de difusión Público et al. | Información del Documento | |
JP2002278753A (ja) | データ処理システム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
N231 | Notification of change of applicant | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant | ||
FPAY | Annual fee payment |
Payment date: 20181112 Year of fee payment: 4 |