KR20230058621A - 메모리-한도 스케줄링 - Google Patents

메모리-한도 스케줄링 Download PDF

Info

Publication number
KR20230058621A
KR20230058621A KR1020237006310A KR20237006310A KR20230058621A KR 20230058621 A KR20230058621 A KR 20230058621A KR 1020237006310 A KR1020237006310 A KR 1020237006310A KR 20237006310 A KR20237006310 A KR 20237006310A KR 20230058621 A KR20230058621 A KR 20230058621A
Authority
KR
South Korea
Prior art keywords
node
nodes
dataflow graph
memory
topological ordering
Prior art date
Application number
KR1020237006310A
Other languages
English (en)
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 KR20230058621A publication Critical patent/KR20230058621A/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/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • 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/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/445Exploiting fine grain parallelism, i.e. parallelism at instruction level
    • 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/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/5038Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the execution order of a plurality of tasks, e.g. taking priority or time dependency constraints into consideration
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

본 개시내용의 특정의 양상들은 실행 스케줄들을 생성하기 위한 기법들을 제공하며, 그 기법들은 프로세스에 대한 데이터 흐름 그래프를 수신하는 것 ― 데이터 흐름 그래프는 복수의 노드들 및 복수의 에지들을 포함함 ―; 프로세스의 메모리 이용에 적어도 부분적으로 기초하여 데이터 흐름 그래프에 대한 토폴로지 순서정렬을 생성하는 것; 미리 정의된 메모리 용량에 기초하여 토폴로지 순서정렬에, 메모리 액세스에 대응하는 하나 이상의 새로운 노드들을 삽입함으로써 제1 수정된 토폴로지 순서정렬을 생성하는 것; 제1 수정된 토폴로지 순서정렬에 기초하여 메모리에 메모리의 유닛들을 배정하는 것; 및 제1 수정된 토폴로지 순서정렬에서 하나 이상의 노드들을 재배열함으로써 제2 수정된 토폴로지 순서정렬을 생성하는 것을 포함하며, 제2 수정된 토폴로지 순서정렬은 복수의 하드웨어 컴포넌트들의 증가된 병렬 이용을 가능하게 한다.

Description

