KR101715986B1 - 신호 흐름이 프로그램된 디지털 신호 프로세서 코드의 효율적인 자원 관리를 위한 시스템 및 방법 - Google Patents

신호 흐름이 프로그램된 디지털 신호 프로세서 코드의 효율적인 자원 관리를 위한 시스템 및 방법 Download PDF

Info

Publication number
KR101715986B1
KR101715986B1 KR1020130148796A KR20130148796A KR101715986B1 KR 101715986 B1 KR101715986 B1 KR 101715986B1 KR 1020130148796 A KR1020130148796 A KR 1020130148796A KR 20130148796 A KR20130148796 A KR 20130148796A KR 101715986 B1 KR101715986 B1 KR 101715986B1
Authority
KR
South Korea
Prior art keywords
connection
algorithm
buffer
memory
mlm
Prior art date
Application number
KR1020130148796A
Other languages
English (en)
Other versions
KR20140070493A (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 KR20140070493A publication Critical patent/KR20140070493A/ko
Application granted granted Critical
Publication of KR101715986B1 publication Critical patent/KR101715986B1/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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory

Abstract

신호 흐름이 프로그램된 디지털 신호 프로세서 코드의 효율적인 자원 관리를 위한 시스템에 대한 일 실시예에 따른 방법이 제공되며, 이 방법은, 전자 회로에 대한 신호 흐름의 도식에서 복수의 알고리즘 요소의 접속 시퀀스를 결정하는 단계 - 접속 시퀀스는 알고리즘 요소들 사이의 접속들과, 접속들에 따라 알고리즘 요소들을 처리하는 시퀀스를 나타냄 - , 접속 시퀀스에 따라 복수의 알고리즘 요소를 처리하기 위해 복수의 메모리 버퍼를 사용하는 순서를 나타내는 버퍼 시퀀스를 결정하는 단계, 및 버퍼 시퀀스에 따라 복수의 메모리 버퍼의 적어도 일부를 재사용하는 단계를 포함한다.

Description

신호 흐름이 프로그램된 디지털 신호 프로세서 코드의 효율적인 자원 관리를 위한 시스템 및 방법{SYSTEM AND METHOD FOR EFFICIENT RESOURCE MANAGEMENT OF A SIGNAL FLOW PROGRAMMED DIGITAL SIGNAL PROCESSOR CODE}
본 발명은 일반적으로 디지털 처리 시스템의 분야 관한 것으로, 구체적으로는 신호 흐름 프로그래밍된 디지털 신호 프로세서 코드의 효율적인 자원 관리를 위한 시스템 및 방법에 관한 것이다.
신호 처리는 시간적으로 변하거나 공간적으로 변하는 신호들(예를 들어, 사운드, 이미지, 및 센서 데이터, 예를 들어 심전도와 같은 생물학적 데이터, 제어 시스템 신호, 원거리 통신 송신 신호 등)의 측정의 실시 또는 분석을 다룬다. 특히, 디지털 신호 처리는 디지털 이산 시간 샘플링 신호들을 범용 컴퓨터에 의해 또는 주문형 집적 회로(ASIC), 필드 프로그래머블 게이트 어레이 또는 특수화된 디지털 신호 프로세서(DSP)와 같은 디지털 회로에 의해 처리하는 것을 포함한다. 산술(예를 들어, 고정 소수점 또는 부동 소수점 , 실수 값 및 복소수 값, 승산 및 가산) 및 신호 처리 알고리즘들(예로서, 고속 푸리에 변환(FFT), 유한 임펄스 응답(FIR) 필터, 무한 임펄스 응답(IIR) 필터 등)이 처리 동안 디지털 이산 시간 샘플링 신호들에 대해 구현될 수 있다. 신호들의 적절한 처리를 돕기 위해 그래픽 프로그래밍 도구와 같은 다양한 도구들이 존재한다.
본 발명 및 그의 특징들 및 장점들의 더 완전한 이해를 제공하기 위하여, 동일한 참조 번호들이 동일한 요소들을 나타내는 첨부 도면들과 관련하여 이루어지는 아래의 설명을 참조한다. 도면들에서:
도 1은 신호 흐름 프로그래밍된 디지털 신호 프로세서 코드의 효율적인 자원 관리를 위한 시스템의 일 실시예를 나타내는 간이 블록도이다.
도 2는 시스템의 일 실시예와 관련될 수 있는 예시적인 상세들을 나타내는 간이 블록도이다.
도 3은 시스템의 일 실시예와 관련된 다른 예시적인 상세들을 나타내는 간이 도면이다.
도 4a-4b는 시스템의 일 실시예와 관련된 또 다른 예시적인 상세들을 나타내는 간이 도면이다.
도 5는 시스템의 일 실시예와 관련될 수 있는 예시적인 동작들을 나타내는 간이 흐름도이다.
도 6은 시스템의 일 실시예와 관련될 수 있는 추가적인 예시적인 동작들을 나타내는 간이 흐름도이다.
도 7은 일 실시예에 따른 시스템의 예시적인 상세들을 나타내는 간이 블록도이다.
도 8은 실시예에 따른 시스템의 예시적인 상세들을 나타내는 간이 도면이다.
도 9는 시스템의 일 실시예와 관련될 수 있는 예시적인 동작들을 나타내는 간이 흐름도이다.
도 10은 실시예에 따른 시스템의 예시적인 상세들을 나타내는 간이 블록도이다.
도 11은 시스템의 일 실시예의 예시적인 상세들을 나타내는 간이 블록도이다.
도 12는 시스템의 추가적인 예시적인 상세들을 나타내는 간이 도면이다.
도 13은 시스템의 일 실시예와 관련될 수 있는 예시적인 동작들을 나타내는 간이 흐름도이다.
개요
신호 흐름 프로그래밍된 디지털 신호 프로세서 코드의 효율적인 자원 관리를 위한 시스템의 일 실시예에 따른 방법이 제공되며, 전자 회로에 대한 신호 흐름의 도식(schematic)에서 복수의 알고리즘 요소의 접속 시퀀스를 결정하는 단계 - 접속 시퀀스는 알고리즘 요소들 사이의 접속들 및 접속들에 따라 알고리즘 요소들을 처리하는 시퀀스를 나타냄 -, 접속 시퀀스에 따라 복수의 알고리즘 요소를 처리하기 위해 복수의 메모리 버퍼를 이용하는 순서를 나타내는 버퍼 시퀀스를 결정하는 단계, 및 버퍼 시퀀스에 따라 복수의 메모리 버퍼 중 적어도 일부를 재사용하는 단계를 포함한다.
특정 실시예들에서, 버퍼 시퀀스를 결정하는 단계는 접속들, 알고리즘 요소들 및 메모리 버퍼들을 순차적으로 넘버링하는 단계를 포함한다. 각각의 접속에 대해, 임의의 다른 알고리즘 요소 전에 접속 상에서 출력을 생성하는 제1 알고리즘 요소가 식별될 수 있다. 모든 다른 알고리즘 요소들 후에 접속 상에서 출력을 입력으로서 수신하는 제2 알고리즘 요소도 식별될 수 있다. 모든 접속들의 제1 알고리즘 요소들은 제1 알고리즘 요소 번호들의 오름차순을 포함하는 할당 순서로 배열될 수 있다. 각각의 접속에 대한 버퍼 인덱스가 할당 순서에 따라 생성될 수 있으며, 접속에 대한 버퍼 인덱스는 재사용 접속에 대한 다른 버퍼 인덱스와 동일할 수 있다. 재사용 접속의 제2 알고리즘 요소는 접속의 제1 알고리즘 요소와 동일할 수 있다. 버퍼 시퀀스는 할당 순서에 따라 배열된 모든 접속들에 대한 버퍼 인덱스를 포함할 수 있다.
다양한 실시예들에서, 버퍼 시퀀스를 결정하는 단계는 알고리즘 요소들 및 접속 시퀀스에 대한 정보를 포함하는 메모리 수명 행렬(MLM)을 구성하는 단계를 포함할 수 있다. 특정 실시예에서, MLM은 N개의 알고리즘 요소를 나타내는 N개의 로우 및 알고리즘 요소들 사이의 M개의 접속을 나타내는 M개의 컬럼을 포함할 수 있다. 방법은 다양한 실시예들에서 다른 특징들을 포함할 수 있다.
실시예들
도 1을 참조하면, 도 1은 시스템(10)을 나타내는 간이 블록도이다. 시스템(10)은 신호 흐름을 설계하여 디지털 신호 프로세서(DSP)와 같은 전자 회로 상에 프로그래밍하는 데 사용될 수 있는 그래픽 에뮬레이터(12)를 포함한다. 전자 회로에 대한 신호 흐름의 (일반적으로 화살표로 지시되는) 예시적인 도식(예로서, 그래픽 표현)(13)이 그래픽 에뮬레이터(12) 상에 표시된다. 도식(13)은 하나 이상의 알고리즘 요소(AE)들 14(1)-14(7)(예를 들어, AE 14(1) (S), AE 14(2) (S2)... AE 14(7) (S7))를 포함한다. 본 명세서에서 사용될 때, "알고리즘 요소"는 전자 회로에 대한 신호 흐름의 도식 내의 컴포넌트를 포함한다. 컴포넌트는 사전 정의된 알고리즘에 따라 하나 이상의 입력 신호를 처리하여 하나 이상의 출력 신호를 제공한다. 각각의 AE 14(1)-14(7)은 특정 알고리즘을 실행(예로서, 처리, 구현 등)하도록 구성되는 기능 전자 컴포넌트, 예를 들어 오디오 입력, 필터, 동적 프로세서, 주파수 변조기, 발진기 등의 에뮬레이션(예를 들어, 매칭; 액션, 기능 등의 복사; 모방; 모사; 재생 등)을 나타낼 수 있다. 사용자(예로서, DSP 프로그래머, 회로 설계자 등)는 예를 들어 이용 가능한 AE들 및 다른 그래픽 아티팩트들을 이용하여 도식(13)을 생성함으로써 그래픽 에뮬레이터(12) 상에 수동으로 도식(13)을 생성할 수 있다. 사용자는 AE들 14(1)-14(7)을 그래픽 에뮬레이터(12)에서 사전 구성된 SPA들과 연관시키거나, 필요에 따라 맞춤형 SPA들을 생성할 수 있다.
AE들 14(1)-14(7)은 특정 신호 처리 알고리즘(SPA)을 실현하기 위해 접속들 16(1)-16(6)을 통해 서로 접속될 수 있다. 접속들 16(1)-16(6)은 각각의 AE 14(1)-14(7)로의 입력들 및 그들로부터의 출력들을 지시할 수 있다. 접속들 16(1)-16(6)은 도식(13)을 통한 신호 흐름을 시뮬레이션하는 접속 시퀀스(CS)를 나타낼 수 있다. 본 명세서에서 사용될 때, 용어 "접속 시퀀스"는 도식 내의 AE들을 이들에 대응하는 접속들에 따라 처리하기 위한 시퀀스(예를 들어, 순서, 진행, 스트링, 전개 등)를 포함한다. 예시적인 도식에서, AE 14(1)은 입력 신호를 수신하여 처리하고, 접속 16(1) 상에서 출력 신호를 제공한다. AE 14(1)로부터의 접속 16(1) 상의 출력 신호는 AE들 14(2) 및 14(6)에 입력될 수 있다.
하나의 접속이 하나보다 많은 AE에 의해 사용될 때, 접속 상의 신호의 값이 양 AE들에 의해 이들 각각의 처리 동안 공유될 수 있다. 결과적으로 AE들 14(2) 및 14(6)은 AE 14(1)이 처리될 때까지 처리되지 못한다. AE 14(2)로부터의 접속 16(2) 상의 출력 신호는 AE들 14(3) 및 14(4)에 입력될 수 있다. AE 14(5)로부터의 출력이 AE 14(3)에 입력되므로, AE 14(3)은 AE들 14(4) 및 14(5)가 처리될 때까지 처리되지 못한다. AE 14(4)로부터의 접속 16(3) 상의 출력 신호는 AE 14(5)에 입력될 수 있다. AE 14(5)로부터의 접속 16(4) 상의 출력 신호는 AE 14(3)에 입력될 수 있다. AE 14(3)은 AE 14(6)에 입력될 수 있는 접속 16(5) 상의 출력 신호를 생성할 수 있다. AE 14(6)으로부터의 접속 16(6) 상의 출력 신호는 출력을 생성할 수 있는 AE 14(7)에 입력될 수 있다.
그래픽 에뮬레이터(12)는 메모리 수명 행렬(MLM) 모듈(20)과 통신할 수 있다. MLM 모듈(20)은 하나 이상의 메모리 버퍼(24)(예로서, 버퍼들 24(1)-24(4))를 포함할 수 있는 메모리 소자(22)와 상호작용할 수 있다. 메모리 버퍼들 24(1)-24(4)는 AE들 14(1)-14(7)의 처리 동안 접속들 16(1)-16(6) 상의 신호들의 값들을 저장하는 데 사용될 수 있다. 메모리 버퍼의 "사용"은 버퍼로부터의 판독 및/또는 버퍼로의 기록을 포함할 수 있다. MLM 모듈(20)은 또한 적절한 경우에 프로세서(26)와 상호작용할 수 있다.
다양한 실시예들에서, MLM 모듈(20)은 그래픽 에뮬레이터(12) 상에서 도식들(예로서, 도식(13))을 메모리 효율적인 방식으로 에뮬레이션하는 것을 도울 수 있다. MLM 모듈(20)은 (그래픽 에뮬레이터(12)로부터) 접속들 16(1)-16(6) 및 대응하는 AE들 14(1)-14(7)에 대한 정보를 수신할 수 있다. MLM 모듈(20)은 AE들 14(1)-14(7)의 특정 CS 및 메모리 요구들을 이용하여, 예를 들어 그래픽 에뮬레이터(12)에서 표현되는 신호 흐름의 기능에 영향을 미치지 않고 AE들 14(1)-14(7) 및 접속들 16(1)-16(6)에 대한 메모리 버퍼들 24(1)-24(4)의 재사용에 의해 최적 메모리 할당 스킴(scheme)을 생성할 수 있다. MLM 모듈(20)은 버퍼들 24(1)-24(4)를 적절히 이용하여, AE들 14(1)-14(7)의 처리 동안 시스템(10)의 실시예들에 의해 사용되는 메모리의 양을 줄일 수 있다.
도식(13)은 한정이 아니라 단지 설명의 편의를 위해 도시되는 일례이다. 그래픽 에뮬레이터(12)를 이용하여 적절한 도식을 생성하기 위해 사실상 임의 수의 AE가 임의의 방식으로 접속될 수 있다. 예를 들어, 도식은 고속 푸리에 변환(FFT), 프로그래밍 가능 DSP와 관련된 볼륨 제어, 토닝(toning) 등과 같은 오디오 처리를 수행하는 전자 회로의 일부와 관련될 수 있다. 일반적으로, 시스템(10)은 DSP 상의 구현을 위해 타겟 코드를 생성하는 데 사용될 수 있으며, 따라서 DSP에 입력된 신호들은 시스템(10)에 의해 정의된 SPA에 따라 처리될 수 있다.
시스템(10)의 기술들을 설명하는 목적을 위해, 도 1에 도시된 아키텍처와 같은 주어진 시스템의 동작들을 이해하는 것이 중요하다. 아래의 기본 정보는 본 발명을 적절히 설명할 수 있는 기초로서 간주될 수 있다. 그러한 정보는 단지 설명의 목적을 위해 성실하게 제공되며, 따라서 본 발명 및 그의 가능한 응용들의 넓은 범위를 한정하는 것으로 결코 해석되지 않아야 한다.
상호 작용 도면 작성 및 가시화 능력들을 가진 그래픽 블록도 에뮬레이션 도구들이 DSP 신호 처리 설계를 가속화할 수 있다. 시뮬레이션 및 시스템 모델링; 컴퓨터 상의 제한된 실시간 개발; 후속 소스 코드 생성 및 DSP에 대한 최종 크로스-컴파일을 포함하는 시뮬레이션; 및 직접 DSP 객체 코드 생성과 같은 여러 상이한 방법들이 그래픽 DSP 프로그래밍을 위해 사용될 수 있다. 일부 DSP 프로그래밍 방법들은 DSP 애플리케이션들을 개발하기 위해 블록도들을 사용한다. 블록도 설계는 호스트 컴퓨터 상에서 구현되며, 설계자로 하여금 DSP 실행가능 프로그램을 생성하거나 생성하지 않고서 DSP 애플리케이션을 개발할 수 있게 해준다.
그래픽 접근법으로부터 DSP 애플리케이션을 개발하기 위한 다른 방법은 제한된 실시간 DSP 애플리케이션들이 컴퓨터 상에 구성되고 구현될 수 있게 하는 사운드 카드들 및 비디오 카메라들을 이용하는 것이다. 그래픽 수단을 통한 DSP 프로그래밍을 위한 또 다른 방법은 도 1의 예시적인 도식과 같은 컴퓨터 기반 블록도를 이용하여 호스트 컴퓨터 상에서 실행되는 DSP 알고리즘을 구성하는 것이다. DSP 알고리즘이 구성되고, 시뮬레이션이 원하는 결과를 산출한 후, 시뮬레이션된 설계를 특정 타겟(예로서, DSP)에서 구현하는 타겟 코드를 생성하기 위해 전체 블록도 설계가 이용될 수 있다.
DSP 프로그래밍을 위한 그래픽 도구의 일례는 아날로그 장치 시그마스튜디오(Analog Device SigmaStudio™)이다. 시그마스튜디오 그래픽 개발 도구는 소정의 DSP 소프트웨어를 프로그래밍, 개발 및 튜닝할 수 있다. 예컨대, 도식 내에 오디오 처리 블록들이 함께 배선될 수 있으며, 컴파일러는 DSP-준비 코드 및 파라미터들을 설정하고 튜닝하기 위한 제어 표면을 생성할 수 있다. 시그마스튜디오는 기본적인 저레벨 DSP 함수들 및 제어 블록들 및 필터링, 믹싱 및 역학 처리와 같은 고급 오디오 처리 기능들을 포함하는 알고리즘들의 포괄적 라이브러리를 포함한다. 각각의 프로세서에 대해 이용가능한 AE들은 '도구 상자' 내에 표시되며, AE는 도식 내로 드래그 앤 드롭될 수 있다. 각각의 AE는 AE들을 함께 접속하기 위한 하나 이상의 핀(예를 들어, 입력 핀, 출력 핀, 제어 핀)을 포함할 수 있다. 출력 핀들은 입력 핀들에 접속될 수 있고, 그 반대도 가능하다. 적절한 경우에 알고리즘들이 AE들에 추가되거나 그들로부터 제거(또는 분리)될 수 있다. 도식이 생성된 후, "컴파일" 버튼을 클릭함으로써 도구로 하여금 사용자 입력에 따라 신호 흐름을 에뮬레이션하고 타겟 코드를 생성하게 할 수 있다.
통상적으로, AE들 및 CS 내의 접속들을 이용하여 도식에 의해 표현되는 SPA의 목적은 다양한 AE들에 대한 유한 수의 입력 채널들을 처리하여 유한 수의 출력 채널들을 생성하는 것이다. 그래픽 도구는 SPA를 신호 흐름으로서 캡처한다. 처리될 수 있는 SPA의 복잡성은 통상적으로 타겟 코드가 실행되는 타겟 DSP의 자원들에 의해 제한된다. 예를 들어, 타겟 DSP의 최대 메모리, 최대 중앙 처리 유닛(CPU) MIPS(Million Instructions Per Second) 및 최대 자원 시간이 특정 컴퓨팅 시스템에 의해 처리될 수 있는 최대 복잡성을 제한할 수 있다.
예를 들어, 시그마스튜디오는 포인터 기반 링킹을 이용하여 SPA들을 처리하기 위한 메모리 요구들을 관리한다. 포인터 기반 링크 스킴에서, 각각의 신호의 값은 고유 포인터를 이용하여 별개의 메모리 버퍼 내에 저장된다. 일반적으로, 버퍼들은 프로세스들로 그리고 그들로부터 데이터를 전달하고 정보를 국지적으로 저장하는 데 사용된다. 메모리 버퍼의 수명은 버퍼가 생성될 때로부터 버퍼가 삭제될 때까지이다. 도 1의 도식(13)이 그러한 통상적인 그래픽 도구들에서 처리되는 경우, AE 14(1)에 대한 입력 신호의 값은 포인터 Ptr[0]을 통해 액세스되는 버퍼 Buff[0] 내에 저장될 것이다. 그래픽 에뮬레이터(12)는 관련된 알고리즘에 따라 AE 14(1)에 대한 입력 신호를 처리하고, 접속 16(1) 상의 출력 신호의 값을 다른 포인터 Ptr[1]을 통해 액세스 가능한 다른 버퍼 Buff[1]에 기록할 것이다. Buff[1]에 저장된 값은 AE 14(2)에 의해 지정되는 알고리즘에서 입력으로서 사용될 것이며, 접속 16(2) 상의 대응하는 출력 신호는 또 다른 포인트 Ptr[2]를 통해 액세스 가능한 또 다른 버퍼 Buff[2]에 기록될 것이고, 기타 등등일 것이다. 각각의 신호는 고유 포인터를 이용하여 액세스 가능한 고유 버퍼와 연관될 것이다.
일부 그래픽 도구 버전들에서, 고유 포인터는 기본 포인터 값에 각각의 버퍼의 크기를 연속 추가함으로써 도출될 수 있다. 따라서, Ptr[0]은 기본 포인터와 동일할 수 있고; Ptr[1]은 기본 포인터와 Buff[0]의 크기의 합과 동일할 수 있고; Ptr[2]는 기본 포인터, Buff[0] 및 Buff[1]의 합과 동일할 수 있고, 기타 등등일 수 있다. 일부 다른 그래픽 도구 버전들에서는, 실제 버퍼에 대한 오프셋들을 포함할 수 있는 오프셋 버퍼가 추가로 사용될 수 있다. 오프셋 버퍼로부터 획득된 각각의 오프셋과 버퍼의 크기(블록 크기)를 곱하여 각각의 버퍼에 차별적인 포인터를 제공한다. 실제 포인터는 결과적인 값에 기본 포인터를 더함으로써 얻어질 수 있다.
일반적으로, AE j는 mj개의 입력을 이용하여 사전 정의된 알고리즘 Aj를 수행하여, pj개의 MIPS를 소비하고 rj개의 자원을 사용하는 nj개의 출력을 생성할 수 있다. 버퍼 메모리에만 초점을 맞추면, AE j는 Aj(mj, nj)와 같은 mj 및 nj의 함수로서 표현될 수 있다. 시스템(10)에 의해 지원되는 모든 알고리즘들의 세트인 U = {Aj}, j = 1: N을 고려한다. A는 분석되고 있는 특정 도식에 의해 사용되는 알고리즘들의 세트를 지시하는 U의 서브세트(A⊆U)를 나타낼 수 있다. Aj(mj, nj)는 mj개의 입력 및 nj개의 출력을 갖는 Aj의 인스턴스를 나타내고, j = 1:N1이고, N1≤N(이용 가능한 알고리즘들의 전체 수)이다. 통상적인 그래픽 도구들은 모든 Aj∈A를 순서 Ql로 실행하며, 이 순서는 도식 네트 리스트(예로서, 회로 설계의 접속성)에 기초하여 도출되고, 여기서 l = 1:L(하나 이사의 가능한 실행 시퀀스가 존재할 때 L≥1)이다. 출력 버퍼들 Mt를 위한 전체 메모리는 아래의 식으로부터 얻어질 수 있다.
Figure 112013110331816-pat00001
신호 흐름 프로그래밍 환경에서, CS 정보는 임의의 AE들을 처리하기 전에 연역적으로(apriori) 알려질 수 있다. 도식 내의 모든 AE들의 CS 정보 및 상세들을 이용하여 SPA의 메모리 자원 준비 및 수명 요구들을 도출할 수 있다. SPA를 처리하는 컴퓨팅 장치(예로서, 타겟 DSP)의 최대 메모리가 MaxMem으로 표시되고, 최대 CPU MIPS가 MaxCpuMips로 표시되며, 최대 자원 시간이 MaxResTime로 표시되는 것으로 가정한다. 각각의 AE j는 (예를 들어, 상태, 스크래치, 입출력, 외부, 내부 등과 같은 하위 카테고리들에서) EMem_j로 표시되는, 요소 메모리 요구라고 하는 유한 메모리 요구를 갖는다. 각각의 AE j은 ECpu_j로 표시되는 유한 CPU 부하 요구를 갖는다. 각각의 AE j는 EResTime_j로 표시되는 유한 자원 요구를 갖는다. 통상적인 그래픽 도구는 아래의 경우에만 신호 흐름을 타겟 코드로 변환할 수 있다.
Figure 112013110331816-pat00002
복잡한 도식들 및 많은 수의 AE들 및 신호들과 관련하여, SPA들을 처리하는 데 필요한 메모리 크기는 그래픽 시뮬레이션이 실행되고 있는 컴퓨팅 장치의 자원 한계를 넘도록 증가할 수 있다.
시스템(10)은 더 메모리 효율적인 처리 환경을 제공함에 있어서 이러한 문제들(및 다른 문제들)을 해결하도록 구성된다. 다양한 실시예들에서, MLM 모듈(20)은 버퍼들 Mlt의 메모리 크기를 Mt보다 훨씬 작게 유지하면서(Mlt<<Mt) 메모리 버퍼들 24(1)-24(4)가 접속들 16(1)-16(6)을 위해 재사용될 수 있도록 작업들의 시퀀스를 결정할 수 있다.
Figure 112013110331816-pat00003
여기서, N2는 병렬 요소들(예로서, 병렬로 사용되는 버퍼들)의 최대 수이고, N2<<Nl이다. 다양한 실시예들에서, MLM 모듈(20)은 외부 메모리 오버레이를 포함하는 시나리오들에 적용될 수 있고/있거나, 배경에서 직접 메모리 액세스(DMA)를 이용하여 가속기들 및 오프로더들의 작업을 로딩할 수 있다.
시스템(10)의 실시예들은 전자 회로의 도식(예로서, 도식(13)) 내의 복수의 AE들(예로서, AE들 14(1)-14(7))의 접속 시퀀스를 결정할 수 있으며, 접속 시퀀스는 알고리즘 요소들 사이의 접속들 및 접속들에 따라 알고리즘 요소들을 처리하는 시퀀스를 지시한다. MLM 모듈(20)은 버퍼 시퀀스를 결정할 수 있다. 복수의 메모리 버퍼 24(1)-24(4) 중 적어도 일부가 버퍼 시퀀스에 따라 재사용될 수 있다. 본 명세서에서 사용될 때, 용어 "버퍼 시퀀스"는 접속 시퀀스에 따라 복수의 알고리즘 요소(예로서, AE들 14(1)-14(7))를 처리하기 위해 복수의 메모리 버퍼(예로서, 24(1)-24(4))를 사용하는 순서를 포함한다. 다양한 실시예들에서, 버퍼 시퀀스는 AE들 14(1)-14(7)로부터의 출력들 각각이 각각의 메모리 버퍼에 기록되는 시퀀스에 따라 배열된 메모리 버퍼들 24(1)-24(4)의 넘버링된 리스트를 포함할 수 있으며, 버퍼 시퀀스 내의 반복되는 메모리 버퍼 번호들은 대응하는 메모리 버퍼들의 버퍼 재사용을 지시한다.
예를 들어, 버퍼들 24(1)-24(4)는 버퍼들 24(1), 24(2), 24(3) 및 24(4)를 이 순서대로 각각 나타내는 버퍼 시퀀스 {0, 1, 2, 3}에 의해 지시될 수 있다. 다른 예에서, 버퍼 시퀀스 {0, 1, 2, 3, 2, 1, 2}도 버퍼들 24(1), 24(2), 24(3) 및 24(4)를 나타낼 수 있으며, 게다가 버퍼 시퀀스는 버퍼 24(3) 및 24(2)가 버퍼 시퀀스에서 지정된 순서로 재사용(예를 들어, 두 번 이상 기록)될 수 있다는 것을 지시할 수 있다. 버퍼 24(3) 및 24(2)에 저장된 값들은 재사용시에 덮어쓰기될 수 있다.
(입력 및 출력 알고리즘 요소들과 다른) 각각의 알고리즘 요소의 경우에 적어도 하나의 입력이 알고리즘 요소에서 수신되고, 적어도 하나의 출력이 알고리즘 요소에 의해 생성된다는 점에 유의한다. (입력 알고리즘 요소는 사용자 또는 다른 신호 소스들(예로서, 아날로그-디지털 변환기, 뮤직 플레이어 등)(즉, 다른 AE가 아님)로부터 입력들을 수신하고; 출력 알고리즘 요소는 스크린에 표시되거나, (오디오 신호의 경우에) 스피커에서 재생되거나, 그래픽 에뮬레이터(12)로부터 전송될 수 있는(즉, 다른 AE로 전송되는 것이 아님) 출력들을 생성한다.) 예를 들어, AE 14(2)에서, 접속 16(1) 상의 입력이 AE 14(2)에서 수신되고, 접속 16(2) 상의 출력이 AE 14(2)로부터 생성된다. 이 출력은 다른 알고리즘 요소에 대한 다른 입력일 수 있다. 예를 들어, 접속 16(2) 상의 출력은 AE 14(4) 및 14(3)에 대한 입력들일 수 있다. 하나의 접속이 알고리즘 요소에 입력을 제공할 수 있고, 다른 접속이 알고리즘 요소로부터 출력을 수신할 수 있으며, 이 출력을 다른 알고리즘 요소에 다른 입력으로서 제공한다. 따라서, 임의의 특정 알고리즘 요소에 대해, 입력을 제공하는 접속은 출력을 수신하는 접속과 다르며, 출력을 수신하는 접속은 출력을 하나 이상의 다른 알고리즘 요소에 입력으로서 제공할 수 있다. 각각의 접속은 메모리 버퍼들 24(1)-24(4) 중 하나와 연관될 수 있다. 예를 들어, 접속 16(2) 상의 출력은 메모리 버퍼에 기록될 수 있으며, AE들 14(4) 및 14(3)에 의해 입력들로서 판독될 수 있다.
다양한 실시예들에서, 접속들, 알고리즘 요소들 및 메모리 버퍼들이 순차적으로 넘버링될 수 있다. 각각의 접속에 대해, 임의의 다른 알고리즘 요소 전에 접속 상에서 출력을 생성하는 제1 알고리즘 요소가 식별될 수 있다. 더구나, 그 접속에 대해, 모든 다른 알고리즘 요소 후에 접속 상에서 출력을 입력으로서 수신하는 제2 알고리즘 요소도 식별될 수 있다. 모든 접속들의 제1 알고리즘 요소들은 할당 순서로 배열될 수 있다. 본 명세서에서 사용될 때, 용어 "할당 순서"는 제1 알고리즘 요소 번호들의 순서(예로서, 오름차순 또는 내림차순)를 지시한다. 버퍼 인덱스가 각각의 접속에 대한 할당 순서에 따라 생성될 수 있으며, 접속에 대한 버퍼 인덱스는 재사용 접속을 위한 다른 버퍼 인덱스와 동일할 수 있다. "재사용 접속"은 다른 접속의 출력 값들로 덮어쓰기될 수 있는 대응하는 메모리 버퍼를 갖는 접속이다. 재사용 접속의 제2 알고리즘 요소는 접속의 제1 알고리즘 요소와 동일할 수 있다. 그러한 실시예들에서, 버퍼 시퀀스는 할당 순서에 따라 배열된 모든 접속들에 대한 버퍼 인덱스를 포함할 수 있다.
AE들 14(1)-14(7)의 처리는 예를 들어 적용 가능한 알고리즘들을 개시하기 위한 입력 신호들의 이용성에 기초하여 접속 시퀀스를 따를 수 있다. 예를 들어, AE 14(1)에 의해 표현되는 알고리즘은 AE 14(2) 또는 AE 14(6)에 의해 표현되는 알고리즘 전에 처리될 수 있는데, 이것은 AE 14(1)로부터의 접속 16(1) 상의 출력이 AE 14(2) 및 14(6)에 입력들로서 공급될 수 있기 때문이다. 또한, AE 14(2), 14(3), 14(4) 및 14(5)에 대한 처리는 AE 14(6)이 처리될 수 있기 전에 완료되었을 수 있는데, 이것은 접속 16(5) 상에서의 AE 14(6)로의 입력 신호가 AE 14(3)을 처리한 후에만 얻어질 수 있고, AE 14(3)은 AE 14(5) 후에만 처리될 수 있고, AE 14(5)는 AE 14(4) 후에만 처리될 수 있고, 기타 등등일 수 있기 때문이다. 결과적으로, 접속 16(1) 상의 입력 신호는 AE 14(6)의 처리시까지 그의 대응하는 버퍼 내에 유지될 수 있다. 한편, 접속 16(3) 상의 입력 신호는 AE 14(5)를 처리하는 데에만 사용된다. 따라서, 접속 16(3) 상의 입력 신호를 저장하는 데 사용되는 버퍼는 AE 14(5)의 처리 후에 예를 들어 AE 14(3)에 대한 입력 신호로서 사용되는 접속 16(5) 상의 출력 신호를 저장하는 데 재사용될 수 있다. 메모리 버퍼들의 재사용은 전체 메모리 및 다른 자원 요구들을 줄일 수 있어서, 시스템(10)의 실시예들에 의해 더 복잡한 도식들을 처리하는 능력을 향상시킬 수 있다.
다양한 실시예들에서, MLM 모듈(20)은 AE들 14(1)-14(7)과 접속들 16(1)-16(6) 간의 관계를 포함하는 MLM을 구성할 수 있다. MLM은 다양한 AE들 14(1)-14(7)이 시스템(10)의 실시예들에 의해 처리될 때 버퍼들 24(1)-24(4)에 기록하고 그들로부터 판독하는 시퀀스를 지시할 수 있다. MLM은 버퍼들 24(1)-24(4)에 기록하고 그들로부터 판독하는 특정 시퀀스를 제공하도록 조작될 수 있으며, 따라서 버퍼들 24(1)-24(4)는 AE들 14(1)-14(7)의 처리 동안 재사용될 수 있고, 따라서 AE들 14(1)-14(7)을 처리하기 위해 병렬로 활발하게 사용되는 버퍼들만으로 메모리 크기 요구들을 줄일 수 있다.
시스템(10)의 기반구조와 관련하여, 시스템(10)은 동작들을 돕기 위한 적절한 하드웨어(예를 들어, 디스플레이 스크린, 모니터 등)를 구비한 임의의 적절한 컴퓨팅 장치(예로서, 서버, 데스크탑 컴퓨터, 랩탑 컴퓨터, 스마트폰 등)에서 구현될 수 있다. 일부 실시예들에서, 시스템(10)은 본 명세서에서 설명되는 동작들을 수행하기 위해 하드웨어(예를 들어, 디스플레이 모니터)와 인터페이스할 수 있다. 예를 들어, 그래픽 에뮬레이터(12)는 사용자가 볼 수 있는 디스플레이 스크린 상에 렌더링될 수 있으며, 사용자가 도식(13)을 적절히 조작할 수 있게 하는 다른 하드웨어(예를 들어, 마우스, 조이스틱, 터치스크린, 키보드)와 연관될 수 있다.
다양한 실시예들에서, 시스템(10)은 단일 장치 상에 위치할 수 있다. 다른 실시예들에서, 시스템(10)은 임의 수의 상호접속된 서버들, 가상 기계들, 스위치들, 라우터들 및 다른 노드들을 포함할 수 있는 네트워크 상의 다수의 장치에 걸쳐 분산될 수 있다. 도 1의 요소들은 전자 통신을 위한 실행 가능 경로를 제공하는 임의의 적절한 접속(유선 또는 무선)을 이용하는 하나 이상의 인터페이스를 통해 서로 결합될 수 있다. 게다가, 이러한 요소들 중 임의의 하나 이상은 특정 구성 요구에 기초하여 아키텍처에 결합되거나 그로부터 제거될 수 있다.
일부 실시예들에서, 시스템(10)은 본 명세서에서 설명되는 동작들을 수행하기 위해 함께 동작하는 애플리케이션들 및 하드웨어를 포함할 수 있다. 예를 들어, 시스템(10)의 일부는 하드웨어에서 구현될 수 있고, 다른 부분은 예를 들어 애플리케이션과 같은 소프트웨어에서 구현될 수 있다. 본 명세서에서 사용될 때, "애플리케이션"은 컴퓨터 상에서 이해되고 처리될 수 있는 명령어들을 포함하는 실행 가능 파일을 포함할 수 있으며, 실행 동안 로딩되는 라이브러리 모듈들, 객체 파일들, 시스템 파이들, 하드웨어 논리, 소프트웨어 논리 또는 임의의 다른 실행 가능 모듈들을 더 포함할 수 있다.
다양한 실시예들에서, 그래픽 에뮬레이터(12)는 사용자의 요구에 따른 도식(13)의 생성을 도울 수 있는 다른 인터페이스 아티팩트들(드롭다운 메뉴, 윈도, 다수의 페이지 등)을 포함할 수 있다. 다양한 실시예들에서, 시스템(10)은 시스템(10)의 특징들을 이용하여 생성된 타겟 코드를 오프로드하기 위해 DSP와 같은 타겟 장치와 인터페이스할 수 있다. 더욱이, 본 명세서에서 도시되고 설명되는 MLM 모듈(20)도 다양한 다른 분석 도구들에서 사용될 수 있으며, 여기서 특정 CS 내에 접속된 AE들은 유한 수의 입력들을 처리하여 유한 수의 출력들을 생성한다.
MLM 모듈(20)을 구현하는 컴퓨팅 장치는 DSP 및 다른 프로세서를 포함하는 임의의 적절한 아키텍처일 수 있다. MLM 모듈(20)에 의해 구현되는 메모리 관리 알고리즘들은 적절한 경우에 그리고 특정 요구들에 기초하여 DSP와 같은 프로세서들 내에 내장될 수 있다. 예를 들어, MLM 모듈(20)에 의해 구현되는 메모리 재사용 스킴은 시스템(10)에 의해 생성되는 타겟 코드에 따라 알고리즘들을 실행하는 DSP 내에 구현될 수 있다. 그러한 DSP에서, DSP의 메모리 버퍼들은 (각각의 도식 내의 AE들에 대응하는) 기능 블록들이 실제 입력 신호들을 처리하여 출력 신호들을 생성할 때 본 명세서에서 설명되는 바와 같이 적절히 재사용될 수 있다.
일부 실시예들에서, MLM 모듈(20)은 그래픽 에뮬레이터(20)를 또한 호스트하는 컴퓨팅 장치(예로서, 컴퓨터, 스마트폰 등) 상에서 구현될 수 있다. 그러한 실시예들에서, 컴퓨팅 장치에 의해 생성되는 출력은 그래픽 에뮬레이터(12) 상에서 캡처된 신호 흐름에 따라 DSP에 의한 신호 처리를 가능하게 하는 타겟 코드일 수 있다. 각각의 AE 14(1)-14(7)에 의해 사용될 메모리 버퍼들(24)의 상세들이 타겟 코드 내에 포함될 수 있다. 컴퓨팅 장치는 컴퓨팅 장치 상에서 실행되는 MLM 모듈(20)에 따라 각각의 AE 14(1)-14(7)에 의해 사용될 메모리를 결정할 수 있다. 그래픽 에뮬레이터(12) 상에서 캡처된 신호 흐름을 이용하는 신호 처리는 컴퓨팅 장치에 의해 생성되는 타겟 코드에 따라 (컴퓨팅 장치로부터 분리될 수 있는) 타겟 DSP에 의해 수행될 수 있다. MLM 모듈(20)에 의한 메모리 재사용 알고리즘들은 타겟 코드 내에 통합될 수 있으며, 타겟 DSP 상에서의 메모리 사용을 최적화하는 데 사용될 수 있다.
도 1의 요소들에 할당된 숫자 및 문자 지시들은 어떠한 타입의 계층 구조도 의미하지 않으며, 지시들은 임의적이고, 단지 가르침의 목적을 위해 사용되었다는 점에 유의한다. 그러한 지시들은 시스템(10)의 특징들로부터 이익을 얻을 수 있는 잠재적인 환경들에서 그들의 능력들, 기능들 또는 응용들을 한정하는 것으로 결코 해석되지 않아야 한다. 도 1에 도시된 아키텍처는 도시의 편의를 위해 간소화된다는 것을 이해해야 한다.
도 2를 참조하면, 도 2는 시스템(10)의 일 실시예에 따라 처리되는 다른 예시적인 도식(28)을 나타내는 간이 블록도이다. 여기서는 예시적인 도식(28)을 이용하여, 소정의 후속 도면들에서의 시스템(10)의 실시예들의 추가적인 양태들을 설명한다. 도식(28)은 특정 SPA를 실현하기 위해 적절한 CS 내의 접속들 16(1)-16(10)에 의해 접속된 AE들 14(1)-14(10)을 포함한다. 접속 16(1) 상의 AE 14(1)로부터의 출력 신호는 AE들 14(3) 및 14(4)에 대한 입력들을 포함할 수 있다. 접속 16(2) 상의 AE 14(2)로부터의 출력 신호는 AE들 14(3) 및 14(6)에 대한 입력들을 포함할 수 있다. 따라서, AE 14(3)은 2개의 입력을 수신하고, 3개의 출력을 (i) 접속 16(3)을 통해 AE 14(7)로, (ii) 접속 16(3)을 통해 AE 14(5)로 그리고 (iii) 접속 16(8)을 통해 AE 14(4)로 제공할 수 있다. AE 14(6)도 출력 신호를 접속 16(4)를 통해 AE 14(7)에 제공할 수 있으며, AE 14(7)은 출력들을 접속 16(7)을 통해 AE들 14(5) 및 14(8)에 제공할 수 있다. AE 14(5)는 AE들 14(3) 및 14(7)로부터 입력들을 수신하고, 접속들 16(6) 및 16(8) 각각을 통해 출력들을 AE들 14(4) 및 14(8)로 제공할 수 있다. AE 14(4)는 AE들 14(1), 14(3) 및 14(5)로부터의 3개의 입력 신호를 처리하고, 출력을 접속 16(9)를 통해 AE들 14(8) 및 14(10)에 제공할 수 있다. AE 14(8)은 (AE 14(5), 14(7) 및 14(4)로부터의) 3개의 입력을 수신하고, 출력 신호를 접속 16(10)을 통해 AE 14(9)에 제공할 수 있다.
도 3을 참조하면, 도 3은 시스템(10)의 실시예들에 따른, 도식(28)에 대한 MLM 행렬을 구성하는 예시적인 상세들을 나타내는 간이 도면이다. 여기서 제공되는 예시적인 상세들은 MLM 행렬을 구성하기 위한 분석적(예로서, 논리적) 접근법을 나타내며, 그의 물리적 구현을 나타내지 않는다는 점에 주목할 수 있다. 도식(28)은 10개의 AE 14(1)-14(10) 및 10개의 접속 16(1) 및 16(10)을 포함한다. 출력 AE들 14(9) 및 14(10)은 (예를 들어, 그들의 출력들이 다른 AE들에 의해 처리되지 않으므로) 어떠한 버퍼도 소비하지 않으며, MLM 행렬의 생성에 있어서 무시될 수 있다. 버퍼 관리의 목적을 위한 도식(28)의 CS는 8개의 AE 14(1)-14(8) 및 10개의 접속 16(1)-16(10) 각각에 대응하는 8개의 로우 및 10개의 컬럼을 포함하는 행렬(30)로서 표현될 수 있다. 행들은 AE들 14(1)-14(8)에 따라 명명될 수 있고, 컬럼들은 접속들 16(1)-16(10)에 따라 명명될 수 있다.
행렬(30)은 대응하는 AE에 대한 대응하는 접속이 출력을 나타내는 경우에 셀 내에 'x'를 마킹하고, 대응하는 AE에 대한 대응하는 접속이 입력을 나타내는 경우에 'o'를 마킹함으로써 행렬(32)로 변경될 수 있다. 따라서, 접속 16(1)은 AE 14(1)로부터의 출력을 나타내며, 컬럼 1과 로우 S1의 교점에서의 셀 내의 'x'에 의해 표현될 수 있다. 접속 16(1)은 또한 AE들 14(3) 및 14(4)에 대한 입력을 나타내며, 컬럼 1과 S3 및 S4 각각의 교점에서 셀들 내의 'o'로서 표현될 수 있다. 유사하게, 접속 16(2)는 AE 14(2)로부터의 출력을 나타내며, 컬럼 2와 로우 S2의 교점에서의 셀 내의 'x'에 의해 표현될 수 있다. 접속 16(2)는 또한 AE들 14(3) 및 14(6)에 대한 입력을 나타내며, 컬럼 2와 S3 및 S6 각각의 교점에서 셀들 내의 'o'로서 표현될 수 있다. 행렬(32) 내의 셀들은 도식(28) 내의 CS에 따라 적절히 채워질 수 있다.
행렬(32)은 임의의 주어진 컬럼에서 'x'가 'o' 위에 나타나도록 로우들의 순서를 변경함으로써 행렬(34)로 변경될 수 있다. 예를 들어, 도시된 바와 같이, 순서 {S1, S2, S3, S6, S7, S5, S4, S8}에서 로우들 S4 및 S5를 S7 아래로 이동시키면 행렬 (34)가 된다. 각각의 컬럼 내의 마지막 'o'는 (예를 들어, 이것을 상이한 컬러로 컬러링함으로써) 다른 것들과 구별되게 마킹될 수 있다. MLM 행렬(34)과 관련된 정보가 ALLOC 버퍼(38) 및 FREE 버퍼(40)로서 표현되는 버퍼들(36) 내로 추출될 수 있다. ALLOC 버퍼(38)는 MLM 행렬(34)의 각각의 컬럼에 대한 엔트리 'x'에 대응하는 로우 번호를 포함할 수 있고, FREE 버퍼(40)는 MLM 행렬(34)의 각각 컬럼 내의 엔트리 'o'에 대응하는 최고 로우 번호를 포함할 수 있다. 버퍼들(36)은 42에서 ALLOC 버퍼(38)의 컬럼들을 오름차순으로 ALLOC 버퍼(44)로 재배열함으로써 변경될 수 있다. FREE 버퍼(42) 및 MLM(34)의 대응하는 컬럼들도 적절히 재배열하여 FREE 버퍼(46) 및 MLM(48)을 각각 얻을 수 있다.
도 4a-4b를 참조하면, 도 4a-4b는 시스템(10)의 일 실시예에 따른 메모리 재사용 동작들의 예시적인 상세들을 나타내는 간이 도면이다. ALLOC 버퍼(44) 내의 각각의 엔트리(Y)에 대해, FREE 버퍼(46)에서 발견되는 각각의 Y에 대한 버퍼가 자유로워질(freed) 수 있고, ALLOC 버퍼(44)에서 발견되는 각각의 Y에 대한 버퍼가 대응하는 접속에 할당 및 배정될 수 있다. 동작 56에서, ALLOC 버퍼(44) 내의 제1 엔트리(접속 16(1) 상의 AE 14(1)에 대응하는 0)가 체크될 수 있다. 링크 인덱스(53)가 ALLOC 버퍼(44)의 각각의 컬럼에 대응하는 접속을 나타낼 수 있다. 버퍼 인덱스(54)가 도면에 테이블(52)로서 표현된 실제 버퍼의 위치를 나타낼 수 있다.
링크 1은 도 2의 예시적인 도식(28)의 접속 16(1) 상의 신호의 값을 지시할 수 있다. 링크 1은 BBuff[0] 내에 저장될 수 있으며, 버퍼 인덱스(54) 내의 0의 버퍼 인덱스 값을 통해 액세스될 수 있다. 58에서, ALLOC 버퍼(44) 내의 다음 엔트리(접속 16(2) 상의 AE 14(2)에 대응하는 1)가 체크될 수 있다. 버퍼 인덱스(54)는 실제 버퍼의 위치, 즉 예시적인 도식(28)의 접속 16(2) 상의 신호의 값인 링크 2가 저장될 수 있는 BBuff[1]을 지시할 수 있다. 60에서, ALLOC 버퍼(44) 내의 다음 2개의 엔트리(이들 양자는 접속들 16(3) 및 16(8) 상의 AE 14(3)에 대응하는 값 2를 가짐)가 버퍼 BBuff[2] 및 BBuff[3]에 할당될 수 있다. 접속 16(3) 및 16(8) 상의 값들에 각각 대응하는 링크 3 및 링크 8이 각각의 버퍼 BBuff[2] 및 BBuff[3]에 저장될 수 있다.
62에서, ALLOC 버퍼(44) 내의 다음 엔트리는 (접속 16(4) 상의 AE(6)에 대응하는) 3이며, 동일 값이 값 1을 갖는 버퍼 인덱스(54)와 관련된 접속 16(2) 상의 AE(6)에 대응하는 FREE 버퍼(46)에서 발견될 수 있다. 결과적으로, 접속 16(4)의 값인 링크 4가 BBuff[1] 내의 이전 값 위에 덮어쓰기될 수 있으며, 대응하는 버퍼는 AE(6)에서 접속 16(4)을 위해 재사용될 수 있다. 64에서, ALLOC 버퍼 내의 다음 엔트리는 (접속 16(7) 상의 AE(7)에 대응하는) 4이며, 동일 값이 값 1을 갖는 버퍼 인덱스(54)와 관련된 접속 16(4) 상의 AE 14(7)에 대응하는 FREE 버퍼(46)에서 발견될 수 있다. 결과적으로, 접속 16(7)의 값인 링크 7가 BBuff[1] 내의 이전 값 위에 덮어쓰기될 수 있으며, 대응하는 버퍼는 AE(7)에서 접속 16(7)을 위해 재사용될 수 있다.
66에서, ALLOC 버퍼(44) 내의 다음 엔트리들(이들은 접속 16(5) 및 16(6) 상의 AE 14(5)에 대응하는 5임)도 값 2를 갖는 버퍼 인덱스(54)와 관련된 접속 16(3) 상의 AE 14(5)에 대응하는FREE 버퍼(46)에서 발견될 수 있다. 결과적으로, 접속 16(5)의 값인 링크 5가 BBuff[2] 내의 이전 값 위에 덮어쓰기될 수 있으며, 대응하는 버퍼는 AE(5)에서 접속 16(5)을 위해 재사용될 수 있다. 링크 5가 이미 BBuff[2]에 기록되었으므로, BBuff[2]는 링크 6을 위해 동시에 재사용되지 못할 수 있다. 따라서, 링크 6은 BBuff[4]에 기록될 수 있고, 따라서 버퍼 인덱스(54)가 갱신될 수 있다.
68에서, ALLOC 버퍼(44) 내의 다음 엔트리는 (접속 16(9) 상의 AE 14(4)에 대응하는) 6이며, 동일 값이 값 0, 3 및 4를 각각 갖는 버퍼 인덱스(54)와 관련된 접속 16(1), 16(8) 및 16(6) 상의 AE 14(4)에 대응하는 FREE 버퍼(46)에서 발견될 수 있다. 결과적으로, 접속 16(9)의 값인 링크 9가 버퍼들 중 어느 하나, 예를 들어 BBuff[0] 상에 덮어쓰기될 수 있으며, 나머지 이용 가능한 버퍼들이 추가적인 재사용을 위해 자유로워질(또는 이용 가능해질) 수 있다. 70에서, ALLOC 버퍼(47) 내의 다음 엔트리는 (접속 16(10) 상의 AE 14(8)에 대응하는) 7이며, 동일 값이 값 1, 2 및 0을 각각 갖는 버퍼 인덱스(54)와 관련된 접속 16(7), 16(5) 및 16(9) 상의 AE 14(8)에 대응하는 FREE 버퍼(46)에서 발견될 수 있다. 결과적으로, 접속 16(10)의 값인 링크 10이 버퍼들 중 어느 하나, 예를 들어 BBuff[0] 상에 덮어쓰기될 수 있으며, 나머지 이용 가능한 버퍼들이 추가적인 재사용을 위해 자유로워질(또는 이용 가능해질) 수 있다. 따라서, 10개의 버퍼를 사용하여 10개의 접속 16(1)-16(10)에 대응하는 값을 저장하는 대신에, 시스템(10)의 실시예들은 어떠한 성능 희생도 없이 단지 4개의 버퍼만을 사용할 수 있다.
도 5를 참조하면, 도 5는 시스템(10)의 실시예들과 연관될 수 있는 예시적인 동작들을 나타내는 간이 흐름도이다. 동작들(80)은 82를 포함하며, 여기서 그래픽 시뮬레이터 도식(예로서, 도식(28)) 내의 AE들 14(1)-14(8)이 결정될 수 있다. 84에서, 예를 들어 AE들 14(1)-14(8) 사이의 접속들 16(1)-16(10)을 식별함으로써 AE들 14(1)-14(8) 사이의 접속 시퀀스가 결정될 수 있다. 86에서, MLM(예로서, MLM(48))이 구성될 수 있다. MLM(48)은 도식(28)의 AE들 14(1)-14(8) 및 대응하는 CS와 관련된 정보를 포함할 수 있다. 88에서, AE들 14(1)-14(8)에 의한 알고리즘 실행을 지원하기 위해 메모리 재사용을 이용하는 메모리 버퍼들의 최소량이 결정될 수 있다. 90에서, 메모리 버퍼들이 적절히 재사용될 수 있다.
도 6을 참조하면, 도 6은 시스템(10)의 실시예들과 관련될 수 있는 예시적인 동작들을 나타내는 간이 흐름도이다. 동작들(100)은 102를 포함하며, 여기서 N개의 번호를 갖는 처리 AE들이 식별되고, 0에서 N-1까지 넘버링될 수 있다. 처리 AE들은 메모리 버퍼에 기록될 수 있는 출력을 갖는 AE들을 포함한다. 104에서, 도식 내의 M개의 접속(CON[j], j = 1 내지 M) 모두가 식별될 수 있다. 106에서, 접속들이 모든 AE들에 대해 넘버링될 수 있다. 108에서, N개의 로우 및 M개의 컬럼을 갖는 MLM이 구성될 수 있다. 110에서, 셀의 로우에 대응하는 알고리즘 요소가 셀의 컬럼에 대응하는 접속 상에서 입력을 수신하는 경우에 각각의 셀 내에 'o'이 마킹될 수 있다. 112에서, 셀의 로우에 대응하는 알고리즘 요소가 셀의 컬럼에 대응하는 접속 상에서 입력을 수신하는 경우에 각각의 셀 내에 'x'가 마킹될 수 있다. 114에서, 'x'가 모든 컬럼의 꼭대기에 있도록 로우들이 재배열될 수 있다.
116에서, 엔트리 'x'를 갖는 모든 컬럼들에 대한 로우 번호 'i'가 j = 1 내지 M에 대해 ALLOC 버퍼로 추출될 수 있다. 118에서, 엔트리 'o'을 갖는 모든 컬럼들에 대한 최고 로우 번호 'i'가 j = 1 내지 M에 대해 FREE 버퍼 내로 추출된다. 120에서, MLM, FREE 및 ALLOC 버퍼들 내의 컬럼들이 ALLOC 버퍼 내의 요소들의 오름차순을 나타내는 할당 순서로 재배열될 수 있다. 122에서, ALLOC 버퍼 내의 각각의 엔트리(Y)가 체크될 수 있다. ALLOC 버퍼 내의 각각의 Y에 대한 접속 인덱스(즉, 링크 인덱스)에 대응하는 메모리 버퍼가 자유로워질 수 있다. ALLOC 버퍼 내의 각각의 Y에 대한 메모리 버퍼가 Y에 대한 접속에 대응하는 접속에 할당되고 배정될 수 있다.
도 7을 참조하면, 도 7은 시스템(10)의 일 실시예의 예시적인 상세들을 나타내는 간이 블록도이다. 일반적인 컴퓨팅 의미에서, 오버레이 수행(overlaying)은 저장된 명령어들(또는 데이터)의 블록을 다른 블록으로 대체하는 것을 포함한다. 메모리 오버레이들은 프로세서(예를 들어, 프로세서(26))의 내부 메모리에 맞지 않는 전체 프로그램 명령어들 및 데이터를 갖는 애플리케이션들에 대한 지원을 제공한다. 프로그램 명령어들 및 데이터는 프로그램 실행을 위해 필요할 때까지 파티셔닝되고 오프-칩 메모리에 저장될 수 있다. 파티션들은 메모리 오버레이들로서 지칭되며, 루틴들은 "메모리 오버레이 관리자들로서" 그들을 호출하고 실행한다. 일반적으로, 오버레이들은 "다대일" 메모리 맵핑 시스템이다. 여러 개의 오버레이가 오프-칩 메모리 내의 고유 위치들에 저장될 수 있으며, 이들은 온-칩 메모리 내의 공통 위치에서 작동(또는 실행)된다.
MLM 모듈(20)은 입출력(I/O) 메모리(130) 및 상태 메모리(132)를 포함할 수 있는 온-칩 메모리 버퍼(128)와 상호작용할 수 있다. 일반적으로, I/O 메모리(130)는 접속들의 입력 및 출력 값들을 저장할 수 있으며, 상태 메모리(132)는 시스템(10)에 의해 액세스되고 있는 AE들의 상태를 저장할 수 있다. 시스템(10)의 일 실시예에 따르면, 예를 들어 타겟 메모리가 SPA 내의 모든 AE들에 대한 상태를 저장하기에 충분하지 않은 경우에 상태 메모리(132)의 일부가 오프-칩 메모리(134)로 오프로딩될 수 있다. 적절한 상태들이 AE들의 처리 전후 각각에 오프-칩 메모리(134)로부터 판독되고 그에 기록될 수 있다. 일부 실시예들에서, (예를 들어, 테이블 형태의) 판독 전용 메모리(ROM) 데이터가 메모리 상태(132)에 더하여 오프-칩 메모리(134)로 오프로딩될 수 있다. ROM 데이터는 예를 들어 AE들의 처리 후에 오프-칩 메모리(134)에 다시 기록되지 않을 수 있는데, 그 이유는 ROM 데이터 테이블이 처리 동안 AE들에 의해 변경되지 않을 수 있기 때문이다. 다양한 실시예들에서, 메모리 오버레이 관리기(136)가 상태 메모리(132) 상에 오프-칩 메모리(134)를 오버레이하는 것을 도울 수 있다.
다양한 실시예들에 따르면, 오버레이 관리기(136)는 오프-칩 메모리(134) 상의 오버레이 내의 함수 또는 데이터가 필요할 때 이들이 상태 메모리(132) 내에 있는 것을 보증하는 것을 담당하는 사용자 정의 함수일 수 있다. 온-칩 상태 메모리(132)와 오프-칩 메모리(134) 사이의 메모리의 이동은 프로세서(26)의 직접 메모리 액세스(DMA) 능력을 이용하여 이루어질 수 있다. 오버레이 관리기(136)는 요청된 오버레이가 이미 실행 시간 메모리 내에 있는지를 체크하고, 오버레이를 로딩하는 동안 다른 함수를 실행하고, 순환적 오버레이 함수 호출들을 추적하는 것과 같은 더 향상된 기능도 처리할 수 있다.
다양한 실시예들에서, 온-칩 메모리 버퍼(128)가 동일 반도체 칩 상에 프로세서(26)와 함께 통합될 수 있으며, 명령어 캐시, 데이터 캐시, ROM, 온-칩 정적 랜덤 액세스 메모리(SRAM), 및 온-칩 동적 랜덤 액세스 메모리(DRAM)를 포함할 수 있다. 명령어 및 데이터 캐시는 프로세서(26)와 오프-칩 메모리(134) 사이의 인터페이스를 서빙하는 고속 로컬 메모리일 수 있다. 온-칩 SRAM은 오프-칩 메모리(134)로부터 분리되지만 동이 어드레스 및 데이터 버스들에 접속된 어드레스 공간 내로 맵핑될 수 있다. 캐시 및 SRAM 양자는 그들의 데이터에 대한 고속 액세스를 허용할 수 있는 반면, 오프-칩 메모리(예로서, DRAM)(134)에 대한 액세스는 비교적 더 긴 액세스 시간을 필요로 할 수 있다. 예를 들어, 오프-칩 메모리(134)의 액세스는 온-칩 메모리(128) 내의 적절한 캐시를 통해 프로세서(26)에 의해 실행될 수 있다.
오프-칩 메모리(134)는 온-칩 메모리가 제한된 상황들에 사용될 수 있다. 오프-칩 메모리(134)는 DRAM, 플래시 RAM, SRAM, SDRAM(synchronous dynamic random access memory), 하드 디스크 드라이브, 및 프로세서(26)를 갖는 칩 외측에 구현될 수 있는 임의의 다른 형태의 메모리 소자들을 포함할 수 있다. 온-칩 메모리 버퍼(128)의 일부는 오프-칩 메모리(134)와 오버레이될 수 있어, 효율적인 메모리 이용가능성이 증가될 수 있다. DMA은 MLM 모듈(20)에 의해 생성된 MLM에 근거한 시퀀스에 따라 온-칩 메모리 버퍼(128)와 오프-칩 메모리(134) 사이에서 메모리 블록들을 이동시키기 위해 사용될 수 있다. DMA에 의해, 프로세서(26)는 판독/기록 이송을 시작할 수 있고, 이송이 진행 중인 동안 다른 동작들을 수행할 수 있고, 이송이 완료될 때 DMA 제어기로부터 인터럽트를 수신할 수 있다. 메모리 이송은 (예컨대, 다른 처리와 병렬로) 백그라운드에 스케줄링될 수 있어, 프로세서 대기 시간이 최소화될 수 있다.
시스템(10)에 대한 실시예들은 자동 DMA 요청들을 배치하기 위해 분석되는 SPA 내의 상이한 AE들에 대한 처리 시간 요구조건들 및 메모리 요구조건 상세들을 사용할 수 있다. 일부 실시예들에서는, 완전한 백그라운드 이송을 보장하기 위해서는, 분석되는 SPA 내의 실질적으로 모든 AE에 대한 처리 시간이 DMA 요청들을 배치하기 위해 고려될 수 있고; 다른 실시예들에서는, SPA 내의 단지 특정 AE들에 대한 처리 시간만이 DMA 요청들을 배치하기 위해 고려될 수 있다. 시스템(10)에 대한 실시예들은 오버레이 메커니즘들을 사용하여 효율적인 온-칩 메모리 이용가능성을 증가시키는 것을 용이하게 할 수 있다. DMA들의 자동 스케줄링으로 인해, 메모리 이송은 백그라운드에서 완성될 수 있고, 효율적인 처리 전력을 증가시킬 수 있다.
도 8을 참조하면, 도 8은 오버레이 메모리 관리를 사용하는 시스템(10)에 대한 일 실시예의 예시적인 상세들을 도시하는 간략화된 다이어그램이다. 제한으로서가 아니라, 예시를 편의를 위해, 시스템(10)에 대한 다양한 실시예들에 따른 오버레이 메모리 관리는 본 명세서에서 도식(schematic; 13)을 참조하여 설명된다. 동작하는 동안, 복수의 상태 버퍼(예컨대, stat1, stat2, stat3 등)가 상태 메모리(132) 내에(예컨대, 상태 메모리(132) 내에) 적절하게 작성될 수 있다. 매트릭스(140)는, 'x'가 버퍼의 작성을 나타내고, 'o'가 버퍼의 판독을 나타내고, 's'가 버퍼로의 기록을 나타내는, 상태 메모리(132) 내의 AE들(14(1)-14(8))에 대응하는 로우들과 버퍼들(예컨대, stat1, stat2 등)에 대응하는 컬럼들을 포함하는 MLM 모듈(20)에 의해 생성될 수 있다.
단순히 예시적인 목적으로, AE들 14(2) 및 14(5)은 오프-칩 메모리(134)를 사용하는 것으로 가정한다. 시스템(10)에 대한 실시예들에 따르면, 온-칩 버퍼(예컨대, "stat5")가 상태 메모리(132) 내에 작성될 수 있고, 두 개의 이질적인 오프-칩 메모리 오버레이 버퍼(예컨대, ostat2 및 ostat5 각각)가 AE들 14(2) 및 14(5)을 위한 오프-칩 메모리(134) 내에 작성될 수 있다. stat5가 AE(2)에 의해 처음 사용(예컨대, 그로부터 판독 또는 그에 기록)될 수 있다. 후속해서, 메모리 오버레이 관리자(136)는, 더미 AE 142(D1i)로 표현된, DMA 요청을 포스트하여, stat5에 레코드된 상태를 오프-칩 메모리(134)에 ostat2로 저장하므로, AE 14(5) 또한 동일한 상태 버퍼 stat5를 사용할 수 있다. 본 명세서에 사용된 바와 같은, "더미 AE"라는 용어는 사용자보다는 MLM 모듈(20)에 의해 생성된 AE를 지칭한다. 더미 AE의 목적은 메모리 버퍼들로의 기록 및 그로부터의 판독을 포함하고, 연관된 알고리즘은 임의의 특정 전자 컴포넌트 기능성보다는 그러한 기능들(예컨대, 메모리로부터의 판독; 메모리로의 기록 등)을 나타낼 수 있다. 메모리 오버레이 관리자(136)는 또 다른 DMA 요청을 포스트하여 stat5를 ostat5로부터의 값들로 채울 수 있다. 한편, 더미 AE 142가 오프-칩 메모리 ostat5로부터 메모리 버퍼 stat5로 기록함에 따라, 다른 AE들(예컨대, AE들 14(3), 14(6), 14(7)의 처리는 실질적으로 동시에 발생할 수 있다(예컨대, DMA 동작은 백그라운드에서 구현될 수 있다).
AE 14(5)의 처리 후에, stat5 내의 값은 AE 14(5)에 의해 사용될 수 있다. 후속해서, 메모리 오버레이 관리자(136)는, 더미 AE 144(D1o)로 표현된, 또 다른 DMA 요청을 포스트하여, stat5를 오프-칩 메모리(134)에 ostat5로 저장하므로, AE 14(2) 또한 다음 처리 라운드에서 (필요하다면) 동일한 상태 stat5를 사용할 수 있다. 한편, 이러한 이송들이 수행됨(예컨대, DMA 동작이 백그라운드에서 구현될 수 있음)에 따라, 다른 AE들(예컨대, AE들 14(4), 14(8)의 처리는 동시에 발생할 수 있다(또는 그 반대).
AE 14(2) 및 AE 14(5) 둘 다 메모리 오버레이 관리자(136)의 도움으로 stat5를 사용할 수 있다. AE 14(2)는 사이즈 M2의 오프-칩 위치 ostat2를 사용할 수 있고; AE 14(5)는 사이즈 M5의 또 다른 오프-칩 위치 ostat5를 사용할 수 있다. 사이즈 M5의 메모리 블록을 이송하기 위해 요청된 메모리 대역폭은 AE들 14(3), 14(6) 및 14(7)의 조합된 처리 시간보다 작을 수 있다. 따라서, 더미 AE 142(D1i)는 AE 14(3) 이전에 stat5 버퍼를 들여오도록 배치(예컨대, 처리)될 수 있으므로, stat5는 AE 14(7) 직후에 사용하기 위해 이용가능할 수 있다. 더미 AE 144(D1o)는 AE 14(5)를 처리한 직후에 오프-칩(134)에 다시 상태를 저장하기 위해 배치될 수 있다. 더미 AE들 142 및 144의 위치는 분석 하의 SLA에 대한 MLM 모듈(20)에 의해 생성된 MLM에 근거한 것일 수 있다. 본 명세서에 예시된 실시예에 따르면, 효율적인 온-칩 메모리 사이즈는 SLA를 처리하기 위해 사용된 오프-칩 메모리(134)와 온-칩 상태 메모리(132) 모두의 합과 동일할 수 있는데, 여기서, DMA 완성을 위한 대기 시간은 제로이다.
도 9를 참고하면, 도 9는 메모리 오버레이 관리를 갖는 시스템(10)에 대한 실시예들과 연관될 수 있는 예시적인 동작들(150)을 도시하는 간략화된 흐름도이다. 동작 150은 152를 포함하는데, 여기서, 분석 하의 SLA에 대한 MLM은 MLM 모듈(20)에 의해 생성될 수 있다. 154에서, 그의 상태 메모리가 오프-칩 메모리(134)를 사용하는 AE들이 결정될 수 있다. 156에서, 더미 AE들이 적절하게 생성될 수 있다. 예를 들어, 단일 온-칩 상태 메모리 버퍼가 사용되는 경우에, 두 개의 더미 AE가 생성될 수 있고; 두 개 이상의 온-칩 상태 메모리 버퍼가 사용되는 경우에, 추가적인 더미 AE들이 적절하게 생성될 수 있다. 158에서, MLM의 버퍼 시퀀스는 분석되는 SLA 내의 AE들의 처리 시간과 이송 시간에 근거하여 더미 AE들을 포함하기 위해 수정될 수 있다.
예를 들어, AE들(A, B, 및 C)이 접속 시퀀스 {A,B,C}에 따라 처리되고; AE C는 오프-칩 메모리(134)를 사용하고; AE C를 위한 오프-칩 메모리(134)로 및 그로부터의 이송은 AE B에 대한 처리 시간보다 작을 수 있다고 가정한다. 온-칩 상태 메모리(132)는 그 경우에 AE B의 처리 직전에 AE C의 상태를 저장하기 위해 생성될 수 있다. 이에 반해, AE C를 위한 오프-칩 메모리(134)로 및 그로부터의 이송이 AE B에 대한 처리 시간보다 클 수 있다면, 온-칩 상태 메모리(132)는 AE A의 처리 이전에 AE C의 상태를 저장하기 위해 생성될 수 있는 등이다. 160에서, 오프-칩 메모리(134)는 원하는 대로 및 특정한 필요에 근거하여 사용될 수 있다.
도 10을 참조하면, 도 10은 프로세서 오프로딩(processor offloading)을 사용하는 시스템(10)에 대한 또 다른 예시적인 실시예를 도시하는 간략화된 블록도이다. 처리 오프로더(processing offloader; 162)는 프로세서, 하드웨어 가속기, 또는 분석 하의 SLA 내의 AE들을 처리할 수 있는 다른 처리 디바이스를 포함할 수 있다. 본 명세서에서 사용된 바와 같은, "처리 오프로더(processing offloader)"라는 용어는 프로세서, 이를테면, CPU(Central Processing Unit), 서비스 프로세서, 하드웨어 가속기 또는 또 다른 프로세서에 추가로(및 그와 함께) 사용된 다른 처리 디바이스를 포함한다. 다양한 실시예에서, 처리 오프로더(162)는 메모리로부터 데이터를 수동적으로 수신하여 그 데이터를 즉시 처리할 수 있고; 처리 오프로더(162)는 메모리 어드레스를 사용하여 데이터를 능동적으로 요청할 수 없다. 따라서, 적절한 메모리 어드레스를 사용하여 데이터를 풀링할 수 있는 프로세서(26)와는 반대로, 처리 오프로더(162)에는 데이터가 푸시될 수 있다. 게다가, 처리가 처리 오프로더(162)로 오프로드될 때, 버퍼들에는 적절하게 로드되어야 하고, 적절한 시간에 처리 오프로더(162)에 의해 판독될 준비가 되어야 한다.
MLM 모듈(20)은 처리 오프로더(162), 메모리 소자(22) 및 프로세서(26)와 인터페이스할 수 있다. 오프로딩에 대해, 메모리 블록들을 가로질러 데이터를 이송하기 위한 시간, AE들의 처리 시간, 및 버퍼 시퀀스가 사용되어 오프로딩이 수행될 수 있는지 여부 및 오프로딩이 언제 수행될 수 있는지를 결정할 수 있다. 메모리 블록들을 가로질러 데이터를 이송하기 위한 시간은 메모리의 사이즈에 따라 다를 수 있고; AE들의 처리 시간은 거기에 사용된 특정 알고리즘에 따라 다를 수 있고; 버퍼 시퀀스는 MLM 모듈(20)에 의해 생성된 MLM으로부터 결정될 수 있다. 프로세서(26)는 특정 AE들에 대한 처리를 처리 오프로더(162)로 오프로드할 수 있다. 프로세서(26)는 적절한 포트를 사용하여 AE 처리를 제어하기 위해 레지스터들을 판독 및 기록할 수 있다. 처리 오프로더(162)는 메모리 소자(22) 내의 적절한 입력 버퍼들로부터 데이터를 판독할 수 있고, 메모리 소자(22) 내의 적절한 출력 버퍼들에 결과들을 기록할 수 있다. 성능은, 예를 들어, 적합한 DMA 포스트 모듈들을 사용하여 알고리즘들을 적절히 파이프라이닝함으로써 향상될 수 있다. 알고리즘들은, 다른 파라미터들 중에서도, 이용가능한/할당된 처리 오프로더들(162)에 대한 상세, 처리 사이클 요구조건 및 데이터 이송 오버헤드를 사용할 수 있다. 그 구성은 결과적으로 프로세서 MIPS와 처리 오프로더 MIPS의 합과 거의 동일한 효율적인 처리 시간을 초래할 수 있는데, 프로세서에서는 최소한의 증가로 DMA 완성을 대기한다.
도 11을 참조하면, 도 11은 시스템(10)에 대한 일 실시예에 따른 MLM들을 사용하는 오프로딩을 설명하기 위한 또 다른 예시적인 도식(163)을 도시하는 간략화된 다이어그램이다. 단순히 예시적인 목적으로, AE(14(5))를 제외한, AE들 14(1)-14(8)은 프로세서(26)에 의해 처리되고, AE 14(5)는 처리 오프로더(162)에 의해 처리된다고 가정한다. 예를 들어, 처리 오프로더(162) 및 프로세서(26)가 상이한 프로세스들(예컨대, AE들)을 병렬로 실행할 수 있음에 따라, AE 14(5)는 백그라운드에서 처리될 수 있다. 데이터는 적절하게 메모리 소자(22)로부터 판독되고, 처리되어, 다시 메모리 소자(22)에 기록될 수 있다. 또한, AE 14(5)는 AE 14(3)로부터 입력을 취하고, AE 14(4) 및 AE 14(8) 각각에 대해 출력을 생성한다. 따라서, AE 14(5)는 AE 14(3) 이후까지 처리될 수 없다.
도 12를 참조하면, 도 12는 도식(163)에 프로세서 오프로딩이 적용된 시스템(10)에 대한 실시예들과 연관될 수 있는 예시적인 상세를 도시하는 간략화된 다이어그램이다. 처리 오프로더(162)는 태스크를 실행하기 위해 P5 MIPS를 취하고, 오프로딩 DMA 오버헤드는 OH5인 것으로 또한 가정한다. PH5 및 OH5에 대한 대역폭이 AE 14(6) 및 AE 14(7)에 대한 조합된 처리 시간보다 작은 경우, 더미 AE 166(D2i)가 생성되어 인터페이스 입력 버퍼로부터 처리 오프로더(162)로 버퍼를 로드하기 위해 배치될 수 있어, 상태 메모리(예컨대, stat5)는 AE 14(5)를 처리하는데 이용가능하다. 다시 말해, 더미 AE 166(D2i)에 대한 메모리 버퍼가 작성될 때, 오프로딩 처리가 시작될 수 있다. AE들 14(6) 및 14(7)의 처리는 AE 14(5)의 처리와 실질적으로 동시에 수행될 수 있다.
AE 14(5)의 처리는 AE 14(5)로부터의 출력들이 접속 시퀀스에 따라 후속해서 처리되는 AE들(예컨대, AE 14(4) 및 AE 14(8))에 의해 사용되기 전에 완성되어야 할 수 있다. 또 다른 더미 AE 168(D2o)는 처리 오프로더(162)로부터 AE 14(5)의 인터페이스 출력 버퍼로의 결과 버퍼를 판독하기 위해 배치될 수 있다. 따라서, AE 14(5)로부터의 출력은 그들이 접속 시퀀스에 따라 처리되기 전에 AE들 14(4) 및 14(8)에 적합하게 이용가능하게 만들어질 수 있다. 더미 AE들 166 및 168은 본 명세서에 설명된 동작들을 용이하게 하기 위해 MLM 모듈(20)에 의해 작성될 수 있고, 메모리 버퍼들을 사용하는 것 외에 더 많은 다른 기능성들을 가질 수 없다.
도 13을 참조하면, 도 13은 프로세서 오프로딩을 사용하는 시스템(10)에 대한 실시예들과 연관될 수 있는 예시적인 동작들을 도시하는 간략화된 흐름도이다. 동작들 170은 172를 포함하는데, 여기서, 분석 하의 SPA를 위한 MLM 모듈(20)에 의해 MLM이 생성될 수 있다. 174에서, 처리 오프로더(162)를 사용하여 처리될 AE들이 결정될 수 있다. 176에서, 더미 AE들은, 처리 오프로더(162)에 의해 처리될 AE들의 수에 근거하여, 적절히 생성될 수 있다. 예를 들어, 단일 AE를 처리하기 위해, 두 개의 더미 AE가 생성될 수 있고; 두 개 이상의 AE를 처리하기 위해, 추가적인 AE들이 적절히 생성될 수 있다. 178에서, MLM의 버퍼 시퀀스는 처리 오프로더(162)에 의해 처리된 AE들의 처리 시간(및 DMA 오버헤드)에 근거하여 더미 AE들을 포함하기 위해 수정될 수 있다. 180에서, 처리 오프로더(162)는 원하는 대로 사용될 수 있다.
본 명세서에서, "하나의 실시예(one embodiment)", "예시적인 실시예(example embodiment)", "일 실시예(an embodiment)", "또 다른 실시예(another embodiment)", "일부 실시예(some embodiments)", "다양한 실시예(various embodiments)", "다른 실시예(other embodiments)", "대안적인 실시예(alternative embodiment)" 등에 포함된 다양한 특징들(예컨대, 요소들, 구조들, 모듈들, 컴포넌트들, 단계들, 동작들, 특성들 등)에 대한 언급은, 그러한 임의의 특징들이 본 개시의 하나 이상의 실시예에 포함되지만, 동일한 실시예들에서 반드시 조합될 수도 있고 또는 반드시 조합될 필요가 없을 수도 있다는 것을 의미하도록 의도된다는 것을 주목한다. 뿐만 아니라, "최적화한다(optimize)"와 "최적화(optimization)"라는 단어 및 관련 용어들은 명시된 결과의 속도 및/또는 효율성에 있어서의 향상을 지칭하는 본 기술 분야의 용어들로서, 명시된 결과를 달성하기 위한 프로세스가 달성되었다는 것이나, "최적의(optimal)" 또는 완벽하게 빠른/완벽하게 효율적인 상태를 달성할 수 있다는 것을 나타내는 것이라고 주장하는 것은 아니다.
본 명세서에 도시되고 설명된 도식들(예컨대, 도식들 13, 28, 163)은 단순히 예들로서, 시스템(10)을 임의의 실시예로 제한하는 것이 아니다. 본 실시예들에 대한 넓은 범위 내에 있는 도식에는 임의의 수의 AE들 및 접속들이 포함될 수 있다. 게다가, 본 명세서에 설명된 방법들은 적절한 프로세서들 및 메모리 소자들을 포함하는 컴퓨팅 디바이스(DSP 또는 다른 프로세서를 포함함)상에서 임의의 적합한 방식으로 구현될 수 있다. 예를 들어, MLM(예컨대, MLM(48))은 다른 로우들 위(또는 아래)에 배치된 소정의 로우들 및 다른 컬럼들의 오른쪽(또는 왼쪽)에 배치된 소정의 컬럼들을 갖는 어레이로서 도시되고 설명되지만, 버퍼 시퀀스를 나타내는 CS는 다양한 상이한 패턴들로 배열된 로우들과 컬럼들을 포함하거나, 로우들만 포함하거나, 컬럼들만 포함하는 등의 임의의 적합한 배열로 표현될 수 있다는 것을 주목해야 한다.
예시적인 구현에서, 본 명세서에 아웃라인된 액티비티들의 적어도 일부 부분은, 예를 들어, MLM 모듈(20) 내의 소프트웨어로 구현될 수 있다. 일부 실시예에서, 이러한 특징들 중 하나 이상은 하드웨어로 구현되거나, 이러한 소자들 외부에 제공되거나, 의도된 기능성을 달성하기 위해 임의의 적절한 방식으로 통합될 수 있다. 다양한 소자(예컨대, MLM 모듈(20), 그래픽 에뮬레이터(12))는 본 명세서에 아웃라인된 동작들을 달성하기 위해 코디네이트될 수 있는 소프트웨어(또는 왕복 소프트웨어(reciprocating software))를 포함할 수 있다. 또 다른 실시예에서, 이러한 소자들은 임의의 적합한 알고리즘, 하드웨어, 소프트웨어, 컴포넌트들, 모듈들, 인터페이스들, 또는 그 동작들을 용이하게 하는 객체들(objects)을 포함할 수 있다.
뿐만 아니라, 본 명세서에 설명되고 도시된 시스템(10)(및/또는 그들의 연관된 구조들)은 또한 네트워크 환경에서 하드웨어 컴포넌트들(예컨대, 컴퓨터 모니터들, 디스플레이 디바이스들) 및 네트워크 디바이스들(예컨대, 클라이언트 디바이스들)과의 데이터 또는 정보의 수신, 송신 및/또는 그렇지 않으면 통신하기 위한 적합한 인터페이스들을 포함할 수 있다. 추가로, 다양한 노드들과 연관된 메모리 소자들 및 프로세서들의 일부는 제거되거나, 그렇지 않으면 통합되어, 단일 프로세서 또는 단일 메모리 소자가 소정의 액티비티들을 책임질 수 있다. 일반적으로, 도면들에 도시된 배열들은 그들의 표현에 있어서 더 논리적일 수 있는 한편, 물리적 아키텍처는 다양한 순열, 조합, 및/또는 이러한 소자들의 하이브리드를 포함할 수 있다. 본 명세서에서 아웃라인된 동작적 목표를 달성하기 위해 무수한 가능한 설계 구성들이 사용될 수 있다는 것을 주목해야 한다. 따라서, 연관된 인프라스트럭처는 무수한 대체 배열, 설계 선택, 디바이스 가능성, 하드웨어 구성, 소프트웨어 구현, 장비 옵션 등을 갖는다.
예시적인 실시예들 중 일부에서, 하나 이상의 메모리 소자들(예컨대, 메모리 소자(22))은 본 명세서에서 설명된 동작들을 위해 사용된 데이터를 저장할 수 있다. 이는 비-일시적인 매체에서 명령어들(예컨대, 소프트웨어, 로직, 코드 등)을 저장할 수 있는 메모리 소자를 포함하여, 명령어들이 본 명세서에서 설명된 액티비티들을 수행하도록 실행된다. 프로세서는 본 명세서에서 설명된 동작들을 달성하기 위해 데이터와 연관된 임의의 유형의 명령어들을 실행할 수 있다.
하나의 예에서, 프로세서들(예컨대, 프로세서(26))은 요소나 아티클(예컨데, 데이터)을 하나의 상태나 물건(thing)으로부터 또 다른 상태나 물건으로 변환할 수 있다. 또 다른 예에서, 본 명세서에 아웃라인된 액티비티들은 고정된 로직이나 프로그램가능한 로직(예컨대, 프로세서에 의해 실행된 컴퓨터 명령어들/소프트웨어)으로 구현될 수 있고, 본 명세서에서 식별된 요소들은 일부 유형의 프로그램가능한 프로세서, 프로그램가능한 디지털 로직(예컨대, FPGA(field programmable gate array), EPROM(erasable programmable read only memory), EEPROM(electrically erasable programmable read only memory)), 디지털 로직, 소프트웨어, 코드, 전자 명령어, 플래시 메모리, 광 디스크, CD-ROM, DVD ROM, 자기 혹은 광 카드를 포함하는 ASIC, 전자 명령어들을 저장하기에 적합한 다른 유형의 기계-판독가능 매체, 또는 임의의 적합한 그들의 조합으로 구현될 수 있다.
동작에서, 시스템(10) 내의 컴포넌트들은 본 명세서에 아웃라인된 동작들을 달성하는데 사용될 정보를 저장하기 위한 하나 이상의 메모리 소자(예컨대, 메모리 소자(22))를 포함할 수 있다. 이러한 디바이스들은 임의의 적합한 유형의 비-일시적인 저장 매체(예컨대, RAM(random access memory), ROM(read only memory), FPGA(field programmable gate array), EPROM, EEPROM 등), 소프트웨어, 하드웨어에, 또는 특정한 필요에 근거하여 적절하게, 임의의 다른 적합한 컴포넌트, 디바이스, 요소 혹은 객체에 정보를 더 유지할 수 있다. 시스템(10)에서 추적되거나, 전송되거나, 수신되거나, 저장된 정보는, 그 모두가 임의의 적합한 타임프레임에서 참조될 수 있는, 특정한 필요 및 구현에 근거한, 임의의 데이터베이스, 레지스터, 테이블, 캐시, 큐, 제어 리스트, 또는 저장 구조에 제공될 수 있다. 본 명세서에 논의된 메모리 아이템들의 일부는 광범위한 용어인 '메모리 소자' 내에 포함되는 것으로 해석되어야 한다. 유사하게, 본 명세서에 설명된 잠재적 처리 소자들, 모듈들, 및 기계들의 일부는 광범위한 용어인 '프로세서' 내에 포함되는 것으로 해석되어야 한다.
앞선 도면들을 참조하여 설명된 동작들 및 단계들은 시스템에 의해 실행될 수 있거나 시스템 내에 있을 수 있는 가능한 시나리오들의 단지 일부를 도시하는 것이라는 것을 주목하는 것이 중요하다. 이러한 동작들의 일부는 적절한 곳에서 삭제되거나 제거될 수 있고, 또한 이러한 단계들은 논의된 개념의 범위에서 벗어나지 않고 상당히 수정되거나 달라질 수 있다. 추가로, 이러한 동작들의 타이밍은 상당히 변경될 수 있고, 본 개시에서 교시된 결과들을 달성할 수 있다. 앞선 동작적 흐름들은 예 및 논의를 목적으로 제안된 것이다. 논의된 개념의 교시에서 벗어나지 않고 임의의 적합한 배열, 연대순, 구성, 및 타이밍 메커니즘이 제공될 수 있는 시스템에 의해 상당한 융통성이 제공된다.
수많은 다른 변화, 대체, 변동, 변경 및 수정이 당업자에게 확인될 수 있고, 본 개시는 첨부된 청구항의 범위 내에 있는 그러한 모든 변화, 대체, 변동, 변경 및 수정을 포함하도록 의도된다. 본 명세서에 첨부된 청구항들을 해석하는데 있어서, USPTO(United States Patent and Trademark Office) 및 추가로 본 출원에 이슈된 임의의 특허의 임의의 독자들을 돕기 위해, 본 출원인은: (a) 특정한 청구항들에서 "를 위한 수단들(means for)" 또는 "를 위한 단계(step for)"라는 단어가 구체적으로 사용되는 경우 외에는, 본 명세서의 출원일에 존재하는 첨부된 청구항들 중 임의의 것에 35 U.S.C. 섹션 112의 단락 6을 적용하려는 의도는 없고; (b) 본 명세서 내의 임의의 진술에 의해, 첨부된 청구항에 달리 반영되지 않은 임의의 방식으로 본 개시를 제한하려는 의도는 없다는 것을 주목하기를 본 출원인은 희망한다.

Claims (20)

  1. 프로세서들 및 메모리 소자들을 포함하는 컴퓨팅 디바이스에 의해 수행되는 방법으로서,
    전자 회로에 대한 신호 흐름의 도식(schematic)에서 복수의 알고리즘 요소의 접속 시퀀스를 결정하는 단계 - 상기 접속 시퀀스는 상기 알고리즘 요소들 사이의 접속들과, 상기 접속들에 따라 상기 알고리즘 요소들을 처리하는 시퀀스를 나타냄 - ;
    상기 접속 시퀀스에 따라 상기 복수의 알고리즘 요소를 처리하기 위해 복수의 메모리 버퍼를 사용하는 순서를 나타내는 버퍼 시퀀스를 결정하는 단계; 및
    상기 버퍼 시퀀스에 따라 상기 복수의 메모리 버퍼 중 적어도 일부를 재사용하는 단계
    를 포함하고,
    상기 버퍼 시퀀스를 결정하는 단계는:
    N 로우들 및 M 컬럼들을 포함하는 제1 MLM(memory life matrix)을 구성하는 단계 - N은 상기 메모리 버퍼들을 사용하는 상기 알고리즘 요소들의 수이고, M은 상기 접속들의 수임 -;
    상기 N 로우들에서 N개의 상기 알고리즘 요소들을 오름차순으로 배열하고, 상기 M 컬럼들에서 M개의 상기 접속들을 오름차순으로 배열하는 단계;
    상기 제1 MLM 내의 각각의 셀에 대해, 상기 셀의 로우에 대응하는 알고리즘 요소가 상기 셀의 컬럼에 대응하는 접속에서의 출력을 생성하는 경우, 제1 심볼로 마크하고, 상기 셀의 로우에 대응하는 알고리즘 요소가 상기 셀의 컬럼에 대응하는 접속에서의 입력을 수신하는 경우, 제2 심볼로 마크하는 단계; 및
    임의의 소정의 컬럼에서, 상기 제1 심볼이 상기 제2 심볼 전에 등장하도록, 상기 제1 MLM 내의 상기 로우들을 재배열함으로써 제2 MLM을 생성하는 단계를 포함하는, 방법.
  2. 제1항에 있어서, 각각의 알고리즘 요소에 대해, 적어도 하나의 입력은 상기 알고리즘 요소에서 수신되고, 적어도 하나의 출력은 상기 알고리즘 요소에 의해 생성되고,
    상기 적어도 하나의 출력은 적어도 하나의 다른 알고리즘 요소로의 또 다른 입력일 수 있고,
    하나의 접속은 상기 알고리즘 요소에 상기 입력을 제공하고, 또 다른 접속은 상기 알고리즘 요소로부터 상기 출력을 수락하여 그 출력을 상기 또 다른 입력으로서 상기 적어도 하나의 다른 알고리즘 요소에 제공하고,
    각각의 접속은 상기 메모리 버퍼들 중 하나와 연관되고,
    상기 또 다른 접속에서의 상기 출력은 상기 메모리 버퍼에 기록되어, 상기 적어도 하나의 다른 알고리즘 요소에 의해 상기 또 다른 입력으로서 판독되는 방법.
  3. 제2항에 있어서, 상기 버퍼 시퀀스는, 상기 알고리즘 요소들로부터의 상기 출력들 각각이 각각의 메모리 버퍼에 기록되는 시퀀스에 따라 배열된, 상기 메모리 버퍼들의 넘버링된(numbered) 리스트를 포함하고, 상기 버퍼 시퀀스에서 반복된 메모리 버퍼 번호들은 해당 메모리 버퍼들의 버퍼 재사용을 나타내는 방법.
  4. 제1항에 있어서, 상기 버퍼 시퀀스를 결정하는 단계는:
    상기 접속들, 상기 알고리즘 요소들 및 상기 메모리 버퍼들을 순서대로(in an order) 넘버링하는 단계(numbering);
    각각의 접속에 대해, 임의의 다른 알고리즘 요소 전에 상기 접속에서의 출력을 생성하는 제1 알고리즘 요소를 식별하고, 다른 모든 알고리즘 요소들 후에 상기 접속에서의 입력으로서 상기 출력을 수신하는 제2 알고리즘 요소를 식별하는 단계;
    상기 접속들 모두의 상기 제1 알고리즘 요소들을 할당 순서대로 배열하는 단계 - 상기 할당 순서는 제1 알고리즘 요소 번호들의 오름차순을 포함함 - ; 및
    상기 할당 순서에 따라, 각각의 접속에 대한 버퍼 인덱스를 생성하는 단계 - 상기 접속에 대한 상기 버퍼 인덱스는 재사용 접속에 대한 또 다른 버퍼 인덱스와 동일하고, 상기 재사용 접속의 상기 제2 알고리즘 요소는 상기 접속의 상기 제1 알고리즘 요소와 동일하고, 상기 버퍼 시퀀스는 상기 할당 순서에 따라 배열된 모든 접속들에 대한 버퍼 인덱스를 포함함 -
    를 포함하는 방법.
  5. 제1항에 있어서,
    각각의 로우는 대응하는 알고리즘 요소의 번호에 따라 명명되고(named), 각각의 컬럼은 대응하는 접속의 번호에 따라 명명되는, 방법.
  6. 제5항에 있어서,
    상기 MLM의 상기 M 컬럼들에 대응하는 M 컬럼들 및 하나의 로우를 포함하는 제1 할당 리스트를 생성하는 단계 - 상기 할당 리스트 내의 각각의 셀은 상기 제1 심볼을 갖는 상기 제2 MLM의 컬럼에 대응하는 로우 번호를 포함함 - ;
    상기 제1 할당 리스트에서 상기 로우 번호들의 오름차순을 포함하는 할당 순서에 따라 상기 제1 할당 리스트의 상기 M 컬럼들을 재배열함으로써 제2 할당 리스트를 생성하는 단계;
    상기 MLM의 상기 M 컬럼들에 대응하는 M 컬럼들 및 하나의 로우를 포함하는 제1 프리(free) 리스트를 생성하는 단계 - 상기 프리 리스트 내의 각각의 셀은 상기 제2 심볼을 갖는 상기 제2 MLM의 컬럼에 대응하는 최고 로우 번호를 포함함 - ; 및
    상기 할당 순서에 따라 상기 제1 프리 리스트의 상기 M 컬럼들을 재배열함으로써 제2 프리 리스트를 생성하는 단계
    를 더 포함하는 방법.
  7. 제6항에 있어서,
    상기 제2 할당 리스트 내의 각각의 엔트리에 대해, 상기 엔트리가 상기 제2 프리 리스트에서 발견되는지를 결정하는 단계;
    상기 제2 프리 리스트 내의 상기 엔트리에 대응하는 접속 번호들을 식별하는 단계;
    식별된 접속들에 대응하는 상기 메모리 버퍼들을 프리하게 하는 단계(freeing); 및
    상기 제2 할당 리스트 내의 상기 엔트리에 대응하는 또 다른 접속에 상기 프리해진 메모리 버퍼들 중 적어도 하나를 할당하는 단계
    를 더 포함하는 방법.
  8. 제1항에 있어서, 상기 접속 시퀀스를 결정하는 단계는:
    일부 알고리즘 요소들에 입력들을 제공하는 접속들을 식별하는 단계;
    일부 다른 알고리즘 요소들로부터의 출력들을 수락하는 접속들을 식별하는 단계; 및
    상기 알고리즘 요소들에서 상기 입력들이 수신되고 출력들이 생성되는 순서를 결정하는 단계
    를 포함하는 방법.
  9. 제1항에 있어서, 상기 도식은 컴퓨팅 디바이스상의 그래픽 시뮬레이터를 사용하여 생성되는 방법.
  10. 제1항에 있어서, 각각의 알고리즘 요소는, 하나 이상의 출력을 생성하기 위해 미리 정의된 알고리즘에 따라 하나 이상의 입력을 처리하도록 구성된, 상기 전자 회로의 기능적 컴포넌트의 에뮬레이션을 표현하는 방법.
  11. 실행을 위한 명령어들을 포함하고, 프로세서에 의해 실행될 때, 동작들을 수행하도록 동작가능한 컴퓨터 프로그램 코드가 인코딩된 컴퓨터 판독가능 기록 매체로서,
    상기 동작들은,
    전자 회로에 대한 신호 흐름의 도식에서 복수의 알고리즘 요소의 접속 시퀀스를 결정하는 동작 - 상기 접속 시퀀스는 상기 알고리즘 요소들 사이의 접속들과, 상기 접속들에 따라 상기 알고리즘 요소들을 처리하는 시퀀스를 나타냄 - ;
    상기 접속 시퀀스에 따라 상기 복수의 알고리즘 요소를 처리하기 위해 복수의 메모리 버퍼를 사용하는 순서를 나타내는 버퍼 시퀀스를 결정하는 동작; 및
    상기 버퍼 시퀀스에 따라 상기 복수의 메모리 버퍼 중 적어도 일부를 재사용하는 동작
    을 포함하고,
    상기 버퍼 시퀀스를 결정하는 동작은:
    N 로우들 및 M 컬럼들을 포함하는 제1 MLM을 구성하는 동작 - N은 상기 메모리 버퍼들을 사용하는 상기 알고리즘 요소들의 수이고, M은 상기 접속들의 수임 -;
    상기 N 로우들에서 N개의 상기 알고리즘 요소들을 오름차순으로 배열하고, 상기 M 컬럼들에서 M개의 상기 접속들을 오름차순으로 배열하는 동작;
    상기 제1 MLM 내의 각각의 셀에 대해, 상기 셀의 로우에 대응하는 알고리즘 요소가 상기 셀의 컬럼에 대응하는 접속에서의 출력을 생성하는 경우, 제1 심볼로 마크하고, 상기 셀의 로우에 대응하는 알고리즘 요소가 상기 셀의 컬럼에 대응하는 접속에서의 입력을 수신하는 경우, 제2 심볼로 마크하는 동작; 및
    임의의 소정의 컬럼에서, 상기 제1 심볼이 상기 제2 심볼 전에 등장하도록, 상기 제1 MLM 내의 상기 로우들을 재배열함으로써 제2 MLM을 생성하는 동작을 포함하는, 컴퓨터 판독가능 기록 매체.
  12. 제11항에 있어서, 상기 버퍼 시퀀스를 결정하는 동작은:
    상기 접속들, 상기 알고리즘 요소들 및 상기 메모리 버퍼들을 순서대로 넘버링하는 동작;
    각각의 접속에 대해, 임의의 다른 알고리즘 요소 전에 상기 접속에서의 출력을 생성하는 제1 알고리즘 요소를 식별하고, 다른 모든 알고리즘 요소들 후에 상기 접속에서의 입력으로서 상기 출력을 수신하는 제2 알고리즘 요소를 식별하는 동작;
    상기 접속들 모두의 상기 제1 알고리즘 요소들을 할당 순서대로 배열하는 동작 - 상기 할당 순서는 제1 알고리즘 요소 번호들의 오름차순을 포함함 - ; 및
    상기 할당 순서에 따라, 각각의 접속에 대한 버퍼 인덱스를 생성하는 동작 - 상기 접속에 대한 상기 버퍼 인덱스는 재사용 접속에 대한 또 다른 버퍼 인덱스와 동일하고, 상기 재사용 접속의 상기 제2 알고리즘 요소는 상기 접속의 상기 제1 알고리즘 요소와 동일하고, 상기 버퍼 시퀀스는 상기 할당 순서에 따라 배열된 모든 접속들에 대한 버퍼 인덱스를 포함함 -
    을 포함하는 컴퓨터 판독가능 기록 매체.
  13. 제11항에 있어서,
    각각의 로우는 대응하는 알고리즘 요소의 번호에 따라 명명되고, 각각의 컬럼은 대응하는 접속의 번호에 따라 명명되는, 컴퓨터 판독가능 기록 매체.
  14. 제13항에 있어서, 상기 버퍼 시퀀스를 결정하는 동작은:
    상기 MLM의 상기 M 컬럼들에 대응하는 M 컬럼들 및 하나의 로우를 포함하는 제1 할당 리스트를 생성하는 동작 - 상기 할당 리스트 내의 각각의 셀은 상기 제1 심볼을 갖는 상기 제2 MLM의 컬럼에 대응하는 로우 번호를 포함함 - ;
    상기 제1 할당 리스트 내의 상기 로우 번호들의 오름차순을 포함하는 할당 순서에 따라 상기 제1 할당 리스트의 상기 M 컬럼들을 재배열함으로써 제2 할당 리스트를 생성하는 동작;
    상기 MLM의 상기 M 컬럼들에 대응하는 M 컬럼들 및 하나의 로우를 포함하는 제1 프리 리스트를 생성하는 동작 - 상기 프리 리스트 내의 각각의 셀은 상기 제2 심볼을 갖는 상기 제2 MLM의 컬럼에 대응하는 최고 로우 번호를 포함함 - ; 및
    상기 할당 순서에 따라 상기 제1 프리 리스트의 상기 M 컬럼들을 재배열함으로써 제2 프리 리스트를 생성하는 동작
    을 더 포함하는 컴퓨터 판독가능 기록 매체.
  15. 제14항에 있어서, 상기 버퍼 시퀀스를 결정하는 동작은:
    상기 제2 할당 리스트 내의 각각의 엔트리에 대해, 상기 엔트리가 상기 제2 프리 리스트에서 발견되는지를 결정하는 동작;
    상기 제2 프리 리스트 내의 상기 엔트리에 대응하는 접속 번호들을 식별하는 동작;
    식별된 접속들에 대응하는 상기 메모리 버퍼들을 프리하게 하는 동작(freeing); 및
    상기 제2 할당 리스트 내의 상기 엔트리에 대응하는 또 다른 접속에 상기 프리해진 메모리 버퍼들 중 적어도 하나를 할당하는 동작
    을 더 포함하는 컴퓨터 판독가능 기록 매체.
  16. 장치로서,
    데이터를 저장하기 위한 메모리 소자 - 상기 메모리 소자는 복수의 메모리 버퍼를 포함함 - ; 및
    상기 데이터와 연관된 명령어들을 실행하도록 동작가능한 프로세서
    를 포함하고,
    상기 프로세서와 상기 메모리 소자가 협력하여, 상기 장치는,
    전자 회로에 대한 신호 흐름의 도식에서 복수의 알고리즘 요소의 접속 시퀀스를 결정하고 - 상기 접속 시퀀스는 상기 알고리즘 요소들 사이의 접속들과, 상기 접속들에 따라 상기 알고리즘 요소들을 처리하는 시퀀스를 나타냄 - ,
    상기 접속 시퀀스에 따라 상기 복수의 알고리즘 요소를 처리하기 위해 상기 복수의 메모리 버퍼를 사용하는 순서를 나타내는 버퍼 시퀀스를 결정하고,
    상기 버퍼 시퀀스에 따라 상기 복수의 메모리 버퍼의 적어도 일부를 재사용하도록 구성되며,
    상기 버퍼 시퀀스를 결정하는 것은,
    N 로우들 및 M 컬럼들을 포함하는 제1 MLM을 구성하는 것 - N은 상기 메모리 버퍼들을 사용하는 상기 알고리즘 요소들의 수이고, M은 상기 접속들의 수임 -;
    상기 N 로우들에서 오름차순으로 N개의 상기 알고리즘 요소들을 배열하고, 상기 M 컬럼들에서 오름차순으로 M개의 상기 접속들을 배열하는 것;
    상기 제1 MLM 내의 각각의 셀에 대해, 상기 셀의 로우에 대응하는 알고리즘 요소가 상기 셀의 컬럼에 대응하는 접속에서의 출력을 생성하는 경우, 제1 심볼로 마크하고, 상기 셀의 로우에 대응하는 알고리즘 요소가 상기 셀의 컬럼에 대응하는 접속에서의 입력을 수신하는 경우, 제2 심볼로 마크하는 것; 및
    임의의 소정의 컬럼에서, 상기 제1 심볼이 상기 제2 심볼 이전에 등장하도록, 상기 제1 MLM 내의 상기 로우들을 재배열함으로써 제2 MLM을 생성하는 것을 포함하는, 장치.
  17. 제16항에 있어서, 상기 버퍼 시퀀스를 결정하는 것은,
    상기 접속들, 상기 알고리즘 요소들 및 상기 메모리 버퍼들을 순서대로 넘버링하는 것;
    각각의 접속에 대해, 임의의 다른 알고리즘 요소 전에 상기 접속에서의 출력을 생성하는 제1 알고리즘 요소를 식별하고, 다른 모든 알고리즘 요소들 후에 상기 접속에서의 입력으로서 상기 출력을 수신하는 제2 알고리즘 요소를 식별하는 것;
    상기 접속들 모두의 상기 제1 알고리즘 요소들을 할당 순서대로 배열하는 것 - 상기 할당 순서는 제1 알고리즘 요소 번호들의 오름차순을 포함함 - ; 및
    상기 할당 순서에 따라, 각각의 접속에 대한 버퍼 인덱스를 생성하는 것 - 상기 접속에 대한 상기 버퍼 인덱스는 재사용 접속에 대한 또 다른 버퍼 인덱스와 동일하고, 상기 재사용 접속의 상기 제2 알고리즘 요소는 상기 접속의 상기 제1 알고리즘 요소와 동일하고, 상기 버퍼 시퀀스는 상기 할당 순서에 따라 배열된 모든 접속들에 대한 버퍼 인덱스를 포함함 -
    울 포함하는 장치.
  18. 제16항에 있어서,
    각각의 로우는 대응하는 알고리즘 요소의 번호에 따라 명명되고, 각각의 컬럼은 대응하는 접속의 번호에 따라 명명되는, 장치.
  19. 제18항에 있어서, 상기 버퍼 시퀀스를 결정하는 것은,
    상기 MLM의 상기 M 컬럼들에 대응하는 M 컬럼들 및 하나의 로우를 포함하는 제1 할당 리스트를 생성하는 것 - 상기 할당 리스트 내의 각각의 셀은 상기 제1 심볼을 갖는 상기 제2 MLM의 컬럼에 대응하는 로우 번호를 포함함 - ;
    상기 제1 할당 리스트 내의 상기 로우 번호들의 오름차순을 포함하는 할당 순서에 따라 상기 제1 할당 리스트의 상기 M 컬럼들을 재배열함으로써 제2 할당 리스트를 생성하는 것;
    상기 MLM의 상기 M 컬럼들에 대응하는 M 컬럼들 및 하나의 로우를 포함하는 제1 프리 리스트를 생성하는 것 - 상기 프리 리스트 내의 각각의 셀은 상기 제2 심볼을 갖는 상기 제2 MLM의 컬럼에 대응하는 최고 로우 번호를 포함함 - ;
    상기 할당 순서에 따라 상기 제1 프리 리스트의 상기 M 컬럼들을 재배열함으로써 제2 프리 리스트를 생성하는 것
    을 더 포함하는 장치.
  20. 제19항에 있어서, 상기 버퍼 시퀀스를 결정하는 것은,
    상기 제2 할당 리스트 내의 각각의 엔트리에 대해, 상기 엔트리가 상기 제2 프리 리스트에서 발견되는지를 결정하는 것;
    상기 제2 프리 리스트 내의 상기 엔트리에 대응하는 접속 번호들을 식별하는 것;
    식별된 접속들에 대응하는 상기 메모리 버퍼들을 프리하게 하는 것(freeing);
    상기 제2 할당 리스트 내의 상기 엔트리에 대응하는 또 다른 접속에 상기 프리해진 메모리 버퍼들 중 적어도 하나를 할당하는 것
    을 더 포함하는 장치.
KR1020130148796A 2012-11-30 2013-12-02 신호 흐름이 프로그램된 디지털 신호 프로세서 코드의 효율적인 자원 관리를 위한 시스템 및 방법 KR101715986B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/691,670 2012-11-30
US13/691,670 US8941674B2 (en) 2012-11-30 2012-11-30 System and method for efficient resource management of a signal flow programmed digital signal processor code

Publications (2)

Publication Number Publication Date
KR20140070493A KR20140070493A (ko) 2014-06-10
KR101715986B1 true KR101715986B1 (ko) 2017-03-13

Family

ID=49683568

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020130148796A KR101715986B1 (ko) 2012-11-30 2013-12-02 신호 흐름이 프로그램된 디지털 신호 프로세서 코드의 효율적인 자원 관리를 위한 시스템 및 방법

Country Status (4)

Country Link
US (3) US8711160B1 (ko)
EP (1) EP2738675B1 (ko)
KR (1) KR101715986B1 (ko)
CN (1) CN103870335B (ko)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8711160B1 (en) 2012-11-30 2014-04-29 Analog Devices, Inc. System and method for efficient resource management of a signal flow programmed digital signal processor code
US9697005B2 (en) 2013-12-04 2017-07-04 Analog Devices, Inc. Thread offset counter
FR3026945B1 (fr) * 2014-10-10 2017-12-15 Oreal Composition cosmetique de revetement des fibres keratiniques
KR102581470B1 (ko) * 2017-11-22 2023-09-21 삼성전자주식회사 영상 데이터를 처리하는 방법 및 장치
US10824927B1 (en) * 2018-09-21 2020-11-03 Enernet Global, LLC Systems, methods and computer readable medium for management of data buffers using functional paradigm
DE102019211856A1 (de) * 2019-08-07 2021-02-11 Continental Automotive Gmbh Datenstruktur, Steuerungssystem zum Einlesen einer solchen Datenstruktur und Verfahren
CN112163184A (zh) * 2020-09-02 2021-01-01 上海深聪半导体有限责任公司 一种实现fft的装置及方法

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050097140A1 (en) * 2002-03-22 2005-05-05 Patrik Jarl Method for processing data streams divided into a plurality of process steps

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
AU4219693A (en) * 1992-09-30 1994-04-14 Apple Computer, Inc. Inter-task buffer and connections
US20080147915A1 (en) * 2006-09-29 2008-06-19 Alexander Kleymenov Management of memory buffers for computer programs
US8341604B2 (en) * 2006-11-15 2012-12-25 Qualcomm Incorporated Embedded trace macrocell for enhanced digital signal processor debugging operations
US8711160B1 (en) 2012-11-30 2014-04-29 Analog Devices, Inc. System and method for efficient resource management of a signal flow programmed digital signal processor code

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050097140A1 (en) * 2002-03-22 2005-05-05 Patrik Jarl Method for processing data streams divided into a plurality of process steps

Also Published As

Publication number Publication date
US8941674B2 (en) 2015-01-27
EP2738675A3 (en) 2016-06-01
US8681166B1 (en) 2014-03-25
EP2738675B1 (en) 2019-03-27
EP2738675A2 (en) 2014-06-04
US8711160B1 (en) 2014-04-29
KR20140070493A (ko) 2014-06-10
CN103870335B (zh) 2017-05-17
US20140152680A1 (en) 2014-06-05
CN103870335A (zh) 2014-06-18

Similar Documents

Publication Publication Date Title
KR101715986B1 (ko) 신호 흐름이 프로그램된 디지털 신호 프로세서 코드의 효율적인 자원 관리를 위한 시스템 및 방법
JP7382925B2 (ja) ニューラルネットワークアクセラレーションのための機械学習ランタイムライブラリ
US9672065B2 (en) Parallel simulation using multiple co-simulators
CN103309786A (zh) 用于在非可抢占式图形处理单元上交互调试的方法和装置
US8725486B2 (en) Apparatus and method for simulating a reconfigurable processor
US9645802B2 (en) Technique for grouping instructions into independent strands
US10761822B1 (en) Synchronization of computation engines with non-blocking instructions
US20210158131A1 (en) Hierarchical partitioning of operators
US20170004232A9 (en) Device and method for accelerating the update phase of a simulation kernel
US10922146B1 (en) Synchronization of concurrent computation engines
US11372677B1 (en) Efficient scheduling of load instructions
US11748622B1 (en) Saving intermediate outputs of a neural network
US11061654B1 (en) Synchronization of concurrent computation engines
US11275875B2 (en) Co-simulation repeater with former trace data
US11625269B1 (en) Scheduling for locality of reference to memory
US11442794B1 (en) Event assignment for synchronization of concurrent execution engines
US11281831B2 (en) Information processing device, information processing method, and recording medium
US11182314B1 (en) Low latency neural network model loading
US11983128B1 (en) Multidimensional and multiblock tensorized direct memory access descriptors
US11775299B1 (en) Vector clocks for highly concurrent execution engines
CN110879744B (zh) 利用多线程执行计算图的方法和系统
KR102044784B1 (ko) 재구성 프로세서에서 충돌 해결을 가속화하기 위한 방법 및 시스템
Gangrade GPU Based Acceleration of SystemC and Transaction Level Models for MPSOC Simulation
JP2018124892A (ja) 情報処理装置、方法、及びプログラム

Legal Events

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