KR20230138031A - 다중 아키텍처 이기종 컴퓨팅을 위한 실행 코드의 동적 할당 - Google Patents

다중 아키텍처 이기종 컴퓨팅을 위한 실행 코드의 동적 할당 Download PDF

Info

Publication number
KR20230138031A
KR20230138031A KR1020237030581A KR20237030581A KR20230138031A KR 20230138031 A KR20230138031 A KR 20230138031A KR 1020237030581 A KR1020237030581 A KR 1020237030581A KR 20237030581 A KR20237030581 A KR 20237030581A KR 20230138031 A KR20230138031 A KR 20230138031A
Authority
KR
South Korea
Prior art keywords
target
call
executable instructions
processing unit
block
Prior art date
Application number
KR1020237030581A
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 KR20230138031A publication Critical patent/KR20230138031A/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • 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/54Interprogram communication
    • G06F9/541Interprogram communication via adapters, e.g. between incompatible applications
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • 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/485Task life-cycle, e.g. stopping, restarting, resuming execution
    • 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/5044Allocation 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 hardware capabilities
    • 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/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. 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/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)
  • Advance Control (AREA)

Abstract

소프트웨어 프로그램을 실행하는 장치로, 복수의 처리 장치(processing units) 및 하드웨어 프로세서(processor)를 포함하며, 상기 복수의 처리 장치 및 하드웨어 프로세서는 하기에 적합하다: 소프트웨어 프로그램의 중간(intermediate) 표현(representation)에서, 상기 중간 표현은 복수의 블록을 포함하며, 상기 복수의 블록 각각은 상기 소프트웨어 프로그램의 복수의 실행 블록 중 하나와 연관되고 중간 명령어 세트를 포함하며, 호출 블록과 타겟 블록을 식별하는 것; 상기 호출 블록은 상기 타겟 블록의 적어도 하나의 타겟 중간 명령어를 실행하기 위한 적어도 하나의 제어 흐름(control-flow) 중간 명령어를 포함하고, 상기 타겟 블록을 사용하여 실행 가능한 명령어의 타겟 세트를 생성하는 것; 실행 가능한 명령어의 호출 세트(calling set of executable instructions)가 호출 처리 장치(calling processing unit)에 의해 실행되고 실행 가능한 명령어의 타겟 세트가 타겟 처리 장치(target processing unit)에 의해 실행될 때, 상기 호출 블록을 사용하고, 상기 실행 가능한 명령어의 타겟 세트를 호출하기 위한 적어도 하나의 컴퓨터 제어 명령어를 사용하여 상기 실행 가능한 명령어의 호출 세트를 생성하는 것; 상기 실행 가능한 명령어의 호출 세트를 실행하기 위해 상기 호출 처리 장치를 구성하는 것; 그리고 상기 실행 가능한 명령어의 타겟 세트를 실행하기 위한 상기 타겟 처리 장치를 구성하는 것.

Description

