KR20130122619A - 선택된 실행 런타임을 갖는 실행을 위한 사용자 코드의 런타임 독립적 표현 - Google Patents

선택된 실행 런타임을 갖는 실행을 위한 사용자 코드의 런타임 독립적 표현 Download PDF

Info

Publication number
KR20130122619A
KR20130122619A KR1020137008779A KR20137008779A KR20130122619A KR 20130122619 A KR20130122619 A KR 20130122619A KR 1020137008779 A KR1020137008779 A KR 1020137008779A KR 20137008779 A KR20137008779 A KR 20137008779A KR 20130122619 A KR20130122619 A KR 20130122619A
Authority
KR
South Korea
Prior art keywords
runtime
execution
computer system
tasks
user code
Prior art date
Application number
KR1020137008779A
Other languages
English (en)
Other versions
KR101825772B1 (ko
Inventor
크리쉬난 바라다라잔
마이클 엘 츄
Original Assignee
마이크로소프트 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 마이크로소프트 코포레이션 filed Critical 마이크로소프트 코포레이션
Publication of KR20130122619A publication Critical patent/KR20130122619A/ko
Application granted granted Critical
Publication of KR101825772B1 publication Critical patent/KR101825772B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/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/5033Allocation 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 data affinity
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)
  • Devices For Executing Special Programs (AREA)
  • Debugging And Monitoring (AREA)

Abstract

컴퓨터 시스템의 실행 환경은 복수의 실행 런타임을 이용하여 사용자 코드를 실행시킬 수 있다. 실행 환경은 사용자 코드를 런타임 독립적 표현으로 변환하고, 런타임 독립적 표현을 실행하기 위한 실행 런타임을 선택하며, 선택된 실행 런타임에 대한 스케줄러를 호출한다. 스케줄러는 선택된 실행 런타임의 동시성 메커니즘을 이용하여 컴퓨터 시스템에 의한 실행을 위해 런타임 독립적 표현으로부터 작업을 디스패치한다.

Description