메모리-한도 스케줄링
[0001] 본 출원은, 2020년 9월 1일에 출원된 미국 가특허 출원 번호 제63/073,269호에 대한 우선권 및 이익을 주장하는, 2021년 8월 31일에 출원된 미국 특허 출원 번호 제17/463,393호에 대한 우선권을 주장하며, 그 출원들 각각의 전체 내용들은 그 전체가 본원에 인용에 의해 통합된다.
[0001] 본 개시내용의 양상들은 컴퓨터 프로세서 동작 스케줄링, 특히, 메모리-한도 시스템들을 위한 향상된 동작 스케줄링에 관한 것이다.
[0002] 많은 종류의 컴퓨팅 프로세스들은 오늘날 다수의 별개의 동작들의 순차 또는 병렬 실행을 수반한다. 이들 동작들을 스케줄링하는 것은 (예를 들어, 특정의 동작들이 소정의 후속 동작들 이전에 완료되어야 하면) 데이터 의존성들을 고려해야 한다. 컴퓨팅 시스템들은 각각의 동작에 의한 실행에 필요한 연관된 데이터를 저장하기 위해 캐시들, TCM(tightly-coupled memory), 정적 랜덤-액세스 메모리(SRAM) 및 기타 등등과 같은, 빠른 액세스를 가진 메모리를 종종 이용한다. 그러나, 메모리-한도 시스템들에서는, 동작들의 전체 시퀀스 및 동반 데이터를 저장하기 위해 이들 빠른-액세스 메모리들에 공간이 불충분할 수도 있다.
[0003] 메모리-한도 시스템 상에서 이러한 프로세스들을 실행하는 것은 성능을 다양한 방법들로 감소시킬 수 있다. 일부 데이터가 전형적으로 캐시들과 같은 빠른-액세스 메모리에 저장될 수 있지만, 메모리-한도 시스템들은 종종 나머지 데이터를 저장하기 위해 더 크고 더 느린 메모리들에 의존해야 한다. 더 큰 호스트 메모리가 전형적으로 SRAM과 같은 빠른-액세스 메모리들보다 현저하게 더 많은 계산 비용을 초래하기 때문에, 프로세스의 실행을 향상시키기 위해 이러한 메모리 액세스들의 횟수를 감소시키는 것이 유용하다. 일반적으로, 호스트 메모리에 대한 액세스들은 전력 소비 및 레이턴시를 증가시키고 컴퓨터의 전체 대역폭을 감소시킨다. 따라서, 이러한 동작들을 스케줄링하는 중요한 양상은 더 느린 메모리(예를 들어, 호스트 프로세싱 시스템 동적 랜덤 액세스 메모리(DRAM))에 대한 메모리 액세스들의 감소이다.
[0004] 일부 기존 스케줄러들은 전력 소비, 레이턴시, 및 메모리 액세스들을 감소시키는 최적의 스케줄을 개발한다는 목적을 위해 그리디(greedy) 휴리스틱 및 로컬 최적화들을 이용한다. 다양한 접근법들이 상충적 목표들의 균형을 맞추기 위해 존재하지만, 이러한 접근법들은 본질적으로 컴퓨팅 프로세스 및 동작들의 글로벌 구조로 인해 발생하는 문제에 대한 로컬 및 차선의 해결책들이다.
[0005] 따라서, 요구되는 것은 컴퓨터 프로세싱을 좀 더 효율적으로 수행하기 위해 프로세스 스케줄링을 향상시키는 시스템들 및 방법들이다.
[0006] 특정의 실시예들은 실행 스케줄들을 생성하기 위한 방법을 제공하며, 방법은 프로세스에 대한 데이터 흐름 그래프를 수신하는 단계 ― 데이터 흐름 그래프는 복수의 노드들 및 복수의 에지들을 포함함 ―; 프로세스의 메모리 이용에 적어도 부분적으로 기초하여 데이터 흐름 그래프에 대한 토폴로지 순서정렬(topological ordering)을 생성하는 단계; 미리 정의된 메모리 용량에 기초하여 토폴로지 순서정렬에, 메모리 액세스에 대응하는 하나 이상의 새로운 노드들을 삽입함으로써 제1 수정된 토폴로지 순서정렬을 생성하는 단계; 제1 수정된 토폴로지 순서정렬에 기초하여 메모리에 메모리의 유닛들을 배정하는 단계; 및 제1 수정된 토폴로지 순서정렬에서 하나 이상의 노드들을 재배열함으로써 제2 수정된 토폴로지 순서정렬을 생성하는 단계를 포함하며, 제2 수정된 토폴로지 순서정렬은 복수의 하드웨어 컴포넌트들의 증가된 병렬 이용을 가능하게 한다.
[0007] 다른 양상들은 전술한 방법들뿐만 아니라 본원에서 설명되는 것들을 수행하도록 구성된 프로세싱 시스템들; 프로세싱 시스템의 하나 이상의 프로세서들에 의해 실행될 때, 프로세싱 시스템으로 하여금 전술한 방법들뿐만 아니라 본원에서 설명되는 것들을 수행하게 하는 명령들을 포함하는 비-일시적인 컴퓨터-판독가능 매체들; 전술한 방법들뿐만 아니라 본원에서 추가로 설명되는 것들을 수행하기 위한 코드를 포함하는 컴퓨터 판독가능 저장 매체 상에 구현된 컴퓨터 프로그램 제품; 및 전술한 방법들뿐만 아니라 본원에서 추가로 설명되는 것들을 수행하기 위한 수단을 포함하는 프로세싱 시스템을 제공한다.
[0008] 다음의 설명 및 관련 도면들은 하나 이상의 실시예들의 예시적인 특정의 특징들을 자세하게 개시한다.
[0009] 첨부된 도면들은 하나 이상의 실시예들의 특정의 양상들을 묘사하며, 따라서 본 개시내용의 범위의 제한으로 간주되어서는 안 된다.
[0010] 도 1은 프로세스의 효율적인 실행을 보장하기 위해 향상된 프로세스 스케줄링을 위한 작업흐름을 묘사한다.
[0011] 도 2a는 프로세스를 실행하는데 수반되는 일련의 동작들 및 대응하는 데이터 흐름을 예시하는 그래프를 묘사한다.
[0012] 도 2b는 수정된 그래프를 생성하기 위한 역방향 에지 수정을 묘사한다.
[0013] 도 2c 내지 도 2d는 노드들을 분리된 서브세트들로 파티셔닝하기 위한 그래프 상의 컷(cut)들을 묘사한다.
[0014] 도 2e는 수정된 그래프를 생성하기 위한 전체 연결 수정을 묘사한다.
[0015] 도 2f는 수정된 그래프를 생성하기 위한 배정해제 수정을 묘사한다.
[0016] 도 3a 내지 도 3d는 데이터 흐름 그래프의 유효한 토폴로지 순서정렬을 효율적으로 생성하여 대응하는 프로세스의 스케줄링을 향상시키기 위해 수행되는 평가들 및 동작들의 시퀀스를 묘사한다.
[0017] 도 4는 향상된 프로세스 스케줄링을 위한 방법을 예시하는 흐름도를 묘사한다.
[0018] 도 5는 본원에서 개시된 일부 실시예들에 따른, 메모리 배정들의 시각화를 묘사한다.
[0019] 도 6은 프로세스 스케줄링을 향상시키기 위해 토폴로지 순서정렬들을 생성하는 방법을 예시하는 흐름도를 묘사한다.
[0020] 도 7은 효율적인 프로세스 스케줄들을 생성하면서 토폴로지 유효성을 강화하는 방법을 예시하는 흐름도를 묘사한다.
[0021] 도 8은 효율적인 프로세스 스케줄들을 정확하게 생성하도록 병렬 데이터 흐름들을 처리하는 방법을 예시하는 흐름도를 묘사한다.
[0022] 도 9는 효율적인 프로세스 스케줄들을 산출하도록 토폴로지 순서정렬들을 생성하기 위해 데이터 흐름 그래프들을 분할하는 방법을 예시하는 흐름도를 묘사한다.
[0023] 도 10은 프로세스 스케줄링을 향상시키기 위해 토폴로지 순서정렬들을 생성하고 수정하는 방법을 예시하는 흐름도를 묘사한다.
[0024] 도 11은 본원에서 설명되는 방법들 중 적어도 일부를 수행하도록 구성될 수도 있는 예시적인 프로세싱 시스템을 묘사한다.
[0025] 도 12는 본원에서 설명되는 방법들 중 적어도 일부를 수행하도록 구성될 수도 있는 예시적인 프로세싱 시스템을 묘사한다.
[0026] 이해를 용이하게 하기 위해, 도면들에 공통인 동일한 엘리먼트들을 지정하기 위해, 가능한 한, 동일한 도면부호들이 사용되었다. 일 실시예의 엘리먼트들 및 특징들이 추가적인 설명 없이, 다른 실시예들에 유리하게 통합될 수도 있는 것으로 고려된다.
[0027] 본 개시내용의 양상들은 메모리 이용을 최소화하고 스케줄들을 실행하는 계산 효율을 향상시키기 위해 그래프 분석을 이용하여 더욱 효율적인 컴퓨터 프로세싱 동작 스케줄들을 생성하는 장치들, 방법들, 프로세싱 시스템들, 및 컴퓨터 판독가능 매체들을 제공한다.
[0028] 다수의 컴퓨팅 프로세스들의 실행은 그래프 내 각각의 노드가 수행될 특정의 동작에 대응하고 각각의 에지가 동작들 간 데이터의 흐름에 대응하는 그래프들을 이용하여 모델링될 수 있다.
[0029] 예를 들어, 신경망을 실행하기 위해, 데이터는 최종 출력을 생성하도록 프로세싱을 위해 임의 개수의 노드들 간에 흐를 수 있다. 본 개시내용의 실시예들에서, 컴퓨팅 프로세스들은 방향성 비순환 그래프(DAG)들로서 구성될 수 있다. DAG는 방향성 사이클들을 갖지 않는 방향 그래프(예를 들어, 방향성 에지들을 노드에서 노드로 따라가는 것이 폐 루프를 절대로 생성하지 않는, 노드들 및 방향성 에지들을 갖는 그래프)이다. 방향 그래프의 "소스"는 일반적으로 프로세스에 필요한 임의의 입력 데이터를 제공하는 (그래프의 제1 노드(들) 직전) 일부 업스트림 엔티티 또는 컴포넌트를 지칭할 수도 있으며, 반면 "목표(target)"는 프로세스로부터 임의의 출력을 수신하는 (최종 노드(들) 직후) 다운스트림 엔티티 또는 컴포넌트이다. 프로세스의 실행을 스케줄링하기 위해, 본 개시내용의 실시예들은 그래프에 기초하여 토폴로지 순서정렬(예를 들어, 노드들의 선형 순서정렬)을 생성할 수 있다. 일반적으로, 유효한 토폴로지 순서정렬은 생산자 노드들(예를 들어, 다운스트림 소비를 위해 일부 데이터를 생성하거나 아니면 출력하는 노드들)이 임의의 대응하는 소비자 노드들(예를 들어, 일부 업스트림 엔티티에 의해 생성된 데이터를 수신하거나, 그 데이터 상에서 동작하거나, 또는 아니면 그 데이터에 의존하는 노드들)이 실행을 시작하기 전에 스케줄링되고 실행되도록, 보장해야 한다. 즉, 제1 노드(생산자)에서 제2 노드(소비자)까지 방향성 에지가 있으면, 제1 노드는 토폴로지 순서정렬에서 제2 노드 이전에 나타나야 한다. 특히, 주어진 노드는 (하나 이상의 다운스트림 노드들에 대한) 생산자 및 (하나 이상의 업스트림 노드들에 대해) 소비자 둘 모두로서 역할을 할 수도 있다.
[0030] 종종 임의의 주어진 그래프에 대해 다수의 유효한 토폴로지 순서정렬들이 있다. 임의의 특정의 기준들 또는 특성을 최대화하기 위한 순서정렬을 찾는 것은 전형적으로 NP-난해(NP-hard)이다. 본 개시내용의 일부 실시예들에서, 토폴로지 순서정렬들은 스토리지 액세스들을 최소화하려고 시도하기 위해 생성된다. 이러한 스토리지 액세스들을 최소화함으로써, 스케줄이 감소된 레이턴시 및 전력 소비로 실행될 수 있다. 일 실시예에서, 그래프 내 각각의 노드는 제로 이상의 후속 노드들에 의해 소비되는 데이터를 출력할 수도 있다. 메모리 또는 스토리지는 일반적으로 데이터가 노드에 의해 생성될 때 배정(또는, 사용)되고, 오직 최종 소비자가 생성된 데이터에 대한 프로세싱을 완료할 때에만 해제된다(예를 들어, 메모리 공간이 이용 가능하게 된다). 따라서, 일부 실시예들에서, 가중된 방향 그래프가 노드 의존성들을 반영하기 위해 생성되며, 각각의 에지는 데이터에 의해 요구되는 메모리의 유닛들에 대응한다.
[0031] 예를 들어, 주어진(생산자) 노드가 4 킬로바이트의 데이터를 소비 노드로 출력하면, 이들 사이의 에지에는 4 킬로바이트의 가중치가 할당될 수도 있다. 이는 시스템이 임의의 주어진 실행의 스테이지에서 필요로 하는 전체 메모리를 정량화 가능하게 한다.
[0032] 본 개시내용의 실시예들은 적합한 에지 가중을 이용하여 그래프들을 생성 및 수정하여, 더 느린 저장 컴포넌트들에 대한 액세스들의 횟수를 감소시키기 위해 메모리 이용을 최소화하고자 하는 유효한 토폴로지 순서정렬을 산출하는 기법들을 제공한다. 추가적으로, 본 개시내용의 실시예들은 토폴로지 순서정렬들을 분석 및 수정하여 스케줄의 효율을 향상시키는 기법들을 제공한다.
[0033] 다양한 실시예들에서, 효율 이득들은 제한 없이, 감소된 전력 소비 및 레이턴시, 시스템의 증가된 처리량 등을 포함할 수 있다. 다양한 실시예들에서, 이들 스케줄링 향상들은 머신 학습 모델들의 실행을 포함하여, 매우 다양한 프로세서들 및 프로세스들의 동작들을 향상시키기 위해 적용될 수 있다.
그래프들 내 최소 컷들
[0034] 주어진 그래프의 경우, 컷은, 제거되는 경우, 그래프를 연결해제하는(예를 들어, 노드들을 2개의 분리된 서브세트들로 파티셔닝하는) 에지들의 세트이다. 본원에서 사용될 때, 최소 컷은 컷의 비용을 최소화하는 컷이다. 실시예들에서, 컷의 비용은 컷에 의해 절단 또는 제거되는 각각의 에지의 가중치들의 총합으로서 정의된다. 따라서, 최소 컷은 제거된 에지들의 총 가중치를 최소화하면서 그래프를 2개의 분리된 하위 그래프들로 완전히 분리하는 컷이다. 예를 들어, 그래프가 각각 10의 가중치를 갖는 2개의 에지들을 제거함으로써 파티셔닝되면, 컷의 비용은 20이다.
[0035] 방향 그래프의 경우, 주어진 컷의 비용은 각각의 제거된 에지의 방향성 및 컷의 방향성에 대해 부분적으로 결정될 수 있다. 일반적으로, 컷을 하나의 방향으로(예를 들어, 2차원 그래프의 경우, 좌측에서 우측으로) 교차하는 에지들은 컷의 비용을 계산할 때 포함되는 반면, 컷을 다른 방향으로 교차하는 에지들은 무시된다.
[0036] 최소 컷들의 컨셉에 대한 귀결은 최대 흐름이다. 최대-흐름 최소-컷 정리는 소스에서 목표까지 방향 그래프를 통과하는 흐름의 최대 양이 최소 컷의 전체 비용과 동일함을 말한다. 일 실시예들에서, 본원에서 개시된, 방향 그래프들의 에지들에는 에지를 가로질러 흐르는 데이터의 양에 기초하여 가중치들이 할당된다. 생산자 노드에 의해 생성되었지만 소비자 노드에 의해 아직 소비되지 않은 임의의 데이터는 "진행 중"으로 지칭될 수도 있으며, 메모리에 공간이 배정되어야 한다. 따라서, 그래프 내 에지들의 가중치들은 "진행 중"인 데이터의 양을 표시하며 따라서 생산자/소비자 세트에 대해 메모리에 배정된 공간을 가지고 있어야 한다. 따라서, 최대-흐름/최소-컷 정리 하에서, 최소 컷을 찾음으로써, "진행 중" 데이터의 최대 양이 결정될 수 있다. 즉, 최소 컷의 비용은 그래프에서 동작들을 실행하기 위해 한 번에 필요한 메모리의 최대 양이다.
컴퓨터 프로세스 스케줄링을 향상시키기 위한 예시적인 작업흐름
[0037] 도 1은 프로세스의 효율적인 실행을 보장하기 위해 향상된 프로세스 스케줄링을 위한 예시적인 작업흐름(100)을 묘사한다. 예시된 작업흐름(100)에서, 다양한 컴포넌트들이 개념적인 명료성을 위해 묘사된다. 다양한 실시예들에서, 그러나, 각각의 컴포넌트의 기능은 임의의 개수 및 종류의 컴포넌트들 전체에 걸쳐서 결합 또는 분산될 수도 있다. 추가적으로, 다양한 컴포넌트들 및 동작들이 반복을 포함하여(예를 들어, 주어진 컴포넌트는 작업흐름(100)에서 여러번 이용될 수도 있음), 임의의 순서로 수행될 수도 있다. 예시된 작업흐름(100)은 순서정렬 컴포넌트(110), 메모리 컴포넌트(120), 재순서정렬 컴포넌트(125), 및 배정 컴포넌트(130)를 포함한다. 이들 컴포넌트들의 각각은 일반적으로 범용 프로세서 상에서 소프트웨어 프로세스로서, 하드웨어를 이용하거나, 또는 하드웨어와 소프트웨어의 조합으로 구현될 수도 있다.
[0038] 예시된 바와 같이, 작업흐름(100)은 데이터 그래프(105)가 순서정렬 컴포넌트(110)에 의해 수신될 때 시작한다. 일 실시예에서, 데이터 그래프(105)는 주어진 프로세스를 달성하기 위한 데이터의 흐름을 반영하는 방향 그래프이다. 이러한 일 실시예에서, 데이터 그래프(105) 내 각각의 노드는 동작(예를 들어, 데이터의 변환)에 대응할 수도 있으며, 반면 각각의 에지는 동작들 사이에 전달되는 데이터에 대응할 수도 있다.
[0039] 예를 들어, 일 실시예에서, 프로세스는 인공 신경망 모델을 훈련하거나 또는 추론하는 것과 같은, 머신 학습 모델 태스크를 실행하는 것에 대응한다. 신경망들이 본원에서 설명되는 일부 예들에서 사용되지만, 본 개시내용의 실시예들은 임의의 데이터 프로세싱 동작에 용이하게 적용 가능하다.
[0040] 일 실시예에서, 데이터 그래프(105) 내 각각의 노드는 신경망 내 뉴런에 대응할 수도 있으며, 에지들은 이러한 뉴런들 사이의 연결들에 대응할 수도 있다. 신경망을 이용하여 모델 입력 데이터(예를 들어, 이미지 데이터, 사운드 데이터, 센서 데이트, 텍스트적인 데이터, 또는 다른 유형들의 데이터)를 프로세싱하기 위해, 뉴런들을 순차적으로, 병렬로, 또는 둘 모두로 파싱되고 프로세싱된다. 따라서, 일 실시예에서, 데이터 그래프(105)는 뉴런들 사이의 데이터의 흐름을 위한 대응하는 에지들을 갖는 노드들의 세트를 이용하여 이러한 동작들의 시퀀스를 반영한다.
[0041] 일부 실시예들에서, 데이터 그래프(105)의 에지들은 각각의 에지가 대응하는 데이터에 기초하여 가중된다. 일 실시예에서, 주어진 에지의 가중치는 신경망 내 대응하는 연결을 따라 송신되는 데이터의 양을 표시한다. 예를 들어, 제1 노드가 10 킬로바이트의 데이터를 제2 노드에 전달하면, 데이터 그래프(105) 내 대응하는 에지는 10 킬로바이트의 가중치를 가질 것이다. 이러한 방법으로, 데이터 그래프(105)는 실행 동안 임의의 주어진 지점에서 "진행 중"인 데이터의 양을 정량화한다. 실시예들에서, 데이터가 생성되거나 또는 발생될 때, 이를 저장할 공간이 메모리에 요구된다. 이 공간은 데이터의 최종 소비자가 그의 동작들을 종료할 때까지 해제되지 않는다. 따라서, 데이터 그래프(105)는 시작하였지만(예를 들어, 생산자가 출력 데이터를 가지고) 아직 종료되지 않은(예를 들어, 소비자(들)가 실행을 아직 종료되지 않은) 생산자-소비자 세트들을 식별함으로써, 임의의 주어진 실행 지점에서 필요한 메모리의 양을 정량화하기 위해 사용될 수 있다.
[0042] 도 1의 예시된 실시예에서, 순서정렬 컴포넌트(110)는 데이터 그래프(105)에 기초하여 토폴로지 순서정렬(115A)을 생성한다. 토폴로지 순서정렬(115A)은 일반적으로 그래프에 반영된 의존성들을 고려하는 동작들의 선형 시퀀스(예를 들어, 데이터 그래프(105)로부터의 노드들의 시퀀스)이다. 따라서, 데이터 그래프(105) 내 주어진 노드가 제2 노드 이전에 완료될 때, 주어진 노드는 토폴로지 순서정렬(115A)에서 제2 노드에 선행할 것이다. (표시된 시퀀스에서 각각의 노드를 실행하는) 토폴로지 순서정렬(115A)을 따라 진행함으로써, 원래 프로세스를 수행할 수 있다(예를 들어, 신경망 모델과 같은, 머신 학습 모델을 이용하여 데이터를 프로세싱함).
[0043] 위에서 설명한 바와 같이, 일부 실시예들에서, 시스템에서 이용 가능한 제한된 양의 로컬 및/또는 비교적 더 빠른 메모리가 있다(예를 들어, 공통 데이터 버스를 통해 데이터를 이동해야 하는 호스트 시스템 메모리보다 더 빠르게 액세스함). 예를 들어, TCM(tightly-coupled memory)는 프로세서에 밀접하게-커플링된 빠른, 로컬 메모리로서 역할을 할 수도 있다. 다양한 실시예들에서, 이 빠른 메모리는 캐시 공간, SRAM 등을 포함할 수도 있다. 이러한 메모리는 (프로세서(들)과의 그의 밀접한 커플링으로 인해) 빠르게 액세스될 수 있지만, 이러한 빠른 메모리의 사이즈는 프로세싱 시스템에 대한 물리적 제약들 및 다른 설계 고려사항들로 인해 종종 제한된다. 이에 반해, 상대적으로 대량의 스토리지 또는 메모리가 호스트 시스템 내 다른 어딘가에서(예를 들어, 전형적인 RAM, 하드 드라이브 또는 솔리드 스테이트 드라이브 디바이스들 등에서) 이용 가능할 수도 있다. 전형적인 컴퓨팅 동작들의 실행은 메모리 집약적일 수 있으며, 더 빠른 로컬 메모리에서 이용 가능한 공간을 초과할 수 있다. 따라서, 필요한 데이터를 빠른 로컬 메모리에 저장하는 것이 바람직하지만, 종종 (작은 사이즈로 인해) 이 데이터 모두를 동시에 저장하는 것이 불가능하며, 이는 호스트 시스템 메모리(예를 들어, DRAM)와 같은 원격 메모리들에 대한 의존을 필요로 한다.
[0044] 일 실시예에서, 토폴로지 순서정렬(115A)은 임의의 주어진 프로세스 지점에서 저장되는 데이터의 양을 감소시키도록 구성된다. 유익하게는, 이는 프로세스 동안 전체 메모리 이용, 레이턴시, 및 전력을 감소시킨다. 일부 실시예들에서, 순서정렬 컴포넌트(110)는 토폴로지 순서정렬(115A)을 생성하기 위해 최소 컷들의 세트를 생성하도록 구성된다.
[0045] 일반적으로, 최소 컷을 계산하는 것은 목표로부터 그래프의 소스를 연결해제하는 가장 작은 합계 에지 가중치들을 찾는 것을 포함한다. 위에서 설명한 바와 같이, 그래프(또는, 하위 그래프)의 소스는 입력을 그래프에 제공하는 노드 또는 컴포넌트이며, 반면 목표는 그래프를 횡단하는 데이터에 대한 최종 싱크(sink) 또는 목적지로서 역할을 하는 노드 또는 컴포넌트이다. 이러한 최소 컷들을 반복적으로 찾음으로써, 순서정렬 컴포넌트(110)는 토폴로지 순서정렬(115A)을 생성할 수 있다. 실시예들에서, 순서정렬 컴포넌트(110)는 Ford-Fulkerson 알고리즘, Edmonds-Karp 알고리즘 등을 포함하여, 최소 컷들을 찾는 임의 개수의 기법들을 이용할 수도 있다.
[0046] 예시된 작업흐름(100)에서, 토폴로지 순서정렬(115A)은 필요에 따라 메모리 동작들을 순서정렬에 삽입하는 메모리 컴포넌트(120)에 의해 수신된다. 일 실시예에서, 각각의 메모리 동작은 데이터의 하나 이상의 유닛들을 로컬 메모리(예를 들어, TCM)에서 원격 메모리 또는 스토리지(예를 들어, DRAM)로 이동시키는 것, 데이터의 하나 이상의 유닛들을 원격 메모리 또는 스토리지에서 로컬 메모리로 이동시키는 것, 또는 둘 모두에 대응한다. 일부 실시예들에서, 이러한 동작들은 "유출(spill)/채우기(fill)" 동작들로서 지칭될 수도 있다. 다시 말해서, 데이터는 로컬 메모리로부터 원격 메모리로 유출될 수도 있으며, 이후 원격 메모리로부터 로컬 메모리에 다시 채워질 수도 있다.
[0047] 일 실시예에서, 메모리 컴포넌트(120)는 토폴로지 순서정렬(115A)을 분석하여, 각각의 순서정렬 지점에서(예를 들어, 각각의 노드에서, 또는 각각의 순차적인 노드 사이에) 필요한 메모리의 양을 결정한다. 일부 실시예들에서, 이를 행하기 위해, 메모리 컴포넌트(120)는 각각의 지점에서 여전히 "진행 중"인(예를 들어, 생산자 노드를 떠났지만 소비자 노드에서 아직 종료되지 않은) 모든 에지들의 합계 가중치를 결정한다.
[0048] 로컬 메모리에서 가용 공간을 초과하는 임의의 지점들에 대해, 메모리 컴포넌트(120)는 일부 데이터를 더 빠른 메모리로부터 원격 메모리로 이동시키기 위해 하나 이상의 메모리 동작들을 삽입한다. 이러한 방법으로, 메모리 컴포넌트(120)는 수정된 토폴로지 순서정렬(115B)을 생성하는데, 이는 제로 이상의 메모리 동작들이 삽입된 원래 토폴로지 순서정렬(115A)이다. 여기서, 일부 데이터 그래프들(105)(예를 들어, 로컬 메모리보다 작거나 또는 동일한 메모리 공간을 필요로 하는 것들)이 원격 메모리에 대한 임의의 메모리 동작들을 필요로 하지 않기 때문에 제로 이상이다.
[0049] 예시된 실시예에서, 이 수정된 토폴로지 순서정렬(115B)이 이후 재순서정렬 컴포넌트(125)에 제공된다. 일 실시예에서, 재순서정렬 컴포넌트(125)는 실행 시에 병렬 프로세싱에 대한 가능성을 향상시키기 위한 노력으로 (데이터 의존성들을 고려하면서) 수정된 토폴로지 순서정렬(115B)에서 노드들을 이동시킬 수 있다. 일 실시예에서, 데이터 의존성들을 고려하는 것은 어떤 소비자 노드도 수정된 토폴로지 순서정렬(115B)에서 그의 생산자들 중 임의의 생산자 전에 배치되지 않도록 보장하는 것을 포함한다. 예를 들어, 소비자가 그의 생산자 직후에 배치되면, 소비자는 순서정렬 이전에 이동될 수 없다. 하나 이상의 노드들이 토폴로지 순서정렬(115A)에서 소비자와 그의 생산자 사이에 로케이트되면, 소비자는 수정된 토폴로지 순서정렬(115B)을 생성하기 위해 순서정렬에서 더 일찍 이동될 수도 있다.
[0050] 예를 들어, 일 실시예에서, 재순서정렬 컴포넌트(125)는 직접 메모리 액세스(DMA) 동작들을 순서정렬에서 앞선 위치들로 이동시켜 그 동작들이 백그라운드에서 발생가능하게 할 수 있으며, 동작들의 실행이 하나 이상의 다른 프로세싱 유닛들 상에 계속되는 동안 하나 이상의 프로세싱 유닛들에 의해 수행된다. 즉, (예를 들어, 다음 노드에 의해) 데이터가 필요하기 직전에 DMA를 개시하는 대신, 충분한 공간이 로컬 메모리에서 이용 가능하면, 재순서정렬 컴포넌트(125)는 데이터를 필요하기 전에 메모리에 로딩하기 시작할 수 있도록 DMA 동작을 더 일찍 이동시킬 수도 있다. 이는 하드웨어 컴포넌트들의 병렬 이용을 증가시킨다(예를 들어, 하나의 프로세싱 유닛이 데이터를 로딩하는 동안, 다른 프로세싱 유닛들은 다른 데이터에 대해 계속 동작할 수도 있다).
[0051] 다른 예로서, 재순서정렬 컴포넌트(125)는 별개의 하드웨어 프로세싱 유닛들 상에서 병렬 실행을 향상시키기 위해 노드들의 순서정렬을 수정할 수 있다. 일부 실시예들에서, 시스템은 다수의 프로세싱 유닛들(예를 들어, 하나 이상 중앙 처리 유닛(CPU)들, 하나 이상의 그래픽 프로세싱 유닛(GPU)들, 하나 이상의 머신 학습 액셀러레이터들, 예컨대 신경 프로세싱 유닛(NPU)들 등)을 포함할 수 있다. 이러한 일 실시예에서, 재순서정렬 컴포넌트(125)는 수정된 토폴로지 순서정렬(115B)을 추가로 수정하여, 일부 동작들이 별개의 프로세싱 유닛들 상에서 병렬로 수행될 수 있도록 할 수도 있다. 이는 제2 수정된 토폴로지 순서정렬(115C)을 초래한다.
[0052] 예시된 작업흐름(100)에서, 배정 컴포넌트(130)는 이후 수정된 토폴로지 순서정렬(115C)을 프로세싱하여 프로세싱 스케줄(135)을 생성한다. (프로세싱 스케줄(135)의 생성을 초래하는) 작업흐름(100)에서 최종 프로세싱 단계로서 사용되는 것으로 묘사되지만, 일부 실시예들에서, 배정 컴포넌트(130)는 다른 작업흐름들의 상이한 단계들에서 이용될 수도 있다. 추가적으로, 일부 실시예들에서, 하나 이상의 추가적인 프로세스들이 배정 컴포넌트(130) 이후에 적용될 수도 있다.
[0053] 예를 들어, 일부 실시예들에서, 메모리 컴포넌트(120)는 배정 컴포넌트(130)가 동작하기 전에 메모리 동작들을 삽입할 수 있다. 일부 실시예들에서, 그러나, 하나 이상의 메모리 동작들이 삽입되어야 하는 것은 단지 배정 동안만이다. 이러한 일 실시예에서, 따라서, 메모리 컴포넌트(120)는 배정이 수행된 후에 순서정렬을 분석(또는, 재분석)할 수도 있다.
[0054] 일 실시예에서, 배정 컴포넌트(130)는 토폴로지 순서정렬(115C)에 기초하여 (예를 들어, TCM에서) 메모리의 유닛들을 배정한다. 실시예들에서, 위에서 설명한 바와 같이, 데이터 그래프(105) 및 토폴로지 순서정렬들(115) 각각은 입력 데이터를 이용하여 출력 데이터를 생성하는 동작들의 컬렉션을 포함한다. 이 데이터는 사용하는 동안 작업 메모리를 필요로 한다. 로컬 메모리 공간이 제한될 수도 있기 때문에, 일부 실시예들에서, 일부 메모리 로케이션들은 재사용되어야 한다. 이는 데이터의 일부 유닛들이 단지 프로세스의 일부 서브세트에 대해서만 필요하기 때문에 가능하다. 예를 들어, 데이터가 생산자 노드에 의해 생성되어 소비자 노드에 의해 소비되면, 데이터는 단지 생산의 시간에서 소비의 시간까지만 저장되어야 한다. 따라서, 각각의 생산자-소비자 세트는 생산자 노드에서 시작하고 (최종) 소비자 노드에서 종료하는 토폴로지 순서정렬(115C)의 부분을 포괄한다. 배정 컴포넌트(130)는 해당 순서정렬 지점에서 "라이브"인 데이터에 대해 각각의 시점에서 메모리에 물리적 로케이션들을 배정할 수도 있다.
[0055] 실시예들에서, 프로세싱 스케줄(135)은 이후 원래 프로세스를 수행하기 위해, 도 10 및 도 11과 관련하여 설명된 바와 같은 프로세싱 시스템의 하나 이상의 프로세싱 유닛들에 의해 실행될 수 있다.
컴퓨터 프로세스 스케줄링을 향상시키기 위한 예시적인 그래프 수정들
[0056] 도 2a는 프로세스를 실행하는데 수반되는 일련의 동작들 및 대응하는 데이터 흐름들을 포함하는 예시적인 그래프(200A)를 묘사한다. 예를 들어, 프로세스는 머신 학습 모델에 기초하여 훈련하거나 또는 추론하는 것과 같은, 머신 학습 태스크를 포함할 수도 있다.
[0057] 예시된 실시예에서, 데이터는 노드들(210)의 세트를 통해서 소스(205)로부터 목표(215)까지 흐른다. 실시예들에서, 각각의 노드(210)는 유입하는 데이터에 대해 수학적 연산, 변환 등과 같은, 일부 동작을 수행한다. 또, 각각의 노드(210)는 일부 데이터를 출력할 수도 있거나 또는 출력하지 않을 수도 있다. 예시된 실시예에서, 각각의 에지는 지향된다(화살표의 방향으로 표시됨). 따라서, 각각의 에지는 생산자 노드에서 소비자 노드까지 흐르는 데이터에 대응한다. 묘사된 그래프(200A)에서, 노드(210A)는 소스(205)로부터 데이터의 2개의 유닛들을 수신하고, 일부 동작을 수신하고, 데이터의 4개의 유닛들을 노드(210B)로 그리고 노드(210C)로 출력한다. 노드(210B)는 데이터를 출력하지 않으며 따라서 데이터 싱크 또는 리프 노드로서 지칭될 수도 있다.
[0058] 예시된 바와 같이, 노드(210C)는 데이터의 4개의 유닛들을 수신하고 데이터의 하나의 유닛을 노드(210E)로 출력한다. 예를 들어, 노드(210C)는 콘볼루션 계층 또는 풀링 계층과 같이, 데이터가 압축되는 머신 학습 모델에서 계층 동작을 수행할 수도 있다.
[0059] 노드(210E)는 추가적으로 데이터의 5개의 유닛들을 노드(210D)로부터 수신한다. 이 입력에 기초하여, 노드(210E)는 데이터의 4개의 유닛들을 목표(215)로 출력한다. 따라서, 예시된 실시예에서, 노드(210A)는 2개의 소비자들: 노드들(210B 및 210C)에 대한 "생산자" 노드이다. 노드(210C)는 소비자 노드(210E)에 대한 생산자이다. 노드(210D)는 또한 소비자 노드(210E)에 대한 생산자이다. 결국, 노드(210E)는 목표(215)에 대한 생산자이다.
[0060] 그래프(200A)가 개념적인 명료성을 위해 간단한 예시적인 프로세스를 묘사하지만, 다양한 실시예들에서, 그래프들은 휠씬 더 복잡할 수도 있다.
[0061] 특히, 주어진 그래프에 대한 모든 최소 컷들의 세트들이 유효한 순서정렬을 산출하는 것은 아니다. 예를 들어, 최소 컷들의 세트는 (에지들의 방향에 의해 표시되는) 데이터 의존성들을 고려하지 않는 순서정렬을 생성할 수도 있다. 이와 유사하게, 주어진 생산자가 다수의 소비자들을 가질 때, 단지 최종으로 완료하는 노드만이 배정된 데이터를 해제할 수 있다. 이들 문제들을 해결하기 위해, 사전-프로세싱 동작들의 세트가 토폴로지 순서정렬을 생성하기 전에 도 2a의 그래프(200A)를 수정된 표현으로 변환하도록 수행될 수 있다.
[0062] 도 2b는 수정된 그래프(200B)를 생성하기 위한 역방향 에지 수정을 묘사한다. 예시된 실시예에서, 이 수정은 그래프(200A)를 변환함으로써 수행된다. 일 실시예에서, 수정은 도 1의 순서정렬 컴포넌트(110)에 의해 수행된다. 이 그래프(200B)는 컷들이 유효한 토폴로지 순서정렬을 산출하도록 보장하기 위해 삽입된 하나 이상의 새로운 에지들을 갖는다. 위에서 설명한 바와 같이, 최소 컷의 컨셉은 데이터 의존성들을 고려하지 않으며, 유효한 토폴로지 순서정렬을 반드시 초래하지는 않을 것이다(예를 들어, 컷의 관점에서, 에지가 역방향으로(예를 들어, 우측에서 좌측으로) 교차하고 따라서 가중치가 컷의 비용에 포함되지 않도록, 컷이 에지를 절단하기 위해 뒤로 휘어질 수 있기 때문이다). 예시된 실시예에서, 그래프 내 각각의 에지에 대해, 대응하는 역방향들 또는 역방향 에지(216으로 라벨링됨)가 삽입되었다. 이는 파선 화살표들을 이용하여 도 2b에 예시된다. 일 실시예에서, 이들 역방향 에지들에는 이들이 도 2c 및 도 2d와 관련하여 아래에서 좀더 자세히 설명되는 바와 같이 후속 동작들 동안 절단되지 않도록 보장하는 가중치가 할당된다. 즉, 역방향 에지들은 사실상, 절단 불가능하여 데이터 의존성들을 고려하도록 컷을 강제한다. 예를 들어, 각각의 역방향들 에지에는 무한 가중치가 할당될 수도 있다.
[0063] 특정의 컷들이 알고리즘적으로 방지되도록 보장하기 위해 역방향 에지들이 "무한" 가중치들을 갖는 것으로 본원의 일부 예들에서 설명된다는 점에 유의한다. 일반적으로, 이러한 에지들은 임의로 높은 값들을 가질 수도 있다. 예를 들어, 진정한 무한 가중치가 물리적 하드웨어 및 소프트웨어의 한계들로 인해 작동하지 않을 수도 있기 때문에, 시스템은 시스템에 사용되는 임의의 실제 가중치를 현저하게 초과하는, 따라서, 임의로 높은 미리 정의된 값을 이용할 수도 있다. 일반적으로, 이 미리 정의된 값은 가장 비용이 많이 드는 최소 컷보다 더 크도록 선택될 수도 있으며, 이는 절단 이러한 높은 가중치를 절단하는 것만으로도 임의의 대안적인 유효한 컷보다 더 많은 패널티를 초래할 것이기 때문에, 컷에 포함되지 않도록 보장한다.
[0064] 일부 실시예들에서, 이 임의의 높은 미리 정의된 값은 합리적이거나 또는 실제적인 가중치들을 초과할 만큼 충분히 높도록, 그러나, 무한한 에지의 가중치를 다른 에지들의 가중치들에 가산하는 것이 가중치를 합리적인 가중치들의 영역으로 다시 가져올 수 있는 정수 오버플로우를 생성하지 않도록 충분히 낮게, 선택된다. 다른 실시예들에서, 역방향 에지들에 대한 임의의 높은 값은 그래프 내 정방향 에지들의 하나 이상의 값들에 기초하여, 예컨대 가장 큰 정방향 에지 가중치, 정방향 에지 가중치들의 평균 등에 기초하여 설정될 수도 있으며, 이러한 참조 값들은 임의로 높아지는 계수 또는 함수에 의해 수정될 수도 있다.
[0065] 도 2c 내지 도 2d는 노드들을 분리된 서브세트들로 파티셔닝하기 위한 그래프 상의 컷들을 묘사한다.
[0066] 도 2c는 컷(217A)을 가진 그래프(200B)를 묘사한다. 실시예들에서, 최소 컷은 목표로부터 소스를 분리하기 위해 그래프에서 하나 이상의 에지들의 세트를 교차하는 방향성 라인으로서 개념화될 수 있다. 예시된 실시예에서, 컷(217A)은 페이지 전체에서 최하부에서 최상부까지 슬라이싱한다. 컷(217A)을 하나의 방향으로(예를 들어, 예시된 실시예에서 컷의 좌측에서 우측으로) 통과하는 각각의 에지에 대해, 에지의 가중치가 컷의 비용에 추가된다. 다른 방향으로(예시된 실시예에서 컷의 우측에서 좌측으로) 통과하는 각각의 에지에 대해, 에지의 가중치가 무시된다.
[0067] 예시된 실시예에서, 노드(210D)에서 노드(210E)까지의 에지 및 노드(210C)에서 노드(210E)까지의 에지 둘 모두는 컷(217A)을 좌측에서 우측으로 동일한 방향으로 교차한다. 따라서 이들의 가중치들은 컷(217A)의 비용에 포함된다. 이에 반해, 노드(210E)에서 노드(210C)까지 그리고 노드(210E)에서 노드(210D)까지의 2개의 역방향 에지들은 컷(217A)을 우측에서 좌측으로 교차하며, 이들의 가중치들은 따라서 무시된다. 따라서, 컷(217A)의 비용은 6이다.
[0068] 도 2d는 다른 컷(217B)을 묘사한다. 노드(210C)에서 노드(210E)까지의 에지는 컷(217B)을 좌측에서 우측으로 교차하며, 따라서 컷(217B)의 비용을 계산할 때 카운트된다. 노드(210E)에서 노드(210C)까지의 무한한 역방향 에지는 우측에서 좌측으로 교차하며, 따라서 무시된다. 예시된 바와 같이, 노드(210A)에서 노드(210C)까지의 에지는 컷(217B)을 컷(217B)의 우측에서 컷(217B)의 좌측으로(화살표 머리에 의해 표시되는, 컷(217B)의 방향에 기초하여 결정됨) 교차한다. 따라서, 이 에지가 무시된다. 이에 반해, 노드(210C)에서 노드(210A)까지의 무한한 역방향 에지는 컷(217B)을 컷(217B)의 좌측에서 컷(217B)의 우측으로 교차한다. 따라서, 이 에지의 (무한) 가중치가 컷(217B)의 비용에 포함된다. 이는 (원래 그래프의 토폴로지를 위반할 수도 있는) 컷(217B)에 무한한 비용을 제공하므로, 그래프(200B)를 파티셔닝하기 위해 사용되지 않도록 보장한다.
[0069] 따라서, 어떤 무한한 (또는, 높은 가중치) 에지들도 삽입되지 않으면, 최소 컷 기법들은 에지를 가로질러 "역방향으로" 절단하고 의존성들을 위반하는 그래프들을 초래할 수도 있다. 역방향 에지들을 삽입하는 것은 후속-생성된 컷들이 토폴로지를 위반하지 않도록 보장하며: 이러한 컷은 무한한 비용을 초래할 것이다.
[0070] 도 2e는 수정된 그래프(200C)를 생성하기 위한 전체 연결 수정을 묘사한다. 구체적으로 설명하면, 그래프(200C)는 그래프(200B)의 수정 버전을 반영하며, 추가적인 에지들이 최종 순서정렬의 토폴로지 유효성을 강화하기 위해 삽입된다. 유효한 토폴로지 순서정렬(또한, 토폴로지 유효성을 가진 순서정렬로도 지칭됨)은, 어떤 소비자 노드들도 이들의 생산자들 중 임의의 생산자 이전에 로케이트되지 않는다는 점에서, 그래프의 원래 의존성들을 고려하는 순서정렬이다. 예시된 실시예에서, 이 수정은 그래프(200C)에서 모든 노드(210)에서 목표(215)까지, 그리고 소스(205)에서 모든 노드(210)까지 경로가 있음을 보장하도록 수행된다. 이를 행하기 위해, 예시된 실시예에서, 제로-가중치 에지들이 삽입된다. 구체적으로 설명하면, 도 2b의 그래프(200B)에서, 소스(205)로부터 노드(210D)에 도달하는 경로가 존재하지 않는다. 대조적으로, 도 2e의 그래프(200C)에서, 제로-가중치 에지가 (예를 들어, 도 1의 순서정렬 컴포넌트(110)에 의해) 소스(205)로부터 노드(210D)에 직접 삽입되었으며, 대응하는 무한-가중치 역방향 에지가 추가되었다.
[0071] 이와 유사하게, 도 2b의 그래프(200B)에서 노드(210B)에서 목표(215)까지의 경로가 존재하지 않았다. 토폴로지 유효성을 보장하기 위해, 따라서, 순서정렬 컴포넌트(110)는 노드(210B)를 목표(215)에 (대응하는 무한 가중치 에지와 함께 역방향으로) 연결하는 제로-가중치 에지를 삽입하였다.
[0072] 도 2f는 수정된 그래프(200D)를 생성하기 위한 배정해제 수정을 묘사한다. 그래프(200D)는 도 2e의 그래프(200C)에 기초하며 다수의 소비자 노드들을 고려하도록 구성된다. 위에서 설명한 바와 같이, 생산자가 데이터를 하나 이상의 소비자들로 출력할 때, 해당 데이터는 소비자(들) 모두가 프로세싱하는 것을 종료할 때까지 저장되어야 한다. 단일 소비자가 생산자에 대해 존재하면, 데이터는 소비자가 완료하자 마자 배정해제될 수 있다. 그러나, 다수의 소비자들이 존재하면, 데이터는 모두가 이들의 동작들을 완료할 때까지 배정해제될 수 없다. 다수의 실시예들에서, 어떤 소비자가 마지막으로 완료할 지를 알기 어려울(또는, 불가능할) 수도 있다. 따라서, 예시된 실시예에서, 순서정렬 컴포넌트(110)는 필요에 따라 배정해제 노드들(220)을 생성하고 삽입한다. 실시예들에서, 배정해제 노드들(220)은 플레이스홀더 노드들(예를 들어, 임의의 데이터 동작들 또는 변환들을 수행하지 않으며 메모리 공간이 배정해제되거나 또는 해제될 수 있는 시기를 표시하기 위해 존재하는 노드들)이다.
[0073] 일 실시예에서, 순서정렬 컴포넌트(110)는 하나 초과의 소비자를 갖는 임의의 생산자 노드에 대해 배정해제 노드(220)를 삽입한다. 배정해제 노드들(220)이 해당 공간 내 데이터의 모든 소비자들이 완료될 때까지 로컬 메모리 내 공간이 배정해제되지 않도록 보장하기 위해 삽입된다. 생산자 노드가 단일 소비자를 가지면, 그래프(예를 들어, 생산자로부터 소비자까지의 에지)에 반영된 의존성은 소비자가 생산자 이후에 스케줄링되도록 보장하기에 충분하다. 생산자/소비자 세트에 필요한 공간이 일단 소비자가 완료하면 배정해제된다. 그러나, 다수의 소비자들이 주어진 생산자에 대해 존재하면, 마지막으로 완료하도록 하는 소비자들 사이에 의존성이 없으므로, 공간이 배정해제될 수 있는 시점을 알기 어렵다 알 수 없다. 공간이 조기에 배정해제되지 않도록 보장하기 위해서, 따라서, 배정해제 노드들(220)이 (모든 소비자들이 데이터에 대한 동작을 완료한 경우에만) 공간이 배정해제되어야 하는 시점을 시그널링하는데 사용된다.
[0074] 다른 실시예에서, 순서정렬 컴포넌트(110)는 소비자들의 개수에 관계없이, 모든 생산자에 대해 단순히 배정해제 노드를 삽입할 수 있다. 예시된 바와 같이, 주어진 생산자에 대해 배정해제 노드(220)를 삽입하는 것은 에지를 생산자의 각각의 소비자로부터 배정해제 노드(220)까지 삽입하는 것을 포함한다. 예시된 실시예에서, 따라서, 생산자 노드(210A)에 대해, 제로-가중치 에지들이 소비자들 노드(210B 및 210C)의 각각으로부터 배정해제 노드(220)까지 삽입된다. 위와 같이, 무한-가중치 역방향들 에지들이 또한 각각에 대해 추가된다. 이는 배정해제 노드(220)가 토폴로지 순서정렬에서 노드들(210B 및 210C) 둘 모두 후에 배치되도록, 그리고 공간이 둘 모두가 이들의 동작들을 완료할 때까지 배정해제되지 않도록, 보장한다.
[0075] 실시예들에서, 순서정렬 컴포넌트(110)는 또한 생산자 노드로부터 소비자들까지의 각각의 원래 에지의 가중치들을 제로로 설정한다. 예시된 실시예에서, 이는 에지들의 가중치들을 노드(210A 내지 210 B)로부터, 그리고 노드(210A 내지 210 C)로부터 제로로 변경하는 것을 포함한다. 이는 두 에지들이 이들의 원래 가중치를 보유하면, 이들 에지들 상에서 흐르는 데이터가 컴퓨팅 최소 컷들을 계산하는 동안 "이중 카운트되어", 최종 스케줄에서 부정확성들 및 비효율성들을 초래하기 때문에, 수행된다.
[0076] 이들 에지들의 가중치를 정량화하기 위해 그리고 이들이 최종 순서정렬에서 카운트되도록 보장하기 위해, 순서정렬 컴포넌트(110)는 에지를 생산자 노드(210A)로부터 배정해제 노드(220)까지 추가적으로 삽입할 수 있다. 이 에지에는 생산자로부터 소비자(들)까지 원래 에지들에 대응하는 가중치가 할당된다. 추가적으로, 예시된 바와 같이, 이 새로운 에지는 유사하게 토폴로지 유효성을 강화하기 위해 무한한 역방향들 에지를 동반한다.
[0077] 실시예들에서, 순서정렬 컴포넌트(110)는 이후 원래 그래프(200A)에 대해 유효한 토폴로지 순서정렬을 생성하기 위해 최대 흐름/최소 컷 기법들을 이용하여 그래프(200D)를 프로세싱할 수 있다. 추가적으로, (각각의 생산자/소비자 세트에 필요한 데이터의 양에 대응하는) 에지 가중치들을 이용함으로써, 최소 컷들이 메모리 이용에 기초하여 계산되며 실행의 각각의 스테이지에서 최소 양의 메모리를 사용하려고 시도한다.
컴퓨터 프로세스 스케줄링을 향상시키기 위한 예시적인 최소 컷 프로시저들
[0078] 도 3a 내지 도 3d는 대응하는 프로세스의 스케줄링을 향상시키기 위해 데이터 흐름 그래프의 유효한 토폴로지 순서정렬을 생성하도록 수행되는 평가들 및 동작들의 시퀀스를 묘사한다. 구체적으로 설명하면, 도 3a 내지 도 3d는 토폴로지 순서정렬을 생성하기 위해 순서정렬 컴포넌트(예컨대, 도 1의 순서정렬 컴포넌트(110))에 의해 계산되는 최소 컷들의 시퀀스를 묘사한다.
[0079] 도 3a는 컷들이 생성되기 이전 초기 그래프(300A)를 묘사한다. 예시된 그래프에서, 데이터는 노드들(310)의 세트를 통해서 소스(305A)로부터 목표(315A)까지 흐른다. 구체적으로 설명하면, 노드(310A)는 데이터를 소스(305A)로부터 수신하고 데이터를 노드들(310B 및 310C)로 송신한다. 결과적으로, 노드(310B)는 데이터를 노드(310D)에 제공하며, 노드(310C)는 데이터를 노드(310E)에 제공한다. 노드(310F)는 노드(310D) 및 노드(310E) 둘 모두로부터 데이터를 수신한다. 그런 다음, 노드(310F)는 데이터를 목표(315A)에 제공한다.
[0080] 도 3b는 그래프(300A) 내 제1 컷(317)을 묘사한다. 실시예들에서, 최소 컷 기법은 그래프에 대해 단일 컷을 산출한다. 토폴로지 순서정렬을 생성하기 위해, 순서정렬 컴포넌트는 주어진 컷에 대해 "인덱스 노드"로서 역할을 할 노드를 선택하고, 인덱스 노드 직후에 통과하도록 컷을 제한할 수 있다. 이는 순서정렬 컴포넌트가 컷이 배치되는 위치에 대해 일부 제어를 행하게 할 수 있으므로, 절단 프로세스의 효율성 및 레이턴시를 향상시키는 것을 도울 수 있다. 예를 들어, 컷들이 제한되지 않으면, 주어진 그래프에 대한 최소 컷은 그래프의 시작 또는 끝 근처의 단일 에지일 가능성이 높다. 그러나, 여기서, 그래프의 이 부분이 이미 선형이기 때문에, 절단은 토폴로지 순서정렬을 생성하는데 유용하지 않다. 즉, 단일 에지가 노드 A를 노드 B에 연결하면, 노드 A 이전에 노드 B를 배치하는 가능한 순서정렬이 없다. 따라서, 이 지점에서 컷을 생성하는 것은 쓸모가 없다.
[0081] 일부 실시예들에서, 컷을 인덱스 노드에 제한하기 위해, 순서정렬 컴포넌트(110)는 인덱스 노드를 선택하고, 컷을 계산하여 그래프를 2개의 서브-그래프들로 분할하고, 그리고 이후 각각의 서브-그래프를 프로세싱하여 각각에 대해 다른 컷을 계산한다. 각각의 서브-그래프를 반복적으로 프로세싱함으로써, 토폴로지 순서정렬이 생성된다. 실시예들에서, 토폴로지 순서정렬은 노드들의 선형 시퀀스이다. 주어진 그래프에 대해 다수의 유효한 토폴로지 순서정렬들이 있을 수도 있다. 각각의 하위 그래프를 반복적으로 프로세싱하여 각각을 추가적인 하위 그래프들로 세분화함으로써, 순서정렬 컴포넌트는 반복적으로 전체 그래프를 더욱 선형으로 만든다. 즉, 각각의 컷은 일부 노드들을 컷 이전에 그리고 일부 노드들을 이후에 배치함으로써 일부 선형성을 효과적으로 강화한다. 컷들을 반복적으로 계산함으로써, 그래프가 더욱 선형이 된다.
[0082] 일 실시예에서, 이 프로세스는 모든 하위 그래프들이 선형이 될 때까지(또는, 모든 하위 그래프들은 단일 노드를 포함할 때까지) 반복한다. 다른 실시예에서, 하위 그래프들이 선형이 될 때(또는, 단일 노드를 포함할 때)까지 컷들을 계산하는 대신, 프로세싱 시스템은 각각의 하위 그래프가 사이즈 또는 복잡성에 관련된 일부 미리 정의된 기준들(예를 들어, 하위 그래프 내 노드들의 수)에 도달할 때까지 진행할 수 있다. 이들 하위 그래프들은 이후 하위 그래프에 대해 토폴로지 순서정렬들을 생성하기 위해 하나 이상의 기법들을 이용하여 변환될 수도 있다.
[0083] 일 실시예에서, 최종 토폴로지 순서정렬은 각각의 하위 그래프를, 적합한 순서로 재연결함으로써 생성되며, 여기서, 컷들은 (예를 들어, 노드들의 선형 시퀀스를 유지하면서, 절단된 에지들을 추가하거나 또는 재연결함으로써) 이루어졌다.
[0084] 예시된 실시예에서, 순서정렬 컴포넌트(110)는 제1 컷(317)에 대해 인덱스 노드로서 역할을 하는 노드(310B)를 선택하였다. 일부 실시예들에서, 순서정렬 컴포넌트(110)는 인덱스 노드를 무작위로 선택한다. 적어도 일 실시예에서, 순서정렬 컴포넌트(110)는 각각의 노드의 깊이에 기초하여 그래프(300A)의 중심 근처에 있는 인덱스 노드를 선택하려고 시도한다.
[0085] 일 실시예에서, 순서정렬 컴포넌트(110)는 소스(305A) 및 목표(315A) 둘 모두로부터의 거리에 기초하여 각각의 개개의 노드(310)의 깊이를 결정한다. 예를 들어, 각각의 개개의 노드(310)에 대해, 순서정렬 컴포넌트(110)는 선행하는(예를 들어, 소스로부터 노드까지 얻기 위해 횡단되어야 하는) 노드들 또는 에지들의 개수 및 후속하는(예를 들어, 노드로부터 목표까지 얻기 위해 횡단되어야 하는) 노드들 또는 에지들의 개수를 카운트할 수도 있다. (예를 들어, 가산 또는 곱셈을 통해) 이들 카운트들을 합계함으로써, 순서정렬 컴포넌트(110)는 그래프(300A)의 중심에 가장 가깝게 로케이트된 노드(또는, 노드들의 세트)를 식별할 수 있다. 일 실시예에서, 소스 및 목표로부터 최고 합계 깊이를 가진 노드는 "도형 중심" 노드로서 지칭된다. 일반적으로 중심 근처에 위치되지만, 실시예들에서, 도형 중심 노드는 물론 그래프의 중앙에 정확하게 위치되지 않을 수도 있다.
[0086] 일 실시예에서, 다수의 노드들이 동일한 깊이 스코어를 가지면, 순서정렬 컴포넌트(110)는 인덱스 노드를 선택하기 위해 이들 중에서 무작위로 선택할 수 있다. 적어도 일 실시예에서, 2개의 노드들이 동일한 깊이에 있고 동일한 동작 유형을 가지면, 순서정렬 컴포넌트(110)는 이들을 형제 노드들로서 취급한다. 형제 노드들은 일반적으로 동일한 동작을 각각 수행하는 형제들의 세트로 분할된 단일 노드에 대응한다. 형제 노드들은 프로세싱 병렬성을 향상시키기 위해 생성될 수도 있다. 일 실시예에서, 이러한 형제들 중에서 선택하기 위해, 순서정렬 컴포넌트(110)는 형제들의 절반이 인덱스 노드가 실행되기 전에 완료되고 절반이 이후에 완료되도록, 형제들의 중간의 노드 이후 컷을 제한한다. 일 실시예에서, 중간 형제를 식별하기 위해, 순서정렬 컴포넌트는 그래프에서 하나의 에지 업스트림을 횡단하고, 이후 하나의 에지가 형제로 다시 내려간다. 이는 모든 형제들이 발견될 때까지 반복한다.
[0087] 전형적으로, 최소 컷 기법은 절단하는 에지들의 가중치를 최소화하는 로케이션에서 그래프(300A)를 이등분하도록 컷을 배치할 것이다. 컷이 선택된 인덱스 노드(예를 들어, 노드(310B)) 직후에 발생하도록 제한하기 위해, 순서정렬 컴포넌트(110)는 추가적인 에지들을 그래프에 추가할 수도 있다. 예시된 실시예에서, 순서정렬 컴포넌트(110)는 무한 가중치를 가진 에지를 소스(305A)로부터 인덱스 노드(310B)까지 추가한다. 순서정렬 컴포넌트(110)는 무한 가중치를 가진 에지를 인덱스 노드(예시된 실시예에서, 노드(310D))의 각각의 소비자로부터 목표(315A)까지 추가적으로 추가한다. 이는 계산된 컷이 인덱스 노드 직후 및 인덱스 노드의 임의의 소비자들 이후에 통과하도록 보장한다.
[0088] 예시된 실시예에서, 결과적인 컷(317)은 인덱스 노드(310B) 및 소비자 노드(310D)를 분리한다. 예시된 바와 같이, 그래프(300A)를 이등분하고 목표(315A)로부터 소스(305A)를 연결해제하기 위해, 컷(317)은 또한 노드(310A)와 노드(310C) 사이의 에지를 절단한다. 물론, 실시예들에서, 컷(317)은 대신에 노드(310C)와 노드(310E) 사이, 노드(310E)와 노드(310F) 사이, 또는 노드(310D)와 노드(310F) 사이(노드(310F)와 노드(315A) 사이의 에지를 통해 계속됨)를 절단할 수 있다.
[0089] 실시예들에서, 특정의 절단 경로(예를 들어, 절단하는 에지들)는 절단된 에지들의 합계/누적 가중치를 최소화하도록 선택된다. 컷(317)은 (순서정렬 컴포넌트(110)에 의해 추가된 에지들 때문에) 노드(310B)와 노드(310D) 사이의 에지를 분기해야 한다. 순서정렬 컴포넌트(110)는 이후 전체 비용을 최소화하면서 그래프(300A)를 완전히 분리하기 위해 필요에 따라 다른 에지(들)를 통해서 컷(317)을 라우팅할 것이다. 컷(317)이 에지를 통과할 때마다, 에지의 가중치가 컷의 전체 비용(또한, 패널티로도 지칭됨)에 추가된다. 특히, 컷(317)의 전체 비용은 컷의 대응하는 지점에서 메모리에 유지되는 데이터의 총량을 반영한다.
[0090] 컷(317)은 그래프(300A)의 일부 부분이 컷(317) 이전에 수행되고 일부 부분이 컷(317) 이후에 발생하도록, 그래프(300A)를 분기시킨다. 예시된 실시예에서, 노드들(310A 및 310B)은 (소스(305A)와 함께) 컷(317)에 선행하지만, 노드(310C) 내지 노드(310F)는 (목표(315A)와 함께) 후속한다.
[0091] 도 3c는 컷(317)의 결과를 묘사한다. 구체적으로 설명하면, 예시된 바와 같이, 컷(317)의 일 측면 상의 모든 엘리먼트들은 제1 하위 그래프(300B)에 배치된 반면, 다른 측면 상의 모든 엘리먼트들은 제2 하위 그래프(300C)에 속한다. 추가적으로, 예시된 바와 같이, 새로운 목표(315B)가 하위 그래프에 대해 새로운 목표를 제공하기 위해 하위 그래프(300B)에 삽입되었다. 일부 실시예들에서, 컷(317)에 의해 절단된 각각의 에지에 대해, 새로운 에지가 원래 그래프(300A)에서 의존성들을 보존하고 강화하기 위해 새로운 목표(315B)에 추가된다.
[0092] 이와 유사하게, 하위 그래프(300C)에서, 새로운 소스(305B)가 추가되었다. 추가적으로, 예시된 바와 같이, 컷(317)이 절단된 각각의 에지에 대해, 새로운 에지가 원래 그래프(300A)의 의존성들을 강화하기 위해 새로운 소스(305B)로부터 추가되었다.
[0093] 도 3d는 하위 그래프들(300B 및 300C)에 대해 순서정렬 컴포넌트(110)에 의해 각각 생성된 추가적인 컷들(320 및 325)을 묘사한다. 하위 그래프(300B)에서, 순서정렬 컴포넌트(110)는 노드(310A)를 인덱스 노드로서 선택하였다. 컷(320)이 이 노드(310A) 직후에 발생하도록 제한하기 위해서, 예시된 바와 같이, 순서정렬 컴포넌트(110)는 무한-가중치 에지들을 소스(305A)로부터 인덱스 노드(310A)까지, 그리고 인덱스 노드의 모든 소비자들로부터(예를 들어, 소비자 노드(310B)로부터) 새로운 목표(315B)까지 삽입한다.
[0094] 이와 유사하게, 하위 그래프(300C)에서, 순서정렬 컴포넌트(110)는 인덱스 노드로서 역할을 하는 노드(310E)를 선택하였다. 컷(325)을 제한하기 위해서, 순서정렬 컴포넌트(110)는 무한한 에지를 새로운 소스(305B)로부터 인덱스 노드(310E)까지, 그리고 무한한 에지를 인덱스 노드(여기서, 노드(310F))의 각각의 소비자로부터 목표(315A)까지 삽입하였다.
[0095] 위에서 설명한 바와 같이, 컷들(320 및 325)은 각각의 하위 그래프(300B 및 300C)를 2개의 새로운 하위 그래프들로 분기시킨다(총 4개의 하위 그래프들을 산출함). 일부 실시예들에서, 순서정렬 컴포넌트(110)는 일부 종료 기준들(예를 들어, 반복들의 최대 횟수, 또는 컷들을 찾는데 소비된 최대 시간)이 만족될 때까지 각각의 하위 그래프에 대해 유사한 프로세싱을 반복적으로 수행할 수 있다. 즉, 순서정렬 컴포넌트(110)는 컷을 계산하여 그래프를 2개의 하위 그래프들로 분할할 수도 있다. 각각의 하위 그래프에 대해, 순서정렬 컴포넌트(110)는 이후 다른 컷을 계산하여 각각의 하위 그래프를 2개의 더 많은 하위 그래프들로 분할할 수 있다(총 4개의 하위 그래프들을 산출함). 이들 4개의 하위 그래프들 각각에 대해, 순서정렬 컴포넌트(110)는 유사하게 컷을 계산하여 총 8개의 하위 그래프들을 산출할 수도 있다.
[0096] 일 실시예에서, 순서정렬 컴포넌트(110)는 각각의 하위 그래프의 사이즈에 기초하여 분할될 다음 하위 그래프를 선택한다. 도형 중심 노드를 선택하는 것이 하위 그래프들을 균형잡는 것을 도울 수 있지만, 결과적인 컷은 상당히 고르지 않을 수 있다(다른 측보다 일 측면 상에서 더 많은 노드들을 가짐). 일부 실시예들에서, 순서정렬 컴포넌트(110)는 다음 컷을 계산하기 위해 가용 하위 그래프들 중 가장 큰 하위 그래프를 선택한다. 이 반복 프로세스는 미리 정의된 기준들이 만족될 때까지 반복한다. 가장 큰 하위 그래프를 반복적으로 선택하여 절단함으로써, 순서정렬 컴포넌트는 최소 컷들을 먼저 더 조밀하거나 또는 더 복잡한 그래프의 영역들에서, 그 다음으로, 덜 조밀하거나 또는 복잡한 영역들에서 계산할 수 있다. 이는 좀더 효율적인 토폴로지 순서정렬을 초래하며, 컷들의 최종 세트를 찾는데 필요한 시간을 감소시킨다.
[0097] 일 실시예에서, 종료 기준들은 완전한 토폴로지 순서정렬과 관련된다. 예를 들어, 순서정렬 컴포넌트(110)는 주어진 하위 그래프 내 노드들이 선형이 될 때까지 각각의 하위 그래프를 반복적으로 계속 절단할 수도 있다. 하위 그래프가 선형일 때, 추가적인 컷들이 토폴로지 순서정렬을 산출하기 위해 요구되지 않는다. 모든 하위 그래프들이 선형이면, 이들은 이후 풀 토폴로지 순서정렬을 형성하기 위해 (예를 들어, 이들이 절단된 위치들에서 하위 그래프들을 함께 연결함으로써) 결합될 수도 있다. 일부 실시예들에서, 종료 기준들은 계산될 반복들 또는 컷들의 수를 포함할 수도 있다. 일단 반복들의 횟수에 도달하면, 프로세스가 중지된다. 일부 실시예들에서, 종료 기준들은 시간 한도(bound)를 포함한다. 미리 정의된 시간의 양이 소비될 때, 절단 프로세스가 중지된다.
프로세스 스케줄링을 위한 예시적인 방법
[0098] 도 4는 컴퓨터 프로세싱 동작들의 향상된 스케줄링을 위한 방법(400)을 예시하는 흐름도를 묘사한다. 일부 실시예들에서, 방법(400)은 순서정렬 컴포넌트(110), 메모리 컴포넌트(120), 재순서정렬 컴포넌트(125), 배정 컴포넌트(130) 등과 같은, 하나 이상의 컴포넌트들을 포함하는, 도 10과 관련하여 설명된 것과 같은 프로세싱 시스템에 의해 수행된다.
[0099] 방법(400)은 블록 405에서 시작하며, 여기서 데이터 흐름 그래프가 프로세싱을 위해 수신된다. 일 실시예에서, 위에서 설명한 바와 같이, 이 데이터 흐름 그래프는 일반적으로 일부 컴퓨팅 프로세스에 대응하며, 여기서, 각각의 노드는 프로세스 동안 수행되는 동작에 대응하고 각각의 (방향성) 에지는 프로세스의 데이터 흐름에 대응한다. 일부 실시예들에서, 데이터 흐름 그래프 내 각각의 에지의 가중치는 의존성을 따라 전달되고 따라서 메모리에 공간을 배정받도록 요구되는 데이터의 양에 대응한다.
[0100] 블록 410에서, 프로세싱 시스템은 수신된 데이터 흐름 그래프에 대해 토폴로지 순서정렬을 생성한다. 일 실시예에서, 이 프로세스는 도 2a 내지 도 2d 및 도 3a 내지 도 3d를 참조하여 위에서 예시 및 설명된 단계들 중 일부 또는 모두를 포함한다.
[0101] 방법(400)은 이후 블록 415로 진행하며, 여기서, 프로세싱 시스템은 메모리 내 (예를 들어, 로컬 메모리 내) 가용 공간이 임의의 지점에서 토폴로지 순서정렬에 의해 초과되는지 여부를 결정한다. 즉, 프로세싱 시스템은 (순서정렬의 임의의 지점에서 에지들의 총 가중치로 표시되는) 필요한 메모리가 메모리 내 (예를 들어, TCM 내) 가용 공간을 초과하는지 여부를 결정할 수 있다. 만약 그렇다면, 방법(400)은 블록 420으로 계속된다.
[0102] 블록 420에서, 프로세싱 시스템은 하나 이상의 메모리 동작들(예를 들어, 유출/채우기 동작들)을 토폴로지 순서정렬에 삽입한다. 일 실시예에서, (각각의 지점에서의 에지들의 가중치로 표시되는) 필요한 공간이 로컬 메모리 내 가용 공간을 초과하는 각각의 지점에 대해, 프로세싱 시스템은 메모리 동작(들)을 삽입하여 일부 데이터를 로컬 메모리로부터 더 많은 원격 메모리로 이동시킴으로써 로컬 메모리 용량이 초과되지 않도록 보장한다. 방법(400)은 이후 블록 425로 계속된다. 프로세싱 시스템은 유사하게, 필요할 때 동작들을 삽입하여 데이터를 메모리로 다시 이동시킬 수도 있다.
[0103] 추가적으로, 블록 415에서, 순서정렬의 어떤 지점도 로컬 메모리에서 이용 가능한 더 많은 공간을 필요로 하지 않는다고 프로세싱 시스템이 결정하면, 방법(400)은 블록 425로 계속된다.
[0104] 블록 425에서, 프로세싱 시스템은 토폴로지 순서정렬에 기초하여 메모리의 유닛들을 배정한다. 위에서 설명한 바와 같이, 일부 실시예들에서, 이는 각각의 시점에서 메모리 내 어드레스들을 데이터의 각각의 조각에 할당하는 것을 포함한다.
[0105] 도 5는 본원에서 개시된 일부 실시예들에 따른, 메모리 배정들의 시각화를 묘사한다. 예시된 실시예에서, 배정들이 그래프(500) 상에 플롯되며, 여기서, 수평축은 시간이고 수직축은 로컬 메모리 내 메모리의 유닛들이다. 일 실시예에서, (예를 들어, 생산자-소비자 또는 생산자-소비자들 세트에 대한) 각각의 배정(510)은 생산자 노드가 데이터를 생성하는 시간부터 최종 소비자 노드가 소비하는 시간까지 수평으로 포괄하는 직사각형으로서 묘사된다. 각각의 배정(510)의 높이는 생산자-소비자 세트에 필요한 데이터의 양에 대응한다. 일 실시예에서, 프로세싱 시스템은 (파선 505로 표시된, 로컬 메모리의 가용 공간에 대응하는) 수직축 상에서 일부 미리 정의된 값을 초과함이 없이, 이러한 직사각형들을 가능한 한 밀접하게 팩킹하려는 노력으로 메모리의 유닛들을 배정함으로써, 메모리를 배정한다. 임의의 배정들(510)이 이 라인 505를 통과하면, 일부 데이터는 원격 (호스트) 메모리로 이동되어야 하며, 로컬 메모리 내 대응하는 공간이 배정해제된다(다른 생산자/소비자 세트들에게 재배정할 수 있음).
[0106] 예시된 실시예에서, 배정들은 각각의 생산자 및 소비자가 동작할 수 있는 시간을 표시한다. 예를 들어, 배정(510F)과 연관된 생산자는 배정(510B)과 연관된 소비자가 완료된 후 배정된 공간을 갖는다. 따라서, 배정(510F)의 생산자는 배정(510B)의 소비자가 완료할 때까지 시작할 수 없다.
[0107] 도 4를 다시 참조하면, 일단 메모리가 배정되면, 예시된 실시예에서, 방법(400)은 블록 430으로 계속되며, 여기서, 프로세싱 시스템은 리소스들의 병렬 이용을 증가시키기 위해 토폴로지 순서정렬에서 노드들의 순서정렬을 수정한다. 다양한 실시예들에서, 이는 예를 들어, (예를 들어, 데이터를 스토리지로부터 메모리로 이동시키는) 로딩 동작들을 순서정렬에서 이전의 위치들로 이동시키는 것, 별개의 프로세싱 유닛들 상에서 병렬 실행이 가능하도록 노드들을 재배열하는 것 등을 포함할 수 있다.
토폴로지 순서정렬들을 생성하기 위한 예시적인 방법
[0108] 도 6은 프로세스 스케줄링을 향상시키기 위해 토폴로지 순서정렬들을 생성하기 위한 방법(600)을 예시하는 흐름도를 묘사한다.
[0109] 일 실시예에서, 방법(600)은 (토폴로지 순서정렬을 생성하는) 도 4의 블록 410에 대한 추가적인 세부사항을 제공한다.
[0110] 방법(600)은 블록 605에서 시작하며, 여기서, 프로세싱 시스템은 컷들이 유효한 토폴로지 순서정렬(예를 들어, 원래 의존성들을 고려하는 순서정렬)을 초래하도록 보장하기 위해 하나 이상의 동작들을 수행한다. 위에서 설명한 바와 같이, 이는 예를 들어, (컷이 에지와 역방향으로 교차하여 의존성을 위반하는 것을 방지하기 위해) 높거나 또는 무한한 가중치들을 가진 역방향 에지들을 추가하는 것을 포함할 수도 있다.
[0111] 방법(600)은 이후 블록 610으로 계속되며, 여기서, 프로세싱 시스템은 필요에 따라 제로 이상의 배정해제 노드들을 그래프에 삽입한다. 일 실시예에서, 위에서 설명한 바와 같이, 배정해제 노드들은 다수의 소비자 노드들을 가진 생산자들이 최소 컷 알고리즘(들)에 의해 정확하게 프로세싱되도록 보장하기 위해 이용될 수 있다.
[0112] 블록 615에서, 최소 컷들의 세트를 생성하기 위해 루프가 개시된다. 블록 615에서, 프로세싱 시스템은 미리 정의된 종료 기준들이 만족되는지 여부를 결정한다.
[0113] 일 실시예에서, 종료 기준들은 그래프(또는, 각각의 하위 그래프)가 선형인지 여부를 결정하는 것을 포함한다. 만약 그렇다면, 방법(600)은 블록 620으로 계속되며, 여기서, 프로세싱 시스템은 이 선형 토폴로지 순서정렬을 반환한다. 다양한 실시예들에서, 종료 기준들은 예를 들어, 최대 시간, 컷들 또는 반복들의 최대 횟수 등을 포함할 수 있다.
[0114] 종료 기준들이 만족되지 않으면, 방법(600)은 블록 625로 계속되며, 여기서, 프로세싱 시스템은 하위 그래프를 선택한다. 일 실시예에서, 루프의 제1 반복 동안, 프로세싱 시스템은 전체 그래프 상에서 동작한다. 각각의 후속 반복에서, 블록 625는 동작될 다음 하위 그래프를 선택하는 것을 포함할 수 있다. 일 실시예에서, 프로세싱 시스템은 나머지 (비선형) 하위 그래프들 중 가장 큰 그래프를 선택한다.
[0115] 방법(600)은 이후 블록 630으로 계속되며, 여기서, 프로세싱 시스템은 선택된 하위 그래프(또는, 제1 반복의 경우 원래 그래프)에 대해 최소 컷을 계산한다. 일부 실시예들에서, 컷을 계산하기 위해, 프로세싱 시스템은 먼저 컷을 제한할 인덱스 노드를 선택한다. 즉, 프로세싱 시스템은 컷이 소비자들의 모두로부터 인덱스 노드를 분리하도록 보장한다. 그래프의 중심 근처의 인덱스 노드들을 선택하면 프로세싱 시스템이 단일 노드들을 잘라내는 대신, 그래프의 복잡한 부분들을 먼저 프로세싱할 수 있으며, 이는 반복 프로세스가 빠르고 효율적이도록 보장하며, (개개의 로컬 부분들과는 대조적으로) 글로벌 그래프 구조를 고려하는 최종 순서정렬을 초래한다.
[0116] 일부 실시예들에서, 컷을 계산하는 단계는 컷의 전체 비용을 최소화하면서 소스 및 목표 노드들을 완전히 분리하기 위해 제거할 에지들의 세트를 선택하는 것을 포함한다. 임의의 주어진 컷의 비용은 컷이 교차하는 각각의 에지의 개개의 가중치들을 합계(예를 들어, 가산)하는 것에 기초하여 결정된다.
[0117] 방법(600)은 이후 블록 615로 복귀한다. 이러한 방법으로, 프로세싱 시스템은 종료 기준들이 만족될 때까지 각각의 하위 그래프를 계속 반복적으로 평가하여 절단한다.
토폴로지 유효성을 강화하기 위해 그래프들을 수정하는 예시적인 방법
[0118] 도 7은 효율적인 프로세스 스케줄들을 생성하면서 토폴로지 유효성을 강화하는 방법(700)을 예시하는 흐름도를 묘사한다.
[0119] 일 실시예에서, 방법(700)은 (컷들이 유효한 토폴로지 순서정렬을 산출하도록 보장하는) 도 6의 블록 605에 대한 추가적인 세부사항을 제공한다.
[0120] 예시된 실시예에서, 방법(700)은 블록 705에서 시작하며, 여기서, 프로세싱 시스템은 그래프 내 에지를 선택한다. 이 초기 선택은 프로세싱 시스템이 그래프 내 모든 에지들을 반복할 것이므로, 무작위를 포함하여, 임의 개수의 방법들로 달성될 수도 있다.
[0121] 블록 710에서, 프로세싱 시스템은 선택된 에지에 대한 대응하는 역방향 에지를 생성한다. 즉, 선택된 에지가 제1 노드에서 제2 노드로 횡단하면, 역방향 에지는 제2 노드로부터 제1 노드까지이다. 실시예들에서, 이 역방향 에지에는 미리 정의된 가중치 또는 최소 컷에 의해 절단될 수 없다는 것을 표시하는 다른 플래그가 할당된다. 예를 들어, 일 실시예에서, 프로세싱 시스템은 잘못된 방향으로(예를 들어, 그래프에서 데이터 의존성들을 위반하는 방향으로) 교차하는 임의의 컷에 대해 무한한 (또는, 임의로 높은) 패널티가 적용되게 하는 무한한 (또는, 임의로 높은) 가중치를 할당한다.
[0122] 블록 715에서, 프로세싱 시스템은 평가될 임의의 추가적인 에지들이 남아 있는지 여부를 결정한다. 만약 그렇다면, 방법(700)은 블록 705로 복귀한다. 이러한 방법으로, 프로세싱 시스템은 역방향 에지들을 삽입하여 그래프에서 데이터 의존성들을 강화하고 유효한 토폴로지 순서정렬에서 임의의 최소 컷 결과들을 보장한다. 방법(700)은 이후 블록 720으로 계속된다.
[0123] 블록 720에서, 프로세싱 시스템은 방향성 에지들을 소스로부터 횡단함으로써 그래프 내 모든 노드들에 방문하려고 시도한다. 이는 특정의 구현예에 따라, 넓이-우선 탐색 또는 깊이-우선 탐색을 이용하는 것을 포함할 수도 있다. 일 실시예에서, 프로세싱 시스템은 어느 노드들이 이 탐색 동안 방문되었는지를 기록한다. 방법(700)은 이후 블록 725로 진행하며, 여기서, 프로세싱 시스템은 그래프 내 어느 노드들이 이 탐색 동안 방문되지 않았는지 여부를 결정한다. 만약 그렇다면, 미방문된 노드들은, 소스로부터 노드에 도달하기 위해 방향성 에지들을 사용하는 유효한 경로가 존재하지 않는다는 점에서, 소스로부터 연결해제된다. 모든 노드들이 방문되었으면, 방법(700)은 블록 735로 진행한다. 그러나, 적어도 하나의 노드가 탐색 동안 횡단되지 않았으면, 방법(700)은 블록 730으로 계속된다.
[0124] 블록 730에서, 프로세싱 시스템은 제로 가중치를 가진 에지(들)를 소스로부터 탐색 동안 방문되지 않은 임의의 노드들까지 삽입한다. 이는 미방문된 노드들이 소스에 완전히 연결되도록 보장하며, 임의의 계산된 최소 컷들의 토폴로지 유효성을 강화한다. 일 실시예에서, 프로세싱 시스템은 추가적으로 무한 가중치 역방향 에지를 미방문된 노드(들)로부터 소스까지 삽입한다. 방법(700)은 이후 블록 735으로 계속된다.
[0125] 블록 735에서, 프로세싱 시스템은 역방향 에지들을 목표로부터 횡단함으로써 모든 노드들을 방문하려고 시도하기 위해 다른 탐색을 수행한다. 시스템은 유사하게 어느 노드들이 이 탐색 동안 발견/횡단되는지를 기록할 수도 있다. 실시예들에서, 이 탐색은 깊이-우선 또는 넓이-우선으로 수행될 수도 있다.
[0126] 방법(700)은 이후 블록 740으로 계속되며, 여기서, 프로세싱 시스템은 모든 노드들이 이 탐색 동안 목표로부터 방문되었는지 여부를 결정한다. 임의의 노드들이 발견되지 않으면, 이들은 목표로부터 연결해제되고, 미방문된 노드로부터 목표까지 (정방향) 방향성 에지들을 이용하는 유효한 경로가 그래프에 존재하지 않는다. 모든 노드들이 발견되면, 방법(700)은 블록 750으로 진행한다. 적어도 하나의 노드가 방문되지 않았으면, 그러나, 방법(700)은 블록 745로 계속된다.
[0127] 블록 745에서, 프로세싱 시스템은 제로 가중치를 가진 에지(들)를 미방문된 노드(들)로부터 목표까지 삽입한다. 이는 노드가 목표에 완전히 연결되도록 보장하며, 임의의 계산된 최소 컷들의 토폴로지 유효성을 강화한다. 일 실시예에서, 프로세싱 시스템은 추가적으로 무한 가중치 역방향 에지를 목표로부터 미방문된 노드(들)까지 삽입한다. 방법(700)은 이후 블록 750으로 계속된다.
[0128] 블록 750에서, 프로세싱 시스템은 수정된 그래프를 반환한다. 이러한 방법으로, 프로세싱 시스템은 그래프 내 데이터 의존성들을 강화하고 유효한 토폴로지 순서정렬에서 임의의 최소 컷 결과들을 보장하기 위해, 각각의 노드가 유효한 경로를 통해 소스 및 목표 둘 모두에 연결되도록 보장한다.
배정해제 노드들을 이용하여 그래프들을 수정하는 예시적인 방법
[0129] 도 8은 효율적인 프로세스 스케줄들을 정확하게 생성하도록 병렬 데이터 흐름들을 처리하는 방법(800)을 예시하는 흐름도를 묘사한다.
[0130] 일 실시예에서, 방법(800)은 (필요에 따라 배정해제 노드들을 삽입하는) 도 6의 블록 610에 대한 추가적인 세부사항을 제공한다. 방법(800)은 블록 805에서 시작하며, 여기서, 프로세싱 시스템은 그래프 내 생산자 노드를 선택한다. 실시예들에서, 생산자 노드들은 데이터를 하나 이상의 후속 노드들로 (또는, 목표 노드로) 출력하는 임의의 노드들이다.
[0131] 일부 실시예들에서, 블록 805에서, 프로세싱 시스템은 그래프 내 생산자들의 서브세트에서 생산자 노드를 선택한다. 예를 들어, 일 실시예에서, 방법(800)은 단지 하나 보다 많은 소비자를 갖는 생산자 노드들에만 적용된다. 즉, 단일 소비자를 갖는 임의의 생산자에 대해 배정해제 노드들을 추가하는 것이 필요하지 않고 잠재적으로 낭비적이기 때문에, 프로세싱 시스템은 다수의 소비자들을 출력하는 모든 노드들을 먼저 식별하고, 이 식별된 서브세트로부터 선택할 수도 있다. 다른 실시예에서, 방법(800)은 각각이 연관되는 소비자들의 수에 관계없이 모든 생산자 노드들에 적용된다. 다양한 실시예들에서, 이 초기 선택은 무작위를 포함하여, 임의 개수의 방법들로 달성될 수도 있다.
[0132] 블록 810에서, 프로세싱 시스템은 선택된 생산자에 대한 소비자 노드(들)의 세트를 식별한다.
[0133] 방법(800)은 이후 블록 815로 진행하며, 여기서, 프로세싱 시스템은 식별된 소비자(들)로 선택된 생산자에 의해 출력되는 데이터의 양을 결정한다. 생성된 데이터의 양은 배정해제 노드에 대한 에지의 가중치를 설정하는데 사용될 것이다. 예를 들어, 생산자가 (이 데이터를 이용하는 소비자들의 수에 관계없이) 10 킬로바이트의 데이터를 생성하면, 시스템은 후속하여 배정해제 노드에 대한 에지의 가중치를 10 킬로바이트로 설정할 것이다. 방법(800)은 이후 블록 820으로 계속된다.
[0134] 블록 820에서, 프로세싱 시스템은 선택된 생산자에 대한 배정해제 노드를 생성한다. 블록 825에서, 프로세싱 시스템은 이후 에지를 선택된 생산자로부터 배정해제 노드까지 삽입한다.
[0135] 방법(800)은 이후 블록 830로 진행하며, 여기서, 프로세싱 시스템은 가중치를 새로-생성된 에지에 할당한다. 일 실시예에서, 에지의 가중치는 소비자(들)로 생산자 노드에 의해 출력되는 (이전에-결정된) 데이터의 양에 기초한다. 일부 실시예들에서, 프로세싱 시스템은 또한 임의로-높은 가중치를 갖는 역방향 에지를 배정해제 노드로부터 선택된 생산자 노드까지 삽입한다.
[0136] 방법(800)은 이후 블록 835로 진행하며, 여기서, 프로세싱 시스템은 선택된 생산자의 각각의 식별된 소비자로부터 에지들을 생성하여, 이들을 새로-생성된 배정해제 노드에 연결한다.
[0137] 블록 840에서, 프로세싱 시스템은 식별된 소비자들로 그리고 식별된 소비자들로부터의 에지의 가중치를 제로로 설정한다. 즉, 프로세싱 시스템은 선택된 생산자로부터 식별된 소비자(들)까지 모든 에지(들)의 가중치(들)을 제로로 설정한다. 이는 생산자-소비자(들) 세트에 대한 데이터가 컴퓨팅 최소 컷들을 계산할 때에 여러번 카운트되지 않도록 보장한다. 시스템은 각각의 소비자로부터 배정해제 노드까지 새로-생성된 에지(들)의 가중치(들)를 제로로 추가로 설정한다.
[0138] 블록 845에서, 프로세싱 시스템은 평가되지 않은 적어도 하나의 추가적인 생산자(또는, 다수의 소비자들을 가진 생산자들의 서브세트 내 하나의 추가적인 생산자)가 있는지 여부를 결정한다. 만약 그렇다면, 방법(800)은 블록 805로 복귀한다.
[0139] 그렇지 않으면, 방법(800)은 블록 850으로 계속되며, 여기서, 프로세싱 시스템은 배정해제 노드들이 삽입된 이 수정된 그래프를 반환한다.
최소 컷들을 찾는 예시적인 방법
[0140] 도 9는 효율적인 프로세스 스케줄들을 산출하도록 토폴로지 순서정렬들을 생성하기 위해 데이터 흐름 그래프들을 분할하는 방법(900)을 예시하는 흐름도를 묘사한다.
[0141] 일 실시예에서, 방법(900)은 (그래프에서 컷을 생성하는) 도 6의 블록 630에 대한 추가적인 세부사항을 제공한다.
[0142] 방법(900)은 블록 905에서 시작하며, 여기서, 프로세싱 시스템은 그래프로부터 인덱스 노드를 선택한다. 일 실시예에서, 위에서 설명한 바와 같이, 프로세싱 시스템은 노드들의 각각의 깊이에 기초하여 인덱스 노드를 선택한다. 예를 들어, 프로세싱 시스템은 시작 노드로부터 그리고 종료 노드까지의 거리에 기초하여 각각의 노드에 대한 깊이 스코어를 생성할 수도 있으며, 여기서, 더 높은 깊이 스코어들은 그래프(또는, 하위 그래프)의 중심에 더 가까운 노드들에 대응한다. 프로세싱 시스템은 이후 가장 큰 깊이 스코어를 가진 노드를 인덱스 노드로서 선택할 수도 있다.
[0143] 블록 910에서, 프로세싱 시스템은 무한 가중치 에지를 소스 노드로부터 선택된 인덱스 노드까지 삽입한다. 이는 후속 컷이 인덱스 노드 이후에 발생하도록 제한한다.
[0144] 또한, 블록 915에서, 프로세싱 시스템은 인덱스 노드의 소비자(들)를 식별한다.
[0145] 블록 920에서, 프로세싱 시스템은 유사하게 무한 가중치 에지를 각각의 식별된 소비자로부터 목표까지 삽입한다. 이는 컷이 식별된 소비자들 중 임의의 소비자 이전에 발행하도록 제한한다. 이러한 방법으로, 프로세싱 시스템은 인덱스 노드 직후에 절단하도록 최소 컷 기법들을 제한하여, 소비자들로부터 분리할 수 있다.
[0146] 방법(900)은 이후 블록 925로 계속되며, 여기서, 프로세싱 시스템은 인덱스 노드에 대한 최소 컷을 생성한다. 실시예들에서, 최소 컷은 위에서 설명한 바와 같이, (에지 가중치에 기초하여) 최소 패널티를 생성하면서 소스를 목표로부터 분리할, 절단할 에지들의 세트를 식별함으로써 발견된다.
효율적인 프로세스 스케줄링을 위해 토폴로지 순서정렬들을 생성하는 예시적인 방법
[0147] 도 10은 프로세스 스케줄링을 향상시키기 위해 토폴로지 순서정렬들을 생성하고 수정하는 방법(1000)을 예시하는 흐름도를 묘사한다.
[0148] 방법(1000)은 블록 1005에서 시작하며, 여기서, 프로세싱 시스템은 프로세스에 대한 데이터 흐름 그래프를 수신하며, 데이터 흐름 그래프는 복수의 노드들 및 복수의 에지들을 포함한다.
[0149] 블록 1010에서, 프로세싱 시스템은 프로세스의 메모리 이용에 적어도 부분적으로 기초하여 데이터 흐름 그래프에 대한 토폴로지 순서정렬을 생성한다.
[0150] 일부 양상들에서, 데이터 흐름 그래프 내 복수의 노드들은 프로세스 동안 수행되는 동작들에 대응하며, 데이터 흐름 그래프 내 복수의 에지들은 동작들 간에 전달되는 데이터에 대응하며, 복수의 에지들의 각각의 개개의 에지는 개개의 에지와 연관된 데이터의 사이즈에 기초하여 개개의 가중치와 연관되며, 토폴로지 순서정렬을 생성하는 단계는 가중치들에 기초하여 데이터 흐름 그래프에서 최소 컷들의 세트를 찾는 단계를 포함한다.
[0151] 일부 양상들에서, 최소 컷들의 세트를 찾는 단계는 복수의 에지들의 각각의 개개의 에지에 대해, 무한 가중치의 개개의 역방향들 에지를 추가함으로써 데이터 의존성들을 강화하기 위해 데이터 흐름 그래프를 수정하는 단계를 포함한다. 일부 양상들에서, 최소 컷들의 세트를 찾는 단계는 적어도 하나의 유효한 경로가 소스로부터 복수의 노드들 각각까지 그리고 복수의 노드들 각각으로부터 싱크까지 데이터 흐름 그래프에 존재하도록 보장함으로써 데이터 의존성들을 강화하기 위해 데이터 흐름 그래프를 수정하는 단계를 더 포함한다.
[0152] 일부 양상들에서, 최소 컷들의 세트를 찾는 단계는, 데이터를 복수의 노드들의 적어도 하나의 소비자 노드로 출력하는 복수의 노드들의 생산자 노드를 식별함으로써, 생산자 노드에 의해 출력된 데이터의 사이즈를 결정함으로써, 그리고 배정해제 노드를 데이터 흐름 그래프에 삽입함으로써 가중치들을 복수의 에지들에 할당하는 단계를 포함하고, 배정해제 노드를 데이터 흐름 그래프에 삽입하는 것은 생산자 노드에 의해 출력된 데이터의 사이즈에 대응하는 가중치를 가진 제1 에지를 생성함으로써 ― 제1 에지는 생산자 노드로부터 배정해제 노드까지 삽입됨 ―, 제로의 가중치를 생산자 노드로부터 적어도 하나의 소비자 노드까지의 에지에 할당함으로써, 그리고 제로 가중치가 할당되는, 적어도 하나의 소비자 노드로부터 배정해제 노드까지의 에지를 생성함으로써 이루어진다.
[0153] 일부 양상들에서, 최소 컷들의 세트를 찾는 단계는, 소스로부터 제1 인덱스 노드까지 무한 가중치를 가진 제1 에지를 생성함으로써, 제1 인덱스 노드로부터 데이터를 수신하는 소비자 노드들의 세트를 복수의 노드들로부터 식별함으로써, 소비자 노드들의 세트 내 각각의 소비자 노드로부터 싱크까지 무한 가중치를 가진 에지들을 생성함으로써, 그리고 제1 최소 컷을 계산함으로써 복수의 노드들의 제1 인덱스 노드에 대해, 제1 최소 컷이 제1 인덱스 노드 이후에 발행하도록 제한하는 단계를 포함하며, 제1 최소 컷은 제1 인덱스 노드를 데이터 흐름 그래프의 제1 부분에 그리고 제1 인덱스 노드의 모든 후속자들을 데이터 흐름 그래프의 제2 부분에 배치한다.
[0154] 일부 양상들에서, 최소 컷들의 세트를 찾는 단계는 데이터 흐름 그래프의 제1 및 제2 부분들에서 인덱스 노드들에 대해 최소 컷들을 반복적으로 계산하고, 미리 정의된 중지 조건이 만족될 때까지 최소 컷들에 기초하여 데이터 흐름 그래프의 제1 부분과 제2 부분을 분리하는 단계를 더 포함한다.
[0155] 일부 양상들에서, 방법(1000)은 제1 인덱스 노드가 데이터 흐름 그래프의 중심에 있다고 결정하는 것에 기초하여 제1 인덱스 노드를 선택하는 단계를 더 포함한다.
[0156] 일부 양상들에서, 방법(1000)은 제1 인덱스 노드가 데이터 흐름 그래프 내 형제 노드들의 세트의 하나의 노드라고 결정하는 단계; 및 형제 노드들의 세트의 제1 부분을 데이터 흐름 그래프의 제1 부분에 그리고 형제 노드들의 세트의 제2 부분을 데이터 흐름 그래프의 제2 부분에 제한함으로써 제1 최소 컷을 계산하는 단계를 더 포함한다.
[0157] 블록 1015에서, 프로세싱 시스템은 미리 정의된 메모리 용량에 기초하여 토폴로지 순서정렬에, 메모리 액세스에 대응하는 하나 이상의 새로운 노드들을 삽입함으로써 제1 수정된 토폴로지 순서정렬을 생성한다.
[0158] 블록 1020에서, 프로세싱 시스템은 제1 수정된 토폴로지 순서정렬에 기초하여 메모리에 메모리의 유닛들을 배정한다.
[0159] 블록 1025에서, 프로세싱 시스템은 제1 수정된 토폴로지 순서정렬에서 하나 이상의 노드들을 재배열함으로써 제2 수정된 토폴로지 순서정렬을 생성하며, 제2 수정된 토폴로지 순서정렬은 복수의 하드웨어 컴포넌트들의 증가된 병렬 이용을 가능하게 한다.
[0160] 일부 양상들에서, 제1 수정된 토폴로지 순서정렬에서 하나 이상의 노드들을 재배열하는 단계는 데이터를 호스트 프로세싱 시스템 메모리로부터 메모리로 로딩하는 것에 대응하는 하나 이상의 노드들을 토폴로지 순서정렬에서 앞선 위치로 이동시키는 단계를 포함한다.
효율적인 프로세스 스케줄들을 생성하고 실행하는 예시적인 시스템들
[0161] 도 11은 예를 들어, 도 4 및 도 6 내지 도 10과 관련하여 설명된 방법들을 포함하여, 본원에서 설명되는 다양한 방법들의 양상들을 수행하도록 구성될 수도 있는 예시적인 프로세싱 시스템(1100)을 묘사한다.
[0162] 프로세싱 시스템(1100)은 일부 예들에서, 다중 코어 CPU일 수도 있는, 중앙 처리 유닛(CPU)(1102)을 포함한다. CPU(1102)에서 실행되는 명령들은 예를 들어, CPU(1102)와 연관된 프로그램 메모리로부터 로딩될 수도 있거나 또는 메모리(1114)로부터 로딩될 수도 있다.
[0163] 프로세싱 시스템(1100)은 또한 그래픽 프로세싱 유닛(GPU)(1104), 디지털 신호 프로세서(DSP)(1106), 및 신경 프로세싱 유닛(NPU)(1108)과 같은, 특정의 기능들에 맞춰진 추가적인 프로세싱 컴포넌트들을 포함한다.
[0164] 도 11에 묘사되지는 않았지만, NPU(1108)는 CPU(1102), GPU(1104), 및/또는 DSP(1106) 중 하나 이상의 부분으로서 구현될 수도 있다.
[0165] 예시된 실시예에 포함되지 않지만, 프로세싱 시스템(1100)은 또한 스크린들, 물리적 버튼들, 스피커들, 마이크로폰들 등과 같은, 하나 이상의 입력 및/또는 출력 디바이스들을 포함할 수도 있다.
[0166] 프로세싱 시스템(1100)은 또한 동적 랜덤 액세스 메모리, 플래시-기반 정적 메모리 등과 같은, 하나 이상의 정적 및/또는 동적 메모리들을 나타내는 메모리(1114)를 포함한다. 이 예에서, 메모리(1114)는 프로세싱 시스템(1100)의 전술한 프로세서들 중 하나 이상에 의해 실행될 수도 있는 컴퓨터-실행가능한 컴포넌트들을 포함한다.
[0167] 이 예에서, 메모리(1114)는 순서정렬 컴포넌트(110), 메모리 컴포넌트(120), 재순서정렬 컴포넌트(125), 배정 컴포넌트(130), 데이터 그래프(들)(105), 토폴로지 순서정렬(들)(115), 및 프로세싱 스케줄(들)(135)을 포함한다. 묘사된 컴포넌트들, 및 묘사되지 않은 컴포넌트들은 본원에서 설명되는 방법들의 다양한 양상들을 수행하도록 구성될 수도 있다. 예를 들어, 순서정렬 컴포넌트(110), 메모리 컴포넌트(120), 재순서정렬 컴포넌트(125), 및 배정 컴포넌트(130)는 데이터 그래프들(105)을 분석하여 토폴로지 순서정렬들(115) 및 프로세싱 스케줄들(135)을 생성할 수도 있다. 이들 프로세싱 스케줄들(135)은 프로세싱 시스템(1100)에 의해 실행될 수도 있거나, 또는 하나 이상의 다른 디바이스들 또는 시스템들에 의해 사용될 수도 있다.
[0168] 예시된 예에서, 프로세싱 시스템(1100)은 또한 순서정렬 회로(1120), 메모리 회로(1122), 재순서정렬 회로(1124), 및 배정 회로(1126)를 포함한다. 묘사된 회로들, 및 묘사되지 않은 다른 회로들은 본원에서 설명되는 기법들의 다양한 양상들을 수행하도록 구성될 수도 있다.
[0169] 예를 들어, 순서정렬 회로(1120)는 순서정렬 컴포넌트(110)의 기능을 수행하도록 구성될 수도 있으며, 메모리 회로(1122)는 메모리 컴포넌트(120)의 기능을 수행하도록 구성될 수도 있으며, 재순서정렬 회로(1124)는 재순서정렬 컴포넌트(125)의 기능을 수행하도록 구성될 수도 있으며, 배정 회로(1126)는 배정 컴포넌트(130)의 기능을 수행하도록 구성될 수도 있다.
[0170] 도 11에서 명료성을 위해 별개의 컴포넌트들 및 회로들로서 묘사되지만, 순서정렬 회로(1120), 메모리 회로(1122), 재순서정렬 회로(1124), 및 배정 회로(1126)는 CPU(1102), GPU(1104), DSP(1106), NPU(1108) 등과 같은, 프로세싱 시스템(1100)의 다른 프로세싱 디바이스들에서 일괄하여 또는 개별적으로 구현될 수도 있다.
[0171] 도 12는 본원에서 설명되는 다양한 방법들의 양상들을 수행하도록 구성될 수도 있는 예시적인 멀티-프로세서 프로세싱 시스템(1200)을 묘사한다.
[0172] 프로세싱 시스템(1200)은 일부 예들에서, 다중 코어 CPU일 수도 있는, 중앙 처리 유닛(CPU)(1202)을 포함한다. CPU(1202)에서 실행되는 명령들은 예를 들어, CPU(1202)와 연관된 프로그램 메모리로부터 로딩될 수도 있거나 또는 메모리(1214) 또는 호스트 메모리(1216)로부터 로딩될 수도 있다.
[0173] 프로세싱 시스템(1200)은 또한 그래픽 프로세싱 유닛(GPU)(1204), 디지털 신호 프로세서(DSP)(1206), 및 신경 프로세싱 유닛(NPU)(1208)과 같은, 특정의 기능들에 맞춰진 추가적인 프로세싱 컴포넌트들을 포함한다. 일부 예들에서, 프로세싱 시스템(1200)의 프로세서들 중 하나 이상은 ARM 또는 RISC-V 명령 세트에 기초할 수도 있다.
[0174] 도 12에 묘사되지는 않았지만, NPU(1208)는 CPU(1202), GPU(1204), 및/또는 DSP(1206) 중 하나 이상의 부분으로서 구현될 수도 있다.
[0175] 예시된 실시예에 포함되지 않지만, 프로세싱 시스템(1200)은 또한 스크린들, 물리적 버튼들, 스피커들, 마이크로폰들 등과 같은, 하나 이상의 입력 및/또는 출력 디바이스들을 포함할 수도 있다.
[0176] 프로세싱 시스템(1200)은 다양한 프로세싱 유닛들에 가까이 위치된 메모리 또는 스토리지를 나타내는 로컬 메모리(1214)를 포함한다. 예를 들어, 로컬 메모리(1214)는 TCM(tightly-coupled memory), SRAM, 캐시 공간 등을 포함할 수도 있다. 예시된 바와 같이, 로컬 메모리(1214)는 일부 데이터(1218A)를 포함한다. 일 실시예에서, 로컬 메모리(1214) 내 이 데이터(1218A)는 (예를 들어, 프로세싱 스케줄(135)을 이용하여 프로세스를 실행하는 동안) 프로세싱 시스템(1200)에 의해 현재 프로세싱 또는 사용 중인 데이터에 대응할 수도 있다.
[0177] 프로세싱 시스템(1200)은 또한 동적 랜덤 액세스 메모리, 플래시-기반 정적 메모리 등과 같은, 하나 이상의 정적 및/또는 동적 메모리들을 나타내는, 호스트 메모리(1216)를 포함한다. 이 예에서, 호스트 메모리(1216)는 프로세싱 시스템(1200)의 전술한 프로세서들 중 하나 이상에 의해 실행될 수도 있는 컴퓨터-실행가능한 프로세싱 스케줄(들)(135)을 포함한다. 예시된 실시예에서, 호스트 메모리(1216)는 또한 데이터(1218B)를 포함한다. 일부 실시예들에서, 이 데이터(1218B)는 로컬 메모리(1218A)에서 이용 가능한 제한된 공간 내에 맞지 않는 (예를 들어, 프로세싱 스케줄(135)에 따라 실행되는) 하나 이상의 진행중인 동작들에 대한 추가적인 데이터일 수도 있다.
[0178] 일부 실시예들에서, 프로세싱 시스템(1200)은 위에서 설명한 바와 같이, 하나 이상의 프로세싱 유닛들을 이용하여 프로세싱 스케줄(135)을 실행하는 동안, 데이터를 로컬 메모리(1214)와 호스트 메모리(1216) 사이에서 앞뒤로 이동시킬 수도 있다.
예시적인 조항들
[0179] 조항 1: 방법으로서, 프로세스에 대한 데이터 흐름 그래프를 수신하는 단계 ― 데이터 흐름 그래프는 복수의 노드들 및 복수의 에지들을 포함함 ―; 프로세스의 메모리 이용에 적어도 부분적으로 기초하여 데이터 흐름 그래프에 대한 토폴로지 순서정렬을 생성하는 단계; 미리 정의된 메모리 용량에 기초하여 토폴로지 순서정렬에, 메모리 액세스에 대응하는 하나 이상의 새로운 노드들을 삽입함으로써 제1 수정된 토폴로지 순서정렬을 생성하는 단계; 제1 수정된 토폴로지 순서정렬에 기초하여 메모리에 메모리의 유닛들을 배정하는 단계; 및 제1 수정된 토폴로지 순서정렬에서 하나 이상의 노드들을 재배열함으로써 제2 수정된 토폴로지 순서정렬을 생성하는 단계를 포함하며, 제2 수정된 토폴로지 순서정렬은 복수의 하드웨어 컴포넌트들의 증가된 병렬 이용을 가능하게 하는, 방법.
[0180] 조항 2: 조항 1에 있어서, 제1 수정된 토폴로지 순서정렬에서 하나 이상의 노드들을 재배열하는 단계는 데이터를 호스트 프로세싱 시스템 메모리로부터 메모리로 로딩하는 것에 대응하는 하나 이상의 노드들을 토폴로지 순서정렬에서 앞선 위치로 이동시키는 단계를 포함하는, 방법.
[0181] 조항 3: 조항 1 내지 조항 2 중 임의의 한 조항에 있어서, 데이터 흐름 그래프 내 복수의 노드들은 프로세스 동안 수행되는 동작들에 대응하며, 데이터 흐름 그래프 내 복수의 에지들은 동작들 간에 전달되는 데이터에 대응하며, 복수의 에지들의 각각의 개개의 에지는 개개의 에지와 연관된 데이터의 사이즈에 기초하여 개개의 가중치와 연관되며, 그리고 토폴로지 순서정렬을 생성하는 단계는 가중치들에 기초하여 데이터 흐름 그래프에서 최소 컷들의 세트를 찾는 단계를 포함하는, 방법.
[0182] 조항 4: 조항 1 내지 조항 3 중 임의의 한 조항에 있어서, 최소 컷들의 세트를 찾는 단계는 복수의 에지들의 각각의 개개의 에지에 대해, 무한 가중치의 개개의 역방향들 에지를 추가함으로써 데이터 의존성들을 강화하기 위해 데이터 흐름 그래프를 수정하는 단계를 포함하는, 방법.
[0183] 조항 5: 조항 1 내지 조항 4 중 임의의 한 조항에 있어서, 최소 컷들의 세트를 찾는 단계는 적어도 하나의 유효한 경로가 소스로부터 복수의 노드들 각각까지 그리고 복수의 노드들 각각으로부터 싱크까지 데이터 흐름 그래프에 존재하도록 보장함으로써 데이터 의존성들을 강화하기 위해 데이터 흐름 그래프를 수정하는 단계를 더 포함하는, 방법.
[0184] 조항 6: 조항 1 내지 조항 5 중 임의의 한 조항에 있어서, 최소 컷들의 세트를 찾는 단계는 데이터를 복수의 노드들의 적어도 하나의 소비자 노드로 출력하는 복수의 노드들의 생산자 노드를 식별함으로써, 생산자 노드에 의해 출력된 데이터의 사이즈를 결정함으로써, 그리고 배정해제 노드를 데이터 흐름 그래프에 삽입함으로써 가중치들을 복수의 에지들에 할당하는 단계를 포함하고, 배정해제 노드를 데이터 흐름 그래프에 삽입하는 것은 생산자 노드에 의해 출력된 데이터의 사이즈에 대응하는 가중치를 가진 제1 에지를 생성함으로써 ― 제1 에지는 생산자 노드로부터 배정해제 노드까지 삽입됨 ―, 제로의 가중치를 생산자 노드로부터 적어도 하나의 소비자 노드까지의 에지에 할당함으로써, 그리고 제로의 가중치가 할당되는, 적어도 하나의 소비자 노드로부터 배정해제 노드까지의 에지를 생성함으로써 이루어지는, 방법.
[0185] 조항 7: 조항 1 내지 조항 6 중 임의의 한 조항에 있어서, 최소 컷들의 세트를 찾는 단계는, 소스로부터 제1 인덱스 노드까지 무한 가중치를 가진 제1 에지를 생성함으로써, 제1 인덱스 노드로부터 데이터를 수신하는 소비자 노드들의 세트를 복수의 노드들로부터 식별함으로써, 소비자 노드들의 세트 내 각각의 소비자 노드로부터 싱크까지 무한 가중치를 가진 에지들을 생성함으로써, 그리고 제1 최소 컷을 계산함으로써 복수의 노드들의 제1 인덱스 노드에 대해, 제1 최소 컷이 제1 인덱스 노드 이후에 발생하도록 제한하는 단계를 포함하며, 제1 최소 컷은 제1 인덱스 노드를 데이터 흐름 그래프의 제1 부분에 그리고 제1 인덱스 노드의 모든 후속자들을 데이터 흐름 그래프의 제2 부분에 배치하는, 방법.
[0186] 조항 8: 조항 1 내지 조항 7 중 임의의 한 조항에 있어서, 최소 컷들의 세트를 찾는 단계는 데이터 흐름 그래프의 제1 및 제2 부분들에서 인덱스 노드들에 대해 최소 컷들을 반복적으로 계산하고, 미리 정의된 중지 조건이 만족될 때까지 최소 컷들에 기초하여 데이터 흐름 그래프의 제1 부분과 제2 부분을 분리하는 단계를 더 포함하는, 방법.
[0187] 조항 9: 조항 1 내지 조항 8 중 임의의 한 조항에 있어서, 방법은 제1 인덱스 노드가 데이터 흐름 그래프의 중심에 있다고 결정하는 것에 기초하여 제1 인덱스 노드를 선택하는 단계를 더 포함하는, 방법.
[0188] 조항 10: 조항 1 내지 조항 9 중 임의의 한 조항에 있어서, 방법은 제1 인덱스 노드가 데이터 흐름 그래프 내 형제 노드들의 세트의 하나의 노드라고 결정하는 단계; 및 형제 노드들의 세트의 제1 부분을 데이터 흐름 그래프의 제1 부분에 그리고 형제 노드들의 세트의 제2 부분을 데이터 흐름 그래프의 제2 부분에 제한함으로써 제1 최소 컷을 계산하는 단계를 더 포함하는, 방법.
[0189] 조항 11: 시스템으로서, 컴퓨터-실행가능한 명령들을 포함하는 메모리; 및 컴퓨터-실행가능한 명령들을 실행하도록 그리고 프로세싱 시스템으로 하여금 조항 1 내지 조항 10 중 어느 한 조항에 따른 방법을 수행하게 하도록 구성된 하나 이상의 프로세서들을 포함하는, 시스템.
[0190] 조항 12: 시스템으로서, 조항 1 내지 조항 10 중 어느 한 조항에 따른 방법을 수행하기 위한 수단을 포함하는, 시스템.
[0191] 조항 13: 비-일시적인 컴퓨터-판독가능 매체로서, 프로세싱 시스템의 하나 이상의 프로세서들에 의해 실행될 때, 프로세싱 시스템으로 하여금 조항 1 내지 조항 10 중 어느 한 조항에 따른 방법을 수행하게 하는 컴퓨터-실행가능한 명령들을 포함하는, 비-일시적인 컴퓨터-판독가능 매체.
[0192] 조항 14: 컴퓨터-판독가능 저장 매체 상에 구현된 컴퓨터 프로그램 제품으로서, 컴퓨터-판독가능 저장 매체는 조항 1 내지 조항 10 중 어느 한 조항에 따른 방법을 수행하기 위한 코드를 포함하는, 컴퓨터-판독가능 저장 매체 상에 구현된 컴퓨터 프로그램 제품.
추가적인 고려사항들
[0193] 전술한 설명은 임의의 통상의 기술자가 본원에서 설명하는 다양한 실시예들을 실시할 수 있도록 하기 위해서 제공된다. 본원에서 설명된 예들은 청구범위에 개시된 범위, 적용가능성, 또는 실시예들을 제한하지 않는다. 이들 실시예들에 대한 다양한 변경들은 통상의 기술자들이 쉽게 알 수 있을 것이며, 본원에서 정의하는 일반 원리들은 다른 실시예들에 적용될 수도 있다. 예를 들어, 본 개시내용의 범위로부터 벗어나지 않으면서, 설명되는 엘리먼트들의 기능 및 배열에 있어 변경들이 이루어질 수도 있다. 다양한 예들은 적합한 경우 다양한 프로시저들 또는 컴포넌트들을 생략하거나, 대체하거나, 또는 추가할 수도 있다. 예를 들어, 설명된 방법들은 설명된 순서와는 상이한 순서로 수행될 수도 있으며, 다양한 단계들이 추가되거나, 생략되거나, 또는 결합될 수도 있다. 또한, 일부 예들에 대해 설명된 특징들은 일부 다른 예들에서 결합될 수도 있다. 예를 들어, 본원에서 개시된 임의 개수의 양상들을 이용하여, 장치가 구현될 수도 있거나 또는 방법이 실시될 수도 있다. 게다가, 본 개시내용의 범위는 본원에서 개시된 본 개시내용의 다양한 양상들에 추가해서 또는 이 이외의 다른 구조, 기능, 또는 구조 및 기능을 이용하여 실행되는 장치 또는 방법을 포괄하도록 의도된다. 본원에서 개시된 본 개시내용의 임의의 양상은 청구항의 하나 이상의 엘리먼트들에 의해 구현될 수도 있는 것으로 이해되어야 한다.
[0194] 본원에서 사용될 때, 단어 "예시적인"은 "일 예, 사례, 또는 예시로서 기능하는 것"을 의미한다. 본원에서 "예시적인"으로 설명하는 임의의 양상은 다른 양상들보다 바람직하거나 또는 유리한 것으로 반드시 해석되는 것은 아니다.
[0195] 본원에서 사용될 때, 아이템들의 리스트 "중 적어도 하나"를 인용하는 어구는 단일 멤버들을 포함한, 그들 아이템들의 임의의 조합을 지칭한다. 일 예로서, "a, b, 또는 c 중 적어도 하나"는 a, b, c, a-b, a-c, b-c, 및 a-b-c 뿐만 아니라, 동일한 엘리먼트의 배수들에 의한 임의의 조합(예컨대, a-a, a-a-a, a-a-b, a-a-c, a-b-b, a-c-c, b-b, b-b-b, b-b-c, c-c, 및 c-c-c 또는 a, b, 및 c 의 임의의 다른 순서)을 포괄하려는 것이다.
[0196] 본원에서 사용될 때, 용어 "결정하는 것"은 매우 다양한 액션들을 포괄한다. 예를 들어, "결정하는 것"은 계산하는 것, 컴퓨팅하는 것, 프로세싱하는 것, 도출하는 것, 연구하는 것, 탐색하는 것(예컨대, 테이블, 데이터베이스 또는 또 다른 데이터 구조에서 탐색하는 것), 확인하는 것(ascertaining) 등을 포함할 수도 있다. 또한, "결정하는 것"은 수신하는 것(예컨대, 정보를 수신하는 것), 액세스하는 것(예컨대, 메모리 내 데이터에 액세스하는 것) 등을 포함할 수도 있다. 또한, "결정하는 것"은 해결하는 것(resolving), 선택하는 것(selecting), 선정하는 것(choosing), 설정하는 것(establishing) 등을 포함할 수도 있다.
[0197] 본원에서 설명한 방법들은 방법들을 달성하기 위한 하나 이상의 단계들 또는 액션들을 포함한다. 방법 단계들 및/또는 액션들은 청구항들의 범위로부터 벗어나지 않으면서 서로 상호 교환될 수도 있다. 즉, 단계들 또는 액션들의 특정의 순서가 규정되지 않는 한, 특정의 단계들 및/또는 액션들의 순서 및/또는 사용은 청구항들의 범위로부터 벗어나지 않으면서 수정될 수도 있다. 또, 위에서 설명한 방법들의 다양한 동작들은 대응하는 기능들을 수행하는 것이 가능한 임의의 적합한 수단에 의해 수행될 수도 있다. 수단은 회로, 주문형 집적회로(ASIC) 또는 프로세서를 포함해서(그러나, 이것들로 제한되지는 않음) 다양한 하드웨어 및/또는 소프트웨어 컴포넌트(들) 및/또는 모듈(들)을 포함할 수도 있다. 일반적으로, 도면들에 예시된 동작들이 존재하는 경우, 그들 동작들은 유사한 번호를 갖는 대응하는 대응 수단-플러스-기능 컴포넌트들을 가질 수도 있다.
[0198] 다음 청구범위는 본원에서 도시된 실시예들에 제한하려는 것이 아니라, 청구범위의 언어와 일치하는 전체 범위에 부여되어야 한다. 청구항 내에서, 단수형의 엘리먼트에 대한 참조는 특별히 언급되지 않는 한, "하나 및 단지 하나"가 아닌, "하나 이상"을 의미하도록 의도되지 않는다. 달리 특별히 언급하지 않는 한, 용어 "일부(some)"는 하나 이상을 지칭한다. 엘리먼트가 어구 "하기 위한 수단(mean for)"을 이용하여 명확하게 인용되지 않거나 또는, 방법 청구항의 경우에, 엘리먼트가 어구 "하는 단계(step for)"를 이용하여 인용되지 않는 한, 어떤 청구범위 엘리먼트도 35 U.S.C. §112, 제6 조항의 규정에 의거하는 것으로 해석되지 않아야 한다. 통상의 기술자에게 공지되어 있거나 또는 추후 공지되게 될 본 개시내용 전반에 걸쳐 설명된 다양한 양상들의 엘리먼트들에 대한 모든 구조적 및 기능적 균등물들은 본원에 참조로 명시적으로 포함되며 청구범위에 의해 포괄되도록 의도된다. 더욱이, 본원에서 개시된 어떤 것도 이러한 개시내용이 청구항들에 명시적으로 인용되는지 여부에 상관없이, 대중에 전용되도록 의도되지 아니다.

