KR102668340B1 - 설정가능한 하드웨어 런타임 최적화 - Google Patents

설정가능한 하드웨어 런타임 최적화 Download PDF

Info

Publication number
KR102668340B1
KR102668340B1 KR1020207006247A KR20207006247A KR102668340B1 KR 102668340 B1 KR102668340 B1 KR 102668340B1 KR 1020207006247 A KR1020207006247 A KR 1020207006247A KR 20207006247 A KR20207006247 A KR 20207006247A KR 102668340 B1 KR102668340 B1 KR 102668340B1
Authority
KR
South Korea
Prior art keywords
program code
portions
groups
calculation
executing
Prior art date
Application number
KR1020207006247A
Other languages
English (en)
Other versions
KR20200052277A (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 넥스트 실리콘 리미티드
Priority claimed from PCT/US2018/045008 external-priority patent/WO2019028253A1/en
Publication of KR20200052277A publication Critical patent/KR20200052277A/ko
Application granted granted Critical
Publication of KR102668340B1 publication Critical patent/KR102668340B1/ko

Links

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/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44505Configuring for program initiating, e.g. using registry, configuration files
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7867Architectures of general purpose stored program computers comprising a single central processing unit with reconfigurable architecture
    • 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/5061Partitioning or combining of resources
    • G06F9/5072Grid computing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining

Abstract

설정가능한 처리 아키텍처의 런타임 최적화 방법이 개시된다. 방법은 적어도 하나의 함수를 실행하기 위한 복수의 호출을 수신하는 단계; 복수의 수신된 호출들 중 적어도 하나의 패턴을 식별하는 단계 및 적어도 하나의 패턴에 기초하여 적어도 하나의 기능을 계산하기 위해 설정가능한 처리 아키텍처의 적어도 일부를 조종하는 단계를 포함한다.

Description

설정가능한 하드웨어 런타임 최적화
본 개시는 일반적으로 하드웨어의 런타임 최적화에 관한 것으로, 보다 구체적으로는 구성가능한설정가능한(configurable) 하드웨어의 런타임 최적화를 위한 기술에 관한 것이다.
본 출원은 2017년 8월3일에 출원된 미국출원 62/540849호 및 2017년 9월13일에 출원된 미국 가출원 62/558090호의 이익을 주장하며, 그 내용은 여기에 참조로 포함된다.
기술이 발전함에 따라, 더 높은 처리(processing) 능력을 갖는 더 강력한 처리 시스템에 대한 요구가 급격하게 증가한다. 요즘, 프로세서는 높은 계산 처리량(computational throughput)을 전달하도록 기대되고, 전력 효율이 높다. 그럼에도 불구하고, 기존(existing) 처리 시스템은 명백한 스토리지(storage)를 통해 통신하는 순차적인 명령 스트림(streams)을 실행하므로, 모델(model)의 전력비효율로 인해 어려움을 겪는다.
현대 처리 아키텍처에서, 프로그램은 대부분 코드의 작은 정적 부분(static portion)을 반복하지만, 각각의 동적 명령(dynamic instruction)은 패치(fetched) 및 디코딩되어야한다. 또한, 명백한 정적 메모리는 명령들 사이에서 데이터를 통신하기 위한 유일한 채널이기 때문에, 중간(intermediate) 결과는 함수 유닛과 레지스터 파일 간에 반복적으로 전송된다. 최신 아키텍처의 한계는 높은 전력 소비, 방열, 네트워크 및 I/O 병목현상(bottlenecks) 및 메모리 파티션을 포함한다.
예를 들어, FPGA(field-programmable gate array)는 소프트웨어 구성 하드웨어 회로상에서 동작한다. FPGA는 낮은 대기 시간으로 매우 높은 처리량을 허용한다. FPGA의 설정 기능(configurability)은 멀티 코어 아키텍처에서 보조 프로세서(co-processors)로 사용하거나, 시스템 CPU의 처리 부하를 줄이기 위해 중요한 데이터 경로에 배치될 수 있다. FPGA의 주요 단점 중 하나는 유연한 프로그래밍 기능이 없다는 것이다. 또한, FPGA의 컴퓨팅 성능은 상대적으로 낮다.
프로그램 가능한 처리 아키텍처의 예는 멀티 코어 프로세서이다. 멀티 코어 프로세서의 아키텍처에는 프로그램 명령을 읽고 실행하는 단위인 두 개 이상의 독립적인 실제 처리 장치(“코어”)가 있는 단일 컴퓨팅 구성요소를 포함한다. 명령은 일반적인 CPU 명령(instructions)이다(예로, 데이터 이동, 추가 및 분기) 이러한 아키텍처에서, 단일 프로세서는 별도의 코어에서 여러 명령을 병렬로 실행할 수 있다. 멀티코어 프로세서의 주요 단점은 높은 전력 소비와 낮은 처리량이다.
처리 아키텍처(processing architecture)의 다른 예는 그래픽 처리 유닛(GPU)이다. GPU는 여러 작업을 동시에 처리하도록 설계된 수천개의 더 작고 효율적인 코어로 구성된 병렬 아키텍처를 기반으로 한다. GPU는 딥러닝, 그래픽 렌더링 및 기계 학습 어플리케이션의 컴퓨팅 작업을 가속화하는데 사용될 수 있다. GPU의 주요 단점은 높은 전력 소비와 대기시간이다. 또한, GPU는 메모리 일관성(memory coherency)을 가지지 않아 공유 메모리는 도전(challenge)을 포함한다.
따라서, 전술한 결함을 극복하는 처리 아키텍처를 제공하는 것이 유리할 것이다.
본 개시의 몇몇 예시적인 실시예들의 요약이 아래와 같다. 이 요약은 그러한 실시예들의 기본적인 이해를 제공하기 위해 독자의 편의를 위해 제공되며, 본 개시의 폭을 완전히 정의하지는 않는다. 이 요약은 모든 고려되는 실시예들의 포괄적인 개요가 아니며, 모든 실시예들의 핵심 또는 중요 요소들을 식별하거나 임의의 또는 모든 양상들의 범위를 설명하기 위한 것이 아니다. 그 유리한 목적은 하나 이상의 실시예의 일부 개념을 이후에 제시되는 보다 상세한 설명의 서두로서 단순화된 형태로 제시하는 것이다. 편의상 용어 “일부 실시예”는 본 개시의 단일 실시예 또는 다수의 실시예를 지칭하기 위해 본 명세서에서 사용될 수 있다.
개시된 실시예들의 다양한 양상들은 설정가능한(configurable) 처리 아키텍처의 런타임 최적화를 위한 방법을 포함한다. 상기 방법은 적어도 하나의 함수를 수행하기 위한 복수의 호출을 수행하는 단계; 상기 복수의 호출 중 적어도 하나의 패턴을 식별하는 단계; 및 상기 적어도 하나의 패턴에 기초하여 적어도 하나의 함수를 계산하기 위해 설정가능한 처리 아키텍처의 적어도 일부를 조종하는 단계(manipulating);를 포함한다.
개시된 실시예들의 다양한 양상들은 설정가능한 처리 아키텍처를 더 포함한다. 시스템은 컴퓨팅 그리드; 처리 유닛; 상기 처리 회로에 연결된 메모리를 포함하고, 상기 메모리는 상기 처리 유닛에 의해 실행될 때, 적어도 하나의 함수를 실행하기 위한 복수의 호출을 수신하고, 복수의 호출들 중 적어도 하나의 패턴을 식별하고, 그리고 적어도 하나의 패턴에 기초하여 적어도 하나의 함수를 계산하기 위해 설정가능한 처리 아키텍처에서 컴퓨팅 그리드를 조종하여 적어도 하나의 함수를 계산하도록 구성된다.
본 명세서에 개시된 특허 대상은 본 명세서의 결론에서 청구 범위에서 특히 지적되고 명백하게 청구된다. 본 발명의 앞서 말한 및 다른 목적, 특징 및 장점은 첨부된 도면과 함께 다음의 상세한 설명으로부터 명백해질 것이다.
도 1a는 일 실시예에 따른 설정가능한 처리 아키텍처의 개략도이다.
도 1b는 일 실시예에 따른 설정가능한 처리 아키텍처의 컴퓨팅 그리드의 개략도이다.
도 2a 내지 도 2d는 일 실시예에 따른 각각의 패턴 식별(identification) 및 함수의 구성을 도시하는 개략적인 시뮬레이션이다.
도 3은 일 실시예에 따른 설정 가능한 하드웨어의 런타임의 최적화의 흐름도이다.
본 명세서에 개시된 실시예는 본 명세서의 혁신적인 교시의 많은 이점의 용도의 예일뿐임에 주목하는 것이 중요하다. 일반적으로, 본 출원의 명세서에서 이루어진 설명(statements)은 반드시 청구된 다양한 실시예들 중 임의의 것을 제한하지 않는다. 또한, 일부 설명은 일부 독창적인 특징이 될 수 있지만 다른 것에는 적용되지 않을 수 있다. 일반적으로, 달리 지시되지 않는 한, 단수 요소는 복수성을 가질 수 있고, 그 반대도 일반성을 잃지 않을 수 있다. 도면에서, 유사한 참조 번호는 여러 도면을 통해 유사한 부분을 지칭한다.
도 1a는 일 실시예에 따른 설정가능한 처리 아키텍처 100의 예시적인 개략도를 도시한다. 처리 아키텍처 100는 컴퓨팅 그리드 110 및 프로그램 메모리102 와 같은 메모리에 연결된 처리 유닛(회로) 101을 포함한다.
처리 유닛101은 컴퓨팅 그리드 상에서 프로그램 코드의 일부의 실행을 최적화하기 위한 프로세스를 실행하도록 구성된다. A프로그램 코드의 일부는 함수, 기본 블록(basic-block) 또는 둘다(통칭하여 함수이라고 함)를 포함할 수 있다. 기본 블록은 블록의 중간에 점프하지 않도록 연속 명령이 있는 프로그램 코드이다.
일 실시예에서, 설정가능한 처리 아키텍처100은 계산 장치의 동작을 가속화하도록 구성된다. 예를 들어, 이러한 장치는 멀티코어 CPU(중앙 처리 장치,), FPGA (field-programmable gate array), 그래픽 처리 유닛 (graphics processing unit, GPU), ASIC (application-specific integrated circuit), 양자 컴퓨터, 광학 컴퓨팅, 신경망 가속기 또는 이들의 조합을 포함할 수 있다.
개시된 실시예에 따르면, 가속은 예를 들어 계산 장치(도시되지 않음) 대신에 컴퓨팅 그리드 상에서 함수를 실행함으로써 달성된다. 컴퓨팅 그리드110는 도 1b를 참조하여 이하에 더 논의된 바와 같이 로직 요소 및 멀티플렉서(MUX)의 어레이를 포함한다.
컴퓨팅 그리드110에 의한 함수의 실행은 투영(projection) 그래프를 사용하여 함수를 계산 그룹에 투영함으로써(projecting) 수행된다. 계산 그룹은 그리드110에서 MUX를 통해 연결된 로직 요소의 집합이다. 그리드 110에서 로직 요소를 정확하게 할당하고 선택함으로써, 최적화된 함수의 실행이 달성될 수 있다.
구체적으로, 컴퓨팅 그리드110는 처리 유닛101에 의해 그리드110의 동작을 최적화하도록 부분적으로 구성된다. 이러한 부분에서, 처리 유닛101은 다수의 최적화 프로세스를 수행한다.
일 실시예에서, 처리 유닛101은 계산 장치에서 계산 요소에 의해 실행되는 함수에 대한 복수의 호출을 수신하도록 구성된다. 호출은 복수의 상이한 함수, 동일한 함수 또는 둘 다(both);, 메모리의 다른 부분, 메모리의 동일한 부분 또는 둘다; 기타 등등의 요인일 수 있다. 함수는 산술, 로직 연산 또는 둘 다를 포함하지만, 이에 제한되지 않는 계산 연산을 수행할 수 있다.
처리 유닛101은 복수의 수신된 호출들 중 적어도 하나의 패턴을 식별하도록 구성된다. 다른 실시예에 따르면, 식별은 외부 프로세서에 의해 수행될 수 있고, 그 후 처리 유닛101으로 전달될 수 있다. 일 실시예에서, 패턴은 소정의 기설정된 임계값 초과와 관련하여 둘 이상의 함수의 발생이다. 임계값은 특정 함수 기타 등등의 재발생에 대한 특정 통계 분석에 기초하여 시간에 따라 동적으로 변경될 수 있다. 즉, 예를 들어 2개의 함수가 상대적으로 빈번하게 순차적으로 실행될 때, 2개의 함수 사이의 연관의 패턴이 결정된다.
결정된 패턴에 기초하여, 처리 유닛101은 함수의 실행을 최적화하기 위해 컴퓨팅 그리드110를 구성하거나 또는 그렇지 않으면 조종한다. 함수의 조종은 복제, 확장, 수축, 인라인, 변형 또는 이들의 조합 등을 포함하지만 이에 제한되지 않는 다수의 프로세스를 통해 달성될 수 있다.
예시적인 실시예에서, 재배치 프로세스를 수행할 때, 처리 유닛101은 종종 서로를 호출하는 2개의 계산 그룹이 그리드110에서 서로 위상적으로(topologically) 인접하게 할당되도록 컴퓨팅 그리드110를 설정한다(configure).
다른 실시예에서, 처리 유닛101은 종종 사용되는 한 세트의 계산 그룹이 다수의 인스턴스(instance)에 복제되도록 컴퓨팅 그리드110를 설정한다. 다른 실시예에서, 계산 그룹은 새로 복제된 계산 그룹 사이에서 부하 밸런스(load-balance)를 호출한다.
또 다른 실시예에서, 인라인(in-lining) 프로세스를 수행할 때, 처리 유닛101은 서로를 종종 호출하는 2개의 로직 계산 그룹이 2개의 로직 계산 그룹을 결합하는 단일 로직 계산 그룹으로서 구성되고 재구성되도록 컴퓨팅 그리드110를 설정한다.
또 다른 실시예에서, 확장 프로세스를 수행할 때, 처리 유닛101은 분기 및 루프를 포함하는 로직 계산 그룹이 인라인 및 재배치 프로세스를 사용하여 펴진(unrolled) 루프로 재구성되도록 컴퓨팅 그리드110를 설정한다.
또 다른 실시예에서, 축소 프로세스를 수행할 때, 처리 유닛101은 더 이상 최적화된 실행을 제공하지 않는 복제 또는 확대된 계산 그룹이 재구성되도록 컴퓨팅 그리드110를 설정한다. 수축 계산 그룹의 호출자는 다른 계산 그룹을 참조한다. 참조가 없으면, 계산 그룹은 재구성될 수 있다. 즉, 해당 계산 그룹과 연관된 자원이 해제될 수 있다.
처리 유닛101은 전력 소비, 메모리 액세스(access), 응답 속도(latency), 게이트 사용 카운트 및 처리량 중 적어도 하나에 대한 요구에 따른 더나은 성능을 달성하도록 컴퓨팅 그리드110를 설정한다는 점에 유의해야 한다.
처리 유닛101은 하나 이상의 하드웨어 로직 구성요소 및 회로로 실현될 수 있다. 예를 들어, 제한 없이, 사용될 수 있는 예시적인 유형의 하드웨어 로직 구성요소는 범용 마이크로 프로세서, 마이크로 컨트롤러, 멀티 코어 CPU, FPGA, GPU, ASIC, 양자 프로세서, 광 컴퓨팅 프로세서, 신경망 가속기, CGRA (coarse-grained configurable architecture), 인텔리전트 처리 장치(intelligence processing unit) 등 또는 정보의 계산 및 기타 조종을 수행할 수 있는 기타 하드웨어 로직 구성요소를 포함할 수 있다. 일부 실시예에서, 가속될 타겟 계산 장치는 처리 유닛101으로서 기능한다.
일부 실시예에서, 메모리 결합된(bound) 함수를 포함하는 임계 코드 조각의 분석이 수행된다. 이러한 함수들은 계산 장치의 메모리에 근접하여 재배치된 계산 그룹에 매핑된다. 이러한 분석은 I/O 관련 작업에도 적용할 수 있다. 예를 들어, 네트워크 포트, 스토리지(storage), PCI-e, 비디오 센서 등의 작업이 있다.
이제 도 1b를 참조하면, 예시적인 구현에서 컴퓨팅 그리드110는 복수의 로직 요소120(통칭하여 LE 또는 개별적으로 LE로 지칭됨)를 포함한다. 일 실시예에서, LE 120는 AND, OR, NOT, XOR 또는 이들의 조합과 같은 로직 연산자일 수 있다. 또 다른 실시예에서 LE120는 룩업 테이블(LUT) 동작을 수행하도록 구성될 수 있다. 또 다른 실시예에서, LE 120는 고정 소수점 또는 부동 소수점 숫자 덧셈, 뺄셈, 곱셈, 나눗셈, 지수 등과 같은 높은 수준의 산술 함수를 수행하도록 구성될 수 있다. 또 다른 실시예에서, LE 120는 왼쪽 시프트, 오른쪽 시프트 등과 같은 시프트 동작을 수행할 수 있다.
컴퓨팅 그리드110 내의 각각의 LE 120는 전술한 임의의 동작 함수로 구성될 수 있음에 유의해야 한다. 일부 구성에서, 제1 그룹의 LE 120는 제1 동작(예를 들어, 로직 연산자)을 수행할 수 있고, 제2 그룹의 LE 120는 다른 동작(예를 들어, 시프트 동작) 등을 수행할 수 있다. 특정 구성에서, 모든 LE 120는 동일한 동작 함수를 수행할 수 있다.
일 실시예에서, 컴퓨팅 그리드110는 멀티플레서, 디멀티플레서, 스위치 등(통칭하여 MUX 130 또는 개별적으로 MUX 130라고 함)과 같은 복수의 데이터 라우팅 접합(routing junctions)130을 더 포함한다. MUX 130는 LE 120와 데이터를 주고 받도록 구성된다.
컴퓨팅 그리드110는 복수의 계산 그룹으로 구성된다. 각각의 계산 그룹은 단일 MUX130를 통해 연결된 NXM(N-by-M) LE120를 포함한다. ’N’과 ‘M’의 값은 다르거나 같을 수 있는 정수이다. 일 실시예로, M은 N빼기 1과 동일하다(M=N-1) MUX 130는 컴퓨팅 그리드110에서 2개의 인접한 행으로부터 LE 120를 연결한다.
일 실시예에서, 각각의 MUX 130는 문자상의(literal) 값을 유지하기 위해 복수의 레지스터(도시되지 않음)를 포함한다. MUX 130는 또한, 조건(condition), 연결 테이블 및 수행될 동작의 코드로 구성된다. MUX 130는 버스(도시되지 않음)를 통해 처리 유닛101에 의해 구성된다.
다른 실시예에서, 컴퓨팅 그리드 110는 데이터 입력 메시 네트워크로서 기능하는 피더(feeders) Frs의 메시 네트워크를 포함한다. 피더 140는 LE 120에 의한 처리를 위해 입력(예를 들어, 함수 파라미터를 포함하지만 이에 제한되지 않음)을 공급하도록 구성된다. 실시예에서, 피더 140는 내부 칩 상호연결(ICIs)로서 실현된다.
컴퓨팅 그리드 110의 조종은 가속될 타겟 계산 장치의 동작과 동시에 실시간으로 수행된다는 것을 이해해야 한다. 일 실시예에 따르면, 조종은 하나 이상의 함수를 상이한 실행 장치로 이동시키는 것을 더 포함할 수 있다. 즉, 함수가 CPU에서 실행되기 위해 재배치되도록 가속기에서 함수가 필요하지 않다는 결정이 이루어질 수 있다.
LE 120, MUX 130 및 피더 140는 하드웨어, 소프트웨어, 펌웨어 또는 이들의 임의의 조합으로 구현될 수 있는 것이 추가로 이해되어야 한다. 예시적인 실시예에서, 컴퓨팅 그리드 110 (및 다양한 요소)는 반도체 장치로서 구현된다. 다른 실시예에서, 컴퓨팅 그리드 110는 부분적으로 반도체 장치로서, 그리고 부분적으로 소프트웨어, 펌웨어 또는 이들의 조합으로 구현된다. 예로서, 더 있는(likely) 또는 더 발생하도록 결정된 로직 경로는 반도체 장치 상에 구현될 수 있는 반면, 덜 또는 거의 발생하지 않는 것으로 결정된 로직 경로는 소프트웨어로 구현될 수 있다. 그러한 실시예는 동종의 구현에 의존하는 다른 실시예보다 더 낮은 전체 예상값 비용(costs), 예를 들어 런타임, 전력 소비 등에 도달할 수 있음을 유의해야 한다. 로직 경로는 처리 유닛101 또는 컴퓨팅 그리드 110에서 전용(dedicated) 하드웨어 요소에 의해 검출될 수 있다.
도 2a 및 2b는 일 실시예에 따른 특정 함수들의 재배치에 대한 시물레이션들 200A 및 200B 각각의 예시들이다. 재배치 프로세스는 컴퓨팅 그리드의 구성 또는 조종을 포함하여, 종종 서로 호출하는 2개의 논리적 계산 그룹(예를 들어, 기본 블록 또는 함수)이 컴퓨팅 그리드에서 서로 물리적으로 가깝게 위치될 수 있다.
도 2a 및 2b에서 도시된 예시적인 시뮬레이션에서, 컴퓨팅 그리드 210는 복수의 LE 220-1 내지 220-N을 갖는 것으로 도시되며, 여기서 N은 1이상의 정수이다(도면을 단순화하기 위해 MUX는 그리드 210에 포함되지 않음) 계산 그룹은 투영 그래프에 기초하여 각각의 LE 220에 매핑되거나 투영된다. LE 220-1, 220-2 및 220-3을 포함하는 계산 그룹이 LE 220-4, 220-5 및 220-6를 포함하는 계산 그룹과 연관되어 있음을 식별하면, LE 220-1, 220-2 및 220-3을 포함하는 계산 그룹이 도 2b에 도시된 바와 같이 LE 220-4, 220-5 및 220-6을 포함하는 계산 그룹에 근접하여 재배치된다.
도 2c 및 2d는 각각이 특정 함수의 복제에 대한 예시적인 시뮬레이션 200C 및 200D이다. 복제 프로세스는 종종 호출되는 계산 그룹들에 매핑된 LE 220가 계산 속도를 높이고 병목현상을 개방하기 위해 그리드 210 상에 여러 번 복제되도록 컴퓨팅 그리드를 구성하는 것을 포함한다.
예시적인 실시예에서, 복제 프로세스는 예를 들어 호출자가 모든 복제를 균등하게 호출하도록 호출자 참조를 기존 블록에 대해 재구성함으로써, 새로 복제된 인스턴스(instances)에 대한 부하 밸런싱(load balancing) 프로세스를 더 포함할 수 있다. 다른 예로, 호출자 참조는 부하가 복제(duplications)를 밸런싱하는 새로운 설정가능한 MUX로 재구성된다.
빈번하게 호출되는 함수의 계산 그룹을 복제함으로써 컴퓨팅 그리드 210는 최적될 수 있다고 결정될 때, 각각의 그룹은 복제되고 기존 그룹으로부터 멀리 재배치된다. 도 2c 및 2d에 도시된 예에서, LE 220-4, 220-5 및 220-6을 포함하는 계산 그룹이 복제된다. 복제된 그룹은 그러한 함수에 대한 호출을 향상시키기 위해 컴퓨팅 그리드 210 상에 기존 그룹의 LE로부터 멀리 떨어져 있다. 이는 도 2c에 도시된 배열과 비교하여 복제된 그룹을 포함하는 도 2d에서 설명된다. 복제된 그룹은 다른 그룹에 비해 덜 호출되는 함수의 그룹을 대체할 수 있다. 대안적으로, 복제된 로직 계산 요소가 성능에 필요하지 않은 것으로 식별되어 그리드로부터 제거될 때, 조종은 수축, 또는 중복 제거 프로세스를 포함할 수 있다.
도 3은 일 실시예에 따른 설정가능한 처리 아키텍처에서 동작 가능한 컴퓨팅 그리드의 런타임 최적화 방법을 도시한 흐름도 300를 도시한다. S310에서, 적어도 하나의 함수를 실행하기 위한 복수의 요청이 수신된다. 요청은 동작을 수행하기 위해 인터페이스를 통해 수신된 호출일 수 있다. 예로서, 요청된 동작은 예를 들어 프로그램 메모리(예를 들어, 프로그램 메모리 102, 도 1b)로부터의 메모리 로드일 수 있다.
S320에서, 둘 이상의 시스템 호출들 중 적어도 하나의 패턴이 식별되는지를 검사하기 위해 수신된 시스템 호출이 분석된다. 식별은 순차적으로 수신된 호출 또는 순차적으로 수신되지 않은 호출일 수 있다. 예를 들어, 패턴은 두 함수가 차례로 수행됨을 나타낼 수 있다. 그러한 패턴이 식별되면, 실행은 s310으로 계속된다; 그렇지 않으면 실행은 S310으로 돌아간다.
S330에서, 식별된 패턴은 컴퓨팅 그리드의 변형 또는 재구성이 요구되는지를 결정하기 위해 분석된다. 예를 들어, 분석은 패턴에 표시된 함수를 실행하기 위해 이미 할당된 계산 그룹이 그리드에 존재하는지를 결정하는 것을 포함할 수 있다. 다른 예로서, 분석은 패턴이 함수의 재발생을 나타내는지를 결정하는 것을 포함할 수 있다. 다른 예로서, 분석은 패턴이 함수가 다른 함수를 호출한다는 것을 나타내는지 결정할 수 있다.
S340에서, 분석에 기초하여 컴퓨팅 그리드의 조종이 필요한지 여부가 검사된다. 그렇다면, 실행은 S350으로 계속된다; 그렇지 않으면 S360으로 실행이 계속된다.
S350에서, 컴퓨팅 그리드는 수신된 호출에 의해 호출된 함수를 최적하도록 변형되거나 그렇기 않으면 재구성된다. 컴퓨팅 그리드의 변형 또는 재구성의 일부로서 수행될 수 있는 프로세서의 다양한 예가 상술된다.
S360에서, 추가 요청이 수신되었는지를 검사하고, 그렇다면 S310으로 실행이 계속되고, 그렇지 않다면 실행이 종료된다.
본 명세서에서 개시된 실시예는 하드웨어, 펌웨어, 소프트웨어 또는 이들의 임의의 조합으로 구현될 수 있다. 어플리케이션 프로그램은 임의의 적합한 아키텍처를 포함하는 머신에 의해 업로드되고 머신에 의해 실행될 수 있다. 바람직하게, 머신은 하나 이상의 중앙 처리 장치(CPU)와 같은 하드웨어, 메모리 및 입력/출력 인터페이스를 갖는 컴퓨터 플랫폼에서 구현된다.
컴퓨터 플랫폼은 또한 운영 체제 및 마이크로 명령 코드를 포함할 수 있다. 본 명세서에 기술된 다양한 프로세스 및 함수는 이러한 컴퓨터 또는 프로세서가 명시적으로 도시되어 있는지 여부에 관계없이 마이크로 명령 코드의 일부 또는 어플리케이션의 일부 또는 CPU에 의해 실행될 수 있는 이들의 임의의 조합일 수 있다.
또한, 추가적인 네트워크 패브릭(fabric) 스토리지(storage) 유닛 및 인쇄 유닛과 같은 다양한 다른 주위의 유닛이 컴퓨터 플랫폼에 연결될 수 있다. 또한, 비일시적 컴퓨터 판독 가능한 매체(non-transitory computer readable medium)는 일시적 전파 신호(transitory propagating signal)를 제외한 임의의 컴퓨터 판독 가능 매체이다.
본 명세서에 인용된 모든 예 및 한정적 언어는 독자가 본 발명의 원리 및 본 발명자가 분야를 발전시키는데 기여한 개념을 이해하는 것을 돕기 위해 교육학적 목적을 위해 의도된 것이며, 구체적으로 인용된 예와 조건과 같은 제한되지 않는 것으로 해석되어야 한다.
”제1(first)”, “제2(second)” 등과 같은 명칭을 사용하는 본 명세서의 구성요소에 대한 임의의 참조는 일반적으로 이들 구성요소의 수량 또는 순서를 제한하지 않는다는 것을 이해해야 한다. 오히려, 이들 지정은 일반적으로 본 명세서에서 일반적으로 둘 이상의 구성요소 또는 요소의 예(instances)를 구별하는 편리한 방법으로 사용된다. 따라서, 제1 및 제2 구성요소에 대한 참조가 단지 2개의 구성요소만이 이용될 수 있다거나, 어떤 방식으로 제1 구성요소가 제2 구성요소보다 선행해야 한다는 것을 의미하지 않는다. 또한, 달리 언급하지 않는 한, 구성요소 세트는 하나 이상의 구성요소를 포함한다.
본 명세서에서 사용된 바와 같이, “적어도 하나”라는 문구 다음에 항목(item)의 리스팅은 열거된 항목 중 임의의 것이 개별적으로 이용될 수 있거나, 또는 나열된 항목 중 둘 이상의 조합이 이용될 수 있음을 의미한다. 예를 들어, 시스템이 “ A, B 및 C 중 적어도 하나”를 포함하는 것으로 기술된 경우, 시스템은 A만을 포함할 수 있고; B 단독; C단독; A와 B의 조합; B와 C의 조합;A와 C의 조합 또는 A, B 및 C의 조합을 포함할 수 있다.

Claims (22)

  1. 데이터 입력 메시 네트워크(140), 복수의 논리 요소(120) 및 복수의 멀티플렉서(130)를 포함하는 적어도 하나의 계산 장치에 연결된 컴퓨팅 그리드(110); 및
    복수의 구성 상호작용(configuration iterations) 각각에서 프로그램 코드의 복수의 부분(portions) 중 적어도 일부를 실행하도록 상기 컴퓨팅 그리드를 구성하도록 구성된 적어도 하나의 처리 회로(101)를 포함하고,
    상기 복수의 논리 요소 및 상기 복수의 멀티플렉서는 복수의 계산 그룹을 형성하고, 상기 복수의 논리 요소 중 적어도 하나 및 상기 복수의 멀티플렉서 중 적어도 하나는 상기 복수의 계산 그룹 각각을 형성하고,
    상기 적어도 하나의 처리회로는 하기의 기능을 수행한다:
    상기 프로그램 코드의 복수의 부분 중 2 이상의 부분을 포함하는 적어도 하나의 프로그램 코드 패턴에 액세스하고(S330), 각 패턴은 소프트웨어 프로그램을 실행할 때 프로그램 코드의 각각 2개 이상의 부분이 발생하는 연관성을 나타내고,
    상기 적어도 하나의 프로그램 코드 패턴에 따라 프로그램 코드의 각각의 2 이상의 부분 중 적어도 일부를 각각 실행하도록 상기 복수의 계산 그룹 중 적어도 일부를 구성하는(S350), 그리고
    상기 적어도 하나의 계산 장치 대신에 상기 컴퓨팅 그리드에 의해 적어도 하나의 프로그램 코드 패턴을 계산하는,
    적어도 하나의 계산(computational) 장치에 의해 프로그램 코드의 복수 부분(portions)를 포함하는 소프트웨어 프로그램을 실행하기 위한 시스템.
  2. 제1항에 있어서,
    상기 컴퓨팅 그리드가 상기 프로그램 코드의 복수의 부분으로부터 선택된 프로그램 코드의 부분들의 제2 세트를 실행하는 동안, 상기 적어도 하나의 계산 장치에 의해 소프트웨어 프로그램을 실행하는 것은 계산 장치에 의해 프로그램 코드의 복수의 부분들로부터 선택된 프로그램 코드의 부분들의 제1 세트를 실행하는 것을 포함하는,
    적어도 하나의 계산(computational) 장치에 의해 프로그램 코드의 복수 부분(portions)를 포함하는 소프트웨어 프로그램을 실행하기 위한 시스템.
  3. 제1항에 있어서,
    상기 적어도 하나의 처리 회로는 다음 중 적어도 하나를 수행하도록 구성된다:
    상기 복수의 구성 상호작용 중 적어도 하나에서 적어도 하나의 다른 처리 회로로부터 적어도 하나의 프로그램 코드 패턴을 수신하는 것, 그리고
    복수의 구성 상호작용 중 적어도 하나의 다른 상호작용에서 하기에 의해 적어도 하나의 프로그램 코드 패턴을 계산하는 것:
    상기 프로그램 코드의 복수의 부분 중 하나를 실행하기 위해 복수의 호출을 수신하는 것(S310), 및 상기 복수의 호출에서 상기 적어도 하나의 프로그램 코드 패턴을 식별하는 것을 포함하는,
    적어도 하나의 계산(computational) 장치에 의해 프로그램 코드의 복수 부분(portions)를 포함하는 소프트웨어 프로그램을 실행하기 위한 시스템.
  4. 제3항에 있어서,
    상기 적어도 하나의 프로그램 코드 패턴은 다음 중 적어도 하나를 포함하는:
    상기 복수의 호출에서 발생의 제1 빈도는 프로그램 코드의 제1 부분 및 프로그램 코드의 제2 부분 중 차례로 미리 결정된 임계 주파수를 초과하며, 프로그램 코드의 각각의 2개 이상의 제1 코드 부분 및 코드의 각각의 2개 이상의 부분의 코드의 제2 부분을 갖는 제1 프로그램 코드 패턴과,
    복수의 호출에서 코드의 제4 부분을 호출하는 코드의 제3 부분의 제2 주파수는 미리 결정된 임계 주파수를 초과하며, 프로그램 코드의 각각의 2개 이상의 부분의 코드의 제3 부분 및 코드의 각각의 2개 이상의 부분의 코드의 제4 부분을 갖는 제2 프로그램 코드 패턴과, 그리고
    각각이 프로그램 코드의 각각의 2개 이상의 부분의 코드의 제5 부분을 갖는 제3 코드 패턴 및 제4 코드 패턴인,
    적어도 하나의 계산(computational) 장치에 의해 프로그램 코드의 복수 부분(portions)를 포함하는 소프트웨어 프로그램을 실행하기 위한 시스템.
  5. 제4항에 있어서,
    상기 복수의 계산 그룹 중 적어도 일부를 구성하는 것은,
    복수의 계산 그룹 중 적어도 하나의 제1 계산 그룹을 구성하는 제1 프로그램 코드 패턴이 프로그램 코드의 제1 부분을 실행하게하고,
    여기서 적어도 하나의 제1 계산 그룹은 프로그램 코드의 제2 부분을 실행하도록 구성된 적어도 하나의 제2 계산 그룹에 토폴로지 근접(topological proximity)으로 적어도 하나의 컴퓨팅 그리드에 위치하는,
    적어도 하나의 계산(computational) 장치에 의해 프로그램 코드의 복수 부분(portions)를 포함하는 소프트웨어 프로그램을 실행하기 위한 시스템.
  6. 제4항에 있어서,
    복수의 계산 그룹 중 적어도 일부를 구성하는 것은,
    제2 프로그램 코드 패턴이 프로그램 코드의 제3 부분을 실행하기 위해 복수의 계산 그룹 중 적어도 하나의 제3 계산 그룹을 구성하는 것을 포함하고,
    여기서 적어도 하나의 제3 계산 그룹은 프로그램 코드의 제4 부분을 실행하도록 구성된 적어도 하나의 제4 계산 그룹에 토폴로지 근접(topological proximity)으로 적어도 하나의 컴퓨팅 그리드에 위치하는,
    적어도 하나의 계산(computational) 장치에 의해 프로그램 코드의 복수 부분(portions)를 포함하는 소프트웨어 프로그램을 실행하기 위한 시스템.
  7. 제4항에 있어서,
    상기 복수의 계산 그룹 중 적어도 일부를 구성하는 것은 프로그램 코드의 제5 부분을 실행하기 위해 복수의 계산 그룹 중 적어도 2개의 계산 그룹을 구성하는 것을 포함하는,
    적어도 하나의 계산(computational) 장치에 의해 프로그램 코드의 복수 부분(portions)를 포함하는 소프트웨어 프로그램을 실행하기 위한 시스템.
  8. 제1항에 있어서,
    상기 복수의 계산 그룹 중 적어도 일부를 구성하는 것은 적어도 하나의 프로그램 코드 패턴 중 적어도 하나가 아래의 것을 실행하는:
    프로그램 코드의 각각의 2개 이상의 부분 중 하나의 적어도 일부를 실행하도록 각각 구성된 복수의 계산 그룹 중 2개 이상을 식별하는 것,
    적어도 2개의 다른 계산 그룹이 서로 토폴로지 근접으로 컴퓨팅 그리드에 위치하도록 복수의 계산 그룹 중 적어도 2개의 다른 계산 그룹을 선택하는 것, 그리고
    적어도 2 개의 계산 그룹이 실행하도록 구성된 프로그램 코드의 각각의 2개 이상의 부분 중 적어도 하나의 적어도 일부를 실행하도록 적어도 2개의 다른 계산 그룹의 각각을 구성하는 것을 포함하는,
    적어도 하나의 계산(computational) 장치에 의해 프로그램 코드의 복수 부분(portions)를 포함하는 소프트웨어 프로그램을 실행하기 위한 시스템.
  9. 제1항에 있어서,
    복수의 계산 그룹 중 적어도 일부를 구성하는 것은 적어도 하나의 프로그램 코드 패턴 중 적어도 하나가 아래의 것을 실행하는:
    프로그램 코드의 각각의 2 이상의 부분 중 프로그램 코드의 제1 부분을 실행하도록 구성된 복수의 계산 그룹 중 적어도 하나의 제1 복수의 계산 그룹을 식별하는 것, 그리고
    프로그램 코드의 각가의 2 이상의 부분 중 프로그램 코드의 제2 부분을 실행하도록 복수의 계산 그룹 중 적어도 하나의 제2 계산 그룹을 구성하는 것이고,
    여기서 적어도 하나의 제2 복수의 계산 그룹이 적어도 하나의 제1 계산 그룹에 토폴로지 근접으로 컴퓨팅 그리드에 위치하는,
    적어도 하나의 계산(computational) 장치에 의해 프로그램 코드의 복수 부분(portions)를 포함하는 소프트웨어 프로그램을 실행하기 위한 시스템.
  10. 제1항에 있어서,
    상기 복수의 계산 그룹 중 적어도 일부를 구성하는 것은 아래의 것을 포함하는:
    상기 복수의 계산 그룹 중 임의의 다른 그룹에 의해 액세스되지 않고, 상기 계산 장치에 의해 액세스되지 않은 복수의 계산 그룹 중 적어도 하나의 계산 그룹을 릴리즈하는 것인,
    적어도 하나의 계산(computational) 장치에 의해 프로그램 코드의 복수 부분(portions)를 포함하는 소프트웨어 프로그램을 실행하기 위한 시스템.
  11. 제1항에 있어서,
    상기 적어도 하나의 처리는 상기 소프트웨어 프로그램이 상기 적어도 하나의 계산 장치 및 컴퓨팅 그리드에 의해 실행되는 동안 컴퓨팅 그리드를 구성하도록 구성되는,
    적어도 하나의 계산(computational) 장치에 의해 프로그램 코드의 복수 부분(portions)를 포함하는 소프트웨어 프로그램을 실행하기 위한 시스템.
  12. 제1항에 있어서,
    상기 적어도 하나의 계산 장치는 멀티 코어 중앙 처리 장치 (CPU), FPGA (Field-Programmable Gate Array), GPU (Graphics Processing Unit), CGRA (Coarse-Graned Configurable Architecture), IPU (Intelligent Processing Unit), 신경- 네트워크 가속기, ASIC (application-specific integrated circuit) 및 양자 컴퓨터 중 어느 하나인,
    적어도 하나의 계산(computational) 장치에 의해 프로그램 코드의 복수 부분(portions)를 포함하는 소프트웨어 프로그램을 실행하기 위한 시스템.
  13. 프로그램 코드의 복수의 부분들 중 적어도 일부를 실행하도록 데이터 입력 메시 네트워크(140), 복수의 논리 요소(120) 및 복수의 멀티플렉서(130)를 포함하는 컴퓨팅 그리드의 적어도 일부를 구성하는 단계;를 포함하고,
    상기 복수의 논리 요소 및 상기 복수의 멀티플렉서는 복수의 계산 그룹을 형성하고, 상기 복수의 논리 요소 중 적어도 하나 및 상기 복수의 멀티플렉서 중 적어도 하나는 상기 복수의 계산 그룹 각각을 형성하고,
    상기 컴퓨팅 그리드의 적어도 일부를 구성하는 단계는 아래의 복수의 구성 상호 작용(configuration iterations)에서:
    상기 프로그램 코드의 복수의 부분 중 2 이상의 부분을 포함하는 적어도 하나의 프로그램 코드 패턴에 액세스하는 단계(S330);
    상기 적어도 하나의 프로그램 코드 패턴에 따라 프로그램 코드의 각각의 2 이상의 부분 중 적어도 일부를 각각 실행하도록 상기 복수의 계산 그룹 중 적어도 일부를 구성하는 단계(S350), 그리고
    상기 적어도 하나의 계산 장치 대신에 상기 컴퓨팅 그리드에 의해 적어도 하나의 프로그램 코드 패턴을 계산하는 단계;를 포함하고,
    상기 각 패턴은 소프트웨어 프로그램을 실행할 때 프로그램 코드의 각각 2개 이상의 부분이 발생하는 연관성을 나타내고,
    적어도 하나의 계산(computational) 장치에 의해 프로그램 코드의 복수 부분(portions)를 포함하는 소프트웨어 프로그램을 실행하기 위한 방법.
  14. 다음을 포함하는 프로세스:
    프로그램 코드의 복수의 부분들 중 적어도 일부를 실행하도록 데이터 입력 메시 네트워크(140), 복수의 논리 요소(120) 및 복수의 멀티플렉서(130)를 포함하는 컴퓨팅 그리드의 적어도 일부를 구성하는 것;을 포함하고,
    상기 복수의 논리 요소 및 상기 복수의 멀티플렉서는 복수의 계산 그룹을 형성하고, 상기 복수의 논리 요소 중 적어도 하나 및 상기 복수의 멀티플렉서 중 적어도 하나는 상기 복수의 계산 그룹 각각을 형성하고,
    상기 컴퓨팅 그리드의 적어도 일부를 구성하는 것은 아래의 복수의 구성 상호 작용(configuration iterations)에서:
    상기 프로그램 코드의 복수의 부분 중 2 이상의 부분을 포함하는 적어도 하나의 프로그램 코드 패턴에 액세스하는 것(S330);
    상기 적어도 하나의 프로그램 코드 패턴에 따라 프로그램 코드의 각각의 2 이상의 부분 중 적어도 일부를 각각 실행하도록 상기 복수의 계산 그룹 중 적어도 일부를 구성하는 것(S350), 그리고
    상기 적어도 하나의 계산 장치 대신에 상기 컴퓨팅 그리드에 의해 적어도 하나의 프로그램 코드 패턴을 계산하는 것;을 포함하고,
    상기 각 패턴은 소프트웨어 프로그램을 실행할 때 프로그램 코드의 각각 2개 이상의 부분이 발생하는 연관성을 나타내고,
    적어도 하나의 계산(computational) 장치에 의해 프로그램 코드의 복수 부분(portions)를 포함하는 소프트웨어 프로그램을 실행하기 위한 프로세스를 처리 유닛이 실행하게 하기 위한 명령이 저장되어 있는 비일시적 컴퓨터 판독 가능매체.
  15. 삭제
  16. 삭제
  17. 삭제
  18. 삭제
  19. 삭제
  20. 삭제
  21. 삭제
  22. 삭제
KR1020207006247A 2017-08-03 2018-08-02 설정가능한 하드웨어 런타임 최적화 KR102668340B1 (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201762540849P 2017-08-03 2017-08-03
US62/540,849 2017-08-03
US201762558090P 2017-09-13 2017-09-13
US62/558,090 2017-09-13
PCT/US2018/045008 WO2019028253A1 (en) 2017-08-03 2018-08-02 EXECUTION OPTIMIZATION OF CONFIGURABLE EQUIPMENT

Publications (2)

Publication Number Publication Date
KR20200052277A KR20200052277A (ko) 2020-05-14
KR102668340B1 true KR102668340B1 (ko) 2024-05-22

Family

ID=

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002526826A (ja) 1998-09-30 2002-08-20 インフィネオン テクノロジース アクチエンゲゼルシャフト リコンフィギュレーション可能な回路を用いて個別アルゴリズムを実行するための方法およびこのような方法を実施するための装置
JP2009163328A (ja) 2007-12-28 2009-07-23 Toshiba Corp 情報処理装置及びその制御方法
US20120001371A1 (en) 2004-07-10 2012-01-05 Mann+Hummel Gmbh Method for Producing a Ceramic Filter Element

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002526826A (ja) 1998-09-30 2002-08-20 インフィネオン テクノロジース アクチエンゲゼルシャフト リコンフィギュレーション可能な回路を用いて個別アルゴリズムを実行するための方法およびこのような方法を実施するための装置
US20120001371A1 (en) 2004-07-10 2012-01-05 Mann+Hummel Gmbh Method for Producing a Ceramic Filter Element
JP2009163328A (ja) 2007-12-28 2009-07-23 Toshiba Corp 情報処理装置及びその制御方法

Similar Documents

Publication Publication Date Title
Dadu et al. Towards general purpose acceleration by exploiting common data-dependence forms
US11681650B2 (en) Execution engine for executing single assignment programs with affine dependencies
EP2710467B1 (en) Automatic kernel migration for heterogeneous cores
JP7245833B2 (ja) 構成可能なハードウェアの実行時の最適化
US20190250924A1 (en) Efficient work execution in a parallel computing system
KR102598173B1 (ko) 최적화된 딥 네트워크 처리를 위한 그래프 매칭
WO2022046570A1 (en) Vector processor architectures
US20120331278A1 (en) Branch removal by data shuffling
US10817344B2 (en) Directed and interconnected grid dataflow architecture
Halstead et al. Compiled multithreaded data paths on fpgas for dynamic workloads
CN115151898A (zh) 基于用户规范的可重配置架构上的操作单元图的高效执行
Tao et al. GPU accelerated sparse matrix‐vector multiplication and sparse matrix‐transpose vector multiplication
Halstead et al. Compiling irregular applications for reconfigurable systems
CN110799955A (zh) 具有预编程功能的高速计算机加速器
KR102668340B1 (ko) 설정가능한 하드웨어 런타임 최적화
US11276223B2 (en) Merged data path for triangle and box intersection test in ray tracing
KR100722428B1 (ko) 리소스 공유 및 파이프 라이닝 구성을 갖는 재구성가능배열구조
KR20240038109A (ko) 분산 레지스터 파일을 사용한 병렬 처리 아키텍처
KR20230082621A (ko) 얕은 파이프라인을 갖는 고도의 병렬 처리 아키텍처
Haas et al. Application-specific architectures for energy-efficient database query processing and optimization
Li et al. FPGA overlays: hardware-based computing for the masses
Lin et al. A software technique to enhance register utilization of convolutional neural networks on GPGPUs
US20240078212A1 (en) General-Purpose Systolic Array
Niu et al. Custom AI Streaming Accelerator Architecture
Xu et al. A hierarchically-controlled SIMD machine for 2D DCT on FPGAs