선택된 실행 런타임을 갖는 실행을 위한 사용자 코드의 런타임 독립적 표현 {RUNTIME AGNOSTIC REPRESENTATION OF USER CODE FOR EXECUTION WITH SELECTED EXECUTION RUNTIME}
컴퓨터 시스템들은 종종, 동일한 프로그램의 서로 다른 부분들을 동시에(즉, 병렬로) 실행하기 위한 기능을 갖는다. 프로그래머는 일반적으로, 지정된 부분들의 동시 실행을 가능하게 하도록 프로그램 내에 동시성을 표현한다. 그러나, 프로그램에서의 동시성의 표현은 프로그램 실행에 사용되는 실행 환경에 강하게 연결되는 것이 일반적이다. 프로그램의 실행 환경은, 예를 들어, 컴퓨터 시스템의 타입, 프로그램의 프로그래밍 언어, 그리고, 컴퓨터 시스템 내 런타임 라이브러리(들)를 포함할 수 있다. 이러한 연결의 결과로, 일 실행 환경을 위해 기록된 프로그램은 다른 실행 환경에서는 실행가능하지 않을 수 있다.
프로그램이 서로 다른 실행 환경에서 실행가능함에도 불구하고, 프로그램은 일부 실행 환경에서 가용한 컴퓨터 리소스들을 완전하게 이용하지 못할 수 있다. 예를 들어, 단일 기계용으로 기록된 프로그램은 기계들의 클러스터 또는 클라우드 상에서 실행되지 않을 수 있다. 예를 들어, 클러스터 또는 클라우드에 새 기계를 추가함으로써, 클러스터 또는 클라우드 상에서 실행되도록 프로그램이 수정되는 경우에도, 프로그램은 동적으로 이용가능해지는 리소스들을 이용하지 못할 수 있다.
본 요약은 상세한 설명에서 아래 더 설명되는 단순화된 형태의 개념의 선택사항을 도입하기 위해 제공된다. 이러한 요약은 청구되는 대상의 핵심적 특징 또는 본질적 특징을 식별하고자 하는 것이 아니며, 청구되는 발명의 범위를 제한하는 데 사용되고자 하는 것도 아니다.
컴퓨터 시스템의 실행 환경은 복수의 실행 런타임을 이용하여 사용자 코드를 실행시킬 수 있다. 실행 환경은 사용자 코드를 런타임 독립적 표현(runtime agnostic representation)으로 변환하고, 런타임 독립적 표현을 실행하기 위한 실행 런타임을 선택하며, 선택된 실행 런타임에 대한 스케줄러를 호출한다. 스케줄러는 선택된 실행 런타임의 동시성 메커니즘을 이용하여 컴퓨터 시스템에 의한 실행을 위해 런타임 독립적 표현으로부터 작업을 디스패치(dispatch)한다.
첨부 도면은 실시예의 추가적인 이해를 제공하기 위해 포함되고, 본 명세서의 일부분에 포함되고 본 명세서의 일부분을 구성한다. 도면은 실시예들을 도시하고, 상세한 설명과 함께, 실시예의 원리를 설명하는 기능을 한다. 다른 실시예들 및 실시예들의 다수의 장점은 다음의 상세한 설명을 참조하면 보다 쉽게 이해할 수 있을 것이다. 도면의 요소들은 서로에 대해 반드시 축적에 맞게 그려지는 것은 아니다. 유사한 도면 부호들은 대응하는 유사 부분을 나타낸다.
도 1은 컴퓨터 시스템의 실행 환경의 일 실시예를 나타내는 블록도다.
도 2는 사용자 코드의 런타임 독립적 중간 표현을 발생시키는 실시예를 나타내는 블록도다.
도 3은 런타임 독립적 중간 표현을 이용하여 사용자 코드를 실행하는 실시예를 나타내는 블록도다.
도 4a-4c는 도 1에 도시되는 실행 환경을 구현하도록 구성된 컴퓨터 시스템의 실시예를 나타내는 블록도다.
다음의 상세한 설명에서, 발명을 실시할 수 있는 구체적 실시예를 도해를 통해 도시하고, 그리고 상세한 설명의 일부분을 형성하는, 첨부 도면을 참조한다. 이러한 측면에서, "상부", "하부", "전방", "후방", "상승", 및 "하강" 등과 같은 지향성 용어는 설명되는 도면의 방향을 참조하여 사용된다. 실시예의 구성요소들이 서로 다른 다수의 방향으로 위치할 수 있기 때문에, 방향 용어는 설명을 위해 제공될 뿐 전혀 제한적인 것이 아니다. 본 발명의 범위로부터 벗어나지 않으면서, 다른 실시예들이 이용될 수 있고 구조적 또는 논리적 변화가 이루어질 수 있다. 따라서, 다음의 상세한 설명은 제한적인 측면으로 취급되어서는 안되고, 본 발명의 범위는 첨부된 청구범위에 의해 형성된다.
여기서 설명되는 다양한 예시적 실시예의 특징들은 달리 구체적으로 명시하지 않을 경우, 서로 조합될 수 있다.
도 1은 도 4a에 도시되는 컴퓨터 시스템(100)(예를 들어, 단일 기계), 도 4b에 도시되는 컴퓨터 시스템(150)(예를 들어, 기계들의 클러스터), 또는 도 4c에 도시되는 컴퓨터 시스템(160)(예를 들어, 기계들의 클라우드)과 같은 컴퓨터 시스템에서의 실행 환경(10)의 일 실시예를 나타내는 블록도다. 실행 환경(10)은 컴퓨터 시스템의 런타임 작동 모드를 나타내고, 이 경우 컴퓨터 시스템은 도 4a에 도시되는 그리고 아래에서 추가적으로 상세하게 설명되는 처리 코어(103)와 같이, 컴퓨터 시스템의 하나 이상의 처리 코어 상에서 명령을 실행하고 있다. 실행 환경(10)은 한 세트 2개 이상의 작업(14)을 갖는 사용자 코드(12), 런타임-중립적 라이브러리(16), 사용자 코드(12)의 런타임-중립적 표현(RAR)(18), 호출된 스케줄러(20), 실행 런타임(24(1)-24(M))을 포함하고, 이때, M은 2보다 크거나 같은 정수이고 M번째 실행 런타임(24(M))을 표시한다.
실행 환경(10)은 서로 다른 실행 런타임(24(1)-24(M))을 이용하여 사용자 코드(12)를 실행시키는 분배형 작업 프로그래밍 모델을 제공한다. 특히, 실행 환경(10)은 실행 환경(10)의 컴퓨터 시스템 내에서 사용자 코드(12)의 실행을 스케일링하도록, 선택된 실행 런타임(24)에 사용자 코드(12)를 동적으로 바인딩한다. 실행 환경(10)은 런타임-중립적 라이브러리(16), RAR(18), 스케줄러(20), 및 선택된 실행 런타임(24)을 이용하여, 사용자 코드(12)에 의해 규정되는 작업(14)을 동시에 실행하게 한다.
각각의 실행 런타임(24(1)-24(M))은 통상적으로, 기본적인 컴퓨터 시스템에 적합한 프로그래밍 언어 및/또는 프로그래밍 모델에 대응한다. 예를 들어, 하나의 실행 런타임(24)(예를 들어, Microsoft Concurrency Runtime (concRT))은 복수의 처리 코어를 갖는 단일 기계(예를 들어, 도 4a에 도시되는 컴퓨터 시스템(100)) 상에서 사용자 코드(12)의 병렬 실행을 개선시키도록 설계될 수 있고, 다른 실행 런타임(24)(예를 들어, Message Passing Interface(MPI) 런타임)은 기계(예를 들어, 도 4b에 도시되는 컴퓨터 시스템(150))들의 클러스터 상에서 사용자 코드(12)의 병렬 실행을 개선시키도록 설계될 수 있으며, 또 다른 실행 런타임(24)은 기계(예를 들어, 도 4c에 도시되는 컴퓨터 시스템(160))들의 클라우드 상에서 사용자 코드(12)의 병렬 실행을 개선시키도록 설계될 수 있다.
사용자 코드(12)는 하나 이상의 병렬 알고리즘의 직관적 표현을 형성하는 명령들의 시퀀스를 포함한다. 사용자 코드(12)는, 작업들(14) 및 각각의 알고리즘 내에서의 작업들(14)의 상호작용을 명시함으로써 각각의 알고리즘을 데이터 흐름에 기초한다. 사용자 코드(12)는 어떤 특정 실행 런타임(24(1)-24(M))의 프로그래밍 특징 또는 구성을 명시적으로 참조하지 않으면서 작업(14) 및 작업(14)의 상호작용을 표현한다. 따라서, 사용자 코드(12)는 RAR(18)로 변환되어, 런타임-중립적 라이브러리(16)에 의해 선택되는 실행 런타임(24(1)-24(M))과 스케줄러를 이용하여 실행될 수 있다. 일 실시예에서, 사용자 코드(12)는 작업(14)의 실행을 개시하기 위해 런타임-중립적 라이브러리(16) 내 애플리케이션 프로그램 인터페이스(API)를 호출하는 명령을 포함한다. 다른 실시예에서, 사용자 코드(12)는 동적으로 선택되는 실행 런타임(24(1)-24(M))을 이용하여 작업(14)의 실행을 개시하기 위해 런타임-중립적 라이브러리(16)에 의해 제공되는 다른 프로그래밍 언어 구성 및/또는 대응하는 툴을 이용한다.
각각의 작업(14)은 컴퓨터 시스템에 의해 실행될 때 단위 일을 수행하는 명령들의 시퀀스를 포함한다. 각각의 작업(14)은 독립형(self-contained)이고(즉, 부작용(side effect)이 없고), 그리고, 지정된 한 세트의 입력 데이터에 대해 동작하여 지정된 한 세트의 출력 데이터를 생성한다. 일 작업(14)에 의해 생성되는 상기 한 세트의 출력 데이터를, 다른 작업(14)에 대한 한 세트의 입력 데이터의 전부 또는 일부분으로 사용할 수 있다. 따라서, 작업(14)은 하나 이상의 다른 작업(14)에 의해 생성된 입력 데이터를 이용할 수 있고, 하나 이상의 작업(14)에 의해 입력 데이터로 사용될 출력 데이터를 생성할 수 있다. 그러나, 작업(14)은 데이터를 공유하지 않도록(즉, 동시에 동일 세트의 데이터에 대해 작동하도록) 정의된다. 작업(14)의 입력 및 출력 데이터는 잘 정의되기 때문에, 작업(14)의 상호작용은 런타임-중립적 라이브러리(16)에 의해 결정될 수 있다. 작업(14)에 대한 한 세트의 입력 데이터가 가용해질 때 컴퓨터 시스템의 처리 코어에 의해 동시 실행을 위해 스케줄러(20)에 의해 각각의 작업(14)이 활성화 및 디스패치될 수 있도록, 작업(14)이 코딩된다.
일 실시예에서, 사용자 코드(12)는 원시의(native), 즉, 관리되지 않은(unmanged), 프로그래밍 언어(예를 들어, C++)로 기록된다. 본 실시예에서, 각각의 작업(14)은 한 세트의 시퀀스 명령 또는 다른 적절한 명령을 포함하는 C++ 람다 표현에 대한 추상(abstraction)으로 코딩될 수 있다. 다른 실시예에서, 사용자 코드(12)는, RAR(18)로 변환되고 선택된 실행 런타임(24(1)-24(M))에 의해 실행될 수 있는 다른 적절한 원시 프로그래밍 언어로 기록될 수 있다. 마찬가지로, 각각의 작업(14)은 다른 적절한 프로그래밍 언어 구조를 이용하여 코딩될 수 있다.
사용자 코드(12)는 적층 모델 또는 인터프리터 모델과 같이, 임의의 적절한 컴퓨터 시스템 실행 모델에 기초하여 하나 이상의 컴퓨터 시스템에서 작동하도록 구성될 수 있고, 애플리케이션, 라이브러리 함수, 또는 운영 체제 서비스와 같은 임의의 적절한 타입의 코드를 나타낼 수 있다. 사용자 코드(12)는 규정된 메모리 어드레스 공간을 포함하는 컴퓨터 시스템의 한 세트의 할당 리소스와 연관된 프로그램 상태 및 기계 상태를 갖는다. 사용자 코드(12)는 실행 환경(10) 내 임의의 공존 프로세스로부터 자체적으로 또는 실질적으로 자체적으로 실행된다. 따라서, 사용자 코드(12)는 공존(co-existing) 프로세스의 프로그램 상태, 또는, 공존 프로세스에 할당된 임의의 리소스의 기계 상태를 해롭게 변경시키지 않는다. 마찬가지로, 공존 프로세스는 사용자 코드(12)의 프로그램 상태, 또는, 사용자 코드(12)에 할당된 임의의 리소스의 기계 상태를 해롭게 변경시키지 않는다.
사용자 코드(12)가 작업(14) 실행을 개시함에 따라, 런타임-중립적 라이브러리(16)는 사용자 코드(12)를 RAR(18)로 변환하고, RAR(18) 실행을 위한 실행 런타임(24)을 선택하며, 선택된 실행 런타임(24)에 대한 스케줄러(20)를 호출한다. 상술한 바와 같이, 사용자 코드(12)는 런타임-중립적 라이브러리(16)에서 API를 호출할 수 있고, 또는, 다른 적절한 프로그래밍 구성을 이용하여 작업(14) 실행을 개시할 수 있다.
런타임-중립적 라이브러리(16)는 사용자 프로그램(12)의 내재적 병렬성에 기초하여 사용자 코드(12) 내 작업(14) 및 작업(14)들의 상호작용을 식별한다. 런타임-중립적 라이브러리(16)는, RAR(18)이 사용자 코드(12)의 내재적 병렬성을 구체화하고 임의의 실행 런타임(24(1)-24(M))에 의해 실행될 수 있도록, 사용자 코드(12)를 RAR(18)로 변환한다. RAR(18)은 임의의 실행 런타임(24(1)-24(M))의 스케줄러(20)에 전달될 수 있는 작업(14)의 추상을 포함한다. 일 실시예에서, 런타임-중립적 라이브러리(16)는 사용자 코드(12)의 데이터 흐름을 표현하기 위해 사용자 코드(12)의 작업들 사이의 연속성을 명시하는 방향성 비사이클 그래프(DAG: Directed Acyclic Graph)를 형성함으로써 RAR(18)을 생성한다. DAG를 이용하여, 런타임-중립적 라이브러리(16)는 작업(14)을 나타내는 노드를 형성하고, 작업들 사이의 데이터 흐름(즉, 상호작용)에 따라 노드들 사이의 관계를 표현한다. 다른 실시예에서, 런타임-중립적 라이브러리(16)는 사용자 프로그램(12)에서 내재적 병렬성을 표현하기 위해 다른 적절한 데이터 구조를 이용하여 RAR(18)을 생성한다.
RAR(18) 생성과 함께, 런타임-중립적 라이브러리(16)는 기본적인 컴퓨터 시스템 및 RAR(8)에 대응하는 경험적 지식(heuristics)에 기초하여 사용자 코드(12)를 실행하기 위한 실행 런타임(24(1)-24(M))을 선택한다. 특히, 런타임-중립적 라이브러리(16)는 사용자 코드(12)의 작업(14)을 가장 효율적으로 실행할 수 있는 해당 실행 런타임(24(1)-24(M))을 선택함으로써 사용자 코드(12)에 대해 최적 스케일링을 달성하려 시도한다. 런타임-중립적 라이브러리(16)는 사용자 코드(12)의 특성(예를 들어, 데이터 집약적 대 연산 집약적)을 고려하고, 기본적인 컴퓨터 시스템이 주어졌을 때 사용자 코드를 실행하기 위한 적절한 레벨의 연산 리소스(예를 들어, 단일 기계, 기계들의 클러스터, 또는 기계들의 클라우드)를 결정한다. 결정 후, 런타임-중립적 라이브러리(16)는 선택된 실행 런타임(24)에 대한 스케줄러(20)의 인스턴스를 생성한다.
스케줄러(20)는 실행 환경(10)에서 선택된 실행 런타임(24)을 이용하여 사용자 코드(12)의 작업(14)을 실행시킨다. 스케줄러(20)는 RAR(18)로부터 작업(14)을 대기하고(queue), API를 호출함으로써, 또는, 선택된 실행 런타임(24) 내의 다른 적절한 프로그래밍 구성을 이용하여, 실행을 위해 사용자 코드(12)로부터의 작업(14)을 디스패치한다. 스케줄러(20)는 임의의 적절한 스케줄링 알고리즘에 따라 작업(14)을 디스패치한다. 스케줄러(20)는, 컴퓨터 시스템의 처리 리소스 및 작업(14)에 대한 한 세트의 입력 데이터가 가용해질 때, 실행을 위해 작업(14)을 디스패치함으로써 작업(14)의 실행을 관리한다. 상술한 바와 같이, 작업(14)에 대한 한 세트의 입력 데이터는 하나 이상의 다른 작업(14) 완료시 가용해질 수 있다.
선택된 실행 런타임(24)에 사용자 코드(12)를 동적으로 바인딩함으로써, 실행 환경(10)은 한 세트의 실행 런타임(24(1)-24(M))으로부터 사용자 코드(12)에 대한 프로그래밍 모델을 묘사한다. 이렇게 함으로써, 동일 사용자 코드(12)를 이용하여, 각각의 실행 런타임(24(1)-24(M))에 대한 런타임-전용 코드를 포함하는 오버헤드를 일으키지 않고, 서로 다른 실행 런타임(24(1)-24(M))을 목표로 할 수 있다. 그 결과, 실행 환경(10)은 단일 기계로부터 복수의 기계(예를 들어, 클러스터 또는 클라우드)로 자동 스케일링을 제공하는 사용자 코드(12)에 대한 프로그래밍 모델을 지원한다.
실행 환경(10)은 실행 런타임(24(1)-24(M))의 특징을 지원하는 리치(rich) 프로그래밍 모델을 또한 제공할 수 있다. 예를 들어, MPI와 같은 일 실행 런타임(24)은, 기계들의 클러스터 내 노드들 사이를 통과하는 데이터가 직렬화될 것임을 명시할 수 있고, 반면에, ConcRT와 같은 다른 실행 런타임(24)은 공유 메모리 기계 상의 포인터를 이용하여 데이터에 액세스할 수 있게 한다. 리치 프로그래밍 모델을 이용하여, 사용자 코드(12)는 MPI와 같은 런타임(24)의 사용자-정의 타입에 대해 적절한 직렬화 루틴을 포함한다. 그러나, 실행 환경(10)(즉, 런타임-중립적 라이브러리(16) 및 스케줄러(20))은 사용자 코드(12)가 공유 메모리 기계 상에서 실행되고 있을 때 직렬화 루틴이 호출되지 않음을 보장한다.
실행 환경(10)은 데드록(deadlock) 방지 및 폴트 톨로런스(fault tolerance)를 지원하는 리치 프로그래밍 모델을 더 제공할 수 있다. RAR(18)을 생성함으로써, 실행 환경(10)은 사이클을 배제하고, 따라서, 데드록을 제거하며, 값비싼 동적 데드록 검출 기법의 이용을 방지한다. 추가적으로, 작업(14)이 부작용으로부터 자유롭게 코딩되기 때문에, 작업(14)은 주어진 연산 노드가 작업(14) 실행 중 실패하는 경우에 다른 연산 노드 상에서 재개될 수 있다.
일 실시예에서, 실행 환경(10)은 C++과 같은 원시 언어에 대해 선언적 프로그래밍 모델(declarative programming model)을 이용하여 구현된다. 본 실시예에서, 사용자 코드(12)는 데이터 흐름 측면에서 작업(14)을 내재적으로 표현하는 원시 언어의 질의 구문으로 기록된다. 질의 구문을 이용하여, 사용자 코드(12)의 작업(14)은 정의에 의해 부작용을 없게 하고, 잘 정의된 상호작용을 갖는다. 그 결과, 사용자 코드(12)의 실행은 단일 기계로부터 클러스터 또는 클라우드같은 분산 환경에 자동적으로 스케일링될 수 있다.
도 2는 질의 구문을 갖는 사용자 코드(12)의 일 실시예(12A)를 나타내는 블록도다. 도 2의 예에서, 사용자 코드(12A)는 원시 언어 질의어로 맵-리듀스 동작(map-reduce operation)을 표현한다. 이렇게 함으로써, 사용자 코드(12A)는 런타임-중립적 라이브러리(16)로 하여금, 화살표(32)로 표시되는 바와 같이 런타임-중립적 DAG(18A)를 형성하는 RAR(18)의 실시예를 생성할 수 있다. 런타임-중립적 라이브러리(16)는 사용자 코드(12A) 내 질의로부터 작업(14(1)-14(4))(즉, 각각 reader, SelectMany(mapper), GroupBy, 및 SelectMany(reducer))을 식별하고, (도 2의 실시예에서 순서도의 블록으로 도시되는 바와 같이) 작업(14(1)-14(4))의 표현을 DAG(18A)로 변환한다. 런타임-중립적 라이브러리(16)는 작업(14(1)-14(4))의 상호작용을 또한 식별하고, 이러한 상호작용의 표현을 DAG(18A)로 변환시킨다. 상호작용은 일 작업(14)에 의해 출력되고 다른 작업(14)에 입력되는 한 세트의 데이터를 포함하는 작업(14)들 사이의 연속성을 명시한다. 도 2에서, 화살표(34(1))는 작업(14(1))(즉, reader)과 작업(14(2))(즉, SlectMany(mapper)) 사이의 상호작용을 나타낸다. 다시 말해서, 화살표(34(1))는 작업(14(1))에 의해 출력되고 작업(14(2))에 입력되는 한 세트의 데이터를 나타낸다. 마찬가지로, 화살표(34(2))는 작업(14(2))과 작업(14(3)) 사이의 상호작용을 나타내고, 화살표(34(3))는 작업(14(3))과 작업(14(4)) 사이의 상호작용을 나타낸다.
도 2의 예에서, 작업(14)은 하나의 다른 작업(14)으로부터 한 세트의 입력 데이터를 수신하고, 하나의 다른 작업(14)에 한 세트의 출력 데이터를 제공한다. 다른 실시예에서, 각각의 작업(14)은 임의의 적절한 개수의 다른 작업(14)으로부터 한 세트의 입력 데이터를 수신하고, 및/또는, 임의의 적절한 개수의 다른 작업(14)에 한 세트의 출력 데이터를 제공한다.
도 2의 실시예에서, 질의 구문은 질의 구문이 원시 프로그래밍 언어 내에 직접 통합되지 않도록 방법-기반 호출 기법을 이용한다. 예를 들어, C++과 같은 원시 프로그래밍 언어를 이용하면, 질의 구문이 람다 표현을 이용하여 구현될 수 있다. 질의 구문은 사용자 코드(12)에서 원시 언어의 다른 코드로 구성될 수 있고, 사용자 코드(12)의 게으른 실행(lazy execution)을 가능하게 할 수 있다. 그 결과, 선언적 프로그래밍 모델이 C++과 같은 원시 언어 상에서 구현될 수 있고, 분산 환경에서 증가된 실행 성능을 제공하면서 기존 원시 언어 컴파일러를 이용할 수 있다
일 실시예에서, 실행 환경(10)은 동적 데이터를 제공하고 사용자 코드(12)에 대한 리소스 탄력성을 연산하여 실행 효율을 개선시킨다. 특히, 실행 환경(10)은 사용자 코드(12)의 실행을 작업(14)에서 연산되는 데이터의 크기, 런타임시 가용한 연산 리소스, 및 사용자 코드(12)에 의해 제공되는 임의의 콘텍스트-감지 경험적 지식(heuristics)에 대해 탄력적일 수 있게 한다. 실행 환경(10)은 RAR(18) 및 스케줄러(20)의 이용을 통해 탄력성을 제공한다. 탄력성은 작업(14)의 실행 시간에 가용한 데이터의 양 및 연산 리소스에 기초하여 사용자 코드(12)의 각각의 작업(14)에 대한 동시성 레벨을 동적으로 조정하기 위한 기능을 의미한다.
상술한 바와 같이, 스케줄러(20)는 작업(14)에 대한 한 세트의 입력 데이터 및 컴퓨터 시스템의 처리 리소스가 가용해질 때 실행을 위한 작업(14)을 디스패치한다. RAR(18) 내 각각의 작업(14)에 대하여, 스케줄러(20)는 작업(14)에 대한 한 세트의 입력 데이터의 크기, 작업(14)의 호출 시간에서 가용한 연산 리소스의 양, 및 사용자 코드(12)에 의해 제공되는 임의의 콘텍스트-감지 경험적 지식을 고려함으로써 동시성 레벨을 결정한다. 스케줄러(20)는 가용 연산 리소스에 대해 결정된 동시성 레벨에 좌우되는 작업(14)의 다수의 인스턴스를 호출하고 분배한다. 이렇게 함으로써, 스케줄러(20)는 한 세트의 입력 데이터의 크기, 가용 연산 리소스, 및 사용자-명시 경험적 지식이 주어졌을 때, 사용자 코드(12)의 실행을 적절한 레벨로 자동적으로 스케일링한다.
스케줄러(20)는 적절한 레벨의 동시성을 결정함에 있어서 각각의 작업(14)에 대해 한 세트의 입력 데이터의 크기를 고려한다. 특히, 스케줄러(20)는 컴퓨터 시스템 내에서 입력 데이터를 이동시키는 오버헤드의 양(예를 들어, 클러스터 내 기계들 사이에서 데이터를 이동시키는 데 소모되는 시간)을 고려할 수 있다. 예를 들어, 오버헤드에 기초하여, 스케줄러(20)는 적은 양의 입력 데이터를 갖는 작업(14)에 대해 낮은 레벨의 동시성을, 그리고, 많은 양의 입력 데이터를 갖는 작업(14)에 대해 높은 레벨의 동시성을 선택할 수 있다.
스케줄러(20)가 각각의 작업(14)에 대한 호출 시간에 적정 레벨의 동시성을 결정하기 때문에, 스케줄러(20)는 기본적인 컴퓨터 시스템 내 연산 리소스의 가용도 변화를 설명한다. 예를 들어, 스케줄러(20)는 (예를 들어, 하나 이상의 기계가 컴퓨터 시스템에 추가됨으로 인해) 컴퓨터 리소스가 컴퓨터 시스템에 추가되었음을 검출할 수 있고, 또는, (예를 들어, 컴퓨터 시스템의 하나 이상의 노드가 고장났거나 가용하지 않음으로 인해) 컴퓨터 리소스가 컴퓨터 시스템으로부터 제거되었음을 검출할 수 있다.
스케줄러(20)는 작업(14)의 입력 데이터의 크기와, 작업(14)에 대한 가용 연산 리소스의 양을 표현하는 정보를 사용자 코드(12)의 하나 이상의 함수에 제공할 수 있다. 이러한 함수는, 물론, 작업(14)을 실행하기 위해 프로그래머가 추천하는 제안된 또는 최적 레벨의 동시성을 스케줄러(20)에 제공할 수 있다. 스케줄러(20)는 이러한 정보를 입력 데이터의 크기 및 가용 연산 리소스의 양과 함께 고려하여, 작업(14)에 대한 적정 레벨의 동시성을 결정한다.
도 3은 (도 2에 도시되는) DAG(18A)를 이용하여 사용자 코드(12)를 실행하는 실시예를 나타내는 블록도다. 도 3의 예에서, 스케줄러(20)는 DAG(18A) 내 각각의 작업(14(1)-14(4))에 대한 적정 레벨의 동시성을 결정하고, 동시성 레벨에 기초하여 각각의 작업(14(1)-14(4))의 적정 개수의 인스턴스를 생성한다. 예를 들어, 스케줄러(20)는 작업(14(1))이 호출될 때 위 요인들에 기초하여 단일 인스턴스가 작업(14(1))에 대해 적절한 지를 결정한다. 마찬가지로, 스케줄러(20)는 작업(14(3))이 호출될 때 위 요인들에 기초하여 단일 인스턴스가 작업(14(3))에 대해 적정한 지를 결정한다.
작업(14(2))의 경우에, 스케줄러(20)는 N개의 인스턴스가 적절함을 결정하고, 이때, N은 2보다 크거나 같은 정수다. 따라서, 스케줄러(20)는 작업(14(2))에 대한 한 세트의 입력 데이터를, N개의 서브세트로 나누고 실행을 위해 최대 N개의 연산 리소스(예를 들어, 클러스터 또는 클라우드 내 노드 기계)에 제공할 수 있다. 스케줄러(20)는 또한, 작업(14(2))에 의해 발생되는 한 세트의 출력 데이터를, 작업(14(3))에 제공될 수 있는 형태로 병합시킬 수 있다.
작업(14(4))의 경우에, 스케줄러(20)는 P개의 인스턴스가 적절함을 결정하고, 이때, P는 2보다 크거나 같은 정수이고, N과 동일할 수도 동일하지 않을 수도 있다. 따라서, 스케줄러(20)는 작업(14(4))에 대한 한 세트의 입력 데이터를 P개의 서브세트로 나누어, 실행을 위해 최대 P개의 연산 리소스(예를 들어, 클러스터 또는 클라우드 내 노드 기계)에 제공할 수 있다. 스케줄러(20)는 또한, 작업(14(4))에 의해 발생되는 한 세트의 출력 데이터를, 질의 출력으로 제공될 수 있는 형태로 병합시킬 수 있다.
동적 데이터 및 연산 탄력성은 사용자 코드(12)의 최적 스케일링을 발생시킬 수 있는 기술을 제공한다. RAR(18) 또는 DAG(18A) 내 각각의 작업(14)에 대한 동시성 레벨을 구축함에 있어서의 탄력성(flexibility)은, 사용자 코드(12)를 가용한 연산 리소스 및 부하 밸런스에 대해 효과적으로 탄력적이게 한다. 따라서, 사용자 코드(12)는 다양한 컴퓨터 시스템 상에서 효율적으로 실행될 수 있다.
도 4a는 상술한 바와 같이 실행 환경(10)을 구현하도록 구성된 컴퓨터 시스템(100)의 일 실시예를 나타내는 블록도다.
컴퓨터 시스템(100)은 각각 하나 이상의 처리 코어(103), 메모리 시스템(104), 0개 이상의 입/출력 장치(106), 0개 이상의 디스플레이 장치(108), 0개 이상의 주변 장치(110), 및 0개 이상의 네트워크 장치(112)를 포함하는 하나 이상의 프로세서 패키지(102)를 포함한다. 프로세서 패키지(102), 메모리 시스템(104), 입/출력 장치(106), 디스플레이 장치(108), 주변 장치(110), 및 네트워크 장치(112)는 임의의 적절한 타입, 개수, 및 구성의 컨트롤러, 버스, 인터페이스, 및/또는 다른 유선 또는 무선 연결을 포함하는 한 세트의 상호연결부(114)를 이용하여 통신한다.
컴퓨터 시스템(100)은 범용 또는 전용으로 구성된 임의의 적절한 처리 장치를 나타낸다. 컴퓨터 시스템(100)의 예는 서버, 개인용 컴퓨터, 랩탑 컴퓨터, 태블릿 컴퓨터, PDA, 이동 전화 또는 스마트폰, 및 오디오/비디오 장치를 포함한다. 컴퓨터 시스템(100)의 구성요소(즉, 프로세서 패키지(102), 메모리 시스템(104), 입/출력 장치(106), 디스플레이 장치(108), 주변 장치(110), 네트워크 장치(112), 및 상호연결부(114))들은 공통 하우징(도시되지 않음) 내에, 또는, 적절한 개수의 분리된 하우징(도시되지 않음)들 내에 수용될 수 있다.
처리 패키지(102) 각각은 명령(즉, 소프트웨어)를 실행하도록 구성된 실행 하드웨어를 형성하는 하나 이상의 처리 코어(103)를 포함한다. 각각의 처리 코어(103)는 다른 처리 코어(103)로부터 독립적으로 또는 실질적으로 독립적으로 명령을 실행하도록 구성되고, 기계 상태를 포함한다. 각각의 프로세서 패키지(102)는 동일한 또는 서로 다른 구조 및/또는 명령 세트를 갖는 처리 코어(103)를 포함할 수 있다. 예를 들어, 처리 코어(103)는 유효 실행 코어, 수퍼스칼라 실행 코어, 및 GPGPU 실행 코더의 임의의 조합을 포함할 수 있다. 프로세서 패키지(102) 내 각각의 처리 코어(103)는 메모리 시스템(104)에 저장된 명령에/을 액세스/실행하도록 구성될 수 있다. 이 명령들은 BIOS 또는 펌웨어(도시되지 않음), 사용자 코드(12), 런타임-중립적 라이브러리(16), 스케줄러(20), 운영 체제(OS)(122), 및 한 세트(124)의 하나 이상의 실행 런타임(24)을 포함할 수 있다. 각각의 처리 코어(103)는 입/출력 장치(106), 디스플레이 장치(108), 주변 장치(110), 및/또는 네트워크 장치(112)로부터 수신되는 정보와 연계하여, 또는 이러한 정보에 따라, 명령을 실행할 수 있다.
메모리 시스템(104)은 명령 및 데이터를 저장하도록 구성되는, 임의의 타입, 개수, 및 구조의 휘발성 또는 비-휘발성 저장 장치를 포함한다. 메모리 시스템(104)의 저장 장치는 사용자 코드(12), 런타임-중립적 라이브러리(16), 스케줄러(20), OS(122), 및 한 세트(124)의 하나 이상의 실행 런타임(24)을 포함하는 컴퓨터-실행가능 명령(즉, 소프트웨어)을 저장하는 컴퓨터 판독가능 저장 매체를 표현한다. 메모리 시스템(104)은 프로세서 패키지(102), 입/출력 장치(106), 디스플레이 장치(108), 주변 장치(110), 및 네트워크 장치(112)로부터 수신되는 명령 및 데이터를 저장한다. 메모리 시스템(104)은 프로세서 패키지(102), 입/출력 장치(106), 디스플레이 장치(108), 주변 장치(110), 및 네트워크 장치(112)에 저장된 명령 및 데이터를 제공한다. 명령은 여기서 설명되는 사용자 코드(12), 런타임-중립적 라이브러리(16), 스케줄러(20), OS(122), 및 실행 런타임(24)의 기능 및 방법을 수행하도록 컴퓨터 시스템(100)에 의해 실행가능하다. 메모리 시스템(104) 내 저장 장치의 예는, 하드 디스크 드라이브, RAM, ROM, 플래시 메모리 장치 및 카드, 자기 및 광학 디스크(예를 들어, CD 및 DVD)를 포함한다.
컴퓨터 시스템(100)은 부팅하여 OS(122)를 실행한다. OS(122)는 프로세서 패키지(102)에 의해 실행가능한 명령을 포함하여, 컴퓨터 시스템(100)의 구성요소들을 관리하고, 런타임-중립적 라이브러리(16), 스케줄러(20), OS(122), 및 실행 런타임(24)으로 하여금 구성요소에/를 액세스/이용하게 하는 한 세트의 함수를 제공한다. 일 실시예에서, OS(122)는 윈도우즈 운영 체제다. 다른 실시예에서, OS(122)는 컴퓨터 시스템(100)과 함께 사용하기 적합한 다른 운영 체제다. 런타임-중립적 라이브러리(16)는, 도 1에 도시되는 실행 환경(10)을 생성하고 사용자 코드(12) 및 스케줄러(20)에 런타임 함수를 제공하도록, OS(122)와 연계하여 실행가능한 명령을 포함한다. 런타임 함수는 OS(122) 또는 다른 프로그래밍 실체의 통합부로, 및/또는 다른 실시예의 구성물로 포함될 수 있다.
입/출력 장치(106)는 사용자로부터 컴퓨터 시스템(100)에 명령 또는 데이터를 입력시키고 컴퓨터 시스템(100)으로부터 사용자에게 명령 또는 데이터를 출력시키도록 구성되는 임의의 적절한 타입, 개수, 및 구조의 입/출력 장치를 포함한다. 입/출력 장치(106)의 예는 키보드, 마우스, 터치패드, 터치스크린, 버튼, 다이얼, 노브, 및 스위치를 포함한다.
디스플레이 장치(108)는 컴퓨터 시스템(100)의 사용자에게 텍스트 및/또는 그래픽 정보를 출력하도록 구성되는 임의의 적절한 타입, 개수, 및 구조의 디스플레이 장치를 포함한다. 디스플레이 장치(108)의 예는 모니터, 디스플레이 스크린, 및 프로젝터를 포함한다.
주변 장치(110)는 범용 또는 전용 처리 함수를 실행하도록 컴퓨터 시스템(100) 내 하나 이상의 다른 구성요소들과 함께 작동하도록 구성되는 임의의 적절한 타입, 개수, 및 구조의 주변 장치를 포함한다.
네트워크 장치(112)는 컴퓨터 시스템(100)으로 하여금 하나 이상의 네트워크(도시되지 않음) 간에 통신할 수 있게 하도록 구성된, 임의의 적절한 타입, 개수, 및 구조의 네트워크 장치들을 포함한다. 네트워크 장치(112)는 정보를 네트워크로부터 컴퓨터 시스템(100)에 의해 수신하거나, 정보를 컴퓨터 시스템(110)에 의해 네트워크에 송신하도록, 임의의 적절한 네트워킹 프로토콜 및/또는 구조에 따라 작동할 수 있다.
도 4b는 상술한 바와 같이 실행 환경(10)을 구현하도록 구성된 컴퓨터 시스템(150)의 일 실시예를 나타내는 블록도다. 컴퓨터 시스템(150)은 한 세트의 2개 이상의 컴퓨터 시스템(100(1)-100(Q))을 포함하는 분산 컴퓨팅 환경을 형성하며, 이때, Q는 2보다 크거나 같은 정수다. 컴퓨터 시스템(100(1)-100(Q))은 임의의 적절한 타입, 개수, 및 구조의 컨트롤러, 버스, 인터페이스, 및/또는 다른 유선 또는 무선 연결을 포함하는 한 세트의 상호연결부(152)를 이용하여 통신한다.
컴퓨터 시스템(150)은 기계들의 클러스터(즉, 컴퓨터 시스템(100(1)-100(Q))의 클러스터)로 구성된다. 각각의 컴퓨터 시스템(100(1)-100(Q))은 다른 컴퓨터 시스템(100(1)-100(Q))과 동일하거나 다른 구조를 포함할 수 있다. 일 실시예에서, 시스템(150) 내 각각의 컴퓨터 시스템(100(1)-100(Q))은 컴퓨터 시스템(100(1)-100(Q))이 포함할 수 있는 다른 런타임(24)에 추가하여, 클러스터용으로 구성되는, MPI와 같은 런타임(24)을 포함한다. 다른 실시예에서, 시스템(150) 내 각각의 컴퓨터 시스템(100(1)-100(Q))은 임의의 적절한 타입, 개수, 및/또는 조합의 런타임(24)을 포함한다.
도 4c는 상술한 바와 같이 실행 환경(10)을 구현하도록 구성된 컴퓨터 시스템(160)의 일 실시예를 나타내는 블록도다. 컴퓨터 시스템(160)은 한 세트의 2개 이상의 컴퓨터 시스템(100(1)-100(R))을 포함하는 분배형 연산 환경을 형성하고, 이때, R은 2보다 크거나 같은 정수다. 컴퓨터 시스템(100(1)-100(R))은 임의의 적절한 타입, 개수, 및 구조의 유선 및/또는 무선 네트워크 장치를 포함하는 네트워크(162)를 이용하여 통신한다.
컴퓨터 시스템(160)은 기계들의 클라우드(즉, 컴퓨터 시스템(100(1)-100(R))의 클라우드)로 구성된다. 각각의 컴퓨터 시스템(100(1)-100(R))은 다른 컴퓨터 시스템(100(1)-100(R))과 동일하거나 서로 다른 구조를 포함할 수 있다. 일 실시예에서, 시스템(160) 내 각각의 컴퓨터 시스템(100(1)-100(R))은 컴퓨터 시스템(100(1)-100(R))이 포함할 수 있는 다른 런타임(24)에 추가하여, 클라우드용으로 구성되는 런타임(24)을 포함한다. 다른 실시예에서, 시스템(160) 내 각각의 컴퓨터 시스템(100(1)-100(R))은 임의의 적절한 타입, 개수, 및/또는 조합의 런타임(24)을 포함한다.
구체적 실시예들이 여기서 도시되고 설명되었으나, 다양한 대안 및/또는 동등한 구현예들이, 본 발명의 범위로부터 벗어나지 않으면서, 도시 및 설명된 구체적 실시예를 대체할 수 있다. 본 출원은 여기서 논의되는 구체적 실시예들의 임의의 적응예 또는 변화를 커버하는 것을 의도한다. 따라서, 본 발명은 청구범위 및 그 등가물에 의해서만 제한된다.