Claims (30)

  1. 방법으로서,
    프로세스에 대한 데이터 흐름 그래프를 수신하는 단계 ― 상기 데이터 흐름 그래프는 복수의 노드들 및 복수의 에지들을 포함함 ―;
    상기 프로세스의 메모리 이용에 적어도 부분적으로 기초하여 상기 데이터 흐름 그래프에 대해 토폴로지 순서정렬을 생성하는 단계;
    미리 정의된 메모리 용량에 기초하여 상기 토폴로지 순서정렬에, 메모리 액세스에 대응하는 하나 이상의 새로운 노드들을 삽입함으로써 제1 수정된 토폴로지 순서정렬을 생성하는 단계;
    상기 제1 수정된 토폴로지 순서정렬에 기초하여 메모리에 메모리의 유닛들을 배정하는 단계; 및
    상기 제1 수정된 토폴로지 순서정렬에서 하나 이상의 노드들을 재배열함으로써 제2 수정된 토폴로지 순서정렬을 생성하는 단계를 포함하며,
    상기 제2 수정된 토폴로지 순서정렬은 복수의 하드웨어 컴포넌트들의 증가된 병렬 이용을 가능하게 하는, 방법.
  2. 제1항에 있어서,
    상기 제1 수정된 토폴로지 순서정렬에서 하나 이상의 노드들을 재배열하는 것은 데이터를 호스트 프로세싱 시스템 메모리로부터 상기 메모리로 로딩하는 것에 대응하는 하나 이상의 노드들을 상기 토폴로지 순서정렬에서 앞선 위치로 이동시키는 것을 포함하는, 방법.
  3. 제1항에 있어서,
    상기 데이터 흐름 그래프 내 상기 복수의 노드들은 상기 프로세스 동안 수행되는 동작들에 대응하며,
    상기 데이터 흐름 그래프 내 상기 복수의 에지들은 상기 동작들 간에 전달되는 데이터에 대응하며,
    상기 복수의 에지들의 각각의 개개의 에지는 상기 개개의 에지와 연관된 상기 데이터의 사이즈에 기초하여 개개의 가중치와 연관되며, 그리고
    상기 토폴로지 순서정렬을 생성하는 단계는 가중치들에 기초하여 상기 데이터 흐름 그래프에서 최소 컷(cut)들의 세트를 찾는 단계를 포함하는, 방법.
  4. 제3항에 있어서,
    상기 최소 컷들의 세트를 찾는 단계는,
    상기 복수의 에지들의 각각의 개개의 에지에 대해, 무한 가중치의 개개의 역방향들 에지를 추가함으로써,
    데이터 의존성들을 강화하기 위해 상기 데이터 흐름 그래프를 수정하는 단계를 포함하는, 방법.
  5. 제4항에 있어서,
    상기 최소 컷들의 세트를 찾는 단계는,
    적어도 하나의 유효한 경로가 소스로부터 상기 복수의 노드들 각각까지 그리고 상기 복수의 노드들 각각으로부터 싱크까지 상기 데이터 흐름 그래프에 존재하도록 보장함으로써,
    데이터 의존성들을 강화하기 위해 상기 데이터 흐름 그래프를 수정하는 단계를 더 포함하는, 방법.
  6. 제3항에 있어서,
    상기 최소 컷들의 세트를 찾는 단계는,
    상기 복수의 노드들의 적어도 하나의 소비자 노드로 데이터를 출력하는 상기 복수의 노드들의 생산자 노드를 식별함으로써,
    상기 생산자 노드에 의해 출력된 상기 데이터의 사이즈를 결정함으로써, 그리고
    배정해제 노드를 상기 데이터 흐름 그래프에 삽입함으로써,
    상기 가중치들을 상기 복수의 에지들에 할당하는 단계를 포함하고,
    상기 배정해제 노드를 상기 데이터 흐름 그래프에 삽입하는 것은,
    상기 생산자 노드에 의해 출력된 상기 데이터의 사이즈에 대응하는 가중치를 가진 제1 에지를 생성함으로써 ― 상기 제1 에지가 상기 생산자 노드로부터 상기 배정해제 노드까지 삽입됨 ―,
    제로의 가중치를 상기 생산자 노드로부터 상기 적어도 하나의 소비자 노드까지의 에지에 할당함으로써, 그리고
    제로의 가중치가 할당되는, 상기 적어도 하나의 소비자 노드로부터 상기 배정해제 노드까지의 에지를 생성함으로써 이루어지는, 방법.
  7. 제3항에 있어서,
    상기 최소 컷들의 세트를 찾는 단계는,
    소스로부터 상기 제1 인덱스 노드까지 무한 가중치를 가진 제1 에지를 생성함으로써,
    상기 제1 인덱스 노드로부터 데이터를 수신하는 소비자 노드들의 세트를 상기 복수의 노드들로부터 식별함으로써,
    상기 소비자 노드들의 세트 내 각각의 소비자 노드로부터 싱크까지 무한 가중치를 가진 에지들을 생성함으로써, 그리고
    상기 제1 최소 컷을 계산함으로써,
    상기 복수의 노드들의 제1 인덱스 노드에 대해, 제1 최소 컷이 상기 제1 인덱스 노드 이후에 발생하도록 제한하는 단계를 포함하며,
    상기 제1 최소 컷은 상기 제1 인덱스 노드를 상기 데이터 흐름 그래프의 제1 부분에 그리고 상기 제1 인덱스 노드의 모든 후속자들을 상기 데이터 흐름 그래프의 제2 부분에 배치하는, 방법.
  8. 제7항에 있어서,
    상기 최소 컷들의 세트를 찾는 단계는,
    상기 데이터 흐름 그래프의 상기 제1 및 제2 부분들에서 인덱스 노드들에 대해 최소 컷들을 반복적으로 계산하고, 미리 정의된 중지 조건이 만족될 때까지 상기 최소 컷들에 기초하여 상기 데이터 흐름 그래프의 상기 제1 부분과 상기 제2 부분을 분리하는 단계를 더 포함하는, 방법.
  9. 제7항에 있어서,
    상기 제1 인덱스 노드가 상기 데이터 흐름 그래프의 중심에 있다고 결정하는 것에 기초하여 상기 제1 인덱스 노드를 선택하는 단계를 더 포함하는, 방법.
  10. 제9항에 있어서,
    상기 제1 인덱스 노드가 상기 데이터 흐름 그래프 내 형제(sibling) 노드들의 세트의 하나의 노드라고 결정하는 단계; 및
    상기 형제 노드들의 세트의 제1 부분을 상기 데이터 흐름 그래프의 상기 제1 부분에 그리고 상기 형제 노드들의 세트의 제2 부분을 상기 데이터 흐름 그래프의 상기 제2 부분에 제한함으로써 상기 제1 최소 컷을 계산하는 단계를 더 포함하는, 방법.
  11. 프로세싱 시스템으로서,
    컴퓨터-실행가능한 명령들을 포함하는 메모리; 및
    상기 컴퓨터-실행가능한 명령들을 실행하여 상기 프로세싱 시스템으로 하여금 동작을 수행하게 하도록 구성된 하나 이상의 프로세서들을 포함하며,
    상기 동작은,
    프로세스에 대한 데이터 흐름 그래프를 수신하는 동작 ― 상기 데이터 흐름 그래프는 복수의 노드들 및 복수의 에지들을 포함함 ―;
    상기 프로세스의 메모리 이용에 적어도 부분적으로 기초하여 상기 데이터 흐름 그래프에 대해 토폴로지 순서정렬을 생성하는 동작;
    미리 정의된 메모리 용량에 기초하여 상기 토폴로지 순서정렬에, 메모리 액세스에 대응하는 하나 이상의 새로운 노드들을 삽입함으로써 제1 수정된 토폴로지 순서정렬을 생성하는 동작;
    상기 제1 수정된 토폴로지 순서정렬에 기초하여 메모리에 메모리의 유닛들을 배정하는 동작; 및
    상기 제1 수정된 토폴로지 순서정렬에서 하나 이상의 노드들을 재배열함으로써 제2 수정된 토폴로지 순서정렬을 생성하는 동작을 포함하며,
    상기 제2 수정된 토폴로지 순서정렬은 복수의 하드웨어 컴포넌트들의 증가된 병렬 이용을 가능하게 하는, 프로세싱 시스템.
  12. 제11항에 있어서,
    상기 제1 수정된 토폴로지 순서정렬에서 하나 이상의 노드들을 재배열하는 것은 데이터를 호스트 프로세싱 시스템 메모리로부터 상기 메모리로 로딩하는 것에 대응하는 하나 이상의 노드들을 상기 토폴로지 순서정렬에서 앞선 위치로 이동시키는 것을 포함하는, 프로세싱 시스템.
  13. 제11항에 있어서,
    상기 데이터 흐름 그래프 내 상기 복수의 노드들은 상기 프로세스 동안 수행되는 동작들에 대응하며,
    상기 데이터 흐름 그래프 내 상기 복수의 에지들은 상기 동작들 간에 전달되는 데이터에 대응하며,
    상기 복수의 에지들의 각각의 개개의 에지는 상기 개개의 에지와 연관된 상기 데이터의 사이즈에 기초하여 개개의 가중치와 연관되며, 그리고
    상기 토폴로지 순서정렬을 생성하는 동작은 가중치들에 기초하여 상기 데이터 흐름 그래프에서 최소 컷들의 세트를 찾는 동작을 포함하는, 프로세싱 시스템.
  14. 제13항에 있어서,
    상기 최소 컷들의 세트를 찾는 동작은,
    상기 복수의 에지들의 각각의 개개의 에지에 대해, 무한 가중치의 개개의 역방향들 에지를 추가함으로써,
    데이터 의존성들을 강화하기 위해 상기 데이터 흐름 그래프를 수정하는 동작을 포함하는, 프로세싱 시스템.
  15. 제14항에 있어서,
    상기 최소 컷들의 세트를 찾는 동작은,
    적어도 하나의 유효한 경로가 소스로부터 상기 복수의 노드들 각각까지 그리고 상기 복수의 노드들 각각으로부터 싱크까지 상기 데이터 흐름 그래프에 존재하도록 보장함으로써,
    데이터 의존성들을 강화하기 위해 상기 데이터 흐름 그래프를 수정하는 동작을 더 포함하는, 프로세싱 시스템.
  16. 제13항에 있어서,
    상기 최소 컷들의 세트를 찾는 동작은,
    상기 복수의 노드들의 적어도 하나의 소비자 노드로 데이터를 출력하는 상기 복수의 노드들의 생산자 노드를 식별함으로써,
    상기 생산자 노드에 의해 출력된 상기 데이터의 사이즈를 결정함으로써, 그리고
    배정해제 노드를 상기 데이터 흐름 그래프에 삽입함으로써,
    상기 가중치들을 상기 복수의 에지들에 할당하는 동작을 포함하고,
    상기 배정해제 노드를 상기 데이터 흐름 그래프에 삽입하는 것은,
    상기 생산자 노드에 의해 출력된 상기 데이터의 사이즈에 대응하는 가중치를 가진 제1 에지를 생성함으로써 ― 상기 제1 에지가 상기 생산자 노드로부터 상기 배정해제 노드까지 삽입됨 ―,
    제로의 가중치를 상기 생산자 노드로부터 상기 적어도 하나의 소비자 노드까지의 에지에 할당함으로써, 그리고
    제로의 가중치가 할당되는, 상기 적어도 하나의 소비자 노드로부터 상기 배정해제 노드까지의 에지를 생성함으로써 이루어지는, 프로세싱 시스템.
  17. 제13항에 있어서,
    상기 최소 컷들의 세트를 찾는 동작은,
    소스로부터 상기 제1 인덱스 노드까지 무한 가중치를 가진 제1 에지를 생성함으로써,
    상기 제1 인덱스 노드로부터 데이터를 수신하는 소비자 노드들의 세트를 상기 복수의 노드들로부터 식별함으로써,
    상기 소비자 노드들의 세트 내 각각의 소비자 노드로부터 싱크까지 무한 가중치를 가진 에지들을 생성함으로써, 그리고
    상기 제1 최소 컷을 계산함으로써,
    상기 복수의 노드들의 제1 인덱스 노드에 대해, 제1 최소 컷이 상기 제1 인덱스 노드 이후에 발생하도록 제한하는 동작을 포함하며,
    상기 제1 최소 컷은 상기 제1 인덱스 노드를 상기 데이터 흐름 그래프의 제1 부분에 그리고 상기 제1 인덱스 노드의 모든 후속자들을 상기 데이터 흐름 그래프의 제2 부분에 배치하는, 프로세싱 시스템.
  18. 제17항에 있어서,
    상기 최소 컷들의 세트를 찾는 동작은 상기 데이터 흐름 그래프의 상기 제1 및 제2 부분들에서 인덱스 노드들에 대해 최소 컷들을 반복적으로 계산하고, 미리 정의된 중지 조건이 만족될 때까지 상기 최소 컷들에 기초하여 상기 데이터 흐름 그래프의 상기 제1 부분과 상기 제2 부분을 분리하는 동작을 더 포함하는, 프로세싱 시스템.
  19. 제17항에 있어서,
    상기 제1 인덱스 노드가 상기 데이터 흐름 그래프의 중심에 있다고 결정하는 것에 기초하여 상기 제1 인덱스 노드를 선택하는 동작을 더 포함하는, 프로세싱 시스템.
  20. 제19항에 있어서,
    상기 제1 인덱스 노드가 상기 데이터 흐름 그래프 내 형제 노드들의 세트의 하나의 노드라고 결정하는 동작; 및
    상기 형제 노드들의 세트의 제1 부분을 상기 데이터 흐름 그래프의 상기 제1 부분에 그리고 상기 형제 노드들의 세트의 제2 부분을 상기 데이터 흐름 그래프의 상기 제2 부분에 제한함으로써 상기 제1 최소 컷을 계산하는 동작을 더 포함하는, 프로세싱 시스템.
  21. 제11항에 있어서,
    상기 토폴로지 순서정렬을 생성하도록 구성된 순서정렬 컴포넌트;
    메모리 액세스에 대응하는 상기 하나 이상의 새로운 노드들을 삽입함으로써 상기 제1 수정된 토폴로지 순서정렬을 생성하도록 구성된 메모리 컴포넌트;
    상기 메모리의 유닛들을 배정하도록 구성된 배정 컴포넌트; 및
    상기 제1 수정된 토폴로지 순서정렬에서 하나 이상의 노드들을 재배열함으로써 상기 제2 토폴로지 순서정렬을 생성하도록 구성된 재순서정렬 컴포넌트를 더 포함하는, 프로세싱 시스템.
  22. 컴퓨터-실행가능한 명령들을 포함하는 비-일시적인 컴퓨터-판독가능 저장 매체로서,
    상기 컴퓨터-실행가능한 명령들은 프로세싱 시스템의 하나 이상의 프로세서들에 의해 실행될 때, 상기 프로세싱 시스템으로 하여금 동작을 수행하게 하고,
    상기 동작은,
    프로세스에 대한 데이터 흐름 그래프를 수신하는 동작 ― 상기 데이터 흐름 그래프는 복수의 노드들 및 복수의 에지들을 포함함 ―;
    상기 프로세스의 메모리 이용에 적어도 부분적으로 기초하여 상기 데이터 흐름 그래프에 대해 토폴로지 순서정렬을 생성하는 동작;
    미리 정의된 메모리 용량에 기초하여 상기 토폴로지 순서정렬에, 메모리 액세스에 대응하는 하나 이상의 새로운 노드들을 삽입함으로써 제1 수정된 토폴로지 순서정렬을 생성하는 동작;
    상기 제1 수정된 토폴로지 순서정렬에 기초하여 메모리에 메모리의 유닛들을 배정하는 동작; 및
    상기 제1 수정된 토폴로지 순서정렬에서 하나 이상의 노드들을 재배열함으로써 제2 수정된 토폴로지 순서정렬을 생성하는 동작을 포함하며,
    상기 제2 수정된 토폴로지 순서정렬은 복수의 하드웨어 컴포넌트들의 증가된 병렬 이용을 가능하게 하는, 비-일시적인 컴퓨터-판독가능 저장 매체.
  23. 제22항에 있어서,
    상기 제1 수정된 토폴로지 순서정렬에서 하나 이상의 노드들을 재배열하는 것은 데이터를 호스트 프로세싱 시스템 메모리로부터 상기 메모리로 로딩하는 것에 대응하는 하나 이상의 노드들을 상기 토폴로지 순서정렬에서 앞선 위치로 이동시키는 것을 포함하는, 비-일시적인 컴퓨터-판독가능 저장 매체.
  24. 제22항에 있어서,
    상기 데이터 흐름 그래프 내 상기 복수의 노드들은 상기 프로세스 동안 수행되는 동작들에 대응하며,
    상기 데이터 흐름 그래프 내 상기 복수의 에지들은 상기 동작들 간에 전달되는 데이터에 대응하며,
    상기 복수의 에지들의 각각의 개개의 에지는 상기 개개의 에지와 연관된 상기 데이터의 사이즈에 기초하여 개개의 가중치와 연관되며, 그리고
    상기 토폴로지 순서정렬을 생성하는 동작은 가중치들에 기초하여 상기 데이터 흐름 그래프에서 최소 컷들의 세트를 찾는 동작을 포함하는, 비-일시적인 컴퓨터-판독가능 저장 매체.
  25. 제24항에 있어서,
    상기 최소 컷들의 세트를 찾는 동작은,
    상기 복수의 에지들의 각각의 개개의 에지에 대해, 무한 가중치의 개개의 역방향들 에지를 추가함으로써, 그리고
    적어도 하나의 유효한 경로가 소스로부터 상기 복수의 노드들 각각까지 그리고 상기 복수의 노드들 각각으로부터 싱크까지 상기 데이터 흐름 그래프에 존재하도록 보장함으로써,
    데이터 의존성들을 강화하기 위해 상기 데이터 흐름 그래프를 수정하는 동작을 포함하는, 비-일시적인 컴퓨터-판독가능 저장 매체.
  26. 제24항에 있어서,
    상기 최소 컷들의 세트를 찾는 동작은,
    상기 복수의 노드들의 적어도 하나의 소비자 노드로 데이터를 출력하는 상기 복수의 노드들의 생산자 노드를 식별함으로써,
    상기 생산자 노드에 의해 출력된 상기 데이터의 사이즈를 결정함으로써, 그리고
    배정해제 노드를 상기 데이터 흐름 그래프에 삽입함으로써,
    상기 가중치들을 상기 복수의 에지들에 할당하는 동작을 포함하고,
    상기 배정해제 노드를 상기 데이터 흐름 그래프에 삽입하는 것은,
    상기 생산자 노드에 의해 출력된 상기 데이터의 사이즈에 대응하는 가중치를 가진 제1 에지를 생성함으로써 ― 상기 제1 에지가 상기 생산자 노드로부터 상기 배정해제 노드까지 삽입됨 ―,
    제로의 가중치를 상기 생산자 노드로부터 상기 적어도 하나의 소비자 노드까지의 에지에 할당함으로써, 그리고
    제로의 가중치가 할당되는, 상기 적어도 하나의 소비자 노드로부터 상기 배정해제 노드까지의 에지를 생성함으로써 이루어지는, 비-일시적인 컴퓨터-판독가능 저장 매체.
  27. 제24항에 있어서,
    상기 최소 컷들의 세트를 찾는 동작은,
    소스로부터 상기 제1 인덱스 노드까지 무한 가중치를 가진 제1 에지를 생성함으로써,
    상기 제1 인덱스 노드로부터 데이터를 수신하는 소비자 노드들의 세트를 상기 복수의 노드들로부터 식별함으로써,
    상기 소비자 노드들의 세트 내 각각의 소비자 노드로부터 싱크까지 무한 가중치를 가진 에지들을 생성함으로써, 그리고
    상기 제1 최소 컷을 계산함으로써,
    상기 복수의 노드들의 제1 인덱스 노드에 대해, 제1 최소 컷이 상기 제1 인덱스 노드 이후에 발생하도록 제한하는 동작을 포함하며,
    상기 제1 최소 컷은 상기 제1 인덱스 노드를 상기 데이터 흐름 그래프의 제1 부분에 그리고 상기 제1 인덱스 노드의 모든 후속자들을 상기 데이터 흐름 그래프의 제2 부분에 배치하는, 비-일시적인 컴퓨터-판독가능 저장 매체.
  28. 제27항에 있어서,
    상기 최소 컷들의 세트를 찾는 동작은,
    상기 데이터 흐름 그래프의 상기 제1 및 제2 부분들에서 인덱스 노드들에 대해 최소 컷들을 반복적으로 계산하고, 미리 정의된 중지 조건이 만족될 때까지 상기 최소 컷들에 기초하여 상기 데이터 흐름 그래프의 상기 제1 부분과 상기 제2 부분을 분리하는 동작을 더 포함하는, 비-일시적인 컴퓨터-판독가능 저장 매체.
  29. 제28항에 있어서,
    상기 제1 인덱스 노드가 상기 데이터 흐름 그래프의 중심에 있다고 결정하는 것에 기초하여 상기 제1 인덱스 노드를 선택하는 동작;
    상기 제1 인덱스 노드가 상기 데이터 흐름 그래프 내 형제 노드들의 세트의 하나의 노드라고 결정하는 동작; 및
    상기 형제 노드들의 세트의 제1 부분을 상기 데이터 흐름 그래프의 상기 제1 부분에 그리고 상기 형제 노드들의 세트의 제2 부분을 상기 데이터 흐름 그래프의 상기 제2 부분에 제한함으로써 상기 제1 최소 컷을 계산하는 동작을 더 포함하는, 비-일시적인 컴퓨터-판독가능 저장 매체.
  30. 프로세싱 시스템으로서,
    프로세스에 대한 데이터 흐름 그래프를 수신하기 위한 수단 ― 상기 데이터 흐름 그래프는 복수의 노드들 및 복수의 에지들을 포함함 ―;
    상기 프로세스의 메모리 이용에 적어도 부분적으로 기초하여 상기 데이터 흐름 그래프에 대해 토폴로지 순서정렬을 생성하기 위한 수단;
    미리 정의된 메모리 용량에 기초하여 상기 토폴로지 순서정렬에, 메모리 액세스에 대응하는 하나 이상의 새로운 노드들을 삽입함으로써 제1 수정된 토폴로지 순서정렬을 생성하기 위한 수단;
    상기 제1 수정된 토폴로지 순서정렬에 기초하여 메모리에 메모리의 유닛들을 배정하기 위한 수단; 및
    상기 제1 수정된 토폴로지 순서정렬에서 하나 이상의 노드들을 재배열함으로써 제2 수정된 토폴로지 순서정렬을 생성하기 위한 수단을 포함하며,
    상기 제2 수정된 토폴로지 순서정렬은 복수의 하드웨어 컴포넌트들의 증가된 병렬 이용을 가능하게 하는, 프로세싱 시스템.