다중 아키텍처 이기종 컴퓨팅을 위한 실행 코드의 동적 할당
본 출원은 2021년 2월 10일에 출원되어 2021년 9월 7일에 미국 특허 제11,113,059호로 등록된 미국 특허 출원 제17/172,134호의 우선권을 주장하며, 이 출원의 내용은 그 전체가 본 명세서에 참조로 포함된다.
본 개시에 설명된 일부 실시예는 컴퓨팅 장치에 관한 것이며, 더 구체적으로는 이종 다중 아키텍처 컴퓨팅 시스템에 관한 것이지만 이에 국한되지는 않는다.
컴퓨팅 분야에서, 성능이라는 용어는 컴퓨터 시스템에 의해 수행되는 유용한 작업의 양을 의미한다. 유용한 작업의 일부 특성은 작업 수행 속도, 계산 리소스의 활용도(예를 들어, 사용된 메모리 양 또는 소비된 네트워크 대역폭의 양), 컴퓨터 시스템이 입력에 반응하는데 걸리는 시간의 양 등을 포함한다. 유용한 작업의 양을 측정하는 다양한 지표가 존재한다. 일부 지표(지표)는 컴퓨터화된 시스템의 상황(context)에 따라 다르다; 일부 다른 측정 지표는 다양한 컴퓨터화된 시스템에서 측정될 수 있는 일반적인 지표이다.
본 명세서에서 사용된 바와 같이, "처리 장치(processing unit)"이라는 용어는 일련의 동작을 수행하도록 구성된 모든 종료의 프로그래밍 가능한(programmable) 또는 비-프로그래밍 가능한(Non- programmable) 회로를 의미하는데 사용된다. 처리 장치는 소프트웨어 뿐만 아니라 하드웨어도 포함할 수 있다. 예를 들어, 처리 장치는 하나 이상의 프로세서와, 프로그램이 하나 이상의 프로세서에 의해 실행될 때, 처리 장치가 각각의 동작을 수행하게 하는 프로그램을 전달하는 일시적 또는 비일시적 메모리를 포함할 수 있다.
또한, 본 명세서에서 사용된 용어 "성능 개선(improving 성능)"는 하나 이상의 성능 지표에 따라 측정되거나 계산된 하나 이상의 성능 점수를 개선하는 것을 의미한다.처리 장치의 성능을 측정하는데 사용되는 2개의 일반적인(common) 지표는 대기 시간(latency)과 처리량(throughput)이다. 대기 시간은 처리 장치가 식별된 동작을 수행하는데 걸리는 시간이다. 식별된 동작의 일부 예는 소스(source)에서 목적지(destination)로 데이터 패킷을 전달하는 것과 입력 값에 응답하여 식별된 컴퓨터 명령어 세트를 실행하는 것이다. 대기 시간의 개선은 처리 장치가 식별된 동작을 수행하는데 걸리는 시간의 양을 줄인다는 것을 의미한다. 처리량은 처리 장치가 시간 간격으로 수행하는 식별된 동작의 양으로, 예를 들어 시간 간격동안 전달된 데이터 패킷의 양이다. 시스템의 처리량의 또 다른 예는 처리 장치가 시간 간격에 식별된 컴퓨터 명령어 세트를 실행하는 입력 값의 양이다. 처리량 개선은 시간 간격에서 처리 장치가 수행하는 식별된 동작의 양을 늘리는 것을 의미한다.
컴퓨팅 분야에서 코프로세서(co-processor)라는 용어는 시스템의 기본 처리 장치를 보완하고 일부 프로세서 집약적인 작업을 기본 처리 장치에서 오프로드하여 시스템의 성능 개선을 촉진하는데 사용되는 보충 처리 장치(supplementary processing unit)로 설명하는데 사용된다. 고성능 컴퓨팅에 대한 수요가 증가함에 따라, 성능을 높이기 위해 공동 처리를 사용하는 경우도 증가하고 있다. 일부 코-프로세서는 고유한 작업을 수행하도록 설계된다. 일반적으로 알려진 코-프로세서는 부동 소수점(floating-point) 연산 작업을 수행하는 부동 소수점 프로세서이다. 코-프로세서에 의해 수행될 수 있는 고유한 작업의 다른 예는 네트워크 입-출력 인터페이스 작업, 암호화, 문자열 처리(string processing), 그래픽 처리(graphics processing), 선형 대수 처리(linear algebra processing), 기계 학습 처리(machine learning processing), 그리고 신호 처리(signal processing)를 포함한다. 다른 코-프로세서는 고유한 작업으로 특성화되지 않은 컴퓨터 프로그램의 임의 부분을 실행하도록 구성될 수 있다.
코-프로세싱(co-processing)은 분산 처리(distributed processing)과 상이하다. 분산 시스템에서, 문제는 복수의 독립적인 작업으로 나누어지며, 각 작업은 실질적으로 서로 독립적으로 작동하고, 아마도 그들 사이에서 통신하는 복수의 처리 장치 중 하나 이상에 의해 해결된다. 코-프로세싱에서, 코-프로세서는 기본 처리 장치의 기능을 보완하고, 기본 처리 장치와 함께 작동한다.
하나 이상의 코-프로세서에 의해 실행되도록 컴퓨터 프로그램의 일부를 위임하는 것이 필요하다.
본 개시의 일부 실시예는 각각 복수의 컴퓨터 아키텍처 중 하나를 갖는 복수의 처리 장치를 포함하는 이종 컴퓨팅 시스템에서 소프트웨어 프로그램을 실행하는 것을 설명한다.
전술한 목적 및 기타 목적은 독립항의 특징에 의해 달성된다. 추가 구현 형태는 종속항, 설명 및 도면을 통해 명백 해진다.
전술한 목적 및 기타 목적은 독립항의 특징에 의해 달성된다. 추가 구현 형태는 종속항, 설명 및 도면을 통해 명백 해진다.
본 발명의 일 측면에 따르면, 장치는 복수의 처리 장치(processing units) 및 적어도 하나의 하드웨어 프로세서(processor)를 포함하며, 상기 복수의 처리 장치 및 적어도 하나의 하드웨어 프로세서는 하기에 적합하다: 소프트웨어 프로그램의 중간(intermediate) 표현(representation)에서, 상기 중간 표현은 복수의 블록을 포함하며, 상기 복수의 블록 각각은 상기 소프트웨어 프로그램의 복수의 실행 블록 중 하나와 연관되고 중간 명령어 세트를 포함하며, 호출 블록(calling block)과 타겟 블록(target block)을 식별하는 것; 상기 호출 블록은 상기 타겟 블록의 적어도 하나의 타겟 중간 명령어를 실행하기 위한 적어도 하나의 제어 흐름(control-flow) 중간 명령어를 포함하고, 상기 타겟 블록을 사용하여 실행 가능한 명령어의 타겟 세트를 생성하는 것; 실행 가능한 명령어의 호출 세트(calling set of executable instructions)가 호출 처리 장치(calling processing unit)에 의해 실행되고 실행 가능한 명령어의 타겟 세트가 타겟 처리 장치(target processing unit)에 의해 실행될 때, 상기 호출 블록을 사용하고, 상기 실행 가능한 명령어의 타겟 세트를 호출하기 위한 적어도 하나의 컴퓨터 제어 명령어를 사용하여 상기 실행 가능한 명령어의 호출 세트를 생성하는 것; 상기 실행 가능한 명령어의 호출 세트를 실행하기 위해 상기 호출 처리 장치를 구성하는 것; 그리고 상기 실행 가능한 명령어의 타겟 세트를 실행하기 위한 상기 타겟 처리 장치를 구성하는 것.
소프트웨어 프로그램의 중간 표현에서 호출 블록과 타겟 블록을 식별하면 실행 가능한 명령어의 호출 세트와 추가적으로 또는 대안적으로 실행 가능한 명령어의 타겟 세트(예를 들어 소프트웨어 프로그램의 런타임 동안)의 동적 생성 허용하며, 따라서 호출 처리 장치와 추가로 또는 대안으로 타겟 처리 장치의 동적 구성을 허용한다. 호출 처리 장치 및 추가적으로 또는 대안적으로 타겟 처리 장치의 동적 구성은 호출 블록 및 추가적으로 또는 대안적으로 타겟 블록의 실행을 하나 이상의 코-프로세서에 위임함으로써 소프트웨어 프로그램을 실행하는 시스템의 성능 향상을 촉진한다.
본 발명의 두번째 측면에 따르면, 소프트웨어 프로그램을 실행하는 방법은 포함한다: 소프트웨어 프로그램의 중간(intermediate) 표현(representation)에서, 상기 중간 표현은 복수의 블록을 포함하며, 상기 복수의 블록 각각은 상기 소프트웨어 프로그램의 복수의 실행 블록 중 하나와 연관되고 중간 명령어 세트를 포함하며, 호출 블록과 타겟 블록을 식별하는 단계; 여기서, 상기 호출 블록은 상기 타겟 블록의 적어도 하나의 타겟 중간 명령어를 실행하기 위한 적어도 하나의 제어 흐름(control-flow) 중간 명령어를 포함하고, 상기 타겟 블록을 사용하여 실행 가능한 명령어의 타겟 세트를 생성하는 단계; 실행 가능한 명령어의 호출 세트(calling set of executable instructions)가 호출 처리 장치(calling processing unit)에 의해 실행되고 실행 가능한 명령어의 타겟 세트가 타겟 처리 장치(target processing unit)에 의해 실행될 때, 상기 호출 블록을 사용하고, 상기 실행 가능한 명령어의 타겟 세트를 호출하기 위한 적어도 하나의 컴퓨터 제어 명령어를 사용하여 상기 실행 가능한 명령어의 호출 세트를 생성하는 단계; 상기 실행 가능한 명령어의 호출 세트를 실행하기 위해 상기 호출 처리 장치를 구성하는 단계; 그리고 상기 실행 가능한 명령어의 타겟 세트를 실행하기 위한 상기 타겟 처리 장치를 구성하는 단계.
본 발명의 세번째 측면에 따르면, 소프트웨어 프로그램을 실행하기 위한 소프트웨어 프로그램 제품으로서, 비일시적 컴퓨터 판독 가능 저장 매체; 하기에 대한 제1 프로그램 명령어; 여기서, 소프트웨어 프로그램의 중간(intermediate) 표현(representation)에서, 상기 중간 표현은 복수의 블록을 포함하며, 상기 복수의 블록 각각은 상기 소프트웨어 프로그램의 복수의 실행 블록 중 하나와 연관되고 중간 명령어 세트를 포함하며, 호출 블록과 타겟 블록을 식별하는 것; 여기서, 상기 호출 블록은 상기 타겟 블록의 적어도 하나의 타겟 중간 명령어를 실행하기 위한 적어도 하나의 제어 흐름(control-flow) 중간 명령어를 포함하고, 상기 타겟 블록을 사용하여 실행 가능한 명령어의 타겟 세트를 생성하기 위한 제2 프로그램 명령어; 실행 가능한 명령어의 호출 세트(calling set of executable instructions)가 호출 처리 장치(calling processing unit)에 의해 실행되고 실행 가능한 명령어의 타겟 세트가 타겟 처리 장치(target processing unit)에 의해 실행될 때, 상기 호출 블록을 사용하고, 상기 실행 가능한 명령어의 타겟 세트를 호출하기 위한 적어도 하나의 컴퓨터 제어 명령어를 사용하여 상기 실행 가능한 명령어의 호출 세트를 생성하는 제3 프로그램 명령어; 상기 실행 가능한 명령어의 호출 세트를 실행하기 위해 상기 호출 처리 장치를 구성하는 제4 프로그램 명령어; 그리고 상기 실행 가능한 명령어의 타겟 세트를 실행하기 위한 상기 타겟 처리 장치를 구성하는 제5 프로그램 명령어;를 포함하고, 제1, 제2, 제3, 제4 및 제5 프로그램 명령어는 상기 비일시적 컴퓨터 판독 가능 저장 매체로부터 적어도 하나의 컴퓨터화된 프로세서에 의해 실행된다.
첫번째 및 두번째 측면을 참조하면, 본 발명의 첫번째 및 두번째 측면의 첫번째 가능한 구현에서 호출 처리 장치의 제1 컴퓨터 아키텍처는 타겟 처리 장치의 제2 컴퓨터 아키텍처와 상이하다. 상기 제1 컴퓨터 아키텍처 및 상기 제2 컴퓨터 아키텍처 중 적어도 하나는 복합 명령어 세트 컴퓨터(complex instruction set computer, CISC) 아키텍처, 축소 명령어 세트 컴퓨터(reduced instruction set computer, RISC). , x86 제품군 기반 컴퓨터(x86-family based computer) 아키텍처, IBM(International Business Machine) Power 제품군 기반 컴퓨터 아키텍처, ARM 제품군 기반 컴퓨터 아키텍처로 구성된 컴퓨터 아키텍처 그룹으로부터 선택된다. 타겟 처리 장치는 중앙 처리 장치(a central processing unit), 멀티 코어 중앙 처리 장치(multi-core central processing unit, CPU), 데이터 처리 장치(data processing unit, DPU), 마이크로컨트롤러 장치(microcontroller unit, MCU), 가속 처리 장치(accelerated processing unit, ACU), 필드 프로그래밍 가능 게이트 어레이(field-programmable gate array, FPGA), 대규모 재구성 가능 아키텍처(coarse-grained reconfigurable architecture, CGRA), 신경망 가속기(neural-network accelerator), 지능 처리 장치(intelligence processing unit, IPU), 애플리케이션별 통합 회로(application-specific integrated circuit, ASIC), 양자 컴퓨터(quantum computer), 및 복수의 구성 가능한 데이터 라우팅 접합에 의해 연결된 복수의 재구성 가능한 논리 요소를 포함하는 상호 연결된 컴퓨팅 그리드(interconnected computing grid)로 구성된 처리 장치들(processing units)의 그룹으로부터 선택된다. 선택적으로, 실행 가능한 명령어의 호출 세트는 호출 처리 장치의 제1 컴퓨터 아키텍처와 타겟 처리 장치의 제2 컴퓨터 아키텍처 사이를 변환하기 위해 적어도 하나의 제어 흐름 중간 명령어에 적용되는 애플리케이션 바이너리 인터페이스를 구현하는 복수의 변환 명령어를 포함한다. 선택적으로, 타겟 블록은 복수의 타겟 메타데이터 값을 포함하고 그리고 실행 가능한 명령어의 타겟 세트를 생성하는 것은 상기 타겟 처리 장치의 상기 제2 컴퓨터 아키텍처에 따라 상기 복수의 타겟 메타데이터 값을 사용하여 복수의 변환된 타겟 메타데이터 값을 생성하는 것을 포함한다. 호출 처리 장치 및 타겟 처리 장치 중 적어도 하나를 각각의 다른 처리 장치보다 더 적은 전력을 소모하도록 추가적으로 또는 대안적으로 설계된 각각의 다른 처리 장치보다 저렴하게 하여 소프트웨어 프로그램을 실행할 때, 타겟 처리 장치의 다른 컴퓨터 아키텍처와 상이한 컴퓨터 아키텍처를 갖는 호출 처리 장치를 사용하는 것은 시스템 성능에 큰 영향을 주지 않으면서 본 개시에 따라 구현된 시스템의 구현 비용, 추가적으로 또는 대안적으로 운영 비용을 줄이는 것을 촉진한다. 하나 이상의 제어 흐름 중간 명령어에 적용되는 애플리케이션 바이너리 인터페이스를 구현하는 것은 실행 가능한 명령어의 호출 세트에 의해 실행 가능한 명령어의 타겟 세트를 호출하는 것을 용이하게 하고, 따라서 실행을 위한 타겟 블록을 타겟 처리 장치에 위임하는 것을 용이하게 하여 소프트웨어 프로그램을 실행할 때 시스템의 성능 개선을 향상시킨다. 타겟 처리 장치의 제2 컴퓨터 아키텍처에 따라 복수의 타겟 메타데이터 값을 이용하여 복수의 변환된 타겟 메타데이터 값을 생성하는 것은 타겟 처리 장치에 의해 타겟 실행가능한 명령어의 세트를 실행하고 공통 실행 컨텍스트에서 호출 처리 장치에 의해 호출 실행 가능한 명령어 세트를 실행하는 것을 용이하게 하며, 따라서 실행을 위해 타겟 처리 장치에 위임할 타겟 블록을 식별하는 유연성이 증가하고 소프트웨어 프로그램을 실행할 때 시스템의 성능이 향상된다.
첫번째 및 두번째 측면을 참조하면, 본 발명의 첫번째 및 두번째 측면의 두번째 가능한 구현에서 타겟 처리 장치는 명령어의 타겟 세트 중 적어도 일부를 실행하는 타겟 처리 장치에 의해 생성된 적어도 하나의 값을 호출 처리 장치에 제공하도록 추가로 구성된다. 선택적으로, 호출 처리 장치는 호출 처리 장치로부터 명령어의 타겟 세트 중 적어도 일부를 실행하는 타겟 처리 장치에 의해 생성된 적어도 하나의 값을 수신하도록 추가로 구성된다. 선택적으로, 호출 처리 장치는 타겟 처리 장치에 적어도 하나의 인수 값을 제공하도록 추가로 구성된다. 명령어 타겟 세트의 적어도 일부를 실행하는 타겟 처리 장치에 의해 생성된 하나 이상의 값을 호출 처리 장치에 제공하고, 추가적으로 또는 대안적으로 호출 처리 장치가 하나 이상의 인수 값을 타겟 처리 장치에 제공하는 것은 실행을 위해 타겟 블록을 타겟 처리 장치에 위임하는 것을 용이하게 하며, 따라서 소프트웨어 프로그램을 실행할 때, 본 개시에 따라 구현된 시스템의 성능 개선이 구현된다.
첫번째 및 두번째 측면을 참조하면, 본 발명의 첫번째 및 두번째 측면의 세번째 가능한 구현에서, 타겟 처리 장치는 명령어의 타겟 세트 중 적어도 일부를 실행한 후 실행 가능한 명령어의 호출 세트 중 적어도 일부를 실행하도록 호출 처리 장치에 명령하도록 추가로 구성된다. 선택적으로, 호출 처리 장치는 다음을 위해 추가로 구성된다: 실행 가능한 명령어의 타겟 세트를 호출하기 위한 적어도 하나의 컴퓨터 제어 명령어를 실행한 후 실행 가능한 명령어의 호출 세트의 실행을 일시 중단하는 것(단계); 그리고 타겟 처리 장치로부터 명령어를 수신하는 것에 응답하여 실행 가능한 명령어의 호출 세트 중 적어도 일부를 실행하는 것(단계). 타겟 처리 장치에 의한 실행 가능한 명령어 호출 세트의 적어도 일부의 실행을 호출하는 것은 타겟 처리 장치에 연결된 하나 이상의 컴퓨팅 리소스에 대한 액세스를 타겟 처리 장치에 제공하는 것을 용이하게 하며, 따라서 실행을 위한 타겟 처리 장치에 위임할 대상 블록을 식별하는 유연성이 증가하고, 소프트웨어 프로그램을 실행할 때 시스템의 성능이 향상된다.
첫번째 및 두번째 측면을 참조하면, 본 발명의 첫번째 및 두번째 측면의 네번째 가능한 구현에서 실행 가능한 명령어의 호출 세트는 식별된 애플리케이션 메모리 주소범위의 적어도 하나의 메모리 주소에 대한 적어도 하나의 제1 메모리 액세스 명령어를 포함하고, 실행 가능한 명령어의 타겟 세트는 애플리케이션 메모리 주소의 식별된 범위 내의 적어도 하나의 다른 메모리 주소에 대한 적어도 하나의 제2 메모리 액세스 명령어를 포함한다. 선택적으로, 애플리케이션 메모리 주소의 식별된 범위는 물리적 메모리 주소 범위, 가상 메모리 주소 범위, 메모리 매핑된 입출력 주소 범위 및 버스 주소 범위 중 하나이다. 실행 가능한 명령어의 호출 세트와 실행 가능한 명령어의 타겟 세트 모두에 의한 애플리케이션 메모리 주소의 식별된 범위에 액세스하는 것은 실행을 위한 타겟 처리 장치에 위임할 대상 블록을 식별하는 유연성이 증가하고, 소프트웨어 프로그램을 실행할 때 시스템의 성능이 향상된다.
첫번째 및 두번째 측면을 참조하면, 본 발명의 첫번째 및 두번째 측면의 다섯 번째 가능한 구현에서, 실행 가능한 명령어의 호출 세트는 적어도 하나의 장치와 연관된 적어도 하나의 장치 핸들을 사용하여 적어도 하나의 장치에 액세스하는 것을 포함하고, 그리고 상기 실행 가능한 명령어의 타겟 세트는 적어도 하나의 장치 핸들을 사용하여 적어도 하나의 장치에 액세스하는 것을 포함한다. 선택적으로, 적어도 하나의 장치 핸들은 네트워크 소켓 핸들, 운영 체제 커널 객체 핸들 및 파일 설명자 중 적어도 하나이다. 실행 가능한 명령어의 호출 세트와 실행 가능한 명령어의 타겟 세트 모두에 의해 하나 이상의 장치에 액세스하는 것은 실행을 위한 타겟 처리 장치에 위임할 대상 블록을 식별하는 유연성이 증가하고, 소프트웨어 프로그램을 실행할 때 시스템의 성능이 향상된다.
첫번째 및 두번째 측면을 참조하면, 본 발명의 첫번째 및 두번째 측면의 여섯 번째 가능한 구현에서, 적어도 하나의 하드웨어 프로세서는, 소프트웨어 프로그램의 적어도 일부를 실행하는 동안 복수의 통계 값을 수집하는 것; 그리고 상기 복수의 통계 값에 따라 상기 호출 블록과 상기 타겟 블록을 식별하는 것;에 적합하다. 선택적으로, 복수의 통계 값 중 적어도 하나는 제어 흐름 명령어를 실행한 결과, 소프트웨어 프로그램 변수의 데이터 값, 메모리 액세스 패턴, 메모리 가상 주소 변환 중 하나를 나타낸다. 선택적으로, 적어도 하나의 하드웨어 프로세서는, 상기 복수의 통계 값을 수집할 목적으로 복수의 원격 측정 중간 명령어(telemetry intermediate instructions)를 소프트웨어 프로그램의 중간 표현에 삽입하는 것;에 적합하다. 복수의 통계 값에 따라 호출 블록과 타겟 블록을 식별하는 것은 상기 식별의 정확도를 향상시키고 따라서 소프트웨어 프로그램을 실행할 때 시스템 성능이 향상된다.
첫번째 및 두번째 측면을 참조하면, 본 발명의 첫번째 및 두번째 측면의 일곱 번째 가능한 구현에서 호출 처리 장치는 적어도 하나의 하드웨어 프로세서이다. 호출 블록 및 호출 실행 가능한 명령어 세트를 실행하는 대상 블록을 식별하는 하나 이상의 하드웨어 프로세서를 갖는 것은 호출 블록과 대상 블록의 런타임 식별을 허용하여 해당 식별의 정확성을 높이고 소프트웨어 프로그램을 실행할 때 시스템 성능을 향상시킨다.
본 개시의 다른 시스템, 방법, 특징 및 장점은 다음 도면 및 상세한 설명을 검토함으로써 당업자에게 명백해질 것이며 명백해질 것이다. 이러한 모든 추가 시스템, 방법, 특징 및 이점은 본 설명 내에 포함되고, 본 개시의 범위 내에 속하며, 첨부된 청구범위에 의해 보호되도록 의도된다.
다르게 정의되지 않는 한, 본 명세서에 사용된 모든 기술 및/또는 과학 용어는 본 실시예가 속하는 기술분야의 통상의 기술자에 의해 일반적으로 이해되는 것과 동일한 의미를 갖는다. 본 명세서에 설명된 것과 유사하거나 등가인 방법 및 재료가 실시예의 실행 또는 테스트에 사용될 수 있지만, 예시적인 방법 및/또는 재료가 아래에 설명된다. 충돌(conflict)이 발생할 경우 정의를 포함한 특허 명세서가 우선한다. 또한, 재료, 방법 및 실시예는 예시일 뿐 반드시 제한하려는 의도는 아니다.
일부 실시예는 첨부된 도면을 참조하여 단지 예로서만 설명된다. 하기 도면을 구체적으로 참조하면, 도시된 세부사항은 예시로서 그리고 실시예의 설명을 위한 논의를 위한 것임을 강조한다. 이와 관련하여, 도면과 함께 적용된 설명은 실시예에 어떻게 실시될 수 있는지를 당업자에게 명백하게 한다.
도면에서:
도 1은 일부 실시예에 따른 예시적인 소프트웨어 프로그램의 개략적인 블록도이다.
도 2는 일부 실시예에 따른 소프트웨어 프로그램을 실행하기 위한 예시적인 장치의 개략적인 블록도이다.
도 3은 일부 실시예에 따른 선택적 동작 흐름을 개략적으로 나타내는 흐름도(flow chart)이다. 그리고
도 4는 일부 실시예에 따른 또 다른 선택적인 동작 흐름의 순서도이다.
일부 코-프로세서는 시스템의 기본 처리 장치에 의해 호출되지(invoked) 지 않고, 독립적으로 작동한다. 예를 들어, 네트워크 인터페이스 코-프로세서는 기본 처리 장치의 개입(involvement)이 거의 없이 수신된 네트워크 패킷을 처리할 수 있다. 다른 코-프로세서는 기본 처리 장치(예를 들어, 디지털 이미지를 렌더링하는 명령어를 수신하는 그래픽 처리 장치(graphic processing unit, GPU)로부터 명령어를 수신한다.
시스템의 두 처리 장치가 함께 작동하는 경우, 호출 처리 장치에서 타겟 처리 장치의 동작을 호출해야 할 필요가 있을 수 있다. 예를 들어, 기본 처리 장치에서 코-프로세서를 호출해야 할 수 있다. 다른 예에서, 코-프로세서는 독립적으로 액세스할 수 없는 리소스, 예를 들어 비휘발성 디지털 저장소에 액세스하기 위해 기본 처리 장치를 호출할 수 있다. 게다가, 타겟 처리 장치를 호출하는 호출 처리 장치 이외에 호출 처리 장치로부터 타겟 처리 장치로 하나 이상의 데이터 값을 전달해야 하는 경우가 있다(예를 들어, 타겟 처리 장치에 의해 수행되는 동작의 입력 인수(input arguments)) 또한, 타겟 처리 장치에서 호출 처리 장치로 하나 이상의 다른 데이터 값을 다시 전달해야 할 필요가 있다(예를 들어, 타겟 처리 장치에서 계산된 결과값).
컴퓨팅에서, 응용 프로그램 바이너리 인터페이스(Application Binary Interface, ABI)라는 용어는 데이터 및 계산 루틴에 액세스되는 방법을 하드웨어-종속된 형식(format)으로 설명하는 2개의 바이너리 프로그램 모듈 간의 인터페이스를 나타낸다. 2개의 바이너리 프로그램 모듈 사이의 인터페이스는 데이터 구조의 형식을 포함할 수 있다. 추가로 또는 대안적으로, 인터페이스는 데이터를 계산 루틴에 대한 입력으로 제공하거나, 추가적으로 또는 대안적으로 계산 루틴으로부터 출력으로 판독하기 위한 호출 규칙(calling conventions)을 포함할 수 있다.
컴퓨팅에서, 아키텍처라는 용어는 컴퓨터 시스템을 구성하는 구성 요소의 조직(organization)과 컴퓨터 시스템의 기능을 안내하는 동작의 의미 또는 의미론(semantics)을 나타낸다. 본 명세서에서 사용된 용어 "동종 시스템(homogenous system)"은 모두 공통 아키텍처를 갖는 복수의 처리 장치를 갖는 컴퓨팅 시스템을 의미한다. 예를 들어, 공통 아키텍처를 갖는 복수의 중앙 처리 장치(central processing units, CPUs)를 갖는 컴퓨팅 시스템을 동종 시스템이라 한다. 유사하게, "이종 시스템(heterogeneous system)"이라는 용어는 복수의 처리 장치 중 적어도 하나의 처리 장치가 복수의 처리 장치 중 다른 하나의 아키텍처와 다른 아키텍처를 갖는 복수의 처리 장치를 갖는 시스템을 의미한다. 예를 들어, CPU와 GPU를 갖춘 시스템은 이종 시스템이다. 이종 시스템의 다른 예는 CPU와 FPGA(field-programmable gate array) 코-프로세서를 갖춘 시스템이 있다. 이종 시스템의 또 다른 예는 CISC(complex instruction set computer) 기반 아키텍처를 갖는 CPU와 RISC(reduced instruction set computer) 기반 아키텍처를 갖는 CPU로 구성된 시스템이다. 이종 시스템의 추가적인 예는 각각 상이한 명령어 세트(set) 아키텍처(instruction set architecture, ISA)를 지원하는 두 개 이상의 CPU를 갖는 시스템이다. 예를 들어, 하나의 CPU는 intel x86 ISA를 지원하고, 다른 CPU는 Motorola 68000 시리즈 ISA를 지원하거나 하나의 CPU는 ARM ISA 및 RISC-V ISA를 지원하는 다른 CPU이다. 이종 시스템의 또 다른 예로, 이종 시스템은 전력 소모가 높은 고성능 CPU와 전력 소모가 적은 효율적인 CPU를 갖는다.
호출 실행 블록(calling execution block)과 타겟 실행 블록(target execution block)을 포함하는 복수의 실행 블록(execution block)을 포함하는 소프트웨어 프로그램을 실행할 때, 우리는 호출 실행 블록이 타겟 실행 블록의 하나 이상의 명령어를 실행하기 위해 하나 이상의 제어 흐름(control-flow) 명령어를 포함하는 경우, 호출 실행 블록이 타겟 실행 블록을 호출한다고 말한다. 복수의 처리 장치에 의해 소프트웨어 프로그램을 실행하는 경우, 호출 실행 블록을 실행하는 호출 처리 장치가 타겟 처리 장치에 의해 실행되는 타겟 실행 블록을 호출한다. 이러한 경우, 호출 실행 블록에 의해 타겟 실행 블록을 호출하는 것은 타겟 처리 장치에 대한 인터페이스를 설명하는 ABI에 따라 호출 처리 장치에 의해 실행되는 명령어 세트를 생성하는 것을 요구한다. 즉, 명령어 세트는 ABI를 구현한다. 선택적으로, ABI를 구현하는 것은 호출 처리 장치의 아키텍처와 타겟 처리 장치의 다른 아키텍처 사이에서 변환하기 위한 하나 이상의 변환 명령어를 명령어 세트에 추가하는 것을 포함한다. 선택적으로, 하나 이상의 변환 명령어는 호출 처리 장치에 의해 실행되는 명령어 세트에 추가된다. 선택적으로, 하나 이상의 변환 명령어는 타겟 처리 장치에 의해 실행되는 다른 명령어에 추가된다. 선택적으로, ABI를 구현하는 것은 타겟 장치(target unit)의 다른 아키텍처에 따라 예를 들어, 다른 아키텍처의 데이터 인코딩, 다른 아키텍처의 바이트 정렬, 다른 아키텍처의 바이트 순서 중 하나 이상에 따른 하나 이상의 데이터 값을 메모리 영역(예를 들어, 스택(stack))에 구성하는 것(organizing)을 포함한다.
또한, 호출 처리 장치의 실행 상태를 ABI를 통해 타겟 처리 장치에 제공할 필요(예를 들어, 파일이나 메모리 영역에 대한 액세스 권한을 공유하고, 추가로 또는 대안으로 하나 이상의 데이터 값을 공유하는 경우)가 있을 수 있다. 공유된 실행 상태의 다른 예로는 네트워크 소켓 컨텍스트(context), 네트워크 토폴로지 보기 및 가상화 컨텍스트(예를 들어, 단일 루트 입/출력 가상화(Single Root Input/Output Virtualization, SRIOV)를 포함한다. 실행 상태는 스레드 식별 값(thread identification value), 프로세스 식별 값, 리턴 명령어를 실행한 후 실행할 명령어의 명령어 주소(리턴 주소), 함수의 하나 이상의 형식적 인수 값을 포함할 수 있지만, 이에 국한되지 않는다. 선택적으로, 호출 실행 블록과 타겟 실행 블록은 소프트웨어 프로그램의 공통 범위의 애플리케이션 메모리 주소(common range of application memory addresses)에 액세스(access)한다. 애플리케이션 메모리 주소의 일부 예는 물리적 메모리 주소, 가상 메모리 주소, 메모리 매핑된 입출력 주소 및 버스 주소가 포함되지만 이에 국한되지 않는다. 선택적으로, 타겟 실행 블록은 컴퓨터화된 시스템의 하나 이상의 장치, 예를 들어 디스크 드라이브 또는 네트워크 어댑터에 액세스하는 것을 포함한다. 선택적으로, ABI를 통해 하나 이상의 장치와 연관된 하나 이상의 장치 핸들을 타겟 처리 장치에 제공할 필요가 있다.
코-프로세서에 의해 실행될 하나 이상의 실행 블록을 미리 식별할 수 있고, 소스 파일로부터 소프트웨어 프로그램을 컴파일할 때 코-프로세서가 알려진 경우, 하나 이상의 실행 블록을 실행하도록 코-프로세서에 명령하기 위해 하나 이상의 적절한 명령어 세트가 생성될 수 있다. 그러나, 미리 코-프로세서에 대한 명령어를 생성하여 달성한 성능 개선은 하나 이상의 코-프로세서에 위임될 때 시스템 성능을 향상시키는 작업을 식별하는 능력에 의해 제한된다.
복수의 처리 장치가 공통 아키텍처를 갖고 따라서 공통 ABI를 갖는 동종 시스템에서, 실행 블록은 복수의 처리 장치 중 어느 것이 다른 실행 블록을 실행할지 미리 결정되지 않고 또 다른 처리 장치에 의해 실행되는 또 다른 실행 블록을 호출하도록 컴파일될 수 있다. 그러나, 동종 시스템에서 달성되는 성능 개선은 동적으로 할당된 작업에 대한 공통 아키텍처의 지원으로 인해 제한된다. 예를 들어, 복수의 처리 장치 각각이 CPU인 경우, 하나 이상의 부동 소수점 연산 동작을 다른 CPU에 위임하는 것은 하나 이상의 부동 소수점 프로세서에 위임하는 것보다 성능 향상이 적을 수 있다.
이종 시스템은 선택적으로 제1 아키텍처를 갖는 제1 타겟 처리 장치와 제2 아키텍처를 갖는 제2 타겟 처리 장치를 포함한다. 이러한 이종 시스템에서, 호출 처리 장치에 의해 실행되고 제1 타겟 처리 장치에 의해 실행되는 실행 블록을 호출하는 명령어 세트(set)가 제1 아키텍처의 제1 ABI에 따라 생성된다. 이종 시스템에서, 제2 아키텍처에 대한 제2 ABI가 제1 ABI와 상이할 수 있기 때문에, 제2 타겟 처리 장치에 의해 실행될 때 동일한 실행 블록을 호출하는데 명령어 세트가 사용되지 않을 수 있다.
컴퓨터 프로그래밍에서 컴퓨터 프로그램의 중간 표현(intermediate representation)은 특정 기계에 국한되지 않고 기계(처리 장치)의 동작을 표현하는 추상적인 기계 언어로 컴퓨터 프로그램을 표현한 것이다.
본 개시는 여기서 설명된 일부 실시예에서 호출 처리 장치와 타겟 처리 장치를 동적으로 구성하기 위한 소프트웨어의 중간 표현을 사용하는 것을 제안한다. 선택적으로, 중간 표현은 복수의 블록을 포함한다. 이러한 실시예에 따르면, 중간 표현을 사용하여 호출 처리 장치가 복수의 블록 중 호출 블록을 실행하도록 구성되고, 타겟 처리 장치가 복수의 블록 중 타겟 블록을 실행하도록 구성된다. 여기서, 호출 블록은 타겟 블록을 호출한다. 그렇게 하기 위해, 이러한 실시예에서 본 개시는 호출 블록을 사용하여 실행 가능한 명령어의 호출 세트를 동적으로 생성하기 위해 그리고 타겟 블록을 사용하여 실행 가능한 명령어의 타겟 세트를 동적으로 생성하기 위해 중간 표현을 사용하는 것, 그리고 실행 가능한 명령어의 호출 세트를 실행하기 위한 호출 처리 장치 및 실행 가능한 명령어의 타겟 세트를 실행하기 위한 타겟 처리 장치를 구성하는 것을 제안한다. 선택적으로, 소프트웨어 프로그램을 실행하는 것은 실행 가능한 명령어의 호출 세트를 실행하는 호출 처리 장치와 실행 가능한 명령어의 타겟 세트를 실행하는 타겟 처리 장치를 포함한다. 선택적으로, 소프트웨어 프로그램을 실행하는 것은 실행 가능한 명령어의 호출 세트를 생성하는 것과 추가적으로 또는 대안적으로 실행 가능한 명령어의 타겟 세트를 생성하는 것을 포함한다. 선택적으로, 소프트웨어 프로그램을 실행하는 것은 실행 가능한 명령어의 호출 세트를 실행하기 위해 호출 처리 장치를 구성하는 것과 추가적으로 또는 대안적으로 실행 가능한 명령어의 타겟 세트를 실행하기 위해 타겟 처리 장치를 구성하는 것을 포함한다. 선택적으로, 실행 가능한 명령어의 호출 세트와 실행 가능한 명령어의 타겟 세트의 동적 생성은 소프트웨어 프로그램의 런타임(run-time) 즉, JIT(just-in-time) 컴파일(compilation)이다. 선택적으로, 호출 처리 장치의 제1 아키텍처는 타겟 처리 장치의 제2 아키텍처와 상이하다. 복수의 블록의 중간 표현을 사용하는 것은 호출 처리 장치 및 타겟 처리 장치의 동적 구성을 허용하도록 실행 가능한 명령어의 호출 세트와 실행 가능한 명령어의 타겟 세트의 동적 생성을 허용하며, 따라서 복수의 처리 장치로부터 호출 정치 장치와 타겟 처리 장치를 동적으로 선택을 허용한다. 예를 들어 호출 처리 장치와 타겟 처리 장치의 정적(static) 구성과 비교하여 대기 시간을 개선하고 처리량을 추가적으로 또는 대안적으로 개선하는 등의 소프트웨어 프로그램 실행 시, 호출 처리 장치와 타겟 처리 장치의 동적 구성은 시스템의 성능 개선을 용이하게 한다.
중간 표현의 복수의 블록 중 하나의 블록은 다른 블록의 하나 이상의 중간 명령어를 실행하기 위한 하나 이상의 제어 흐름 중간 명령어를 포함함으로써 중간 표현의 다른 블록을 호출할 수 있다. 제어 흐름 중간 표현의 일부 예는 함수 호출 중간 명령어, 점프 중간 명령어 및 조건부 분기(branch) 중간 명령어이다. 선택적으로, 호출 블록과 타겟 블록은 호출 블록이 타겟 블록의 하나 이상의 타겟 중간 명령어를 실행하기 위한 하나 이상의 제어 흐름 중간 명령어를 포함하도록 식별된다.
또한, 하나 이상의 제어 흐름 중간 명령어는 선택적으로 하나 이상의 입력 값, 예를 들어 함수의 하나 이상의 형식적 인수를 타겟 처리 장치에 제공하는 호출 처리 장치를 포함한다. 또한, 타겟 처리 장치는 선택적으로 타겟 처리 장치에 의해 생성된 하나 이상의 값, 예를 들어 타겟 블록을 실행한 결과를 호출 처리 장치에 제공하도록 구성된다.
또한, 본 명세서에서 설명된 일부 실시예에서 호출 블록과 타겟 블록은 소프트웨어 프로그램의 적어도 일부를 실행하는 동안 수집된 복수의 통계 값에 따라 식별된다. 통계 값의 예로는 제어 흐름 명령어를 실행한 결과, 소프트웨어 프로그램 변수(variable)의 데이터 값, 메모리 액세스 패턴 및 메모리 가상 주소 변환이 있다. 이러한 통계 값을 통해 소프트웨어 프로그램의 실행의 하나 이상의 가능한 경로를 식별할 수 있다. 복수의 통계 값에 따른 호출 블록과 타겟 블록을 식별하는 것은 호출 블록과 타겟 블록의 식별의 정확도를 증가하여 소프트웨어의 실행 시 시스템의 성능을 향한다. 선택적으로, 복수의 통계 값을 수집할 목적으로 복수의 원격 측정(telemetry) 중간 명령어가 소프트웨어 프로그램의 중간 표현으로 삽입된다.
적어도 하나의 실시예를 상세히 설명하기 전에, 실시예는 다음의 설명 및/또는 도면 및/또는 실시예에 설명된 구성 요소 및/또는 방법의 구성 및 배열의 세부 사항에 대한 적용이 반드시 제한되는 것은 아니라는 것이 이해되어야 한다. 여기에 설명된 구현은 다른 실시예로 가능하거나, 또는 다른 방식으로 실행되거나 수행될 수 있다.
실시예는 시스템, 방법 및/또는 컴퓨터 프로그램 제품일 수 있다. 컴퓨터 프로그램 제품은 프로세서가 실시예의 예(aspects)를 수행하기 위한 컴퓨터 판독 가능 프로그램 명령어를 갖는 컴퓨터 판독 가능한 저장 매체(또는 미디어(media)를 포함할 수 있다.
컴퓨터 판독 가능한 저장 매체는 명령어 실행 장치에 의해 사용되는 명령어를 유지하고 저장할 수 있는 유형의 장치일 수 있다. 컴퓨터 판독 가능한 저장 매체는 예를 들어 전자 저장 장치, 자기 저장 장치, 광학 저장 장치, 전자기 저장 장치, 반도체 저장 장치 또는 이들의 임의의 적절한 조합일 수 있지만, 이에 제한되지 않는다. 컴퓨터 판독 가능한 저장 매체의 보다 구체적인 예의 비포괄적인 목록은 다음을 포함한다: 휴대용 컴퓨터 디스켓, 하드 디스크, RAM(Random Access Memory), ROM(읽기 전용 메모리), 지울 수 있는 프로그래밍 가능한 읽기 전용 메모리(EPROM 또는 플래시 메모리), SRAM(정적 랜덤 액세스 메모리), 휴대용 컴팩트 디스크 읽기 전용 메모리(CD-ROM), 디지털 다목적 디스크(DVD), 메모리 스틱, 플로피 디스크 및 이들의 적절한 조합. 본 명세서에서 사용된 컴퓨터 판독 가능한 저장 매체는 전파 또는 기타 자유롭게 전파되는 전자기파, 도파관을 통해 전파되는 전자기파 또는 기타 전송 매체(예, 광섬유 케이블을 통과하는 광 펄스) 또는 전선을 통해 전송되는 전기 신호와 같은 일시적인 신호 자체로 해석되어서는 안된다.
본 명세서에서 설명된 컴퓨터 판독 가능한 프로그램 명령어는 컴퓨터 판독 가능한 저장 매체로부터 각각의 컴퓨팅/처리 장치로 다운로드될 수 있거나, 네트워크(예를 들어 인터넷, 근거리 통신망, 광역 통신망 및/또는 무선 네트워크)를 통해 외부 컴퓨터 또는 외부 저장 매체로 다운로드될 수 있다. 네트워크는 구리 전송 케이블, 광 전송 섬유, 무선 전송, 라우터, 방화벽, 스위치, 게이트웨이 컴퓨터 및/또는 에지 서버를 포함할 수 있다. 각 컴퓨팅/처리 장치의 네트워크 어댑터 카드 또는 네트워크 인터페이스는 네트워크로부터 컴퓨터 판독 가능한 프로그램 명령어를 수신하고, 각각의 컴퓨팅/처리 장치 내의 컴퓨터 판독 가능한 저장 매체에 저장을 위한 컴퓨터 판독 가능한 프로그램 명령어를 전달한다.
실시예의 동작을 수행하기 위한 컴퓨터 판독 가능한 프로그램 명령어는 어셈블러 명령어, 명령어-세트 아키텍처(ISA) 명령어 기계 명령어, 기계 종속 명령어, 마이크로 코드, 펌웨어 명령어, 상태 설정 데이터 또는 소스 코드 또는 소스 코드나 객체 코드, 공유하게(natively) 컴파일되거나 또는 컴파일된 JIT, smalltalk, C++, Java, 객체 지향 Fortran 등 과 같은 객체 지향 프로그래밍 언어, Java script, Python 등과 같은 해석된 프로그래밍 언어 및 "C" 프로그래밍 언어, Fortran 또는 유사한 프로그래밍 언어와 같은 전통적인 절차(conventional procedural) 프로그래밍을 포함하는 하나 이상의 프로그래밍 언어의 조합으로 작성된다. 컴퓨터 판독 가능한 프로그램 명령어는 사용자의 컴퓨터에서 전체적으로 실행할 수 있고, 부분적으로 사용자의 컴퓨터에서 독립 실행형 소프트웨어 패키지로, 부분적으로 사용자 컴퓨터에서 , 그리고 부분적으로 원격 컴퓨터 또는 전체로 원격 컴퓨터나 서버에서 실행할 수 있다. 후자의 경우, 원격 컴퓨터는 근거리 통신망 또는 광역 네트워크를 포함한 모든 유형의 네트워크를 통해 사용자의 컴퓨터에 연결되거나 (예를 들어, 인터넷 공급자를 사용하여 인터넷을 통해) 외부 컴퓨터에 연결될 수 있다. 일부 실시예에서, 예를 들어 프로그래밍 가능한 논리 회로, FPGA 또는 프로그램 가능한 논리 어레이(PLA)를 포함하는 전자회로는 실시예의 양상(aspect)을 수행하기 위해 전자 회로를 개인화하기 위해 컴퓨터 판독 가능한 프로그램 명령어의 상태 정보를 활용함으로써 컴퓨터 판독 가능한 프로그램 명령어를 실행할 수 있다.
실시예에 따른 방법, 장치(시스템) 및 컴퓨터 프로그램 제품의 흐름도 및/또는 블록도를 참조하여 실시예의 양상(aspect)이 본 명세서에 설명된다. 흐름도 예시 및/또는 블록도의 각 블록, 그리고 흐름도 예시 및/또는 블록도의 블록 조합은 컴퓨터 판독 가능한 프로그램 명령어에 의해 구현될 수 있는 것으로 이해되어야 한다.
이러한 컴퓨터 판독 가능한 프로그램 명령어는 기계를 생성하기 위해 범용 컴퓨터, 특수 목적 컴퓨터 또는 다른 프로그래밍 가능한 데이터 처리 장치의 프로세서에 제공될 수 있으며, 따라서 컴퓨터 또는 기타 프로그래밍 가능한 데이터 처리 장치의 프로세서를 통해 실행되는 명령어는 흐름도 및/또는 블록도 또는 블록에 구체화된 기능/행위를 구현하기 위한 수단을 생성할 수 있다. 이러한 컴퓨터 판독 가능 프로그램 명령어는 컴퓨터, 프로그래밍 가능한 데이터 처리 장치 및/또는 기타 장치가 특정 방식으로 기능하도록 지시할 수 있는 컴퓨터 판독 가능한 저장 매체에도 저장될 수 있으며, 따라서 명령어가 저장되어 있는 컴퓨터 판독 가능한 저장 매체는 흐름도 및/또는 블록도 블록 또는 블록들에 지정된 기능/동작의 측면을 구현하는 명령어를 포함하는 제조품을 포함한다.
컴퓨터 판독 가능한 프로그램 명령어는 또한 컴퓨터, 다른 프로그램 가능한 데이터 처리 장치, 또는 다른 장치에 로드되어 일련의 동작 단계가 컴퓨터, 다른 프로그램 가능한 장치 또는 다른 장치에서 수행되어 컴퓨터 구현 프로세스를 생성할 수 있으며, 따라서 컴퓨터, 기타 프로그래밍 가능한 장치 또는 기타 장치에서 실행하는 명령어는 흐름도 및/또는 블록 다이어그램 또는 블록에 지정된 기능/동작을 구현한다. 도면의 흐름도 및 블록도는 다양한 실시예에 따른 시스템, 방법 및 컴퓨터 프로그램 제품의 가능한 구현의 아키텍처, 기능 및 동작을 예시한다. 이와 관련하여, 흐름도 또는 블록도에서 각 블록은 구체화된 논리 기능(들)을 구현하기 위한 하나 이상의 실행 가능한 명령어를 포함하는 명령어의 모듈, 세그먼트 또는 부분을 나타낼 수 있다. 일부 대안적인 구현에서, 블록에 언급된 기능은 도면에 언급된 순서를 벗어나 발생할 수 있다. 예를 들어, 연속적으로 도시된 두 블록은 실제로는 실질적으로 동시에 실행될 수 있거나, 관련된 기능에 따라 블록이 때때로 역순으로 실행될 수 있다. 블록도 및/또는 흐름도의 각 블록, 블록도 및/또는 흐름도의 블록 조합은 구체화된 기능을 수행하거나 특수한 목적 하드웨어와 컴퓨터 명령어의 조합으로 수행하거나 수행하는 특수한 목적 하드웨어 기반의 시스템에 의해 구현될 수 있다.
도 1을 참조하면, 도 1은 일부 실시예에 따른 예시적인 소프트웨어 프로그램(100)의 개략적인 블록도를 도시한다. 이러한 실시예에서, 소프트웨어 프로그램의 소스 코드(101)는 호출 실행 블록(110) 및 타겟 실행 블록(120)을 포함하는 복수의 실행 블록을 포함한다. 선택적으로, 호출 실행 블록(110)은 타겟 실행 블록(120)을 호출한다. 선택적으로, 호출 실행 블록(110)은 타겟 실행 블록(120)의 하나 이상의 소스 코드 명령어를 실행하기 위한 하나 이상의 제어 흐름 소스 코드 명령어를 포함한다.
선택적으로, 중간 표현(102)은 예를 들어 중간 언어로된 컴퓨터 아키텍처에 특정되지 않은 소스 코드(101)의 표현이다. 중간 표현에 사용되는 중간 언어의 예로는 RTL(Register Transfer Language), C 프로그래밍 언어, MATALAB 사전 컴파일 코드, LLVM 개발자 그룹 중간 표현 언어, GNU 컴파일러 컬렉션(collection) 중간 표현 언어, Microsoft P코드 및 Java 바이트코드가 있다. 선택적으로, 중간 표현(102)은 가상 머신을 타겟으로 하는(targeting) 언어로 되어있다. 선택적으로, 중간 표현(102)은 호출 블록(111) 및 타겟 블록(121)을 포함하는 복수의 블록을 포함한다. 선택적으로, 복수의 블록 각각은 소스 코드(101)의 실행 블록 중 하나와 연관되고, 복수의 중간 명령어를 포함한다. 이러한 예에서, 호출 블록(111)은 호출 실행 블록(110)과 연관되고, 타겟 블록(121)은 타겟 실행 블록(120)과 연관된다.
중간 표현(102)의 복수의 블록 각각과 소스 코드(101)의 복수의 실행 블록 사이의 연관에서, 중간 표현(102)은 선택적으로 실행 블록(120)을 호출하는 실행 블록(110)을 보존한다. 선택적으로, 호출 블록(111)은 타겟 블록(121)의 하나 이상의 타겟 중간 명령어를 실행하기 위한 하나 이상의 제어 흐름 중간 명령어를 포함한다.
하나 이상의 처리 장치에서 소프트웨어 프로그램을 실행하기 위해, 중간 표현(102)의 복수의 블록 중 하나에 대해 각각 하나 이상의 실행 가능한 명령어 세트가 생성된다. 따라서, 실행 가능한 명령어의 호출 세트(112)는 호출 블록(111)을 위해 선택적으로 생성되고, 실행 가능한 명령어의 타겟 세트(122)는 선택적으로 타겟 블록(121)에 대해 생성된다.
도 2 또한 참조하면, 도 2는 일부 실시예에 따라 소프트웨어 프로그램을 실행하기 위한 예시적인 장치(200)의 개략적인 블록도를 도시한다. 이러한 실시예에서, 적어도 하나의 하드웨어 프로세서(201)는 예를 들어 호출 처리 장치(210) 및 타겟 처리 장치(220)를 포함하는 복수의 처리 장치에 연결된다. 선택적으로 복수의 처리 장치 중 하나 이상은 중앙 처리 장치(a central processing unit), 멀티 코어 중앙 처리 장치(multi-core central processing unit, CPU), 데이터 처리 장치(data processing unit, DPU), 마이크로컨트롤러 장치(microcontroller unit, MCU), 가속 처리 장치(accelerated processing unit, ACU), 필드 프로그래밍 가능 게이트 어레이(field-programmable gate array, FPGA), 대규모 재구성 가능 아키텍처(coarse-grained reconfigurable architecture, CGRA), 신경망 가속기(neural-network accelerator), 지능 처리 장치(intelligence processing unit, IPU), 애플리케이션별 통합 회로(application-specific integrated circuit, ASIC), 양자 컴퓨터(quantum computer), 및 복수의 구성 가능한 데이터 라우팅 접합에 의해 연결된 복수의 재구성 가능한 논리 요소를 포함하는 상호 연결된 컴퓨팅 그리드(interconnected computing grid)로 구성된 처리 장치들(processing units)의 그룹으로부터 선택된다.
선택적으로, 호출 처리 장치는 복합 명령어 세트 컴퓨터(complex instruction set computer, CISC) 아키텍처, 축소 명령어 세트 컴퓨터(reduced instruction set computer, RISC). , x86 제품군 기반 컴퓨터(x86-family based computer) 아키텍처, IBM(International Business Machine) Power 제품군 기반 컴퓨터 아키텍처, ARM 제품군 기반 컴퓨터 아키텍처로 구성된 컴퓨터 아키텍처 그룹으로부터 선택된 제1 컴퓨터 아키텍처를 갖는다. 선택적으로, 타겟 처리 장치는 컴퓨터 아키텍처 그룹에서 선택된 제2 컴퓨터 아키텍처를 갖는다. 선택적으로, 제1 컴퓨터 아키텍처는 제2 컴퓨터 아키텍처와 상이하다. 선택적으로, 제1 컴퓨터 아키텍처는 제2 컴퓨터 아키텍처이다.
선택적으로, 적어도 하나의 하드웨어 프로세서(201)는 하나 이상의 디지털 통신 네트워크, 예를 들어 이더넷 네트워크 또는 Wi-fi 네트워크와 같은 LAN(Local Area Network) 또는 인터넷과 같은 광역 네트워크를 통해 복수의 처리 장치에 연결된다. 선택적으로, 호출 처리 장치(21)는 선택적으로 디지털 통신 네트워크를 통해 타겟 처리 장치(220)에 연결된다. 선택적으로, 타겟 처리 장치(220)는 예를 들어 메모리 버스, 주변구성요소 확장 버스 또는 상호 연결을 통해 호출 처리 장치(210)에 전기적으로 연결되며, 일부 예로는 Intel QuickPath Interconnect(QPI) 및 주변 구성 요소 상호 연결 익스프레스(PCIe)가 있다.
선택적으로, 장치(200)는 복수의 처리 장치 중 하나 이상에 선택적으로 연결된 메모리(230)를 포함한다. 선택적으로, 메모리(230)는 예를 들어 정적 RAM(SRAM) 및 추가적으로 또는 대안적으로 동적 RAM(DRAM)을 포함하는 랜덤 액세스 메모리(random access memory, RAM)이다. DRAM의 예로는 SDRAM, 이중 데이터 속도 SDRAM(DDR), 그래픽 이중 데이터 속도 DSRAM(GDDR), 저전력 이중 데이터 속도 SDRAM(LPDDR) 및 고대역폭 RAM(HBM)이 있다. 선택적으로, 장치(200)는 복수의 처리 장치 중 하나 이상의 비휘발성 디지털 스토리지(233)를 포함한다. 비휘발성 디지털 스토리지의 일부 예는 하드 디스크 드라이브, 솔리드 스테이트 드라이브, 네트워크 연결 스토리지 및 스토리지 네트워크를 포함한다.
선택적으로, 장치(200)는 선택적으로 복수의 처리 장치 중 하나 이상에 연결되는 하나 이상의 다른 장치(231)를 포함한다. 장치의 예로는 디스플레이 장치와 네트워크 어댑터가 있다. 선택적으로, 하나 이상의 다른 장치(231)는 하나 이상의 처리 장치에 전기적으로 연결된다.
간결함을 위해, 이후부터 "처리 장치"라는 용어는 "적어도 하나의 하드웨어 프로세서"를 의미하는 데에도 사용된다.
일부 실시예에서, 소프트웨어 프로그램(100)을 실행하기 위해 장치(200)는 다음의 선택적 방법을 구현한다.
이제 도 3을 참조하면, 도 3은 일부 실시예에 따른 동작(300)의 선택적 흐름을 개략적으로 나타내는 흐름도를 도시한다. 이러한 실시예에서, 301에서 처리 장치(201)는 중간 표현(102)의 복수의 블록에서 호출 블록(111)과 타겟 블록(121)을 식별한다. 선택적으로, 호출 블록(111)은 타겟 블록(121)의 하나 이상의 타겟 중간 명령어를 실행하기 위한 하나 이상의 제어 흐름 중간 명령어를 포함한다. 311에서, 처리 장치(201)는 선택적으로 타겟 블록(121)을 사용하여 실행 가능한 명령어의 타겟 세트(122)를 생성한다.
313에서, 처리 장치(201)는 호출 블록(111)을 사용하고 하나 이상의 컴퓨터 제어 명령어를 사용하여 실행 가능한 명령어의 호출 세트(112)를 선택적으로 생성한다. 선택적으로, 실행 가능한 명령어의 호출 세트(112)가 호출 처리 장치(210)를 호출함에 의해 실행되고, 실행 가능한 명령어의 타겟 세트(122)가 타겟 처리 장치(220)에 의해 실행될 때, 하나 이상의 컴퓨터 제어 명령어는 실행 가능한 명령어의 타겟 세트(122)를 호출한다. 선택적으로, 실행 가능한 명령어의 호출 세트(112)는 호출 처리 장치(210)의 제1 컴퓨터 아키텍처와 타겟 처리 장치(220)의 제2 컴퓨터 아키텍처 사이를 변환하기 위해 하나 이상의 제어 흐름 중간 명령어에 적용되는 ABI를 구현하는 복수의 변환 명령어를 포함한다.
선택적으로, 타겟 블록(121)은 복수의 타겟 메타데이터 값을 포함한다. 선택적으로, 복수의 타겟 메타데이터 값 중 일부는 타겟 블록(121)을 실행하기 위한 실행 컨텍스트(context)를 설명한다. 타겟 메타데이터 값의 몇 가지 예는 스택 메모리 값 및 프로그램 카운터 값(program counter value)이다. 선택적으로, 실행 가능한 명령어의 타겟 세트(122)를 생성하는 것(단계)은 타겟 처리 장치(220)의 제2 컴퓨터 아키텍처에 따라 복수의 타겟 메타데이터 값을 사용하여 복수의 변환된 타겟 메타데이터 값을 생성하는 것(단계)을 포함한다.
선택적으로, 실행 가능한 명령어의 호출 세트(112)와 실행 가능한 명령어의 타겟 세트(122)는 모두 애플리케이션 메모리 주소의 공통 범위에 액세스하므로, 실행 가능한 호출 세트(112)는 애플리케이션 메모리 주소의 공통 범위에 있는 하나 이상의 메모리 주소에 대한 하나 이상의 제1 메모리 액세스 명령어를 포함하고, 실행 가능한 명령어의 타겟 세트(122)는 애플리케이션 메모리 주소의 공통 범위에 있는 하나 이상의 다른 메모리 주소에 대한 하나 이상의 제2 메모리 액세스 명령어를 포함한다. 선택적으로, 애플리케이션 메모리 주소의 공통 범위는 물리적 메모리 주소의 범위, 예를 들어 메모리(230)의 물리적 주소 범위이다. 선택적으로, 애플리케이션 메모리 주소의 공통 범위는 가상 메모리 주소의 범위이다. 선택적으로, 애플리케이션 메모리 주소의 공통 범위는 버스 주소의 범위이다. 선택적으로, 애플리케이션 메모리 주소의 공통 범위는 메모리 매핑된 입/출력 주소의 범위이다.
선택적으로, 실행 가능한 명령어의 호출 세트(122)와 실행 가능한 명령어의 타겟 세트(122)는 예를 들어 공통 액세스 권한(privileges)을 제공하기 위해 공통 실행 상태(common execution state)를 공유한다. 선택적으로, 실행 가능한 명령어의 호출 세트(112)의 호출 스레드 식별자는 실행 가능한 명령어의 타겟 세트(122)의 타겟 스레드 식별자와 연관된다. 가능한 예에서, 실행 가능한 명령어의 호출 세트(122) 및 실행 가능한 명령어의 타겟 세트(122)는 모두 공통 장치 핸들(common device handle)을 사용하여 하나 이상의 장치(231)에 액세스한다. 장치 핸들의 일부 예는 네트워크 소켓 핸들, 운영 체제 커널 개체 핸들 및 파일 설명자(descriptor)이다. 따라서, 이러한 예에서, 실행 가능한 명령어의 호출 세트(112)는 하나 이상의 장치(231)와 연관된 하나 이상의 장치 핸들을 사용하여 하나 이상의 장치(231)에 액세스하는 것을 포함하며, 이러한 예에서 실행 가능한 명령어의 타겟 세트(122)는 하나 이상의 장치 핸들을 사용하여 하나 이상의 장치(231)에 액세스하는 것을 포함한다.
선택적으로, 321에서 처리 장치(201)는 실행 가능한 명령어의 호출 세트(112)를 실행하기 위해 호출 처리 장치(210)를 구성한다. 선택적으로, 323에서, 처리 장치(201)는 실행 가능한 명령어의 타겟 세트(122)를 실행하기 위해 타겟 처리 장치(220)를 구성한다.
선택적으로, 호출 처리 장치(210)는 처리 장치(201)이고, 따라서 처리 장치(201)는 실행 가능한 명령어의 호출 세트(112)를 실행하도록 구성된다. 선택적으로, 처리 장치(201)는 소프트웨어 프로그램(100), 즉 JIT 컴파일을 실행하는 동안 방법(300)을 실행한다.
소프트웨어 프로그램(100)을 실행할 때, 호출 처리 장치(210)와 타겟 처리 장치(220)는 서로 통신할 수 있다.
이제 도 4를 참조하면, 도 4는 일부 실시예에 따른 동작(400)의 또 다른 선택적 흐름의 순서도를 도시한다. 이러한 실시예에서, 401에서 호출 처리 장치(210)는 실행 가능한 명령어의 타겟 세트(122)를 호출하기 위한 하나 이상의 컴퓨터 제어 명령어를 실행한다. 선택적으로, 하나 이상의 컴퓨터 제어 명령어를 실행하도록 호출 처리 장치(210)를 구성하는 것(단계)은 타겟 처리 장치(210)에 하나 이상의 인수 값을 제공하기 위해 호출 처리 장치(210)를 구성하는 것(단계)을 포함하며, 따라서 401에서 호출 처리 장치(210)는 선택적으로 타겟 처리 장치(220)에 하나 이상의 인수 값을 제공한다. 선택적으로, 402에서 타겟 처리 장치(220)는 실행 가능한 명령어의 타겟 세트(122) 중 적어도 일부를 실행한다. 선택적으로, 402에서 타겟 처리 장치(220)는 하나 이상의 값을 생성한다. 선택적으로, 실행 가능한 명령어의 타겟 세트(122)를 실행하도록 타겟 처리 장치(220)를 구성하는 것(단계)은 호출 처리 장치(210)에 하나 이상의 값을 제공하기 위해 타겟 처리 장치(220)를 구성하는 것(단계)을 포함하며, 따라서 410에서 타겟 처리 장치(220)는 선택적으로 호출 처리 장치(210)에 하나 이상의 값을 제공한다. 선택적으로, 호출 처리 장치(210)를 구성하는 것(단계)은 하나 이상의 값을 수신하도록 호출 처리 장치(210)를 구성하는 것(단계)을 포함하며, 따라서 413에서 호출 처리 장치(210)는 선택적으로 하나 이상의 값을 수신한다.
선택적으로, 타겟 블록(111)은 소프트웨어 프로그램(100)의 실행 제어를 호출 블록(112)에 반환한다. 선택적으로, 처리 장치(201)는 선택적으로 호출 처리 장치(210)에 실행 가능한 명령어의 호출 세트(112)의 적어도 일부를 실행하도록 명령하기 위한 타겟 처리 장치(220)를 추가로 구성하여, 따라서 420에서 타겟 처리 장치(220)는 선택적으로 호출 처리 장치(210)에게 실행 가능한 명령어의 호출 세트(112) 중 적어도 일부를 실행하도록 지시하고, 422에서 호출 처리 장치(210)는 선택적으로 실행 가능한 명령어의 호출 세트(112) 중 적어도 일부를 실행한다. 선택적으로, 타겟 처리 장치(220)는 일부 예로 운영 체제 프로세스 신호, 하드웨어 큐(queue), 하드웨어 메일함, 메시지, 통신 파이프 및 공유 메모리 영역인 소프트웨어 신호를 사용하여 호출 처리 장치(210)에 명령한다.
선택적으로, 타겟 처리 장치(220)는 실행 가능한 명령어의 타겟 세트(122) 중 일부 다른 것을 실행한 후 실행한다(420)
선택적으로, 호출 처리 장치(210)는 실행 401한 후에 실행 가능한 명령어의 호출 세트(112)의 실행을 중단하도록 추가로 구성된다. 선택적으로, 호출 처리 장치(210)의 실행(422)은 420에서 명령어의 수신에 대한 응답이다. 선택적으로, 타겟 처리 장치(220)는 타겟 처리 장치(220)와 공유되지 않은 리소스에 액세스하기 위해 호출 처리 장치(210)에게 실행 가능한 명령어의 호출 세트(112) 중 적어도 일부를 실행하도록 지시한다. 선택적으로, 타겟 처리 장치(220)는 실행 가능한 명령어의 타겟 세트(112)의 실행을 완료한 후 호출 처리 장치9210)에게 실행 가능한 명령어의 호출 세트(112) 중 적어도 일부를 실행하도록 지시한다.
도 1을 다시 참조하면, 선택적으로, 330에서 처리 장치(201)는 소프트웨어 프로그램(100)의 적어도 일부를 실행하는 동안 복수의 통계 값을 수집한다. 선택적으로, 복수의 통계 값 중 적어도 하나는 제어 흐름 명령어를 실행한 결과를 나타낸다. 선택적으로, 복수의 통계 값 중 적어도 하나는 소프트웨어 프로그램(100)의 값, 예를 들어 함수 또는 조건 분기(branch) 명령어에 대한 입력 값을 나타낸다. 선택적으로, 복수의 통계 값 중 적어도 하나는 메모리 액세스 패턴, 선택적으로 메모리(230)에 대한 복수의 메모리 액세스를 나타낸다. 선택적으로, 메모리 액세스 패턴은 메모리 주소 또는 메모리 주소의 범위에 대한 액세스의 양을 포함한다. 선택적으로, 복수의 통계 값의 적어도 하나는 메모리 주소 변환을 나타낸다.
선택적으로, 복수의 통계 값을 수집하기 위해, 처리 장치(201)는 복수의 원격 측정 중간 명령어를 중간 표현(102)에 삽입하도록 추가로 구성된다. 선택적으로, 처리 장치(201)는 복수의 통계 값을 수집할 목적으로 소프트웨어 프로그램을 실행하는 동안 소프트웨어 프로그램을 수정하기 위해 핫 패치(hot-patching) 기술을 사용하도록 추가로 구성된다.
선택적으로, 처리 장치(201)는 복수의 처리 장치 중 하나 이상으로부터 복수의 통계 값 중 적어도 일부를 수신한다.
선택적으로, 처리 장치(201)는 복수의 통계 값에 따라 301에서 호출 블록과 타겟 블록을 식별한다.
다양한 실시예의 설명은 예시의 목적으로 제시되었지만, 개시된 실시예를 총망라하거나 제한하려는 의도는 아니다. 설명된 실시예의 범위 및 사상을 벗어나지 않으면서 많은 수정 및 변형이 당업자에게 명백할 것이다. 본 명세서에 사용된 용어는 실시예의 원리, 실제 적용 또는 시장에서 발견되는 기술에 대한 기술적 개선을 가장 잘 설명하거나, 당업자가 본 명세서에 개시된 실시예를 이해할 수 있도록 하기 위해 선택되었다.
본 출원에서 만료되는 특허 기간 동안 많은 관련 중간 표현 및 컴퓨터 아키텍처가 개발될 것으로 예상되며 "중간 표현" 및 "컴퓨터 아키텍처"라는 용어의 범위는 이러한 모든 신기술을 선험적으로 포함하도록 의도된다.
본원에서 사용된 용어 "약(about)"은 를 의미한다.
"포함하다", "포함하는", "구성하는", "구성하다", "갖는"이라는 용어와 이들의 결합형은 "포함하지만 이에 국한되지는 않음"을 의미한다. 이 용어는 "이루어진" 및 "본질적으로 이루어진"이라는 용어를 포괄한다.
"본질적으로 이루어진"이라는 문구는 조성물 또는 방법이 추가 성분 및/또는 단계를 포함할 수 있지만, 추가 성분 및/또는 단계가 청구된 조성물 또는 방법의 기본적이고 신규한 특성을 실질적으로 변경하지 않는 경우에만 해당함을 의미한다.
본 명세서에 사용된 바와 같이, 단수형 "하나, 일(a, an)" 및 "상기(the)"는 문맥에서 달리 명시하지 않는 한 복수형을 포함한다. 예를 들어, "화합물" 또는 "적어도 하나의 화합물"이라는 용어는 이들의 혼합물을 포함하여 복수의 화합물을 포함할 수 있다.
본 명세서에서 "예시적인(exemplary)"이라는 단어는 "예, 실례 또는 실례로 제공되는"이라는 의미로 사용된다. "예시적인" 것으로 설명된 임의의 실시예는 반드시 다른 실시예에 비해 바람직하거나 유리한 것으로 해석되거나 및/또는 다른 실시예의 특징의 통합을 배제하는 것으로 해석되어서는 안 된다.
"선택적으로"라는 단어는 본 명세서에서 "일부 실시예에서는 제공되고 다른 실시예에서는 제공되지 않음"을 의미하기 위해 사용된다. 임의의 특정 실시예는 이러한 특징이 충돌하지 않는 한 복수의 "선택적" 특징을 포함할 수 있다.
본 출원 전반에 걸쳐 다양한 실시예가 범위 형식으로 제시될 수 있다. 범위 형식의 설명은 단지 편의와 간결성을 위한 것이며 실시예의 범위에 대한 융통성 없는 제한으로 해석되어서는 안 된다는 점을 이해해야 한다. 따라서, 범위에 대한 기술은 가능한 모든 하위 범위 뿐만 아니라 그 범위 내의 개별 수치도 구체적으로 개시한 것으로 간주되어야 한다. 예를 들어, 1부터 6까지의 범위에 대한 기술은 1부터 3까지, 1부터 4까지, 1부터 5까지, 2부터 4까지, 2부터 6까지, 3부터 3까지의 하위 범위를 구체적으로 개시한 것으로 간주되어야 한다. 6 등 및 해당 범위 내의 개별 숫자(예: 1, 2, 3, 4, 5 및 6). 이는 범위의 폭에 관계없이 적용된다.
본 명세서에 수치 범위가 표시될 때마다, 이는 표시된 범위 내에 인용된 임의의 숫자(분수 또는 적분)를 포함한다는 의미이다. 제1 표시 번호(first indicate number) 및 제2 표시 번호(second indicate number) "사이의 범위/범위"라는 문구 및 제1 표시 번호 "에서(to)" 제2 표시 번호 "까지의 범위/범위" 라는 문구는 본 명세서에서 상호교환적으로 사용되고, 첫번째와 두번째로 표시된 숫자와 그 사이의 모든 분수 및 정수 숫자를 포함한다는 의미이다. 명확성을 위해 별도의 실시예와 관련하여 설명된 실시예의 특정 특징은 단일 실시예에서 조합하여 제공될 수도 있다는 것이 이해된다. 반대로, 간략화를 위해 단일 실시예의 맥락에서 설명된 실시예의 다양한 특징은 별도로 제공되거나 임의의 적절한 하위 조합으로 또는 임의의 다른 설명된 실시예에서 적절하게 제공될 수도 있다. 다양한 실시예의 맥락에서 설명된 특정 특징은 실시예가 해당 요소 없이 작동하지 않는 한 해당 실시예의 필수 특징으로 간주되지 않는다.
실시예가 특정 실시예와 관련하여 설명되었지만, 당업자에게는 많은 대안, 수정 및 변경이 명백할 것임이 분명하다. 따라서, 첨부된 청구범위의 의도(spirit)와 넓은 범위에 속하는 모든 대안, 수정 및 변형을 포괄하려는 의도이다.
본 명세서에 언급된 모든 간행물, 특허 및 특허 출원은 마치 각각의 개별 간행물, 특허 또는 특허 출원이 구체적이고 개별적으로 이루어진 것처럼 본 명세서에 참조로 포함된다고 언급될 때 본 명세서에 언급된 모든 간행물, 특허 및 특허 출원은 그 전체가 참조로 명세서에 포함됨이 출원인의 의도이다. 또한, 본 출원의 참고문헌의 인용 또는 식별은 그러한 참고문헌이 본 발명에 대한 선행 기술로서 이용 가능하다는 것을 인정하는 것으로 해석되어서는 안된다. 섹션 제목이 사용되는 정도까지는 반드시 제한하는 것으로 해석되어서는 안된다. 또한, 본 출원의 우선권 문서(들)는 그 전체가 참고로 본 문서에 포함된다.

Claims (21)

  1. 복수의 처리 장치(processing units) 및 적어도 하나의 하드웨어 프로세서(processor)를 포함하며,
    상기 복수의 처리 장치 및 적어도 하나의 하드웨어 프로세서는 하기에 적합하다:
    소프트웨어 프로그램의 중간(intermediate) 표현(representation)에서, 상기 중간 표현은 복수의 블록을 포함하며, 상기 복수의 블록 각각은 상기 소프트웨어 프로그램의 복수의 실행 블록 중 하나와 연관되고 중간 명령어 세트를 포함하며,
    호출 블록과 타겟 블록을 식별하는 것; 상기 호출 블록은 상기 타겟 블록의 적어도 하나의 타겟 중간 명령어를 실행하기 위한 적어도 하나의 제어 흐름(control-flow) 중간 명령어를 포함하고,
    상기 타겟 블록을 사용하여 실행 가능한 명령어의 타겟 세트를 생성하는 것;
    실행 가능한 명령어의 호출 세트(calling set of executable instructions)가 호출 처리 장치(calling processing unit)에 의해 실행되고 실행 가능한 명령어의 타겟 세트가 타겟 처리 장치(target processing unit)에 의해 실행될 때, 상기 호출 블록을 사용하고, 상기 실행 가능한 명령어의 타겟 세트를 호출하기 위한 적어도 하나의 컴퓨터 제어 명령어를 사용하여 상기 실행 가능한 명령어의 호출 세트를 생성하는 것;
    상기 실행 가능한 명령어의 호출 세트를 실행하기 위해 상기 호출 처리 장치를 구성하는 것; 그리고
    상기 실행 가능한 명령어의 타겟 세트를 실행하기 위한 상기 타겟 처리 장치를 구성하는 것,
    소프트웨어 프로그램을 실행하는 장치.
  2. 제1항에 있어서, 상기 타겟 처리 장치는 상기 명령어의 타겟 세트 중 적어도 일부를 실행하는 상기 타겟 처리 장치에 의해 생성된 적어도 하나의 값을 상기 호출 처리 장치에 제공하도록 추가로 구성되는 소프트웨어 프로그램을 실행하는 장치.
  3. 제2항에 있어서, 상기 호출 처리 장치는 상기 명령어의 타겟 세트 중 적어도 일부를 실행하는 상기 타겟 처리 장치에 의해 생성된 적어도 하나의 값을 상기 호출 처리 장치로부터 수신하도록 더 구성되는 소프트웨어 프로그램을 실행하는 장치.
  4. 제1항에 있어서, 상기 호출 처리 장치는 상기 타겟 처리 장치에 적어도 하나의 인수 값(argument value)을 제공하도록 더 구성되는 소프트웨어 프로그램을 실행하는 장치.
  5. 제1항에 있어서, 상기 타겟 처리 장치는, 상기 명령어의 타겟 세트 중 적어도 일부를 실행한 후, 상기 호출 처리 장치에게 상기 실행 가능한 명령어의 호출 세트 중 적어도 일부를 실행하도록 명령하게 구성되는 소프트웨어 프로그램을 실행하는 장치.
  6. 제5항에 있어서, 상기 호출 처리 장치는,
    상기 실행 가능한 명령어의 타겟 세트를 호출하기 위한 상기 적어도 하나의 컴퓨터 제어 명령어를 실행한 후 상기 실행 가능한 명령어의 호출 세트의 실행을 일시 중단하는 것; 그리고
    타겟 처리 장치로부터 명령어를 수신하는 것에 응답하여 상기 실행 가능한 명령어의 호출 세트 중 적어도 일부를 실행하는 것;을 하도록 구성된 소프트웨어 프로그램을 실행하는 장치.
  7. 제1항에 있어서, 상기 타겟 처리 장치는 중앙 처리 장치(a central processing unit), 멀티 코어 중앙 처리 장치(multi-core central processing unit, CPU), 데이터 처리 장치(data processing unit, DPU), 마이크로컨트롤러 장치(microcontroller unit, MCU), 가속 처리 장치(accelerated processing unit, ACU), 필드 프로그래밍 가능 게이트 어레이(field-programmable gate array, FPGA), 대규모 재구성 가능 아키텍처(coarse-grained reconfigurable architecture, CGRA), 신경망 가속기(neural-network accelerator), 지능 처리 장치(intelligence processing unit, IPU), 애플리케이션별 통합 회로(application-specific integrated circuit, ASIC), 양자 컴퓨터(quantum computer), 및 복수의 구성 가능한 데이터 라우팅 접합에 의해 연결된 복수의 재구성 가능한 논리 요소를 포함하는 상호 연결된 컴퓨팅 그리드(interconnected computing grid)로 구성된 처리 장치들(processing units)의 그룹으로부터 선택되는 소프트웨어 프로그램을 실행하는 장치.
  8. 제1항에 있어서, 상기 호출 처리 장치의 제1 컴퓨터 아키텍처는 상기 타겟 처리 장치의 제2 컴퓨터 아키텍처와 상이한 소프트웨어 프로그램을 실행하는 장치.
  9. 제8항에 있어서, 상기 제1 컴퓨터 아키텍처 및 상기 제2 컴퓨터 아키텍처 중 적어도 하나는 복합 명령어 세트 컴퓨터(complex instruction set computer, CISC) 아키텍처, 축소 명령어 세트 컴퓨터(reduced instruction set computer, RISC). , x86 제품군 기반 컴퓨터(x86-family based computer) 아키텍처, IBM(International Business Machine) Power 제품군 기반 컴퓨터 아키텍처, ARM 제품군 기반 컴퓨터 아키텍처로 구성된 컴퓨터 아키텍처 그룹으로부터 선택되는 소프트웨어 프로그램을 실행하는 장치.
  10. 제8항에 있어서, 상기 실행 가능한 명령어의 호출 세트는 호출 처리 장치의 제1 컴퓨터 아키텍처와 타겟 처리 장치의 제2 컴퓨터 아키텍처 사이를 변환하기 위해 적어도 하나의 제어 흐름 중간 명령어에 적용되는 애플리케이션 바이너리 인터페이스를 구현하는 복수의 변환 명령어를 포함하는 소프트웨어 프로그램을 실행하는 장치.
  11. 제8항에 있어서,
    상기 타겟 블록은 복수의 타겟 메타데이터 값을 포함하고; 그리고
    상기 실행 가능한 명령어의 타겟 세트를 생성하는 것은 상기 타겟 처리 장치의 상기 제2 컴퓨터 아키텍처에 따라 상기 복수의 타겟 메타데이터 값을 사용하여 복수의 변환된 타겟 메타데이터 값을 생성하는 것을 포함하는 소프트웨어 프로그램을 실행하는 장치.
  12. 제1항에 있어서,
    상기 실행 가능한 명령어의 호출 세트는 애플리케이션 메모리 주소의 식별된 범위에 있는 적어도 하나의 메모리 주소에 대한 적어도 하나의 제1 메모리 액세스 명령어를 포함하고; 그리고
    상기 실행 가능한 명령어의 타겟 세트는 상기 애플리케이션 메모리 주소의 식별된 범위 내의 적어도 하나의 다른 메모리 주소에 대한 적어도 하나의 제2 메모리 액세스 명령어를 포함하는 소프트웨어 프로그램을 실행하는 장치.
  13. 제12항에 있어서,
    상기 애플리케이션 메모리 주소의 식별된 범위는 물리적 메모리 주소의 범위, 가상 메모리 주소의 범위, 메모리 매핑된 입출력 주소의 범위 및 버스 주소의 범위 중 하나인 소프트웨어 프로그램을 실행하는 장치.
  14. 제1항에 있어서,
    상기 실행 가능한 명령어의 호출 세트는 적어도 하나의 장치와 연관된 적어도 하나의 장치 핸들을 사용하여 적어도 하나의 장치에 액세스하는 것을 포함하고; 그리고
    상기 실행 가능한 명령어의 타겟 세트는 적어도 하나의 장치 핸들을 사용하여 적어도 하나의 장치에 액세스하는 것을 포함하는 소프트웨어 프로그램을 실행하는 장치.
  15. 제14항에 있어서,
    상기 적어도 하나의 장치 핸들은 네트워크 소켓 핸들, 운영 체제 커널 객체 핸들 및 파일 설명자 중 적어도 하나인 소프트웨어 프로그램을 실행하는 장치.
  16. 제1항에 있어서,
    상기 적어도 하나의 하드웨어 프로세서는,
    소프트웨어 프로그램의 적어도 일부를 실행하는 동안 복수의 통계 값을 수집하는 것; 그리고
    상기 복수의 통계 값에 따라 상기 호출 블록과 상기 타겟 블록을 식별하는 것;에 적합한 소프트웨어 프로그램을 실행하는 장치.
  17. 제16항에 있어서,
    상기 복수의 통계 값 중 적어도 하나는 제어 흐름 명령어를 실행한 결과, 소프트웨어 프로그램 변수의 데이터 값, 메모리 액세스 패턴, 메모리 가상 주소 변환 중 하나를 나타내는 소프트웨어 프로그램을 실행하는 장치.
  18. 제16항에 있어서,
    상기 적어도 하나의 하드웨어 프로세서는,
    상기 복수의 통계 값을 수집할 목적으로 복수의 원격 측정 중간 명령어(telemetry intermediate instructions)를 소프트웨어 프로그램의 중간 표현에 삽입하는 것;에 적합한 소프트웨어 프로그램을 실행하는 장치.
  19. 제1항에 있어서, 상기 호출 처리 장치는 적어도 하나의 하드웨어 프로세서인 것을 특징으로 하는 소프트웨어 프로그램을 실행하는 장치.
  20. 소프트웨어 프로그램을 실행하는 방법으로서,
    소프트웨어 프로그램의 중간(intermediate) 표현(representation)에서, 상기 중간 표현은 복수의 블록을 포함하며, 상기 복수의 블록 각각은 상기 소프트웨어 프로그램의 복수의 실행 블록 중 하나와 연관되고 중간 명령어 세트를 포함하며,
    호출 블록과 타겟 블록을 식별하는 단계; 여기서, 상기 호출 블록은 상기 타겟 블록의 적어도 하나의 타겟 중간 명령어를 실행하기 위한 적어도 하나의 제어 흐름(control-flow) 중간 명령어를 포함하고,
    상기 타겟 블록을 사용하여 실행 가능한 명령어의 타겟 세트를 생성하는 단계;
    실행 가능한 명령어의 호출 세트(calling set of executable instructions)가 호출 처리 장치(calling processing unit)에 의해 실행되고 실행 가능한 명령어의 타겟 세트가 타겟 처리 장치(target processing unit)에 의해 실행될 때, 상기 호출 블록을 사용하고, 상기 실행 가능한 명령어의 타겟 세트를 호출하기 위한 적어도 하나의 컴퓨터 제어 명령어를 사용하여 상기 실행 가능한 명령어의 호출 세트를 생성하는 단계;
    상기 실행 가능한 명령어의 호출 세트를 실행하기 위해 상기 호출 처리 장치를 구성하는 단계; 그리고
    상기 실행 가능한 명령어의 타겟 세트를 실행하기 위한 상기 타겟 처리 장치를 구성하는 단계;를 포함하는 소프트웨어 프로그램을 실행하는 방법.
  21. 소프트웨어 프로그램을 실행하기 위한 소프트웨어 프로그램 제품으로서,
    비일시적 컴퓨터 판독 가능 저장 매체;
    하기에 대한 제1 프로그램 명령어; 여기서, 소프트웨어 프로그램의 중간(intermediate) 표현(representation)에서, 상기 중간 표현은 복수의 블록을 포함하며, 상기 복수의 블록 각각은 상기 소프트웨어 프로그램의 복수의 실행 블록 중 하나와 연관되고 중간 명령어 세트를 포함하며, 호출 블록과 타겟 블록을 식별하는 것; 여기서, 상기 호출 블록은 상기 타겟 블록의 적어도 하나의 타겟 중간 명령어를 실행하기 위한 적어도 하나의 제어 흐름(control-flow) 중간 명령어를 포함하고,
    상기 타겟 블록을 사용하여 실행 가능한 명령어의 타겟 세트를 생성하기 위한 제2 프로그램 명령어;
    실행 가능한 명령어의 호출 세트(calling set of executable instructions)가 호출 처리 장치(calling processing unit)에 의해 실행되고 실행 가능한 명령어의 타겟 세트가 타겟 처리 장치(target processing unit)에 의해 실행될 때, 상기 호출 블록을 사용하고, 상기 실행 가능한 명령어의 타겟 세트를 호출하기 위한 적어도 하나의 컴퓨터 제어 명령어를 사용하여 상기 실행 가능한 명령어의 호출 세트를 생성하는 제3 프로그램 명령어;
    상기 실행 가능한 명령어의 호출 세트를 실행하기 위해 상기 호출 처리 장치를 구성하는 제4 프로그램 명령어; 그리고
    상기 실행 가능한 명령어의 타겟 세트를 실행하기 위한 상기 타겟 처리 장치를 구성하는 제5 프로그램 명령어;를 포함하고,
    제1, 제2, 제3, 제4 및 제5 프로그램 명령어는 상기 비일시적 컴퓨터 판독 가능 저장 매체로부터 적어도 하나의 컴퓨터화된 프로세서에 의해 실행되는 소프트웨어 프로그램 제품.

KR1020237030581A 2021-02-10 2022-02-01 다중 아키텍처 이기종 컴퓨팅을 위한 실행 코드의 동적 할당 KR20230138031A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US17/172,134 2021-02-10
US17/172,134 US11113059B1 (en) 2021-02-10 2021-02-10 Dynamic allocation of executable code for multi-architecture heterogeneous computing
PCT/IL2022/050137 WO2022172263A1 (en) 2021-02-10 2022-02-01 Dynamic allocation of executable code for multi-architecture heterogeneous computing

Publications (1)

Publication Number Publication Date
KR20230138031A true KR20230138031A (ko) 2023-10-05

Family

ID=77558901

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020237030581A KR20230138031A (ko) 2021-02-10 2022-02-01 다중 아키텍처 이기종 컴퓨팅을 위한 실행 코드의 동적 할당

Country Status (6)

Country Link
US (3) US11113059B1 (ko)
EP (1) EP4291981A1 (ko)
JP (1) JP2024506642A (ko)
KR (1) KR20230138031A (ko)
CN (1) CN117120971A (ko)
WO (1) WO2022172263A1 (ko)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11734187B2 (en) * 2021-12-14 2023-08-22 International Business Machines Corporation Validating memory access patterns of static program code
CN116842994B (zh) * 2023-07-03 2024-03-01 上海交通大学 多神经网络执行效率动态优化方法及系统

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5734908A (en) * 1995-05-31 1998-03-31 Silicon Graphics, Inc. System and method for optimizing a source code representation as a function of resource utilization
US6802056B1 (en) * 1999-06-30 2004-10-05 Microsoft Corporation Translation and transformation of heterogeneous programs
US6609248B1 (en) * 1999-06-30 2003-08-19 Microsoft Corporation Cross module representation of heterogeneous programs
US7240059B2 (en) 2002-11-14 2007-07-03 Seisint, Inc. System and method for configuring a parallel-processing database system
GB0309056D0 (en) * 2003-04-22 2003-05-28 Transitive Technologies Ltd Block translation optimizations for program code conversion
US20050055594A1 (en) * 2003-09-05 2005-03-10 Doering Andreas C. Method and device for synchronizing a processor and a coprocessor
US20050149915A1 (en) * 2003-12-29 2005-07-07 Intel Corporation Methods and apparatus for optimizing a program undergoing dynamic binary translation using profile information
US20080163183A1 (en) * 2006-12-29 2008-07-03 Zhiyuan Li Methods and apparatus to provide parameterized offloading on multiprocessor architectures
US8789063B2 (en) * 2007-03-30 2014-07-22 Microsoft Corporation Master and subordinate operating system kernels for heterogeneous multiprocessor systems
US8055782B2 (en) 2008-10-13 2011-11-08 International Business Machines Corporation System and method for generating exception delay messages when messages are delayed
US20100153934A1 (en) * 2008-12-12 2010-06-17 Peter Lachner Prefetch for systems with heterogeneous architectures
US8719635B2 (en) 2012-01-06 2014-05-06 International Business Machines Corporation Cost effective use of simulated storage in a storage subsystem test environment
US20150046679A1 (en) * 2013-08-07 2015-02-12 Qualcomm Incorporated Energy-Efficient Run-Time Offloading of Dynamically Generated Code in Heterogenuous Multiprocessor Systems
US10402176B2 (en) * 2017-12-27 2019-09-03 Intel Corporation Methods and apparatus to compile code to generate data flow code
US11016766B2 (en) * 2019-06-29 2021-05-25 Intel Corporation Apparatus and method for compiler hints for inter-core offload
US10929129B2 (en) * 2019-06-29 2021-02-23 Intel Corporation Apparatus and method for modifying addresses, data, or program code associated with offloaded instructions
US11005970B2 (en) 2019-07-24 2021-05-11 EMC IP Holding Company LLC Data storage system with processor scheduling using distributed peek-poller threads

Also Published As

Publication number Publication date
CN117120971A (zh) 2023-11-24
US20230229444A1 (en) 2023-07-20
WO2022172263A1 (en) 2022-08-18
EP4291981A1 (en) 2023-12-20
US11113059B1 (en) 2021-09-07
JP2024506642A (ja) 2024-02-14
US20220253312A1 (en) 2022-08-11
US11630669B2 (en) 2023-04-18

Similar Documents

Publication Publication Date Title
KR101817397B1 (ko) 하나의 아키텍처의 코드 모듈이 다른 아키텍처의 라이브러리 모듈을 사용할 수 있게 하는 아키텍처 간 호환성 모듈
Fumero et al. Dynamic application reconfiguration on heterogeneous hardware
US20230229444A1 (en) Dynamic allocation of executable code for multi-architecture heterogeneous computing
US20130036408A1 (en) Technique for compiling and running high-level programs on heterogeneous computers
Thoman et al. Celerity: High-level c++ for accelerator clusters
US9501285B2 (en) Register allocation to threads
Hormati et al. Macross: Macro-simdization of streaming applications
Montella et al. Enabling android-based devices to high-end gpgpus
Laccetti et al. The high performance internet of things: using GVirtuS to share high-end GPUs with ARM based cluster computing nodes
Colaço et al. Transparent application acceleration by intelligent scheduling of shared library calls on heterogeneous systems
Parri et al. Returning control to the programmer: Simd intrinsics for virtual machines
Lyerly et al. Operating system process and thread migration in heterogeneous platforms
CN109542835A (zh) 用于使用多个存储器通道来降低平台中的加速器-存储器访问成本的技术
EP2731008A1 (en) Resource contention in multiple cores
Chen et al. Design and implementation of high-level compute on Android systems
CN111279308B (zh) 代码转换期间的屏障减少
Jääskeläinen et al. Offloading C++ 17 parallel STL on system shared virtual memory platforms
Neuwirth et al. Communication models for distributed intel xeon phi coprocessors
Bhat et al. Enabling support for zero copy semantics in an Asynchronous Task-based Programming Model
Peña et al. Ucx programming interface for remote function injection and invocation
Driscoll et al. PyGAS: A partitioned global address space extension for python
US11061703B2 (en) Managed runtime data marshaling for native code access using a thread local native buffer
US11188316B2 (en) Performance optimization of class instance comparisons
Lordan et al. Enabling GPU support for the COMPSs-Mobile framework
Diehl et al. Shared memory parallelism in Modern C++ and HPX