Claims (14)

  1. 컴퓨터 시스템에 의해 실행될 때, 컴퓨터 시스템으로 하여금 방법을 수행하게 하는 컴퓨터-실행가능 명령을 저장하는 컴퓨터 판독가능 기록 매체에 있어서, 상기 방법은,
    사용자 코드의 런타임 독립적 표현(runtime agnostic representation)의 실행을 위해 상기 컴퓨터 시스템 내 제 1 실행 런타임을 선택하는 단계 - 상기 제 1 실행 런타임은 상기 런타임 독립적 표현의 적어도 하나의 경험적 지식(heuristic)에 기초하여 선택됨 - 와,
    상기 제 1 실행 런타임을 이용하여 상기 컴퓨터 시스템 상에서의 실행을 위해 상기 런타임 독립적 표현으로부터 한 세트의 작업을 디스플레이하기 위해 스케줄러를 호출하는 단계를 포함하는
    컴퓨터 판독가능 기록 매체.
  2. 제 1 항에 있어서,
    상기 방법은,
    상기 사용자 코드를 상기 한 세트의 작업을 포함하는 런타임 독립적 표현으로 변환하는 단계를 더 포함하는
    컴퓨터 판독가능 기록 매체.
  3. 제 1 항에 있어서,
    상기 사용자 코드는 상기 한 세트의 작업과, 상기 한 세트의 작업의 한 세트의 상호작용을 내재적으로(inherently) 표현하는
    컴퓨터 판독가능 기록 매체.
  4. 제 1 항에 있어서,
    상기 사용자 코드는 질의 구문(query syntax)을 이용하여 상기 한 세트의 작업과, 상기 한 세트의 작업의 한 세트의 상호작용을 명시하는
    컴퓨터 판독가능 기록 매체.
  5. 제 1 항에 있어서,
    상기 런타임 독립적 표현은 상기 제 1 실행 런타임과, 상기 제 1 실행 환경과는 다른 제 2 실행 런타임에 의해 실행가능한
    컴퓨터 판독가능 기록 매체.
  6. 제 1 항에 있어서,
    상기 런타임 독립적 표현은 데이터 흐름 측면에서 상기 한 세트의 작업을 표현하는
    컴퓨터 판독가능 기록 매체.
  7. 제 1 항에 있어서,
    상기 런타임 독립적 표현은 방향성 비사이클 그래프(DAG; directed acycle graph)를 형성하는
    컴퓨터 판독가능 기록 매체.
  8. 제 1 항에 있어서,
    상기 스케줄러는 가용해진 작업에 대응하는 입력 데이터 세트에 따라 상기 한 세트의 작업 내 일 작업을 디스패치하도록 구성되는
    컴퓨터 판독가능 기록 매체.
  9. 컴퓨터 시스템에 의해 실행될 때, 컴퓨터 시스템으로 하여금 방법을 수행하게 하는 컴퓨터-실행가능 명령을 저장하는 컴퓨터 판독가능 기록 매체에 있어서, 상기 방법은,
    내재적으로 표현되는 한 세트의 작업과, 상기 한 세트의 작업의 한 세트의 상호작용을 사용자 코드에서 식별하는 단계와,
    상기 한 세트의 작업 및 한 세트의 상호작용을 상기 사용자 코드의 런타임 독립적 표현으로 변환하는 단계를 포함하는
    컴퓨터 판독가능 기록 매체.
  10. 제 9 항에 있어서,
    상기 런타임 독립적 표현은 데이터 흐름 측면에서 상기 한 세트의 작업을 표현하는
    컴퓨터 판독가능 기록 매체.
  11. 제 9 항에 있어서,
    상기 런타임 독립적 표현은 방향성 비사이클 그래프(DAG)를 형성하는
    컴퓨터 판독가능 기록 매체.
  12. 제 9 항에 있어서,
    상기 방법은,
    런타임 시에 런타임 독립적 표현의 실행을 위해 상기 컴퓨터 시스템 내 실행 런타임을 선택하는 단계를 더 포함하는
    컴퓨터 판독가능 기록 매체.
  13. 적어도 하나의 컴퓨터 시스템에 의해 실행되는 방법에 있어서, 상기 방법은,
    데이터 흐름 측면에서 한 세트의 작업을 표현하는 방향성 비사이클 그래프(DAG)를 형성하는 런타임 독립적 표현으로 사용자 코드를 변환하는 단계 - 상기 사용자 코드는 상기 한 세트의 작업과, 상기 한 세트의 작업의 한 세트의 상호작용을 내재적으로 표현함 - 와,
    상기 런타임 독립적 표현의 실행을 위해 상기 컴퓨터 시스템 내 2개 이상의 실행 런타임으로 이루어진 세트로부터 제 1 실행 런타임을 선택하는 단계 - 상기 제 1 실행 런타임은 런타임 독립적 표현의 적어도 하나의 경험적 지식(heuristic)에 기초하여 선택됨 - 와,
    상기 제 1 실행 런타임을 이용하여 상기 컴퓨터 시스템 상에서의 실행을 위해 상기 런타임 독립적 표현으로부터 상기 한 세트의 작업을 디스패치하도록 스케줄러를 호출하는 단계를 포함하는
    적어도 하나의 컴퓨터 시스템에 의해 실행되는 방법.
  14. 제 13 항에 있어서,
    상기 런타임 독립적 표현은 상기 2개 이상의 실행 런타임으로 이루어진 세트 내의 상기 제 1 실행 런타임과 제 2 실행 런타임에 의해 실행가능하고, 상기 제 2 실행 런타임은 상기 제 1 실행 환경과는 다른
    적어도 하나의 컴퓨터 시스템에 의해 실행되는 방법.