KR1020237006310A 2020-09-01 2021-09-01 메모리-한도 스케줄링 KR20230058621A (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US202063073269P 2020-09-01 2020-09-01
US63/073,269 2020-09-01
US17/463,393 US20220066834A1 (en) 2020-09-01 2021-08-31 Memory-bound scheduling
US17/463,393 2021-08-31
PCT/US2021/048745 WO2022051422A1 (en) 2020-09-01 2021-09-01 Memory-bound scheduling

Publications (1)

Publication Number Publication Date
KR20230058621A true KR20230058621A (ko) 2023-05-03

Family

ID=80357696

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020237006310A KR20230058621A (ko) 2020-09-01 2021-09-01 메모리-한도 스케줄링

Country Status (6)

Country Link
US (1) US20220066834A1 (ko)
EP (1) EP4208786A1 (ko)
KR (1) KR20230058621A (ko)
CN (1) CN115968467A (ko)
BR (1) BR112023003044A2 (ko)
WO (1) WO2022051422A1 (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116957170B (zh) * 2023-09-20 2023-12-22 中国南方电网有限责任公司 一种电力系统优化问题的约束集约减方法及系统

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20010044850A1 (en) * 1998-07-22 2001-11-22 Uri Raz Method and apparatus for determining the order of streaming modules
US20090327195A1 (en) * 2008-06-27 2009-12-31 Microsoft Corporation Root cause analysis optimization
US20130055091A1 (en) * 2011-08-23 2013-02-28 Cisco Technology, Inc. Graph-Based Virtual Data Center Requests
US8938599B2 (en) * 2012-03-15 2015-01-20 Hewlett-Packard Development Company, L. P. Distributed graph storage system
US9411558B2 (en) * 2012-10-20 2016-08-09 Luke Hutchison Systems and methods for parallelization of program code, interactive data visualization, and graphically-augmented code editing
US10664757B2 (en) * 2015-09-16 2020-05-26 International Business Machines Corporation Cognitive operations based on empirically constructed knowledge graphs
EP3612931B1 (en) * 2017-04-17 2024-06-05 Deepsig Inc. Placement and scheduling of radio signal processing dataflow operations
US10515431B2 (en) * 2017-12-12 2019-12-24 Intel Corporation Global optimal path determination utilizing parallel processing
US20190286972A1 (en) * 2018-03-14 2019-09-19 Microsoft Technology Licensing, Llc Hardware accelerated neural network subgraphs
US10868728B2 (en) * 2018-08-22 2020-12-15 Hewlett Packard Enterprise Development Lp Graph-based network management
US11861464B2 (en) * 2019-10-31 2024-01-02 Adobe Inc. Graph data structure for using inter-feature dependencies in machine-learning

Also Published As

Publication number Publication date
EP4208786A1 (en) 2023-07-12
BR112023003044A2 (pt) 2023-03-21
CN115968467A (zh) 2023-04-14
WO2022051422A1 (en) 2022-03-10
US20220066834A1 (en) 2022-03-03

Similar Documents

Publication Publication Date Title
Khorasani et al. Scalable simd-efficient graph processing on gpus
Wahib et al. Scalable kernel fusion for memory-bound GPU applications
Kllapi et al. Schedule optimization for data processing flows on the cloud
Unat et al. Mint: realizing CUDA performance in 3D stencil methods with annotated C
US11144348B2 (en) Heterogeneous computing system and method including analyzing expected costs of compute kernels
CN113703775B (zh) 一种编译方法、装置、设备及存储介质
CN110058883A (zh) 一种基于opu的cnn加速方法及系统
Lu et al. Optimizing depthwise separable convolution operations on gpus
Li et al. A simple yet effective balanced edge partition model for parallel computing
De Sensi et al. Bringing parallel patterns out of the corner: The p3 arsec benchmark suite
Martín et al. Algorithmic strategies for optimizing the parallel reduction primitive in CUDA
Wonnacott et al. Automatic tiling of “mostly-tileable” loop nests
Fell et al. Force-directed scheduling for data flow graph mapping on coarse-grained reconfigurable architectures
Van Luong et al. GPU-based multi-start local search algorithms
Anderson et al. Efficient automatic scheduling of imaging and vision pipelines for the GPU
CN112015765A (zh) 基于缓存价值的Spark缓存淘汰方法及系统
KR20230058621A (ko) 메모리-한도 스케줄링
Weber et al. Auto-Tuning Complex Array Layouts for GPUs.
Jeon et al. Loop pipelining in hardware-software partitioning
Meyerhenke et al. Accelerating shape optimizing load balancing for parallel FEM simulations by algebraic multigrid
Chang et al. Compiling deep learning models for custom hardware accelerators
Zhang et al. Optimizing data allocation for loops on embedded systems with scratch-pad memory
Shu et al. ROAM: memory-efficient large DNN training via optimized operator ordering and memory layout
CN117008916A (zh) 张量程序优化方法和装置
US11610102B1 (en) Time-based memory allocation for neural network inference