KR1020137008779A 2010-10-08 2011-09-23 선택된 실행 런타임을 갖는 실행을 위한 사용자 코드의 런타임 독립적 표현 기법 KR101825772B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/900,705 US9658890B2 (en) 2010-10-08 2010-10-08 Runtime agnostic representation of user code for execution with selected execution runtime
US12/900,705 2010-10-08
PCT/US2011/053006 WO2012047554A1 (en) 2010-10-08 2011-09-23 Runtime agnostic representation of user code for execution with selected execution runtime

Publications (2)

Publication Number Publication Date
KR20130122619A true KR20130122619A (ko) 2013-11-07
KR101825772B1 KR101825772B1 (ko) 2018-02-05

Family

ID=45884656

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020137008779A KR101825772B1 (ko) 2010-10-08 2011-09-23 선택된 실행 런타임을 갖는 실행을 위한 사용자 코드의 런타임 독립적 표현 기법

Country Status (7)

Country Link
US (1) US9658890B2 (ko)
EP (1) EP2625600A4 (ko)
JP (1) JP6010540B2 (ko)
KR (1) KR101825772B1 (ko)
CN (1) CN102402419A (ko)
CA (1) CA2813600A1 (ko)
WO (1) WO2012047554A1 (ko)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20170024110A (ko) * 2014-07-25 2017-03-06 소프트 머신즈, 인크. 변환 룩 어사이드 버퍼를 사용한 명령어 집합의 애그노스틱 런타임 아키텍처 구현
KR20170024109A (ko) * 2014-07-25 2017-03-06 인텔 코포레이션 게스트 이미지로부터 코드를 실행하기 위한 jit 최적화기를 실행하는 시스템 변환기
KR20170024111A (ko) * 2014-07-25 2017-03-06 인텔 코포레이션 복수의 변환 테이블을 사용한 명령어 집합의 애그노스틱 런타임 아키텍처 구현
KR20170028407A (ko) * 2014-07-25 2017-03-13 인텔 코포레이션 런 어헤드 런 타임 게스트 명령어 변환/디코딩 프로세스 및 게스트 코드가 명령어 시퀀스에서 게스트 분기의 타겟으로부터 프리페치되는 프리페칭 프로세스를 구현하는 시스템 변환기
CN106716362A (zh) * 2014-07-25 2017-05-24 英特尔公司 用于将微指令序列重排序为优化的微指令序列以实现指令集不可知的运行时架构的分配和发出级

Families Citing this family (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9600255B2 (en) 2010-10-08 2017-03-21 Microsoft Technology Licensing, Llc Dynamic data and compute resource elasticity
US9600250B2 (en) 2010-10-08 2017-03-21 Microsoft Technology Licensing, Llc Declarative programming model with a native programming language
US9760348B2 (en) 2010-11-29 2017-09-12 Microsoft Technology Licensing, Llc Verification of a dataflow representation of a program through static type-checking
US9280395B2 (en) 2012-05-30 2016-03-08 Intel Corporation Runtime dispatching among a heterogeneous group of processors
US9471651B2 (en) 2012-10-08 2016-10-18 Hewlett Packard Enterprise Development Lp Adjustment of map reduce execution
US9626261B2 (en) * 2013-11-27 2017-04-18 Futurewei Technologies, Inc. Failure recovery resolution in transplanting high performance data intensive algorithms from cluster to cloud
US9652286B2 (en) * 2014-03-21 2017-05-16 Oracle International Corporation Runtime handling of task dependencies using dependence graphs
US9733909B2 (en) * 2014-07-25 2017-08-15 Intel Corporation System converter that implements a reordering process through JIT (just in time) optimization that ensures loads do not dispatch ahead of other loads that are to the same address
CN105578259B (zh) * 2015-12-14 2018-10-19 四川长虹电器股份有限公司 一种基于智能电视下用户观影行为分类方法
JP6891399B2 (ja) 2016-04-11 2021-06-18 富士通株式会社 データ処理プログラム、データ処理方法およびデータ処理装置
US10409654B2 (en) 2017-07-13 2019-09-10 International Business Machines Corporation Facilitating event-driven processing using unikernels
US10402195B2 (en) * 2017-10-16 2019-09-03 General Electric Company Framework for supporting multiple analytic runtimes
CN108388474A (zh) * 2018-02-06 2018-08-10 北京易沃特科技有限公司 基于dag的智能分布式计算管理系统及方法
US12019601B2 (en) * 2019-12-26 2024-06-25 Yahoo Assets Llc Horizontal skimming of composite datasets
CN113656164B (zh) * 2021-08-30 2024-05-03 阿里巴巴(中国)有限公司 任务执行方法、系统、电子设备及计算机存储介质

Family Cites Families (38)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5978583A (en) 1995-08-07 1999-11-02 International Business Machines Corp. Method for resource control in parallel environments using program organization and run-time support
US6182277B1 (en) 1998-04-15 2001-01-30 Oracle Corporation Methods and apparatus for declarative programming techniques in an object oriented environment
US6457172B1 (en) 1999-04-13 2002-09-24 International Business Machines Corporation Compiler for supporting multiple runtime data representations
US7100164B1 (en) * 2000-01-06 2006-08-29 Synopsys, Inc. Method and apparatus for converting a concurrent control flow graph into a sequential control flow graph
US20030033588A1 (en) * 2001-01-29 2003-02-13 John Alexander System, method and article of manufacture for using a library map to create and maintain IP cores effectively
US7210145B2 (en) 2001-10-15 2007-04-24 Edss, Inc. Technology for integrated computation and communication; TICC
JP4276168B2 (ja) * 2002-05-10 2009-06-10 マイクロソフト コーポレーション 資源についての並行、分散ネットワークの協調
US7055142B2 (en) * 2002-05-10 2006-05-30 Microsoft Corporation Permutation nuances of the integration of processes and queries as processes at queues
US6999958B2 (en) * 2002-06-07 2006-02-14 International Business Machines Corporation Runtime query optimization for dynamically selecting from multiple plans in a query based upon runtime-evaluated performance criterion
US7000151B2 (en) 2002-07-18 2006-02-14 Hewlett-Packard Development Company, L.P. System and method for providing run-time type checking
US7185003B2 (en) * 2002-11-14 2007-02-27 Seisint, Inc. Query scheduling in a parallel-processing database system
US8122106B2 (en) 2003-03-06 2012-02-21 Microsoft Corporation Integrating design, deployment, and management phases for systems
US7415700B2 (en) 2003-10-14 2008-08-19 Hewlett-Packard Development Company, L.P. Runtime quality verification of execution units
US20050166182A1 (en) 2004-01-22 2005-07-28 Microsoft Corporation Distributed semantic schema
US7676791B2 (en) 2004-07-09 2010-03-09 Microsoft Corporation Implementation of concurrent programs in object-oriented languages
US7458066B2 (en) * 2005-02-28 2008-11-25 Hewlett-Packard Development Company, L.P. Computer system and method for transferring executables between partitions
US7401329B2 (en) 2005-04-25 2008-07-15 Arm Limited Compiling computer programs to exploit parallelism without exceeding available processing resources
US7774750B2 (en) 2005-07-19 2010-08-10 Microsoft Corporation Common concurrency runtime
US7853923B2 (en) 2005-12-29 2010-12-14 Sap Ag Specific runtime generators in a visual modeling language environment
US7689582B2 (en) 2006-03-10 2010-03-30 International Business Machines Corporation Data flow system and method for heterogeneous data integration environments
US7739663B2 (en) 2006-05-16 2010-06-15 International Business Machines Corporation Method, system and program product for validating a runtime environment
JP4936517B2 (ja) 2006-06-06 2012-05-23 学校法人早稲田大学 ヘテロジニアス・マルチプロセッサシステムの制御方法及びマルチグレイン並列化コンパイラ
US7660884B2 (en) 2006-11-10 2010-02-09 International Business Machines Corporation Apparatus, system, and method for generating a resource utilization description for a parallel data processing system
US8010954B2 (en) 2007-02-14 2011-08-30 The Mathworks, Inc. Parallel programming interface to dynamically allocate program portions
US7926035B2 (en) 2007-04-24 2011-04-12 Microsoft Corporation Testing multi-thread software using prioritized context switch limits
US20080282238A1 (en) 2007-05-10 2008-11-13 Microsoft Corporation Static type for late binding
US8296743B2 (en) * 2007-12-17 2012-10-23 Intel Corporation Compiler and runtime for heterogeneous multiprocessor systems
US8495594B2 (en) 2008-01-10 2013-07-23 International Business Machines Corporation Method and system for providing a componentized resource adapter architecture
US7783782B2 (en) * 2008-05-23 2010-08-24 Raytheon Company Dynamic runtime service oriented architecture
US7747742B2 (en) 2008-06-27 2010-06-29 Microsoft Corporation Online predicate checking for distributed systems
US8473897B2 (en) 2008-10-03 2013-06-25 Microsoft Corporation Common intermediate representation for data scripting language
US7979844B2 (en) 2008-10-14 2011-07-12 Edss, Inc. TICC-paradigm to build formally verified parallel software for multi-core chips
US8528001B2 (en) 2008-12-15 2013-09-03 Oracle America, Inc. Controlling and dynamically varying automatic parallelization
US20100175049A1 (en) 2009-01-07 2010-07-08 Microsoft Corporation Scope: a structured computations optimized for parallel execution script language
US20100250564A1 (en) 2009-03-30 2010-09-30 Microsoft Corporation Translating a comprehension into code for execution on a single instruction, multiple data (simd) execution
US9600255B2 (en) 2010-10-08 2017-03-21 Microsoft Technology Licensing, Llc Dynamic data and compute resource elasticity
US9600250B2 (en) 2010-10-08 2017-03-21 Microsoft Technology Licensing, Llc Declarative programming model with a native programming language
US9760348B2 (en) 2010-11-29 2017-09-12 Microsoft Technology Licensing, Llc Verification of a dataflow representation of a program through static type-checking

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20170024110A (ko) * 2014-07-25 2017-03-06 소프트 머신즈, 인크. 변환 룩 어사이드 버퍼를 사용한 명령어 집합의 애그노스틱 런타임 아키텍처 구현
KR20170024109A (ko) * 2014-07-25 2017-03-06 인텔 코포레이션 게스트 이미지로부터 코드를 실행하기 위한 jit 최적화기를 실행하는 시스템 변환기
KR20170024111A (ko) * 2014-07-25 2017-03-06 인텔 코포레이션 복수의 변환 테이블을 사용한 명령어 집합의 애그노스틱 런타임 아키텍처 구현
KR20170026620A (ko) * 2014-07-25 2017-03-08 소프트 머신즈, 인크. 명령어 집합의 애그노스틱 런타임 아키텍처용 시스템
KR20170028407A (ko) * 2014-07-25 2017-03-13 인텔 코포레이션 런 어헤드 런 타임 게스트 명령어 변환/디코딩 프로세스 및 게스트 코드가 명령어 시퀀스에서 게스트 분기의 타겟으로부터 프리페치되는 프리페칭 프로세스를 구현하는 시스템 변환기
CN106716362A (zh) * 2014-07-25 2017-05-24 英特尔公司 用于将微指令序列重排序为优化的微指令序列以实现指令集不可知的运行时架构的分配和发出级
US10353680B2 (en) 2014-07-25 2019-07-16 Intel Corporation System converter that implements a run ahead run time guest instruction conversion/decoding process and a prefetching process where guest code is pre-fetched from the target of guest branches in an instruction sequence
US11281481B2 (en) 2014-07-25 2022-03-22 Intel Corporation Using a plurality of conversion tables to implement an instruction set agnostic runtime architecture

Also Published As

Publication number Publication date
WO2012047554A1 (en) 2012-04-12
US9658890B2 (en) 2017-05-23
US20120089968A1 (en) 2012-04-12
JP6010540B2 (ja) 2016-10-19
EP2625600A4 (en) 2015-01-14
KR101825772B1 (ko) 2018-02-05
EP2625600A1 (en) 2013-08-14
JP2013545169A (ja) 2013-12-19
CN102402419A (zh) 2012-04-04
CA2813600A1 (en) 2012-04-12

Similar Documents

Publication Publication Date Title
KR101825772B1 (ko) 선택된 실행 런타임을 갖는 실행을 위한 사용자 코드의 런타임 독립적 표현 기법
US10592218B2 (en) Dynamic data and compute resource elasticity
US10585653B2 (en) Declarative programming model with a native programming language
US8789063B2 (en) Master and subordinate operating system kernels for heterogeneous multiprocessor systems
US9946563B2 (en) Batch scheduler management of virtual machines
JP5496683B2 (ja) カスタマイズ方法及びコンピュータシステム
JP5911562B2 (ja) ユーザインターフェースおよび入力制御を適応させる方法
US20080244507A1 (en) Homogeneous Programming For Heterogeneous Multiprocessor Systems
CN103729235A (zh) Java虚拟机的编译方法和Java虚拟机
EP2585917B1 (en) Stack overflow prevention in parallel execution runtime
US8918799B2 (en) Method to utilize cores in different operating system partitions
CN113032154B (zh) 一种虚拟cpu的调度方法、装置、电子设备及存储介质
Lufei et al. vStarCloud: An operating system architecture for Cloud computing
US11080182B2 (en) Object load introspection using guarded storage
Chard et al. Productive Parallel Programming with Parsl
Wang et al. An Optimized Scheduling Strategy Based on Task Type In Xen
Ino et al. A fine grained cycle sharing system with cooperative multitasking on GPUs
Niephaus et al. Efficient implementation of Smalltalk activation records in language implementation frameworks
Medeiros et al. Grid programming frameworks
AU2011253819B2 (en) Parallel runtime execution on multiple processors
JP2012230488A (ja) 情報処理装置、スケジューリング方法、プログラム

Legal Events

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