KR20210107531A - 멀티-프로세스 웹 브라우저 환경에서 머신 러닝 모델을 프로세싱하기 위한 방법들 및 장치 - Google Patents

멀티-프로세스 웹 브라우저 환경에서 머신 러닝 모델을 프로세싱하기 위한 방법들 및 장치 Download PDF

Info

Publication number
KR20210107531A
KR20210107531A KR1020207036081A KR20207036081A KR20210107531A KR 20210107531 A KR20210107531 A KR 20210107531A KR 1020207036081 A KR1020207036081 A KR 1020207036081A KR 20207036081 A KR20207036081 A KR 20207036081A KR 20210107531 A KR20210107531 A KR 20210107531A
Authority
KR
South Korea
Prior art keywords
gpu
graph
execution
executed
request
Prior art date
Application number
KR1020207036081A
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 KR20210107531A publication Critical patent/KR20210107531A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N20/00Machine learning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/173Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/95Retrieval from the web
    • G06F16/957Browsing optimisation, e.g. caching or content distillation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/14Digital output to display device ; Cooperation and interconnection of the display device with other functional units
    • G06F3/1423Digital output to display device ; Cooperation and interconnection of the display device with other functional units controlling a plurality of local displays, e.g. CRT and flat panel display
    • G06F3/1438Digital output to display device ; Cooperation and interconnection of the display device with other functional units controlling a plurality of local displays, e.g. CRT and flat panel display using more than one graphics controller
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • 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
    • G06F9/3877Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2200/00Indexing scheme for image data processing or generation, in general
    • G06T2200/28Indexing scheme for image data processing or generation, in general involving image processing hardware

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • Computing Systems (AREA)
  • Medical Informatics (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Artificial Intelligence (AREA)
  • Databases & Information Systems (AREA)
  • Computer Hardware Design (AREA)
  • Computer Graphics (AREA)
  • Human Computer Interaction (AREA)
  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)

Abstract

멀티-프로세스 웹 브라우저 환경에서 머신 러닝 모델을 프로세싱하기 위한 방법들, 장치, 시스템들 및 제조물들이 개시된다. 장치는 실행될 계산 그래프에 대한 동작의 모드를 결정하도록 구성되는 그래프 실행기(320); 계산 그래프의 노드에 대응하는 중앙 프로세싱 유닛(CPU) 명령어를 룩업하도록 구성되는 CPU 인터프리터(330) - CPU 명령어는 적어도 하나의 프로세서에 의한 실행을 위한 CPU-특정 명령어임 -; 계산 그래프가 빈번하게 실행되는지 여부를 결정하도록 구성되는 그래프 프로파일러(340); 및 계산 그래프가 빈번하게 실행된다는 결정에 응답하여, 그래픽 프로세싱 유닛(GPU)(237)에서의 실행을 위해 계산 그래프의 적어도 2개의 노드의 GPU 커널로의 컴파일을 위한 요청을 송신하도록 구성되는 GPU 컴파일러 인터페이스(350)를 포함한다.

Description

멀티-프로세스 웹 브라우저 환경에서 머신 러닝 모델을 프로세싱하기 위한 방법들 및 장치
본 개시내용은 일반적으로 머신 러닝 모델(machine learning model)의 프로세싱에 관한 것으로, 특히 멀티-프로세스 웹 브라우저 환경에서 머신 러닝 모델을 프로세싱하기 위한 방법들 및 장치에 관한 것이다.
오늘날, 컴퓨팅 산업에서는 머신 러닝(machine learning)(ML) 워크로드들, 특히 딥 러닝(deep learning)(DL) 모델들을 서버 디바이스들 대신 최종-사용자 에지 디바이스들에 배치하려는 모멘텀이 있다. 에지 디바이스들 상에서 계산들을 수행할 때의 이점들은 비용 절약, 프라이버시 보호 및 실시간 성능을 포함한다. 머신 러닝 워크로드들은 보다 최근에 웹 브라우저 환경(들)의 최종-사용자 에지 디바이스들에 제공되었다. 하드웨어 개발자들은 에지 디바이스에서 DL 계산을 가속화하기 위해 하드웨어(예를 들어, 중앙 프로세싱 유닛(central processing unit)(CPU)들, 그래픽 프로세싱 유닛(graphics processing unit)(GPU)들, 벡터 프로세싱 유닛(vector processing unit)(VPU)들 등) 및/또는 소프트웨어(예를 들어, 수학 커널 라이브러리 딥 신경망(math kernel library deep neural network)(MKL-DNN), 딥 신경망들을 위한 컴퓨팅 라이브러리(compute library for deep neural networks)(clDNN) 등) 최적화들을 개발하고 있으며, 이는 일부 예들에서, CPU로부터 GPU 또는 다른 회로망으로 계산들을 오프로드하는 것을 포함한다. 그러나, 웹 브라우저 기반 환경들은 이러한 최적화들의 활용을 어렵게 만든다.
도 1은 예시적인 머신 러닝 모델을 나타내는 예시적인 계산 그래프의 블록도이다.
도 2는 웹 브라우저 환경을 구현하는 예시적인 컴퓨팅 시스템의 블록도이다.
도 3은 도 2의 예시적인 비특권 명령어 실행기(unprivileged instruction executor)의 블록도이다.
도 4는 도 2의 예시적인 특권 명령어 실행기(privileged instruction executor)의 블록도이다.
도 5는 도 2 및/또는 도 3의 예시적인 비특권 명령어 실행기를 구현하도록 실행될 수 있는 머신 판독가능 명령어들을 나타내는 흐름도이다.
도 6은 도 2의 그래픽 프로세싱 유닛(GPU)에 의한 실행을 위해 계산 그래프를 컴파일하기 위해 도 2 및/또는 도 4의 예시적인 특권 명령어 실행기를 구현하도록 실행될 수 있는 머신 판독가능 명령어들을 나타내는 흐름도이다.
도 7은 실행을 위해 도 2의 GPU에 컴파일된 명령어들을 제공하기 위해 도 2 및/또는 도 3의 예시적인 특권 명령어 실행기를 구현하도록 실행될 수 있는 머신 판독가능 명령어들을 나타내는 흐름도이다.
도 8은 도 2, 도 3 및/또는 도 4의 예시적인 명령어 실행기들을 구현하기 위해 도 5, 도 6 및/또는 도 7의 명령어들을 실행하도록 구성되는 예시적인 프로세싱 플랫폼의 블록도이다.
도면들은 축척대로 도시되지 않았다. 일반적으로, 도면(들) 및 첨부된 기재된 설명 전반에 걸쳐 동일하거나 유사한 부분들을 참조하기 위해 동일한 참조 번호들이 사용될 것이다.
사용자가 컴퓨팅 시스템의 웹 브라우저로 하여금 웹 사이트를 탐색하게 할 때, 웹 브라우저는 웹 서버로부터, 예를 들어, 하이퍼텍스트 마크업 언어(HyperText Markup Language)(HTML) 문서들, 캐스케이딩 스타일 시트(cascading style sheet)(CSS) 문서들, 자바스크립트(JavaScript) 파일들 등을 포함한 데이터를 다운로드하고, 자바스크립트 코드를 실행하고, HTML 및/또는 CSS에 따라 사용자 인터페이스를 렌더링한다. 그러나, 악의적인 웹 사이트로부터 명령어들을 실행한 결과 웹 브라우저가 손상될 수 있는 보안 리스크들이 존재한다. 이러한 보안 문제를 해결하기 위해, 최신 웹 브라우저들(예를 들어, 구글 크롬(Google Chrome), 마이크로소프트 엣지(Microsoft Edge), 모질라 파이어폭스(Mozilla Firefox) 등)은 대개 샌드 박스 아키텍처 내에서 다수의 프로세스들을 활용한다. 따라서, 웹 브라우저는 통상적으로 두 가지 타입의 프로세스: 비특권 프로세스(unprivileged process)들 및 특권 프로세스(privileged process)들을 갖는다.
비특권 프로세스는 샌드 박스 환경에서 렌더링 엔진 및/또는 자바스크립트 엔진을 구현한다. 따라서, 비특권 프로세스는 명령어들을 실행하기 위해 CPU에만 액세스하도록 허용되고, 파일 시스템, 디스플레이, 네트워크 및/또는 컴퓨팅 시스템에 부착된 디바이스들 중 하나 이상에 대해 액세스하는 것은 허용되지 않는다.
대조적으로, 특권 프로세스는 그래픽 프로세싱 유닛(GPU)과 같은 시스템 자원들에 대한 액세스가 허용된다. 이러한 시스템 자원들에 액세스하기 위해, 비특권 프로세스는 프로세스-간 통신(inter-process-communication)(IPC) 프로토콜을 사용하여 특권 프로세스와 통신한다.
도 1은 예시적인 머신 러닝 모델을 나타내는 예시적인 계산 그래프(100)의 블록도이다. 도 1의 예시적인 계산 그래프(100)는 방향성 비순환 그래프(directed acyclic graph)(DAG)로서 표현된다. 예시적인 계산 그래프(100)는 입력 텐서 노드(105), 내부 텐서 노드들(107, 108, 115, 125, 127, 128), 연산 노드들(110, 120, 130) 및 출력 텐서 노드(135)를 포함한다. 본 명세서에 사용된 바와 같이, 텐서는 n차원 어레이이며, 데이터(예를 들어, 입력 데이터 및/또는 출력 데이터)를 저장/표현하는 데 사용될 수 있다. 도 1의 예시된 예에 도시된 바와 같이, 텐서 노드들은 입력 텐서(예를 들어, 계산 그래프에 계산을 위한 정보를 공급하는 데 사용되는 텐서), 내부 텐서(예를 들어, 계산 그래프 내에서 사용되는 텐서) 및 출력 텐서(예를 들어, 출력 정보를 제공하는 데 사용되는 텐서)를 포함한 상이한 타입들을 가질 수 있다.
도 1의 예시된 예에서, 연산 노드들(110, 120, 130)은 추가적인 내부 텐서 및/또는 출력 텐서를 생성하기 위해 하나 이상의 입력 텐서 및/또는 내부 텐서에 대해 수행될 수 있는 계산들 및/또는 다른 함수들(예를 들어, 컨볼루션(convolution), 풀링 함수(pooling function)들, 완전-연결 함수(fully-connected function)들 등)을 나타낸다. 머신 러닝 모델을 실행하기 위해, 프레임워크는 입력 텐서 데이터를 계산 그래프(100)에 제공하고, 그래프에 대해 반복적으로 연산 노드(들)에 대한 입력 데이터가 이용 가능한 임의의 연산 노드(들)를 검출하고 실행한다. 마지막으로, 출력 텐서가 출력 텐서 노드(135)에서 계산 그래프의 출력으로서 계산된다.
기존 접근법들에서는, 웹 페이지를 디스플레이할 때, 비특권 프로세스는 HTML 및/또는 CSS 파일들을 파싱(parse)하여 웹 페이지를 디스플레이한다. 웹 페이지가 스크립트 파일(예를 들어, 자바스크립트 파일)을 포함 및/또는 참조할 때, 스크립트 파일은 비특권 프로세스에 의해 구문 분석되고 실행된다. 스크립트 파일이 머신 러닝 모델의 사용을 포함하는 경우, 비특권 프로세스는 (예를 들어, 네트워크 위치로부터) 머신 러닝 모델을 로드하고, 머신 러닝 모델의 계산 그래프 표현을 구성한다. 일부 경우들에서, 계산 그래프는 중앙 프로세싱 유닛(CPU)에 의한 실행을 위해 준비된다.
실행을 위한 연산 노드를 준비하기 위해, 프레임워크는 CPU 바이너리 명령어들로 하여금 생성(예를 들어, 컴파일) 및/또는 식별되게 한다. 예를 들어, 머신 러닝 모델이 TensorFlow.js 프레임워크(자바스크립트 사용)를 활용하는 경우, 자바스크립트 엔진은 JIT(just-in-time) 컴파일을 수행하여 CPU 바이너리 명령어를 생성할 수 있다. 대안적으로, 머신 러닝 모델이 웹어셈블리(WebAssembly)(WASM) 프레임워크를 활용하는 경우, 자바스크립트 엔진이 CPU 바이너리를 직접 생성한다. 그런 다음, CPU 하드웨어는 생성된 CPU 바이너리를 실행하도록 지시받고, 결과를 비특권 프로세스로 리턴한다. 계산 그래프의 반복은 출력 텐서가 계산될 때까지 계속된다.
일부 기존 접근법들에서, 계산 그래프는 그래픽 프로세싱 유닛(GPU)에 의해 실행될 수 있다. 예를 들어, TensorFlow.js 프레임워크는 웹 그래픽 라이브러리web graphics library)(WebGL) 애플리케이션 프로그래밍 인터페이스(application programming interface)(API)를 활용하여 GPU에 의한 실행을 위한 명령어들을 준비한다. 마찬가지로, WebDNN 프레임워크는 웹 그래픽 프로세싱 유닛(web graphics processing unit)(WebGPU) API를 사용한다. 비특권 프로세스가 실행을 위한 연산 노드를 식별할 때, 비특권 프로세스는 해당 연산의 GPU 소스 코드 구현을 로드하고, 대응하는 API를 호출하여 GPU에서 GPU 셰이더 소스를 실행한다. 이것은 비특권 프로세스(예를 들어, GPU에 직접 액세스하지 않는 프로세스)로부터 수행되므로, 비특권 프로세스는 특권 프로세스에 요청을 전달한다. 요청은 프로세스-간 통신(IPC) 프로토콜을 사용하여 비특권 프로세스와 특권 프로세스 사이에서 전달된다.
기존 시스템들에서, 비특권 프로세스는 특권 프로세스에 의해 신뢰되지 않으므로, 비특권 프로세스로부터의 요청은 검증된다. 특권 프로세스는 요청 및 임의의 제공된 파라미터들(예를 들어, GPU 셰이더 소스 코드)을 검증한다. 검증이 성공하는 경우, GPU 셰이더 소스 코드는 GPU에 의한 실행을 위해 GPU 드라이버에 제공된다. GPU가 GPU 셰이더 소스 코드의 실행을 완료한 후, 결과가 특권 프로세스에 제공되고, 그 후 비특권 프로세스에 다시 결과가 전달된다. 이 프로세스는 출력 텐서가 계산될 때까지 반복된다.
따라서, 도 1의 맥락에서, 3개의 연산(110, 120, 130) 각각이 GPU에 의해 실행되는 경우, 연산을 실행하기 위한 3개의 개별 요청 및 연산 실행으로부터의 응답들이 비특권 프로세스와 특권 프로세스 사이에서 전달될 것이다. 따라서, 기존 접근법들은 상당한 통신 오버헤드를 초래한다.
또한, 기존 시스템들의 CPU 실행은 최적화되지 않는다. 자바스크립트 및 웹어셈블리는 일반 수학 계산 및 크로스-CPU 아키텍처용으로 설계되기 때문에, 자바스크립트 엔진은 텐서 연산에 특별히 최적화된 CPU(들) 명령어(예를 들어, Intel의 고급 벡터 확장(advanced vector extensions)(AVX) 명령어들, 벡터 신경망 명령어들(vector neural network instructions)(VNNI)의 명령어 등)를 생성하지 않을 수 있다.
마찬가지로, 기존 시스템의 GPU 실행은 최적화되지 않는다. 예를 들어, 기존 프레임워크들(예를 들어, WebGL 프레임워크, WebGPU 셰이더 언어 등)은 크로스-GPU 아키텍처를 준수하도록 설계되며, 결과적인 텐서 연산들은, 예를 들어, Intel의 개방형 컴퓨팅 언어(Open Computing Language)(OpenCL) 확장들과 같은 하드웨어 특정 피처들을 활용하도록 구현되지 않는다.
또한, 기존 시스템들에서는, CPU 및 GPU 실행들이 느리게 시작된다. 제1 결과를 달성하기 전에, CPU 실행시 컴파일 및 코드-생성 오버헤드가 발생한다. GPU 실행의 시작은 이러한 실행이 IPC 채널을 통해 데이터를 전송하는 오버헤드를 포함하므로 훨씬 더 느리다. 또한, GPU 셰이더 소스 코드의 컴파일도 컴퓨팅 시간을 소비한다.
본 명세서에 개시된 예시적인 접근법들은 멀티-프로세스 웹 브라우저의 비특권 프로세스 내에서 최적화된 CPU 연산 바이너리 코드를 갖는 계산 그래프 CPU 인터프리터를 활용한다. 본 명세서에 개시된 예시적인 접근법들은 또한 멀티-프로세스 웹 브라우저를 위해 최적화된 GPU 연산 소스 코드 구현을 갖는 계산 그래프 GPU 컴파일 프레임워크를 활용한다. 본 명세서에 개시된 예시적인 접근법들은 또한 계산 그래프 실행기를 활용하여 그래프 실행 프로파일링에 따라 계산 그래프의 실행을 CPU 인터프리터 또는 GPU 컴파일 오케스트레이터(GPU compilation orchestrator)에 분배한다.
이러한 접근법들은 CPU 실행을 위한 AVX 명령어 및 VNNI 명령어와 같은 하드웨어-특정 명령어들의 사용, 및 GPU 실행을 위한 OpenCL 확장들의 사용을 가능하게 한다. 또한, 본 명세서에 개시된 예시적인 접근법들은 웹 브라우저 환경들에서 딥 러닝 워크로드들을 위한 빠른 시작 및 높은 지속 속도 실행 경험을 가능하게 한다.
도 2는 웹 브라우저 환경을 구현하는 예시적인 컴퓨팅 시스템(200)의 블록도이다. 도 2의 예시된 예의 예시적인 컴퓨팅 시스템(200)은 웹 브라우저 레벨(210), 운영 체제 레벨(220) 및 하드웨어 레벨(230)을 포함한다. 예시적인 웹 브라우저 레벨(210)은 비특권 명령어 실행기(212) 및 특권 명령어 실행기(214)를 포함한다. 예시적인 운영 체제 레벨(220)은 프로세스-간 통신(IPC) 채널(225), GPU 드라이버(227) 및 GPU 명령어 데이터베이스(229)를 포함한다. 예시적인 하드웨어 레벨(230)은 중앙 프로세싱 유닛(CPU)(233) 및 그래픽 프로세싱 유닛(237)을 포함한다.
위에서 언급된 바와 같이, 웹 브라우저는 통상적으로 두 가지 타입의 명령어 실행기: 비특권 명령어 실행기들 및 특권 명령어 실행기들을 갖는다. 비특권 명령어 실행기들은 일반적으로 샌드 박스 환경에서 컴포넌트들(예를 들어, 렌더링 엔진, 자바스크립트 엔진 등)을 구현한다. 따라서, 비특권 명령어 실행기는 명령어들을 실행하기 위해 CPU에만 액세스하도록 허용되고, 파일 시스템, 디스플레이, 네트워크 및/또는 컴퓨팅 시스템에 부착된 디바이스들 중 하나 이상에 대해 액세스하는 것은 허용되지 않는다.
도 2의 예시된 예의 비특권 명령어 실행기(212)는, 예를 들어, 하드웨어 프로세서와 같은 로직 회로를 사용하여 실행되는 명령어들에 의해 구현된다. 그러나, 예를 들어, 하나 이상의 아날로그 또는 디지털 회로(들), 로직 회로, 프로그램가능 프로세서(들), 애플리케이션 특정 집적 회로(application specific integrated circuit)(ASIC)(들), 프로그램가능 로직 디바이스(programmable logic device)(PLD)들, 필드 프로그램가능 로직 디바이스(field programmable logic device)(FPLD)(들), 디지털 신호 프로세서(digital signal processor)(DSP)(들) 등과 같은 임의의 다른 타입의 회로망이 추가적으로 또는 대안적으로 사용될 수 있다. 예시적인 비특권 명령어 실행기(212)를 구현하는 것에 대한 예시적인 접근법이 도 3과 관련하여 아래에 도시된다. 도 2의 예시적인 예에서, 예시적인 비특권 명령어 실행기(212)는 외부 자원들(예를 들어, 웹 서버들 및/또는 웹 애플리케이션들)과 통신한다.
비특권 명령어 실행기(212)와 대조적으로, 특권 명령어 실행기(214)는 그래픽 프로세싱 유닛(GPU)과 같은 시스템 자원들에 대한 액세스가 허용된다. 이러한 시스템 자원들에 대한 액세스를 획득하기 위해, 비특권 명령어 실행기(212)는 프로세스-간 통신(IPC) 채널(225)을 사용하여 특권 명령어 실행기(214)와 통신한다.
도 2의 예시된 예의 예시적인 특권 명령어 실행기(214)는, 예를 들어, 하드웨어 프로세서와 같은 로직 회로를 사용하여 실행되는 명령어들에 의해 구현된다. 그러나, 예를 들어, 하나 이상의 아날로그 또는 디지털 회로(들), 로직 회로, 프로그램가능 프로세서(들), ASIC(들), PLD(들), FPLD(들), DSP(들) 등과 같은 임의의 다른 타입의 회로망이 특권 명령어 실행기(214)를 구현하는 명령어들을 실행하기 위해 추가적으로 또는 대안적으로 사용될 수 있다. 예시적인 특권 명령어 실행기(214)를 구현하는 것에 대한 예시적인 접근법이 도 4와 관련하여 아래에 도시된다.
도 2의 예시된 예의 예시적인 프로세스-간 통신(IPC) 채널(225)은, 예를 들어, 하드웨어 프로세서와 같은 로직 회로를 사용하여 실행되는 명령어들에 의해 구현된다. 그러나, 예를 들어, 하나 이상의 아날로그 또는 디지털 회로(들), 로직 회로, 프로그램가능 프로세서(들), ASIC(들), PLD(들), FPLD(들), DSP(들) 등과 같은 임의의 다른 타입의 회로망이 추가적으로 또는 대안적으로 사용될 수 있다. IPC 채널(225)은 운영 체제에 의해 호스팅되고, 비특권 명령어 실행기(212)가 특권 명령어 실행기(214)와 통신할 수 있도록 한다. 본 명세서에 개시된 예들에서는, IPC가 비특권 명령어 실행기(212)와 특권 명령어 실행기(214) 사이의 통신을 활성화하는 데 사용되지만, 예를 들어, 네트워크 통신과 같이 이러한 통신을 용이하게 하기 위한 임의의 다른 접근법이 추가적으로 또는 대안적으로 사용될 수 있다.
도 2의 예시된 예의 예시적인 GPU 드라이버(227)는, 예를 들어, 하드웨어 프로세서와 같은 로직 회로를 사용하여 실행되는 명령어들에 의해 구현된다. 그러나, 예를 들어, 하나 이상의 아날로그 또는 디지털 회로(들), 로직 회로, 프로그램가능 프로세서(들), ASIC(들), PLD(들), FPLD(들), DSP(들) 등과 같은 임의의 다른 타입의 회로망이 추가적으로 또는 대안적으로 사용될 수 있다. 본 명세서에 개시된 예들에서, GPU 드라이버(227)는 특권 명령어 실행기(214)와 GPU(237) 사이의 통신을 용이하게 한다. 특권 명령어 실행기(214)는 최적화된 GPU-특정 명령어들(예를 들어, 소스 코드)을 GPU 드라이버(227)에 제공하며, 이는 GPU-특정 명령어들을 GPU-특정 커널(예를 들어, 바이너리 코드)로 컴파일하고, GPU(237)에 의한 향후 실행을 위해 GPU-특정 커널을 GPU 명령어 데이터베이스(229)에 저장한다.
도 2의 예시된 예의 예시적인 GPU 명령어 데이터베이스(229)는, 예를 들어, 플래시 메모리, 자기 매체, 광학 매체, 고상 메모리, 하드 드라이브(들), 썸 드라이브(들) 등과 같이 데이터를 저장하기 위한 임의의 메모리, 저장 디바이스 및/또는 저장 디스크에 의해 구현된다. 일부 예들에서, GPU 명령어 데이터베이스(229)는 GPU(237)에서 및/또는 이와 관련하여 구현된다. 또한, 예시적인 GPU 명령어 데이터베이스(229)에 저장된 데이터는, 예를 들어, 바이너리 데이터, 콤마 구분 데이터(comma delimited data), 탭 구분 데이터(tab delimited data), 구조화된 쿼리 언어(structured query language)(SQL) 구조들 등과 같은 임의의 데이터 포맷일 수 있다. 또한, 예시된 예에서, GPU 명령어 데이터베이스(229)는 단일 디바이스로서 예시되어 있지만, 예시적인 GPU 명령어 데이터베이스(229) 및/또는 본 명세서에 설명된 임의의 다른 데이터 저장 디바이스들은 임의의 수 및/또는 타입(들)의 메모리들에 의해 구현될 수 있다. 도 2의 예시된 예에서, 예시적인 GPU 명령어 데이터베이스(229)는 GPU(237)에 의한 실행을 위해 계산 그래프들에 대응하는 컴파일된 GPU 명령어들(예를 들어, 커널들)을 저장한다.
도 2의 예시된 예의 예시적인 CPU(233)는 하드웨어에 의해 구현된다. 예를 들어, CPU(233)는 머신 판독가능 명령어들을 실행할 수 있는 하나 이상의 집적 회로, 로직 회로, 마이크로프로세서 등에 의해 구현될 수 있다. 일부 예들에서, CPU는 특정 제조업체(예를 들어, Intel) 및/또는 특정 프로세서 디바이스 제품군으로부터 제공될 수 있으며, 따라서 디바이스-특정 명령어들의 실행을 지원할 수 있다. 결과적으로, 해석 모드에서 일부 계산 그래프들을 실행하는 것은 해당 디바이스-특정 명령어들을 사용할 때 더 효율적일 수 있다.
도 2의 예시된 예의 예시적인 GPU(237)는 회로를 사용하여 구현된다. GPU(237)는 버퍼(예를 들어, GPU(237) 내부 메모리 및/또는 GPU(237) 외부 메모리에 저장된 버퍼)의 컨텐츠를 수정하기 위한 명령어들을 실행한다. 통상적으로, 버퍼는 디스플레이 디바이스(예를 들어, 모니터)에 정보를 출력하는 데 사용되는 프레임 버퍼이다. 최근에, GPU들은, 예를 들어, 머신 러닝 태스크들과 같은 출력 이미지들의 생성과 반드시 관련되지는 않는 태스크들에 사용되었다. 본 명세서에 개시된 예들에서, GPU(237)는 일반적으로 계산 그래프에 기초하여 컴파일되는 커널 및/또는 컴퓨팅 커널로서 지칭되는 명령어 패키지를 실행한다. 도 2의 예시된 예에서는, 단일 GPU가 도시된다. 그러나, 일부 컴퓨팅 시스템들은 다수의 GPU들을 활용할 수 있다. 또한, 일부 예들에서, GPU는 별도의 (예를 들어, 원격) 컴퓨팅 시스템에서 구현될 수 있다.
위에서 언급된 바와 같이, GPU들은 일반적으로 커널들, 컴퓨팅 커널들 및/또는 셰이더들로 지칭되는 명령어 패키지들을 실행한다. 통상적으로, 셰이더(shader)라는 용어는 커널이, 예를 들어, DirectX, 개방형 그래픽 라이브러리(Open Graphics Library)(OpenGL) 태스크들, 픽셀 셰이더/셰이딩 태스크들, 버텍스 셰이더/셰이딩 태스크들 등과 같은 그래픽-관련 태스크들에 사용될 때 사용된다. 커널이라는 용어는, 예를 들어, 개방형 컴퓨팅 언어(OpenCL) 태스크들, 미디어용 C 태스크들(C for Media tasks) 등과 같은 범용 계산 태스크들에 사용된다. 본 명세서에 개시된 예시적인 접근법들은 커널이라는 용어를 사용하지만, 이러한 접근법들은 셰이더들 상에서 사용하기에도 동일하게 적합하다. 본 명세서에 개시된 예들에서, 이러한 커널들은 대략적으로 계산 그래프의 컴파일된 버전에 대응한다. 본 명세서에 사용된 바와 같이, GPU 커널은 바이너리 포맷의 커널을 지칭한다.
도 3은 도 2의 예시적인 비특권 명령어 실행기(212)의 블록도이다. 도 3의 예시된 예의 예시적인 비특권 명령어 실행기(212)는 스크립트 엔진(310), 그래프 실행기(320), CPU 인터프리터(330) 및 최적화된 CPU 코드 데이터 저장소(335), 그래프 프로파일러(340), GPU 컴파일 컴파일러 인터페이스(350) 및 IPC 클라이언트(360)를 포함한다. 일부 예들에서, 예시적인 그래프 실행기(320), 예시적인 CPU 인터프리터(330), 예시적인 최적화된 CPU 코드 데이터 저장소(335), 예시적인 그래프 프로파일러(340), 예시적인 GPU 컴파일러 인터페이스(350) 및 예시적인 IPC 클라이언트(360)는 집합적으로 웹 API 프록시(399)로 지칭될 수 있다.
도 3의 예시된 예의 예시적인 스크립트 엔진(310)은, 예를 들어, 하드웨어 프로세서와 같은 로직 회로를 사용하여 구현된다. 그러나, 예를 들어, 하나 이상의 아날로그 또는 디지털 회로(들), 로직 회로, 프로그램가능 프로세서(들), ASIC(들), PLD(들), FPLD(들), DSP(들) 등과 같은 임의의 다른 타입의 회로망이 추가적으로 또는 대안적으로 사용될 수 있다. 예시적인 스크립트 엔진(310)은 웹 페이지의 디스플레이 및/또는 프로세싱의 컴포넌트로서 스크립트들을 실행한다. 본 명세서에 개시된 예들에서, 스크립트들은 네트워크 자원(예를 들어, 원격 웹-서버)으로부터 스크립트 엔진(310)에 제공된다. 본 명세서에 개시된 예들에서, 스크립트들은 자바스크립트 스크립트들이다. 그러나, 임의의 다른 스크립팅 언어들도 추가적으로 또는 대안적으로 사용될 수 있다. 일부 예들에서, 스크립트 엔진(310)에 의해 실행되는 스크립트(들)는 머신 러닝 모델을 구현하기 위해 계산 그래프의 실행을 야기하는 명령어들, 함수들 및/또는 다른 구성들을 포함한다.
도 3의 예시된 예의 예시적인 그래프 실행기(320)는, 예를 들어, 하드웨어 프로세서와 같은 로직 회로를 사용하여 구현된다. 그러나, 예를 들어, 하나 이상의 아날로그 또는 디지털 회로(들), 로직 회로, 프로그램가능 프로세서(들), ASIC(들), PLD(들), FPLD(들), DSP(들) 등과 같은 임의의 다른 타입의 회로망이 추가적으로 또는 대안적으로 사용될 수 있다. 본 명세서에 개시된 예들에서, 그래프 실행기(320)는 계산 그래프 실행을 위한 웹 API를 구현한다. 예시적인 그래프 실행기(320)는 계산 그래프들의 실제 실행을 위해 예시적인 CPU 인터프리터(330) 또는 GPU 컴파일러 인터페이스(350)에 의존한다.
도 3의 예시된 예의 예시적인 CPU 인터프리터(330)는, 예를 들어, 하드웨어 프로세서와 같은 로직 회로를 사용하여 구현된다. 그러나, 예를 들어, 하나 이상의 아날로그 또는 디지털 회로(들), 로직 회로, 프로그램가능 프로세서(들), ASIC(들), PLD(들), FPLD(들), DSP(들) 등과 같은 임의의 다른 타입의 회로망이 추가적으로 또는 대안적으로 사용될 수 있다. 예시적인 CPU 인터프리터(330)는 제공된 계산 그래프에서 연산 노드들의 해석된 실행을 가능하게 한다. 본 명세서에 개시된 예들에서, CPU 인터프리터(330)는 최적화된 CPU 코드 데이터 저장소(335)에서 실행될 명령어들의 룩업을 수행하여 계산 그래프에서 식별되는 연산 노드들에 기초하여 실행될 CPU-특정 명령어들을 식별한다. 이러한 방식으로, 이용 가능한 경우, CPU-특정 명령어들이 계산 그래프를 실행하기 위해 사용될 수 있다. 예를 들어, AVX 및/또는 VNNI 명령어들이 Intel CPU들에 사용될 수 있다.
도 3의 예시된 예의 예시적인 최적화된 CPU 코드 데이터 저장소(335)는, 예를 들어, 플래시 메모리, 자기 매체, 광학 매체, 고상 메모리, 하드 드라이브(들), 썸 드라이브(들) 등과 같이 데이터를 저장하기 위한 임의의 메모리, 저장 디바이스 및/또는 저장 디스크에 의해 구현된다. 일부 예들에서, 최적화된 CPU 코드 데이터 저장소(335)는 비특권 명령어 실행기(212)에 국부적으로 구현된다. 그러나, 최적화된 CPU 코드 데이터 저장소(335)는, 예를 들어, 파일 시스템 내, 웹 브라우저 계층(210)과 연관된 하나 이상의 파일(예를 들어, 비특권 명령어 실행기(212)가 액세스 가능한 파일) 내와 같은 임의의 다른 위치에서 구현될 수 있다. 또한, 예시적인 최적화된 CPU 코드 데이터 저장소(335)에 저장된 데이터는, 예를 들어, 바이너리 데이터, 콤마 구분 데이터, 탭 구분 데이터, 구조화된 쿼리 언어(SQL) 구조들 등과 같은 임의의 데이터 포맷일 수 있다. 예시된 예에서, 최적화된 CPU 코드 데이터 저장소(335)는 단일 디바이스로서 예시되어 있지만, 예시적인 최적화된 CPU 코드 데이터 저장소(335) 및/또는 본 명세서에 설명된 임의의 다른 데이터 저장 디바이스들은 임의의 수 및/또는 타입(들)의 메모리들에 의해 구현될 수 있다. 도 3의 예시된 예에서, 예시적인 최적화된 CPU 코드 데이터 저장소(335)는 CPU(233)에 의한 실행을 위해 컴파일된 CPU 명령어들을 저장한다. 본 명세서에 개시된 예들에서, 최적화된 CPU 코드 데이터 저장소(335)에 대한 업데이트들은 웹 브라우저 계층(210)에 의해 구현되는 브라우저에 대한 업데이트의 일부로서 제공된다. 그러나, 최적화된 CPU 코드 데이터 저장소(335)에 대한 업데이트들은 임의의 다른 방식으로 제공될 수 있다.
도 3의 예시된 예의 예시적인 그래프 프로파일러(340)는, 예를 들어, 하드웨어 프로세서와 같은 로직 회로를 사용하여 구현된다. 그러나, 예를 들어, 하나 이상의 아날로그 또는 디지털 회로(들), 로직 회로, 프로그램가능 프로세서(들), ASIC(들), PLD(들), FPLD(들), DSP(들) 등과 같은 임의의 다른 타입의 회로망이 추가적으로 또는 대안적으로 사용될 수 있다. 예시적인 그래프 프로파일러(340)는 계산 그래프의 실행을 프로파일링한다. 본 명세서에 개시된 예들에서, 그래프 실행기(320)에 의해 실행되는 각각의 계산 그래프에 대한 실행 통계들은 그래프 프로파일러(340)의 메모리에 기록된다. 그래프 프로파일러(340)는 계산 그래프(들)의 이력 실행들을 분석하여 계산 그래프가 빈번하게 실행되는지 여부를 결정한다. 계산 그래프가 빈번하게 실행되는 경우, 예시적인 그래프 프로파일러(340)는 그래프 실행기(320)에 계산 그래프의 컴파일을 트리거하도록 통지한다.
본 명세서에 개시된 예들에서, 계산 그래프는 이전 임계 시간 기간 내에 임계 횟수보다 많이(예를 들어, 마지막 분에 2회 초과) 실행되었을 때 빈번하게 실행되는 것으로 간주된다. 그러나, 계산 그래프가 빈번하게 실행되는지 여부 및/또는 보다 일반적으로 계산 그래프가 GPU(237)에 의한 향후 실행을 위해 컴파일되어야 하는지 여부를 결정하기 위해 임의의 다른 인자들이 사용될 수 있다. 예를 들어, 계산 그래프의 사이즈(이는 계산 그래프를 컴파일하는 데 사용되는 자원들의 양에 영향을 미칠 수 있음), 계산 그래프의 출처(예를 들어, 계산 그래프가 빈번하게 액세스되는 네트워크 자원 및/또는 웹 사이트로부터 생성되는지 여부), 계산 그래프에 포함된 연산들의 타입들(이는 컴파일이 성공적인 것으로 예상되는지 여부를 나타낼 수 있음) 등.
도 3의 예시된 예의 예시적인 GPU 컴파일러 인터페이스(350)는, 예를 들어, 하드웨어 프로세서와 같은 로직 회로를 사용하여 구현된다. 그러나, 예를 들어, 하나 이상의 아날로그 또는 디지털 회로(들), 로직 회로, 프로그램가능 프로세서(들), ASIC(들), PLD(들), FPLD(들), DSP(들) 등과 같은 임의의 다른 타입의 회로망이 추가적으로 또는 대안적으로 사용될 수 있다. 예시적인 GPU 컴파일러 인터페이스(350)는 계산 그래프의 연산들을 컴파일 및/또는 실행하기 위해 그래프 실행기로부터 요청을 수신한다. 예시적인 GPU 컴파일러 인터페이스(350)가 비특권 명령어 실행기(212)의 컴포넌트이기 때문에, 예시적인 GPU 컴파일러 인터페이스(350)는 계산 그래프를 컴파일 및/또는 실행하기 위해 특권 명령어 실행기(214)와의 통신을 용이하게 하도록 예시적인 IPC 클라이언트(360)에 의존한다.
도 3의 예시된 예의 예시적인 IPC 클라이언트(360)는, 예를 들어, 하드웨어 프로세서와 같은 로직 회로를 사용하여 구현된다. 그러나, 예를 들어, 하나 이상의 아날로그 또는 디지털 회로(들), 로직 회로, 프로그램가능 프로세서(들), ASIC(들), PLD(들), FPLD(들), DSP(들) 등과 같은 임의의 다른 타입의 회로망이 추가적으로 또는 대안적으로 사용될 수 있다. 예시적인 IPC 클라이언트(360)는 IPC 채널(225)을 통해 비특권 명령어 실행기(212)와 특권 명령어 실행기(214) 사이의 통신을 용이하게 한다. 본 명세서에 개시된 예들에서, IPC 클라이언트(360)는 클라이언트-서버 통신 관계에서 (도 4에서 후술되는 IPC 서버(410)와 통신하는) 클라이언트로서 기능한다. 그러나, 임의의 다른 통신 관계가 추가적으로 또는 대안적으로 사용될 수 있다. 또한, 일부 예들에서, IPC 클라이언트(360)는 대신 서버로서 구현될 수 있다(그리고, 아래의 도 4의 IPC 서버(410)가 대신 클라이언트로서 기능할 수 있다).
도 4는 도 2의 예시적인 특권 명령어 실행기(214)의 블록도이다. 도 4의 예시된 예의 예시적인 특권 명령어 실행기(214)는 IPC 서버(410), GPU 컴파일 오케스트레이터(420), 요청 검증기(430) 및 최적화된 GPU 코드 데이터 저장소(440)를 포함한다. 일부 예들에서, 예시적인 IPC 서버(410), 예시적인 GPU 컴파일 오케스트레이터(420), 예시적인 요청 검증기(430) 및 예시적인 최적화된 GPU 코드 데이터 저장소(440)는 집합적으로 웹 API 브로커(499)로 지칭될 수 있다.
도 4의 예시된 예의 예시적인 IPC 서버(410)는, 예를 들어, 하드웨어 프로세서와 같은 로직 회로를 사용하여 구현된다. 그러나, 예를 들어, 하나 이상의 아날로그 또는 디지털 회로(들), 로직 회로, 프로그램가능 프로세서(들), ASIC(들), PLD(들), FPLD(들), DSP(들) 등과 같은 임의의 다른 타입의 회로망이 추가적으로 또는 대안적으로 사용될 수 있다. 예시적인 IPC 서버(410)는 IPC 채널(225)을 통해 비특권 명령어 실행기(212)와 특권 명령어 실행기(214) 사이의 통신을 용이하게 한다. 위에서 언급된 바와 같이, IPC 클라이언트(360) 및 IPC 서버(410)의 역할들은 일부 예들에서 반전될 수 있다.
도 4의 예시된 예의 예시적인 GPU 컴파일 오케스트레이터(420)는, 예를 들어, 하드웨어 프로세서와 같은 로직 회로를 사용하여 구현된다. 그러나, 예를 들어, 하나 이상의 아날로그 또는 디지털 회로(들), 로직 회로, 프로그램가능 프로세서(들), ASIC(들), PLD(들), FPLD(들), DSP(들) 등과 같은 임의의 다른 타입의 회로망이 추가적으로 또는 대안적으로 사용될 수 있다. 예시적인 GPU 컴파일 오케스트레이터(420)는 비특권 명령어 실행기(212)에 의해 제공된 계산 그래프의 각각의 노드들에 대응하는 GPU 소스 코드를 로드한다. 즉, 예시적인 GPU 컴파일 오케스트레이터(420)는 내포 그래프(connotation graph)의 일부로서 수행될 연산들에 기초하여 GPU 소스 코드를 구성한다. 본 명세서에 개시된 예들에서, 소스 코드는 최적화된 GPU 코드 데이터 저장소(440)로부터 리트리브된다.
예시적인 GPU 컴파일 오케스트레이터(420)는 컴파일을 위해 GPU-특정 커널(예를 들어, 바이너리 코드)로 컴파일하기 위한 소스 코드를 GPU 드라이버로 전송한다. 컴파일 완료시, 예시적인 GPU 컴파일 오케스트레이터(420)는 컴파일 완료 표시를 IPC 서버(410)를 통해 그래프 실행기(320)에 제공한다.
도 4의 예시된 예의 예시적인 요청 검증기(430)는, 예를 들어, 하드웨어 프로세서와 같은 로직 회로를 사용하여 구현된다. 그러나, 예를 들어, 하나 이상의 아날로그 또는 디지털 회로(들), 로직 회로, 프로그램가능 프로세서(들), ASIC(들), PLD(들), FPLD(들), DSP(들) 등과 같은 임의의 다른 타입의 회로망이 추가적으로 또는 대안적으로 사용될 수 있다. 본 명세서에 개시된 예들에서, 요청 검증기(430)는 예시적인 비특권 명령어 실행기(212)로부터 수신된 요청(예를 들어, 계산 그래프의 컴파일을 위한 요청, 계산 그래프의 실행을 위한 요청 등)이 컴파일될 계산 그래프의 표시에 제공되는 파라미터들에 기초하여 유효한지 여부를 결정한다. 일부 예들에서, 파라미터들은, 예를 들어, 요청이 유효함을 나타내는 인증서를 포함할 수 있다. 그러나, 비특권 명령어 실행기(212)로부터의 요청을 검증하기 위한 임의의 다른 접근법이 추가적으로 또는 대안적으로 사용될 수 있다.
도 4의 예시된 예의 예시적인 최적화된 GPU 코드 데이터 저장소(440)는, 예를 들어, 플래시 메모리, 자기 매체, 광학 매체, 고상 메모리, 하드 드라이브(들), 썸 드라이브(들) 등과 같이 데이터를 저장하기 위한 임의의 메모리, 저장 디바이스 및/또는 저장 디스크에 의해 구현된다. 일부 예들에서, 최적화된 GPU 코드 데이터 저장소(440)는 특권 명령어 실행기(214)에 국부적으로 구현된다. 그러나, 최적화된 GPU 코드 데이터 저장소(440)는, 예를 들어, 파일 시스템 내, 웹 브라우저 계층(210)과 연관된 하나 이상의 파일(예를 들어, 특권 명령어 실행기(214)가 액세스 가능한 파일) 내와 같은 임의의 다른 위치에서 구현될 수 있다. 또한, 예시적인 최적화된 GPU 코드 데이터 저장소(440)에 저장된 데이터는, 예를 들어, 바이너리 데이터, 콤마 구분 데이터, 탭 구분 데이터, 구조화된 쿼리 언어(SQL) 구조 등과 같은 임의의 데이터 포맷일 수 있다. 예시된 예에서, 최적화된 GPU 코드 데이터 저장소(440)는 단일 디바이스로서 예시되어 있지만, 예시적인 최적화된 GPU 코드 데이터 저장소(440) 및/또는 본 명세서에 설명된 임의의 다른 데이터 저장 디바이스들은 임의의 수 및/또는 타입(들)의 메모리들에 의해 구현될 수 있다. 도 4의 예시된 예에서, 예시적인 최적화된 GPU 코드 데이터 저장소(440)는, 예를 들어, 하드웨어 특정 명령어들 및/또는 확장들의 활용을 가능하게 하는 최적화된 GPU 코드를 저장한다. 예를 들어, Intel의 개방형 컴퓨팅 언어(OpenCL) 확장들과 같은 하드웨어 특정 피처들이 최적화된 GPU 코드 데이터 저장소(440)에 저장된 명령어들 대해 활용될 수 있다. 본 명세서에 개시된 예들에서, 최적화된 GPU 코드 데이터 저장소(440)에 대한 업데이트들은 웹 브라우저 계층(210)에 의해 구현되는 브라우저에 대한 업데이트의 일부로서 제공된다. 그러나, 최적화된 GPU 코드 데이터 저장소(440)에 대한 업데이트들은 임의의 다른 방식으로 제공될 수 있다.
도 2의 웹 브라우저(210)를 구현하는 예시적인 방식이 도 2에 예시되어 있지만, 도 2에 예시된 엘리먼트들, 프로세스들 및/또는 디바이스들 중 하나 이상은 임의의 다른 방식으로 결합, 분할, 재배열, 생략, 제거 및/또는 구현될 수 있다. 또한, 예시적인 스크립트 엔진(310), 예시적인 그래프 실행기(320), 예시적인 CPU 인터프리터(330), 예시적인 최적화된 CPU 코드 데이터 저장소(335), 예시적인 그래프 프로파일러(340), 예시적인 GPU 컴파일러 인터페이스(350), 예시적인 IPC 클라이언트(360), 및/또는 보다 일반적으로, 도 2 및/또는 도 3의 비특권 명령어 실행기(212), 예시적인 IPC 서버(410), 예시적인 GPU 컴파일 오케스트레이터(420), 예시적인 요청 검증기(430), 예시적인 최적화된 GPU 코드 데이터 저장소(440), 및/또는 보다 일반적으로, 도 2 및/또는 도 4의 예시적인 특권 명령어 실행기(214)는 하드웨어, 소프트웨어, 펌웨어 및/또는 하드웨어, 소프트웨어 및/또는 펌웨어의 임의의 조합에 의해 구현될 수 있다. 따라서, 예를 들어, 예시적인 스크립트 엔진(310), 예시적인 그래프 실행기(320), 예시적인 CPU 인터프리터(330), 예시적인 최적화된 CPU 코드 데이터 저장소(335), 예시적인 그래프 프로파일러(340), 예시적인 GPU 컴파일러 인터페이스(350), 예시적인 IPC 클라이언트(360), 및/또는 보다 일반적으로, 도 2 및/또는 도 3의 비특권 명령어 실행기(212), 예시적인 IPC 서버(410), 예시적인 GPU 컴파일 오케스트레이터(420), 예시적인 요청 검증기(430), 예시적인 최적화된 GPU 코드 데이터 저장소(440), 및/또는 보다 일반적으로, 도 2 및/또는 도 4의 예시적인 특권 명령어 실행기(214) 중 임의의 것은 하나 이상의 아날로그 또는 디지털 회로(들), 로직 회로, 프로그램가능 프로세서(들), 프로그램가능 컨트롤러(들), 그래픽 프로세싱 유닛(들)(GPU(들)), 디지털 신호 프로세서(들)(DSP(들)), 애플리케이션 특정 집적 회로(ASIC(들)), 프로그램가능 로직 디바이스(들)(PLD(들)) 및/또는 필드 프로그램가능 로직 디바이스(들)(FPLD(들))에 의해 구현될 수 있다. 순전히 소프트웨어 및/또는 펌웨어 구현을 커버하기 위해 본 특허의 장치 또는 시스템 청구항들 중 임의의 것을 읽을 때, 예시적인 스크립트 엔진(310), 예시적인 그래프 실행기(320), 예시적인 CPU 인터프리터(330), 예시적인 최적화된 CPU 코드 데이터 저장소(335), 예시적인 그래프 프로파일러(340), 예시적인 GPU 컴파일러 인터페이스(350), 예시적인 IPC 클라이언트(360), 및/또는 보다 일반적으로, 도 2 및/또는 도 3의 비특권 명령어 실행기(212), 예시적인 IPC 서버(410), 예시적인 GPU 컴파일 오케스트레이터(420), 예시적인 요청 검증기(430), 예시적인 최적화된 GPU 코드 데이터 저장소(440), 및/또는 보다 일반적으로, 도 2 및/또는 도 4의 예시적인 특권 명령어 실행기(214) 중 적어도 하나는 본 명세서에서 소프트웨어 및/또는 펌웨어를 포함한 메모리, 디지털 다용도 디스크(digital versatile disk)(DVD), 컴팩트 디스크(compact disk)(CD), 블루-레일(Blu-ray) 디스크 등과 같은 비-일시적 컴퓨터 판독가능 저장 디바이스 또는 저장 디스크를 포함하도록 명시적으로 정의된다. 또한, 예시적인 스크립트 엔진(310), 예시적인 그래프 실행기(320), 예시적인 CPU 인터프리터(330), 예시적인 최적화된 CPU 코드 데이터 저장소(335), 예시적인 그래프 프로파일러(340), 예시적인 GPU 컴파일러 인터페이스(350), 예시적인 IPC 클라이언트(360), 및/또는 보다 일반적으로, 도 2 및/또는 도 3의 비특권 명령어 실행기(212), 예시적인 IPC 서버(410), 예시적인 GPU 컴파일 오케스트레이터(420), 예시적인 요청 검증기(430), 예시적인 최적화된 GPU 코드 데이터 저장소(440), 및/또는 보다 일반적으로, 도 2 및/또는 도 4의 예시적인 특권 명령어 실행기(214)는 도 2, 도 3 및/또는 도 4에 예시된 것들에 추가로 또는 이에 대신하여 하나 이상의 엘리먼트, 프로세스 및/또는 디바이스를 포함할 수 있고/있거나, 예시된 엘리먼트들, 프로세스들 및 디바이스들 중 임의의 것 또는 전부 중 2개 이상을 포함할 수 있다. 본 명세서에 사용된 바와 같이, "통신하는(in communication)"이라는 문구는 그 변형들을 포함하여 직접 통신 및/또는 하나 이상의 중개 컴포넌트를 통한 간접 통신을 포함하며, 직접적인 물리적(예를 들어, 유선) 통신 및/또는 지속적인 통신을 필요로 하지 않고, 오히려 주기적 간격들, 스케줄링된 간격들, 비주기적 간격들 및/또는 일회성 이벤트들에서의 선택적 통신을 추가로 포함한다.
도 2 및/또는 도 3의 비특권 명령어 실행기(212)를 구현하기 위한 예시적인 하드웨어 로직, 머신 판독가능 명령어들, 하드웨어 구현 상태 머신들 및/또는 이들의 임의의 조합을 나타내는 흐름도가 도 5에 도시되어 있다. 도 2 및/또는 도 4의 특권 명령어 실행기(214)를 구현하기 위한 예시적인 하드웨어 로직, 머신 판독가능 명령어들, 하드웨어 구현 상태 머신들 및/또는 이들의 임의의 조합을 나타내는 흐름도들이 도 6 및/또는 도 7에 도시되어 있다. 머신 판독가능 명령어들은 도 8과 관련하여 아래에서 논의되는 예시적인 프로세서 플랫폼(800)에 도시된 프로세서(812)와 같은 컴퓨터 프로세서에 의한 실행을 위한 실행가능한 프로그램 또는 실행가능한 프로그램의 일부일 수 있다. 프로그램은 CD-ROM, 플로피 디스크, 하드 드라이브, DVD, 블루-레이 디스크 또는 프로세서(812)와 연관된 메모리와 같은 비-일시적 컴퓨터 판독가능 저장 매체 상에 저장되는 소프트웨어로 구체화될 수 있지만, 전체 프로그램 및/또는 그 일부들은 대안적으로 프로세서(812) 이외의 디바이스에 의해 실행될 수 있고/있거나 펌웨어 또는 전용 하드웨어로 구체화될 수 잇다. 또한, 예시적인 프로그램은 도 5, 도 6 및/또는 도 7에 예시된 흐름도를 참조하여 설명되지만, 도 2, 도 3 및/또는 도 4의 예시적인 비특권 명령어 실행기(212) 및/또는 특권 명령어 실행기(214)를 구현하는 많은 다른 방법들이 대안적으로 사용될 수 있다. 예를 들어, 블록들의 실행 순서는 변경될 수 있고/있거나, 설명된 블록들 중 일부는 변경, 제거 또는 결합될 수 있다. 추가적으로 또는 대안적으로, 블록들 중 임의의 것 또는 전부는 소프트웨어 또는 펌웨어를 실행하지 않고 대응하는 동작을 수행하도록 구성되는 하나 이상의 하드웨어 회로(예를 들어, 개별 및/또는 통합 아날로그 및/또는 디지털 회로망, FPGA, ASIC, 비교기, 연산-증폭기(op-amp), 로직 회로 등)에 의해 구현될 수 있다.
위에서 언급된 바와 같이, 도 5, 도 6 및/또는 도 7의 예시적인 프로세스들은 하드 디스크 드라이브, 플래시 메모리, 판독 전용 메모리, 컴팩트 디스크, 디지털 다용도 디스크, 캐시, 랜덤 액세스 메모리, 및/또는 정보가 임의의 지속 기간 동안(예를 들어, 연장된 시간 기간들 동안, 영구적으로, 짧은 순간들 동안, 일시적인 버퍼링 동안 및/또는 정보의 캐싱 동안) 저장되는 임의의 다른 저장 디바이스 또는 저장 디스크와 같은 비-일시적 컴퓨터 및/또는 머신 판독가능 매체 상에 저장되는 실행가능한 명령어들(예를 들어, 컴퓨터 및/또는 머신 판독가능 명령어들)을 사용하여 구현될 수 있다. 본 명세서에 사용된 바와 같이, 비-일시적 컴퓨터 판독가능 매체라는 용어는 임의의 타입의 컴퓨터 판독가능 저장 디바이스 및/또는 저장 디스크를 포함하고 전파 신호들을 배제하고 송신 매체를 배제하도록 명시적으로 정의된다.
"포함하는(Including)" 및 "포함하는(comprising)"(및 이의 모든 형태들 및 시제들)은 본 명세서에서 개방형 용어들로서 사용된다. 따라서, 청구항이 전제부로서 또는 임의의 종류의 청구항 기재 내에서 임의의 형태의 "포함한다(include)" 또는 "포함한다(comprise)"(예를 들어, 포함한다(comprises), 포함한다(includes), 포함하는(comprising), 포함하는(including), 갖는(having) 등)를 채택할 때마다, 추가 엘리먼트들, 용어들 등이 대응하는 청구항 또는 기재의 범위를 벗어나지 않고 존재할 수 있다는 것이 이해될 것이다. 본 명세서에 사용된 바와 같이, "적어도"라는 문구가, 예를 들어, 청구항의 전제부에서 전환 용어로서 사용될 때, 이는 "포함하는(comprising)" 및 "포함하는(including)"이라는 용어가 개방형인 것과 동일한 방식으로 개방형이다. "및/또는"이라는 용어는, 예를 들어, A, B 및/또는 C와 같은 형태로 사용될 때, (1) A 단독, (2) B 단독, (3) C 단독, (4) A와 B, (5) A와 C, (6) B와 C, 및 (7) A와 B 및 C와 같은 A, B, C의 임의의 조합 또는 서브세트를 지칭한다. 구조들, 컴포넌트들, 항목들, 객체들 및/또는 사물들을 설명하는 맥락에서 본 명세서에 사용된 바와 같이, "A 및 B 중 적어도 하나"라는 문구는 (1) 적어도 하나의 A, (2) 적어도 하나의 B 및 (3) 적어도 하나의 A 및 적어도 하나의 B 중 임의의 것을 포함하는 구현들을 지칭하는 것으로 의도된다. 유사하게, 구조들, 컴포넌트들, 항목들, 객체들 및/또는 사물들을 설명하는 맥락에서 본 명세서에 설명된 바와 같이, "A 또는 B 중 적어도 하나"라는 문구는 (1) 적어도 하나의 A, (2) 적어도 하나의 B 및 (3) 적어도 하나의 A 및 적어도 하나의 B 중 임의의 것을 포함하는 구현들을 지칭하는 것으로 의도된다. 프로세스들, 명령어들, 액션들, 활동들 및/또는 단계들의 성능 또는 실행을 설명하는 맥락에서 본 명세서에 사용된 바와 같이, "A 및 B 중 적어도 하나"라는 문구는 (1) 적어도 하나의 A, (2) 적어도 하나의 B 및 (3) 적어도 하나의 A 및 적어도 하나의 B 중 임의의 것을 포함하는 구현들을 지칭하는 것으로 의도된다. 유사하게, 프로세스들, 명령어들, 액션들, 활동들 및/또는 단계들의 성능 또는 실행을 설명하는 맥락에서 본 명세서에 사용된 바와 같이, "A 또는 B 중 적어도 하나"라는 문구는 (1) 적어도 하나의 A, (2) 적어도 하나의 B 및 (3) 적어도 하나의 A 및 적어도 하나의 B 중 임의의 것을 포함하는 구현들을 지칭하는 것으로 의도된다.
도 5는 도 2 및/또는 도 3의 예시적인 비특권 명령어 실행기를 구현하도록 실행될 수 있는 머신 판독가능 명령어들을 나타내는 흐름도이다. 도 5의 예시적인 프로세스(500)는 스크립트 엔진(310)이 실행을 위한 계산 그래프를 포함하는 실행을 위한 스크립트 파일을 수신할 때 시작된다. 예시적인 스크립트 엔진(310)은 계산 그래프를 포함하는 스크립트 명령어들(예를 들어, 자바스크립트 명령어들)에 액세스한다(블록(505)). 예시적인 스크립트 엔진(310)은 그래프 실행기(320)에 계산 그래프를 제공한다. 본 명세서에 개시된 예들에서, 계산 그래프는 제공될 수 있고/있거나, 계산 그래프에 대한 참조(예를 들어, 포인터, 식별자)가 제공될 수 있다. 일부 예들에서, 계산 그래프의 실행을 위한 추가 정보 및/또는 파라미터들(예를 들어, 입력 데이터)도 또한 그래프 실행기(320)에 제공된다.
일부 예들에서, 스크립트는 여러 번 실행될 수 있는 것으로 예상된다. 결과적으로, 스크립트의 이전 실행은 (CPU에서 해석된 실행을 사용하는 대신) GPU에서의 향후 실행을 위해 스크립트가 컴파일되게 할 수 있다. 이러한 예에서, 스크립트에 포함된 계산 그래프의 추가 실행은, 컴파일 모드를 사용하여 실행하는 경우, 더 효율적일 수 있다. 그러나, 스크립트에 포함된 계산 그래프의 토폴로지가 변경된 경우, 컴파일 모드(여기서, 이러한 컴파일은 계산 그래프의 상이한 버전을 사용하여 수행되었음)를 사용하는 이러한 실행은 부정확한 결과를 제공할 수 있다. 예시적인 그래프 실행기(320)는 계산 그래프의 토폴로지가 변경되었는지 여부를 결정한다(블록(508)). 본 명세서에 개시된 예들에서, 예시적인 그래프 실행기(320)는 계산 그래프의 토폴로지가, 계산 그래프의 이전 해시와 비교할 때, 계산 그래프의 해시에 기초하여 변경되었는지 여부를 결정한다. 그러나, 계산 그래프가 변경되었는지 여부를 결정하기 위한 임의의 다른 접근법이 추가적으로 또는 대안적으로 사용될 수 있다. 예시적인 그래프 실행기(320)가 토폴로지가 변경되었다고 결정하는 경우, 예시적인 GPU 컴파일러 인터페이스(350)는 계산 그래프가 컴파일 모드를 사용하여 실행될 것임을 나타내는 임의의 이전 플래그들 및/또는 설정들을 소거한다(블록(510)).
그래프 실행기(320)는 계산 그래프에 대한 동작의 모드를 선택한다(블록(515)). 본 명세서에 개시된 예들에서, 예시적인 그래프 실행기(320)는 (1) 계산 그래프의 명령어들이 CPU(233)에 의한 실행을 위해 해석되는 해석 모드, 및 (2) 계산 그래프의 컴파일된 버전이 GPU(237)에 의해 실행되는 컴파일 모드 중에서 선택한다. 본 명세서에 개시된 예들에서, 그래프 실행기(320)는 계산 그래프가 동작의 모드 선택의 일부로서 GPU(237)에 의한 실행을 위해 이전에 컴파일되었는지 여부에 기초하여 동작의 모드를 선택한다. 이하에 언급된 바와 같이, 이러한 명령어들은 컴파일될 수 있고, 해당 계산 그래프가 빈번하게 실행되는 것에 응답하여, 동작의 모드가 컴파일 모드임을 나타내는 플래그가 설정될 수 있다.
일부 예들에서는, 동작의 모드를 결정하기 위해 다른 인자들이 고려될 수 있다. 예를 들어, 런타임시(또는 계산 그래프의 이전 컴파일 이후의 임의의 다른 시간에) 계산 그래프의 토폴로지가 변경될 때, 예시적인 그래프 실행기(320)는 이러한 변경을 검출하고, 해당 계산 그래프에 대한 동작의 모드를 해석 모드로 설정할 수 있다(예를 들어, 블록(508, 510)). 일부 예들에서, 계산 그래프의 토폴로지의 변경은, 예를 들어, 계산 그래프의 해시를 계산 그래프의 이전 해시(예를 들어, 계산 그래프의 컴파일된 버전과 관련하여 저장된 해시)와 비교함으로써 검출될 수 있다. 본 명세서에 개시된 예들에서, 그래프 실행기(320)가 이전에 생성된 계산 그래프의 컴파일된 버전을 인식하지 못하는 경우, 그래프 실행기(320)는 해석 모드로 디폴트 설정된다.
예시적인 그래프 실행기(320)가 해석 모드가 사용될 것이라고 결정하는 경우(예를 들어, 블록(515)이 해석 모드(INTERPRETATION MODE)의 결과를 리턴하는 경우), 그래프 실행기(320)는 실행할 준비가 되어 있는 계산 그래프의 노드(예를 들어, 연산 노드)를 식별한다(블록(520)). 예시적인 CPU 인터프리터(330)는 최적화된 CPU 코드 데이터 저장소(335)에서 대응하는 최적화된 CPU 코드의 룩업을 수행한다(블록(522)). 본 명세서에 개시된 예들에서, 최적화된 CPU 코드 데이터 저장소에서의 룩업은 실행을 수행할 CPU 하드웨어(예를 들어, CPU(233))에 기초한다. 결과적으로, 최적화된 CPU 코드는 플랫폼 애그노스틱(platform agnostic)일 필요 없이, 대신, 예를 들어, Intel의 고급 벡터 확장들(AVX) 명령어들, 벡터 신경망 명령어(VNNI) 명령어들 등과 같은 플랫폼-특정 명령어들을 활용할 수 있다. 예시적인 CPU 인터프리터(330)는 실행을 위해 최적화된 CPU 코드를 CPU(233)에 제공한다(블록(524)). 예시적인 CPU 인터프리터(330)는 CPU 실행의 결과에 액세스한다(블록(526)). 결과는 그래프 실행기(320)에 제공되어, 계산 그래프의 실행이 완료되었는지 여부를 결정한다(블록(530)). 계산 그래프의 실행이 완료되지 않은 경우, 제어는 블록(520)으로 진행하며, 여기서 계산 그래프의 실행이 완료될 때까지, 블록들(520 내지 530)이 반복된다.
계산 그래프의 실행이 완료되면, 예시적인 그래프 실행기(320)는 실행 결과(예를 들어, 출력 텐서)를 스크립트 엔진(310)에 제공한다(블록(535)).
일부 경우들에서, 실행될 코드(예를 들어, 웹 애플리케이션)는 동일한 계산 그래프의 실행을 여러 번 야기할 수 있다. 이러한 예에서는, 이러한 계산 그래프가 GPU에 의해 실행되는 것이 더 효율적이다. GPU에 의한 명령어들의 실행은 GPU(237)에 의한 실행을 위해 이러한 계산 그래프를 컴파일하는 것뿐만 아니라 특권 명령어 실행기와 통신하는 추가 오버헤드를 발생시킨다. 그러나, 이러한 계산 그래프가 빈번하게 실행될 때에는, 이러한 GPU-기반 실행이 더 효율적일 수 있다. 예시적인 그래프 프로파일러(340)는 실행이 빈번한지 여부를 결정하기 위해 계산 그래프의 실행을 프로파일링한다(블록(540)).
본 명세서에 개시된 예들에서, 계산 그래프는 이전 임계 시간 기간 내에 임계 횟수보다 많이(예를 들어, 마지막 분에 2회 초과) 실행되었을 때 빈번하게 실행되는 것으로 간주된다. 그러나, 계산 그래프가 빈번하게 실행되는지 여부 및/또는 보다 일반적으로 계산 그래프가 GPU(237)에 의한 향후 실행을 위해 컴파일되어야 하는지 여부를 결정하기 위해 임의의 다른 인자들이 사용될 수 있다. 예를 들어, 계산 그래프의 사이즈(이는 계산 그래프를 컴파일하는 데 사용되는 자원들의 양에 영향을 미칠 수 있음), 계산 그래프의 출처(예를 들어, 계산 그래프가 빈번하게 액세스되는 네트워크 자원 및/또는 웹 사이트로부터 생성되는지 여부), 계산 그래프에 포함된 연산들의 타입들(이는 컴파일이 성공적인 것으로 예상되는지 여부를 나타낼 수 있음) 등.
계산 그래프가 빈번하게 실행되는 경우(블록(545)이 예(YES)의 결과를 리턴하는 경우), 예시적인 그래프 실행기(320)는 GPU 명령어들로의 컴파일을 위해 예시적인 GPU 컴파일러 인터페이스(350)에 계산 그래프를 전송한다(블록(555)). 계산 그래프를 GPU 명령어들로 컴파일하는 예시적인 접근법이 이하 도 6과 관련하여 더 상세하게 설명된다. 그 후, 예시적인 GPU 컴파일러 인터페이스(350)는 계산 그래프를 GPU 명령어들로 컴파일하려고 시도하기 위해 IPC 클라이언트(360)를 통해 특권 명령어 실행기(214)와 인터페이스한다. 계산 그래프를 GPU 명령어들로 성공적으로 컴파일하면, 예시적인 GPU 컴파일러 인터페이스(350)는 계산 그래프에 대한 동작의 모드를 업데이트한다(블록(560)). 그 결과, 계산 그래프를 실행하기 위한 향후 요청들은 해석 모드를 사용하는 대신 컴파일 모드를 사용할 것이다(예를 들어, 블록(515)).
도 5의 예시된 예에서, 계산 그래프를 GPU 명령어들로 프로파일링 및 컴파일하는 것은 해석 모드에서 계산 그래프의 실행이 완료되면 순차적으로 수행된다. 그러나, 일부 예들에서, 계산 그래프를 컴파일된 GPU 명령어들로 프로파일링 및/또는 컴파일하는 것(예를 들어, 박스(565))은 해석 모드에서 계산 그래프의 실행과 병렬로 수행될 수 있고/있거나, 비동기적으로 수행될 수 있다. 비동기 프로파일링 및/또는 컴파일을 사용하는 것은 이러한 프로파일링 및/또는 컴파일이 계산적으로 비용이 많이 들 수 있기 때문에 유용하다. 일부 예들에서는, 계산 그래프의 컴파일이 완료되기 전에, 계산 그래프의 실행을 위한 후속 요청이 도달될 수 있다. 이러한 예에서, 후속 요청의 계산 그래프는 해석 모드를 사용하여 실행될 수 있다(예를 들어, 컴파일이 아직 완료되지 않은 경우에).
블록(515)으로 리턴하여, 예시적인 그래프 실행기(320)가 계산 그래프에 대한 동작의 모드가 컴파일 모드여야 한다고 결정하는 경우, 예를 들어, 계산 그래프가 이전에 GPU 명령어들로 컴파일된 경우, 예시적인 GPU 컴파일러 인터페이스(350)는 컴파일된 GPU 명령어들의 실행을 요청한다(블록(570)). 본 명세서에 개시된 예들에서, GPU 컴파일러 인터페이스(350)는 컴파일된 GPU 명령어들의 실행을 요청하기 위해 IPC 클라이언트(360)를 통해 예시적인 특권 명령어 실행기(214)와 인터페이스한다. 그 후, 예시적인 GPU 컴파일러 인터페이스(350)는 IPC 클라이언트(360)를 통해 컴파일된 GPU 명령어들의 실행 결과에 액세스한다(블록(575)). 그 후, 실행 결과(예를 들어, 출력 텐서)가 예시적인 스크립트 엔진에 추가로 제공될 수 있도록 그 결과가 그래프 실행기(320)에 제공된다(블록(580)). 그 후, 제어는 블록(540)으로 리턴하며, 여기서 예시적인 그래프 프로파일러(340)는 GPU 명령어들을 컴파일할지 여부를 결정하기 위해 계산 그래프의 실행을 프로파일링한다. 일부 예들에서, 계산 그래프를 프로파일링한 후, 예시적인 그래프 프로파일러(340)는 계산 그래프가 더 이상 빈번하게 실행되지 않는다고 결정할 수 있으며(예를 들어, 블록(545)은 아니오(NO)의 결과를 리턴할 수 있음), 이 경우 그래프 프로파일러(340)는 계산 그래프를 해석 모드를 사용하여 실행되는 것으로 리턴하도록 그래프에 대한 동작의 모드를 업데이트할 수 있다.
계산 그래프의 개별 노드들이 개별 실행을 위해 GPU에 제공되었던 GPU에서 머신 러닝 워크로드들을 실행하기 위한 이전의 접근법들과 대조적으로, 도 5의 예시된 예에서는, 계산 그래프가 완전한 유닛으로서 특권 명령어 실행기(214)에 식별된다. 이러한 접근법은 비특권 명령어 실행기(212)와 특권 명령어 실행기(214) 사이에서 앞뒤로 중간 결과들을 제공하는 것과 연관된 IPC 통신 오버헤드를 감소시킨다.
도 6은 도 2의 그래픽 프로세싱 유닛(GPU)(237)에 의한 실행을 위해 계산 그래프를 컴파일하기 위해 도 2 및/또는 도 4의 예시적인 특권 명령어 실행기(214)를 구현하도록 실행될 수 있는 머신 판독가능 명령어들을 나타내는 흐름도이다. 도 6의 예시적인 프로세스(555)는 IPC 서버(410)가 비특권 명령어 실행기(212)로부터 수신된 컴파일될 계산 그래프의 표시에 액세스할 때 시작된다(블록(610)).
예시적인 IPC 서버(410)는 계산 그래프가 유효한지 여부를 결정하기 위해 예시적인 요청 검증기(430)와 상호 작용한다(블록(630)). 본 명세서에 개시된 예들에서, 요청 검증기(430)는 계산 그래프 및/또는 보다 일반적으로, 예시적인 비특권 명령어 실행기(212)로부터 수신된 계산 그래프를 컴파일하기 위한 요청이 컴파일될 계산 그래프의 표시에 제공되는 추가 파라미터들에 기초하여 유효한지 여부를 결정한다. 일부 예들에서, 추가 파라미터들은, 예를 들어, 요청이 유효함을 나타내는 인증서 파라미터를 포함할 수 있다. 그러나, 비특권 명령어 실행기(212)로부터의 요청을 검증하기 위한 임의의 다른 접근법이 추가적으로 또는 대안적으로 사용될 수 있다.
예시적인 요청 검증기(430)가 요청이 유효하지 않다고 결정하는 경우(예를 들어, 블록(630)이 유효하지 않음의 결과를 리턴하는 경우), 예시적인 IPC 서버(410)는 비특권 명령어 실행기에 계산 그래프를 컴파일하기 위한 요청의 무효성(invalidity)을 나타낸다(블록(640)). 이러한 예에서, 예시적인 비특권 명령어 실행기의 GPU 컴파일러 인터페이스(350)는 계산 그래프를 실행하기 위한 후속 요청들에서 컴파일 모드가 사용되어야 한다고 기록하지 않는다. 그 후, 도 6의 예시된 예의 예시적인 프로세스(555)는 종료되지만, 계산 그래프를 컴파일하기 위한 요청이 후속 수신되면 반복될 수 있다.
블록(630)으로 리턴하여, 예시적인 요청 검증기(430)가 계산 그래프의 컴파일을 위한 요청이 유효하다고 결정하는 경우(예를 들어, 블록(630)이 유효함의 결과를 리턴하는 경우), 예시적인 GPU 컴파일 오케스트레이터(420)는 계산 그래프의 각각의 노드들에 대응하는 GPU 소스 코드를 로드한다(블록(650)). 즉, 예시적인 GPU 컴파일 오케스트레이터(420)는 내포 그래프의 일부로서 수행될 연산들에 기초하여 GPU 소스 코드를 구성한다. 본 명세서에 개시된 예들에서, 소스 코드는 최적화된 GPU 코드 데이터 저장소(440)로부터 리트리브된다. 또한, 최적화된 GPU 코드 데이터 저장소(440)는, 예를 들어, 하드웨어 특정 명령어들 및/또는 확장들의 활용을 가능하게 하는 최적화된 GPU 코드를 저장한다. 예를 들어, Intel의 개방형 컴퓨팅 언어(OpenCL) 확장들과 같은 하드웨어-특정 피처들은 최적화된 GPU 코드 데이터 저장소(440)에 저장된 명령어들에 대해 활용될 수 있다.
예시적인 GPU 컴파일 오케스트레이터(420)는 GPU-특정 커널(예를 들어, 바이너리 코드)로 컴파일하기 위한 소스 코드를 GPU 드라이버로 전송한다(블록(660)). 그 후, 예시적인 GPU 드라이버(227)는 GPU 소스 코드를 GPU-특정 커널(예를 들어, 바이너리 코드)로 컴파일하고, GPU 명령어 데이터베이스(229)에 GPU-특정 커널을 저장한다. 컴파일 동안, 예시적인 GPU 컴파일 오케스트레이터(420)는 컴파일의 완료를 대기한다(블록(670)).
예시적인 GPU 컴파일 오케스트레이터(420)는 컴파일 완료의 표시를 IPC 서버(410)를 통해 그래프 실행기(320)에 제공한다(블록(680)). 그 후, 그래프 실행기(320)는 계산 그래프가 컴파일되었음을 마킹하고, 계산 그래프의 후속 실행들을 위해 GPU 컴파일 모드로 스위칭한다(도 5의 블록(560) 참조). 그 후, 도 6의 예시적인 프로세스는 종료되지만, 계산 그래프를 컴파일하기 위한 후속 요청시 반복될 수 있다.
도 7은 실행을 위해 도 2의 GPU에 컴파일된 명령어들을 제공하기 위해 도 2 및/또는 도 3의 예시적인 특권 명령어 실행기를 구현하도록 실행될 수 있는 머신 판독가능 명령어들을 나타내는 흐름도이다. 도 7의 예시적인 프로세스(700)는 예시적인 IPC 서버(410)가 실행될 컴파일된 계산 그래프에 대한 요청에 액세스할 때 시작된다(블록(710)). 본 명세서에 개시된 예들에서, 요청은 추가 파라미터들(예를 들어, 입력 데이터), 실행될 계산 그래프의 이름 등을 식별하기 위해 파싱된다. 일부 예들에서, IPC 서버(410)는 검증을 위해 요청을 검증기(430)에 제공한다. 예시적인 IPC 서버(410)는 GPU 컴파일 오케스트레이터(420)에 요청을 제공하며, 이는 GPU(237)에 의해 실행될 대응하는 커널(예를 들어, 컴파일된 GPU-특정 바이너리 코드)을 식별한다(블록(720)). 본 명세서에 개시된 예들에서, 대응하는 커널은, 예를 들어, 실행될 계산 그래프의 이름 및/또는 다른 식별자에 기초하여 식별될 수 있다.
예시적인 GPU 컴파일 오케스트레이터(420)는 GPU(237)에 의한 커널의 실행을 요청한다(블록(730)). 커널의 실행이 완료된 후, 결과(예를 들어, 출력 텐서)는 (예를 들어, IPC 통신 채널(225)을 통해) 비특권 명령어 실행기(212)에 제공된다(블록(740)). 그 후, 도 7의 예시적인 프로세스(700)는 종료되지만, 컴파일된 계산 그래프를 실행하기 위한 후속 요청시 반복될 수 있다.
도 8은 도 2, 도 3 및/또는 도 4의 예시적인 비특권 명령어 실행기(212) 및/또는 특권 명령어 실행기(214)를 구현하기 위해 도 5, 도 6 및/또는 도 7의 명령어들을 실행하도록 구성되는 예시적인 프로세서 플랫폼(800)의 블록도이다. 프로세서 플랫폼(800)은, 예를 들어, 서버, 개인용 컴퓨터, 워크스테이션, 셀프-러닝 머신(예를 들어, 신경망), 모바일 디바이스(예를 들어, 휴대폰, 스마트폰, iPadTM와 같은 태블릿), PDA(personal digital assistant), 인터넷 기기, DVD 플레이어, CD 플레이어, 디지털 비디오 레코더, 블루-레이 플레이어, 게이밍 콘솔, 개인용 비디오 레코더, 셋톱 박스, 헤드셋 또는 다른 웨어러블 디바이스 또는 임의의 다른 타입의 컴퓨팅 디바이스일 수 있다.
예시된 예의 프로세서 플랫폼(800)은 프로세서(812)를 포함한다. 예시된 예시의 프로세서(812)는 하드웨어이다. 예를 들어, 프로세서(812)는 임의의 원하는 제품군 또는 제조업체의 하나 이상의 집적 회로, 로직 회로, 마이크로프로세서, GPU, DSP 또는 컨트롤러에 의해 구현될 수 있다. 하드웨어 프로세서는 반도체 기반(예를 들어, 실리콘 기반) 디바이스일 수 있다. 이 예에서, 프로세서는 예시적인 프로세스-간 통신 채널(225), 예시적인 GPU 드라이버(227), 예시적인 스크립트 엔진(310), 예시적인 그래프 실행기(320), 예시적인 CPU 인터프리터(330), 예시적인 그래프 프로파일러(340), 예시적인 GPU 컴파일러 인터페이스(350), 예시적인 IPC(360), 예시적인 IPC 서버(410), 예시적인 GPU 컴파일 오케스트레이터(420) 및 예시적인 요청 검증기(430)를 구현한다.
예시된 예의 프로세서(812)는 로컬 메모리(813)(예를 들어, 캐시)를 포함한다. 예시된 예의 프로세서(812)는 버스(818)를 통해 휘발성 메모리(814) 및 비-휘발성 메모리(816)를 포함하는 메인 메모리와 통신한다. 휘발성 메모리(814)는 동기식 동적 랜덤 액세스 메모리(Synchronous Dynamic Random Access Memory)(SDRAM), 동적 랜덤 액세스 메모리(Dynamic Random Access Memory)(DRAM), RAMBUS® 동적 랜덤 액세스 메모리(RAMBUS® Dynamic Random Access Memory)(RDRAM®) 및/또는 임의의 다른 타입의 랜덤 액세스 메모리 디바이스에 의해 구현될 수 있다. 비-휘발성 메모리(816)는 플래시 메모리 및/또는 임의의 다른 원하는 타입의 메모리 디바이스에 의해 구현될 수 있다. 메인 메모리(814, 816)에 대한 액세스는 메모리 컨트롤러에 의해 제어된다.
예시된 예의 프로세서 플랫폼(800)은 또한 인터페이스 회로(820)를 포함한다. 인터페이스 회로(820)는 이더넷 인터페이스, 범용 직렬 버스(universal serial bus)(USB), 블루투스® 인터페이스, 근거리 통신(near field communication)(NFC) 인터페이스 및/또는 PCI 익스프레스 인터페이스와 같은 임의의 타입의 인터페이스 표준에 의해 구현될 수 있다.
예시된 예에서, 하나 이상의 입력 디바이스(822)가 인터페이스 회로(820)에 연결된다. 입력 디바이스(들)(822)는 사용자가 데이터 및/또는 커맨드들을 프로세서(812)에 입력하는 것을 허용한다. 입력 디바이스(들)는, 예를 들어, 오디오 센서, 마이크로폰, 카메라(정지 또는 비디오), 키보드, 버튼, 마우스, 터치스크린, 트랙-패드, 트랙볼, 이소포인트(isopoint) 및/또는 음성 인식 시스템에 의해 구현될 수 있다.
하나 이상의 출력 디바이스(824)가 또한 예시된 예의 인터페이스 회로(820)에 연결된다. 출력 디바이스들(824)은, 예를 들어, 디스플레이 디스플레이들(예를 들어, 발광 다이오드(light emitting diode)(LED), 유기 발광 다이오드(organic light emitting diode)(OLED), 액정 디스플레이(liquid crystal display)(LCD), 음극선관 디스플레이(cathode ray tube display)(CRT), IPS(in-plane switching) 디스플레이, 터치 스크린 등), 촉각 출력 디바이스, 프린터 및/또는 스피커에 의해 구현될 수 있다. 따라서, 예시된 예의 인터페이스 회로(820)는 통상적으로 그래픽 드라이버 카드, 그래픽 드라이버 칩 및/또는 그래픽 드라이버 프로세서를 포함한다.
예시된 예의 프로세서 플랫폼(800)은 버스(818)를 통해 통신하는 그래픽 프로세싱 유닛(GPU)(237)을 포함한다.
예시된 예의 인터페이스 회로(820)는 또한 송신기, 수신기, 트랜시버, 모뎀, 주거용 게이트웨이(residential gateway), 무선 액세스 포인트, 및/또는 네트워크(826)를 통해 외부 머신들(예를 들어, 임의의 종류의 컴퓨팅 디바이스들)과의 데이터 교환을 용이하게 하는 네트워크 인터페이스와 같은 통신 디바이스를 포함한다. 통신은, 예를 들어, 이더넷 연결, 디지털 가입자 회선(digital subscriber line)(DSL) 연결, 전화선 연결, 동축 케이블 시스템, 위성 시스템, 현장 무선 시스템(line-of-site wireless system), 셀룰러 전화 시스템 등을 통해 이루어질 수 있다.
예시된 예의 프로세서 플랫폼(800)은 또한 소프트웨어 및/또는 데이터를 저장하기 위한 하나 이상의 대용량 저장 디바이스(828)를 포함한다. 이러한 대용량 저장 디바이스들(828)의 예들은 플로피 디스크 드라이브들, 하드 드라이브 디스크들, 컴팩트 디스크 드라이브들, 블루-레이 디스크 드라이브들, RAID(redundant array of independent disk) 시스템들 및 디지털 다용도 디스크(DVD) 드라이브들을 포함한다.
도 5, 도 6 및/또는 도 7의 머신 실행가능 명령어들(832)은 대용량 저장 디바이스(828)에, 휘발성 메모리(814)에, 비-휘발성 메모리(816)에, 및/또는 CD 또는 DVD와 같은 이동식 비-일시적 컴퓨터 판독가능 저장 매체 상에 저장될 수 있다.
전술한 내용으로부터, CPU들 및 GPU들을 사용하여 계산 그래프들의 효율적인 실행을 가능하게 하는 예시적인 방법들, 장치 및 제조물들이 개시되었다는 것이 이해될 것이다. 개시된 방법들, 장치 및 제조물들은 최적화된 CPU 명령어들을 사용하여 CPU 상에서 계산 그래프들의 해석된 실행을 가능하게 할 뿐만 아니라 GPU-특정 소스 코드를 사용하여 컴파일되는 컴파일된 GPU 명령어들의 실행으로의 전환을 가능하게 함으로써 컴퓨팅 디바이스의 사용 효율성을 개선시킨다. 예를 들어, 최적화된 CPU 명령어들을 활용함으로써(예를 들어, AVX 명령어들을 사용함으로써), CPU 인터프리터 실행은 기존 웹어셈블리 실행보다 약 3.5배 더 빠르다. 또한, 최적화된 GPU 연산 구현(예를 들어, Intel의 OpenCL 확장들)을 활용함으로써, GPU 컴파일러 실행은 WebGL 실행보다 약 4배 더 빠르다. 또한, GPU 실행은 (GPU 명령어들을 컴파일하고 IPC를 통해 이러한 계산 그래프를 전달하는 것과 연관된 오버헤드로 인해) CPU 실행보다 느리게 시작되지만, 본 명세서에 개시된 접근법들을 사용하면 더 나은 성능을 유지하기 위해 GPU 컴파일러의 활용으로의 보다 제어된 스위칭이 가능하게 된다. 따라서, 개시된 방법들, 장치 및 제조물들은 컴퓨터의 기능에서 하나 이상의 개선(들)에 관한 것이다.
예 1은 멀티-프로세스 웹 브라우저 환경에서 머신 러닝 모델(machine learning model)을 프로세싱하기 위한 장치로서, 실행될 계산 그래프에 대한 동작의 모드를 결정하기 위한 그래프 실행기; 계산 그래프의 노드에 대응하는 중앙 프로세싱 유닛(central processing unit)(CPU) 명령어를 룩업하기 위한 CPU 인터프리터 - CPU 명령어는 적어도 하나의 프로세서에 의한 실행을 위한 CPU-특정 명령어임 -; 계산 그래프가 빈번하게 실행되는지 여부를 결정하기 위한 그래프 프로파일러; 및 계산 그래프가 빈번하게 실행된다는 결정에 응답하여, 그래픽 프로세싱 유닛(graphics processing unit)(GPU)에서의 실행을 위해 계산 그래프의 적어도 2개의 노드의 GPU 커널로의 컴파일을 위한 요청을 송신하기 위한 GPU 컴파일러 인터페이스를 포함하는 장치를 포함한다.
예 2는 예 1에 있어서, GPU 컴파일러 인터페이스는 GPU 커널의 실행을 위한 요청을 송신하는 장치를 포함한다.
예 3은 예 1에 있어서, GPU 컴파일러 인터페이스는 추가로 계산 그래프에 대한 동작의 모드를 업데이트하고, 그래프 실행기는 계산 그래프에 대한 동작의 모드의 업데이트에 응답하여 계산 그래프가 컴파일 모드를 사용하여 실행될 것임을 결정하는 장치를 포함한다.
예 4는 예 3에 있어서, 계산 그래프의 컴파일을 위한 요청에 응답하여, 계산 그래프를 GPU 커널로 컴파일하기 위한 요청을 검증하기 위한 요청 검증기를 추가로 포함하는 장치를 포함한다.
예 5는 예 4에 있어서, 요청 검증기가 요청을 검증하는 것에 응답하여, 계산 그래프의 노드에 대응하는 GPU 소스 코드를 식별하고, GPU 소스 코드를 커널로 컴파일하기 위한 GPU 컴파일 오케스트레이터(GPU compilation orchestrator)를 추가로 포함하는 장치를 포함한다.
예 6은 예 5에 있어서, GPU 소스 코드는 GPU에 의한 실행을 위한 GPU-특정 명령어인 장치를 포함한다.
예 7은 예 6에 있어서, GPU-특정 명령어는 개방형 컴퓨트 언어 명령어(open compute language instruction)인 장치를 포함한다.
예 8은 예 1에 있어서, CPU-특정 명령어는 고급 벡터 확장 명령어인 장치를 포함한다.
예 9는 명령어들을 포함하는 적어도 하나의 비-일시적 컴퓨터 판독가능 매체로서, 명령어들은, 실행될 때, 적어도 하나의 프로세서로 하여금, 적어도 실행될 계산 그래프에 대한 동작의 모드를 결정하게 하고, 계산 그래프가 해석 모드를 사용하여 실행될 것이라는 결정에 응답하여, 계산 그래프의 노드에 대응하는 중앙 프로세싱 유닛(CPU) 명령어의 룩업을 수행하게 하고 - CPU 명령어는 적어도 하나의 프로세서에 의한 실행을 위한 CPU-특정 명령어임 -, 계산 그래프가 빈번하게 실행되는지 여부를 결정하기 위해 계산 그래프의 실행을 프로파일링하게 하고, 계산 그래프가 빈번하게 실행된다는 결정에 응답하여, 그래픽 프로세싱 유닛(GPU)에서의 실행을 위해 계산 그래프의 GPU 커널로의 컴파일을 위한 요청을 송신하게 하고, 계산 그래프에 대한 동작의 모드를 업데이트하게 하는 적어도 하나의 비-일시적 컴퓨터 판독가능 매체를 포함한다.
예 10은 예 9에 있어서, 명령어들은, 실행될 때, 추가로, CPU 명령어로 하여금 적어도 하나의 프로세서에 의해 실행되게 하는 적어도 하나의 비-일시적 컴퓨터 판독가능 매체를 포함한다.
예 11은 예 9에 있어서, 명령어들은, 실행될 때, 추가로, 적어도 하나의 프로세서로 하여금, 계산 그래프가 컴파일 모드를 사용하여 실행될 것이라는 결정에 응답하여, GPU 커널의 실행을 위한 요청을 송신하게 하는 적어도 하나의 비-일시적 컴퓨터 판독가능 매체를 포함한다.
예 12는 예 11에 있어서, 명령어들은, 실행될 때, 추가로, 적어도 하나의 프로세서로 하여금 GPU 커널의 실행을 위한 요청을 특권 명령어 실행기(privileged instruction executor)로 송신하게 하는 적어도 하나의 비-일시적 컴퓨터 판독가능 매체를 포함한다.
예 13은 예 11에 있어서, 명령어들은, 실행될 때, 추가로, 적어도 하나의 프로세서로 하여금 프로세스-간 통신 채널(inter-process communication channel)을 통해 GPU 커널의 실행을 위한 요청을 송신하게 하는 적어도 하나의 비-일시적 컴퓨터 판독가능 매체를 포함한다.
예 14는 예 9에 있어서, 명령어들은, 실행될 때, 추가로, 적어도 하나의 프로세서로 하여금, 계산 그래프의 컴파일을 위한 요청을 검증하게 하고, 요청을 검증하는 것에 응답하여, 계산 그래프의 노드에 대응하는 GPU 소스 코드를 식별하게 하고, GPU 소스 코드를 커널로 컴파일하게 하는 적어도 하나의 비-일시적 컴퓨터 판독가능 매체를 포함한다.
예 15는 예 14에 있어서, GPU 소스 코드는 GPU에 의한 실행을 위한 GPU-특정 명령어인 적어도 하나의 비-일시적 컴퓨터 판독가능 매체를 포함한다.
예 16은 예 15에 있어서, GPU-특정 명령어는 개방형 컴퓨트 언어 명령어인 적어도 하나의 비-일시적 컴퓨터 판독가능 매체를 포함한다.
예 17은 예 9에 있어서, CPU-특정 명령어는 고급 벡터 확장 명령어인 적어도 하나의 비-일시적 컴퓨터 판독가능 매체를 포함한다.
예 18은 멀티-프로세스 웹 브라우저 환경에서 머신 러닝 모델을 프로세싱하기 위한 장치로서, 실행될 계산 그래프에 대한 동작의 모드를 결정하기 위한 수단; 계산 그래프의 노드에 대응하는 CPU 명령어를 식별하기 위한 수단 - CPU 명령어는 적어도 하나의 프로세서에 의한 실행을 위한 CPU-특정 명령어임 -; 계산 그래프가 빈번하게 실행되는지 여부를 결정하기 위해 프로파일링하기 위한 수단; 및 계산 그래프가 빈번하게 실행된다는 결정에 응답하여, GPU에서의 실행을 위해 계산 그래프의 GPU 커널로의 컴파일을 위한 요청을 송신하기 위한 수단을 포함하는 장치를 포함한다.
예 19는 예 18에 있어서, 송신하기 위한 수단은 GPU 커널의 실행을 위한 요청을 송신하는 장치를 포함한다.
예 20은 예 18에 있어서, 송신하기 위한 수단은 추가로 계산 그래프에 대한 동작의 모드를 업데이트하고, 결정하기 위한 수단은 계산 그래프에 대한 동작의 모드의 업데이트에 응답하여 계산 그래프가 컴파일 모드를 사용하여 실행될 것임을 결정하는 장치를 포함한다.
예 21은 예 20에 있어서, 계산 그래프의 컴파일을 위한 요청에 응답하여, 계산 그래프를 GPU 커널로 컴파일하기 위한 요청을 검증하기 위한 수단을 추가로 포함하는 장치를 포함한다.
예 22는 예 21에 있어서, 검증하기 위한 수단이 요청을 검증하는 것에 응답하여, 계산 그래프의 노드에 대응하는 GPU 소스 코드를 선택하고, GPU 소스 코드를 커널로 컴파일하기 위한 수단을 추가로 포함하는 장치를 포함한다.
예 23은 멀티-프로세스 웹 브라우저 환경에서 머신 러닝 모델을 프로세싱하는 방법으로서, 적어도 하나의 프로세서로 명령어를 실행함으로써, 실행될 계산 그래프에 대한 동작의 모드를 결정하는 단계; 및 계산 그래프가 해석 모드를 사용하여 실행될 것이라는 결정에 응답하여, 계산 그래프의 노드에 대응하는 중앙 프로세싱 유닛(CPU) 명령어의 룩업을 수행하는 단계 - CPU 명령어는 적어도 하나의 프로세서에 의한 실행을 위한 CPU-특정 명령어임 -; 계산 그래프가 빈번하게 실행되는지 여부를 결정하기 위해 계산 그래프의 실행을 프로파일링하는 단계; 및 계산 그래프가 빈번하게 실행된다는 결정에 응답하여, 그래픽 프로세싱 유닛(GPU)에서의 실행을 위해 계산 그래프를 GPU 커널로 컴파일하고, 계산 그래프에 대한 동작의 모드를 업데이트하는 단계를 포함하는 방법을 포함한다.
예 24는 예 23에 있어서, CPU 명령어로 하여금 적어도 하나의 프로세서에 의해 실행되게 하는 단계를 추가로 포함하는 방법을 포함한다.
예 25는 예 23에 있어서, 계산 그래프가 컴파일 모드를 사용하여 실행될 것이라는 결정에 응답하여, GPU 커널의 실행을 위한 요청을 송신하는 단계를 추가로 포함하는 방법을 포함한다.
예 26은 예 25에 있어서, 계산 그래프가 컴파일 모드를 사용하여 실행될 것이라는 결정은 계산 그래프에 대한 동작의 모드의 업데이트에 응답하여 수행되는 방법을 포함한다.
예 27은 예 25에 있어서, GPU 커널의 실행을 위한 요청은 특권 명령어 실행기로 송신되는 방법을 포함한다.
예 28은 예 25에 있어서, GPU 커널의 실행을 위한 요청은 프로세스-간 통신 채널을 통해 송신되는 방법을 포함한다.
예 29는 예 23에 있어서, 계산 그래프를 GPU 커널로 컴파일하는 단계는 계산 그래프를 GPU 커널로 컴파일하기 위한 요청에 액세스하는 단계; 요청을 검증하는 단계; 요청을 검증하는 것에 응답하여, 계산 그래프의 노드에 대응하는 GPU 소스 코드를 식별하는 단계; 및 GPU 소스 코드를 커널로 컴파일하는 단계를 포함하는 방법을 포함한다.
예 30은 예 29에 있어서, GPU 소스 코드는 GPU에 의한 실행을 위한 GPU-특정 명령어인 방법을 포함한다.
예 31은 예 30에 있어서, GPU-특정 명령어는 개방형 컴퓨트 언어 명령어인 방법을 포함한다.
예 32는 예 23에 있어서, CPU-특정 명령어는 고급 벡터 확장 명령어인 방법을 포함한다.
특정 예시적인 방법들, 장치 및 제조물들이 본 명세서에 개시되었지만, 본 특허의 커버리지 범위는 이에 제한되지 않는다. 반대로, 본 특허는 본 특허의 청구 범위에 속하는 모든 방법들, 장치 및 제조물들을 포함한다.

Claims (32)

  1. 멀티-프로세스 웹 브라우저 환경에서 머신 러닝 모델(machine learning model)을 프로세싱하기 위한 장치로서,
    실행될 계산 그래프에 대한 동작의 모드를 결정하기 위한 그래프 실행기;
    상기 계산 그래프의 노드에 대응하는 중앙 프로세싱 유닛(central processing unit)(CPU) 명령어를 룩업하기 위한 CPU 인터프리터 - 상기 CPU 명령어는 적어도 하나의 프로세서에 의한 실행을 위한 CPU-특정 명령어임 -;
    상기 계산 그래프가 빈번하게 실행되는지 여부를 결정하기 위한 그래프 프로파일러; 및
    상기 계산 그래프가 빈번하게 실행된다는 결정에 응답하여, 그래픽 프로세싱 유닛(graphics processing unit)(GPU)에서의 실행을 위해 상기 계산 그래프의 적어도 2개의 노드의 GPU 커널로의 컴파일을 위한 요청을 송신하기 위한 GPU 컴파일러 인터페이스
    를 포함하는, 장치.
  2. 제1항에 있어서, 상기 GPU 컴파일러 인터페이스는 상기 GPU 커널의 실행을 위한 요청을 송신하는, 장치.
  3. 제1항에 있어서, 상기 GPU 컴파일러 인터페이스는 추가로 상기 계산 그래프에 대한 동작의 모드를 업데이트하고, 상기 그래프 실행기는 상기 계산 그래프에 대한 동작의 모드의 업데이트에 응답하여 상기 계산 그래프가 컴파일 모드를 사용하여 실행될 것임을 결정하는, 장치.
  4. 제3항에 있어서, 상기 계산 그래프의 컴파일을 위한 요청에 응답하여, 상기 계산 그래프를 상기 GPU 커널로 컴파일하기 위한 요청을 검증하기 위한 요청 검증기를 추가로 포함하는, 장치.
  5. 제4항에 있어서, 상기 요청 검증기가 상기 요청을 검증하는 것에 응답하여, 상기 계산 그래프의 노드에 대응하는 GPU 소스 코드를 식별하고, 상기 GPU 소스 코드를 상기 커널로 컴파일하기 위한 GPU 컴파일 오케스트레이터(GPU compilation orchestrator)를 추가로 포함하는, 장치.
  6. 제5항에 있어서, 상기 GPU 소스 코드는 상기 GPU에 의한 실행을 위한 GPU-특정 명령어인, 장치.
  7. 제6항에 있어서, 상기 GPU-특정 명령어는 개방형 컴퓨트 언어 명령어(Open Compute Language instruction)인, 장치.
  8. 제1항에 있어서, 상기 CPU-특정 명령어는 고급 벡터 확장 명령어인, 장치.
  9. 명령어들을 포함하는 적어도 하나의 비-일시적 컴퓨터 판독가능 매체로서,
    상기 명령어들은, 실행될 때, 적어도 하나의 프로세서로 하여금, 적어도,
    실행될 계산 그래프에 대한 동작의 모드를 결정하게 하고,
    상기 계산 그래프가 해석 모드를 사용하여 실행될 것이라는 결정에 응답하여, 상기 계산 그래프의 노드에 대응하는 중앙 프로세싱 유닛(CPU) 명령어의 룩업을 수행하게 하고 - 상기 CPU 명령어는 상기 적어도 하나의 프로세서에 의한 실행을 위한 CPU-특정 명령어임 -,
    상기 계산 그래프가 빈번하게 실행되는지 여부를 결정하기 위해 상기 계산 그래프의 실행을 프로파일링하게 하고,
    상기 계산 그래프가 빈번하게 실행된다는 결정에 응답하여,
    그래픽 프로세싱 유닛(GPU)에서의 실행을 위해 상기 계산 그래프의 GPU 커널로의 컴파일을 위한 요청을 송신하게 하고,
    상기 계산 그래프에 대한 동작의 모드를 업데이트하게 하는, 적어도 하나의 비-일시적 컴퓨터 판독가능 매체.
  10. 제9항에 있어서, 상기 명령어들은, 실행될 때, 추가로, 상기 CPU 명령어로 하여금 상기 적어도 하나의 프로세서에 의해 실행되게 하는, 적어도 하나의 비-일시적 컴퓨터 판독가능 매체.
  11. 제9항에 있어서, 상기 명령어들은, 실행될 때, 추가로, 상기 적어도 하나의 프로세서로 하여금, 상기 계산 그래프가 컴파일 모드를 사용하여 실행될 것이라는 결정에 응답하여, 상기 GPU 커널의 실행을 위한 요청을 송신하게 하는, 적어도 하나의 비-일시적 컴퓨터 판독가능 매체.
  12. 제11항에 있어서, 상기 명령어들은, 실행될 때, 추가로, 상기 적어도 하나의 프로세서로 하여금 상기 GPU 커널의 실행을 위한 요청을 특권 명령어 실행기(privileged instruction executor)로 송신하게 하는, 적어도 하나의 비-일시적 컴퓨터 판독가능 매체.
  13. 제11항에 있어서, 상기 명령어들은, 실행될 때, 추가로, 상기 적어도 하나의 프로세서로 하여금 프로세스-간 통신 채널(inter-process communication channel)을 통해 상기 GPU 커널의 실행을 위한 요청을 송신하게 하는, 적어도 하나의 비-일시적 컴퓨터 판독가능 매체.
  14. 제9항에 있어서, 상기 명령어들은, 실행될 때, 추가로, 상기 적어도 하나의 프로세서로 하여금,
    상기 계산 그래프의 컴파일을 위한 요청을 검증하게 하고,
    상기 요청을 검증하는 것에 응답하여, 상기 계산 그래프의 노드에 대응하는 GPU 소스 코드를 식별하게 하고,
    상기 GPU 소스 코드를 상기 커널로 컴파일하게 하는, 적어도 하나의 비-일시적 컴퓨터 판독가능 매체.
  15. 제14항에 있어서, 상기 GPU 소스 코드는 상기 GPU에 의한 실행을 위한 GPU-특정 명령어인, 적어도 하나의 비-일시적 컴퓨터 판독가능 매체.
  16. 제15항에 있어서, 상기 GPU-특정 명령어는 개방형 컴퓨트 언어 명령어인, 적어도 하나의 비-일시적 컴퓨터 판독가능 매체.
  17. 제9항에 있어서, 상기 CPU-특정 명령어는 고급 벡터 확장 명령어인, 적어도 하나의 비-일시적 컴퓨터 판독가능 매체.
  18. 멀티-프로세스 웹 브라우저 환경에서 머신 러닝 모델을 프로세싱하기 위한 장치로서,
    실행될 계산 그래프에 대한 동작의 모드를 결정하기 위한 수단;
    상기 계산 그래프의 노드에 대응하는 CPU 명령어를 식별하기 위한 수단 - 상기 CPU 명령어는 적어도 하나의 프로세서에 의한 실행을 위한 CPU-특정 명령어임 -;
    상기 계산 그래프가 빈번하게 실행되는지 여부를 결정하기 위해 프로파일링하기 위한 수단; 및
    상기 계산 그래프가 빈번하게 실행된다는 결정에 응답하여, GPU에서의 실행을 위해 상기 계산 그래프의 GPU 커널로의 컴파일을 위한 요청을 송신하기 위한 수단
    을 포함하는, 장치.
  19. 제18항에 있어서, 상기 송신하기 위한 수단은 상기 GPU 커널의 실행을 위한 요청을 송신하는, 장치.
  20. 제18항에 있어서, 상기 송신하기 위한 수단은 추가로 상기 계산 그래프에 대한 동작의 모드를 업데이트하고, 상기 결정하기 위한 수단은 상기 계산 그래프에 대한 동작의 모드의 업데이트에 응답하여 상기 계산 그래프가 컴파일 모드를 사용하여 실행될 것임을 결정하는, 장치.
  21. 제20항에 있어서, 상기 계산 그래프의 컴파일을 위한 요청에 응답하여, 상기 계산 그래프를 상기 GPU 커널로 컴파일하기 위한 요청을 검증하기 위한 수단을 추가로 포함하는, 장치.
  22. 제21항에 있어서, 상기 검증하기 위한 수단이 상기 요청을 검증하는 것에 응답하여, 상기 계산 그래프의 노드에 대응하는 GPU 소스 코드를 선택하고, 상기 GPU 소스 코드를 상기 커널로 컴파일하기 위한 수단을 추가로 포함하는, 장치.
  23. 멀티-프로세스 웹 브라우저 환경에서 머신 러닝 모델을 프로세싱하는 방법으로서,
    적어도 하나의 프로세서로 명령어를 실행함으로써, 실행될 계산 그래프에 대한 동작의 모드를 결정하는 단계; 및
    상기 계산 그래프가 해석 모드를 사용하여 실행될 것이라는 결정에 응답하여,
    상기 계산 그래프의 노드에 대응하는 중앙 프로세싱 유닛(CPU) 명령어의 룩업을 수행하는 단계 - 상기 CPU 명령어는 상기 적어도 하나의 프로세서에 의한 실행을 위한 CPU-특정 명령어임 -;
    상기 계산 그래프가 빈번하게 실행되는지 여부를 결정하기 위해 상기 계산 그래프의 실행을 프로파일링하는 단계; 및
    상기 계산 그래프가 빈번하게 실행된다는 결정에 응답하여, 그래픽 프로세싱 유닛(GPU)에서의 실행을 위해 상기 계산 그래프를 GPU 커널로 컴파일하고, 상기 계산 그래프에 대한 동작의 모드를 업데이트하는 단계
    를 포함하는, 방법.
  24. 제23항에 있어서, 상기 CPU 명령어로 하여금 상기 적어도 하나의 프로세서에 의해 실행되게 하는 단계를 추가로 포함하는, 방법.
  25. 제23항에 있어서, 상기 계산 그래프가 컴파일 모드를 사용하여 실행될 것이라는 결정에 응답하여, 상기 GPU 커널의 실행을 위한 요청을 송신하는 단계를 추가로 포함하는, 방법.
  26. 제25항에 있어서, 상기 계산 그래프가 컴파일 모드를 사용하여 실행될 것이라는 결정은 상기 계산 그래프에 대한 동작의 모드의 업데이트에 응답하여 수행되는, 방법.
  27. 제25항에 있어서, 상기 GPU 커널의 실행을 위한 요청은 특권 명령어 실행기로 송신되는, 방법.
  28. 제25항에 있어서, 상기 GPU 커널의 실행을 위한 요청은 프로세스-간 통신 채널을 통해 송신되는, 방법.
  29. 제23항에 있어서, 상기 계산 그래프를 GPU 커널로 컴파일하는 단계는,
    상기 계산 그래프를 상기 GPU 커널로 컴파일하기 위한 요청에 액세스하는 단계;
    상기 요청을 검증하는 단계;
    상기 요청을 검증하는 것에 응답하여, 상기 계산 그래프의 노드에 대응하는 GPU 소스 코드를 식별하는 단계; 및
    상기 GPU 소스 코드를 상기 커널로 컴파일하는 단계
    를 포함하는, 방법.
  30. 제29항에 있어서, 상기 GPU 소스 코드는 상기 GPU에 의한 실행을 위한 GPU-특정 명령어인, 방법.
  31. 제30항에 있어서, 상기 GPU-특정 명령어는 개방형 컴퓨트 언어 명령어인, 방법.
  32. 제23항에 있어서, 상기 CPU-특정 명령어는 고급 벡터 확장 명령어인, 방법.
KR1020207036081A 2018-12-24 2018-12-24 멀티-프로세스 웹 브라우저 환경에서 머신 러닝 모델을 프로세싱하기 위한 방법들 및 장치 KR20210107531A (ko)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/CN2018/123216 WO2020132833A1 (en) 2018-12-24 2018-12-24 Methods and apparatus to process machine learning model in multi-process web browser environment

Publications (1)

Publication Number Publication Date
KR20210107531A true KR20210107531A (ko) 2021-09-01

Family

ID=71129405

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020207036081A KR20210107531A (ko) 2018-12-24 2018-12-24 멀티-프로세스 웹 브라우저 환경에서 머신 러닝 모델을 프로세싱하기 위한 방법들 및 장치

Country Status (4)

Country Link
US (1) US20210232969A1 (ko)
EP (1) EP3903276A4 (ko)
KR (1) KR20210107531A (ko)
WO (1) WO2020132833A1 (ko)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2024016894A1 (zh) * 2022-07-22 2024-01-25 华为云计算技术有限公司 一种神经网络的训练方法以及相关设备
CN115576699B (zh) * 2022-11-25 2024-03-12 成都登临科技有限公司 数据处理方法、装置、ai芯片、电子设备及存储介质

Family Cites Families (87)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7805440B2 (en) * 2001-04-11 2010-09-28 International Business Machines Corporation System and method for simplifying and manipulating k-partite graphs
US7627537B2 (en) * 2004-10-28 2009-12-01 Intel Corporation Score result reuse for Bayesian network structure learning
US7598953B2 (en) * 2004-11-05 2009-10-06 Microsoft Corporation Interpreter for simplified programming of graphics processor units in general purpose programming languages
US7733347B2 (en) * 2004-11-05 2010-06-08 Microsoft Corporation Automated construction of shader programs
US7800620B2 (en) * 2004-11-05 2010-09-21 Microsoft Corporation Optimizing automated shader program construction
US9081609B2 (en) * 2005-12-21 2015-07-14 Xerox Corporation Image processing system and method employing a threaded scheduler
US7580918B2 (en) * 2006-03-03 2009-08-25 Adobe Systems Incorporated System and method of efficiently representing and searching directed acyclic graph structures in databases
US8108844B2 (en) * 2006-06-20 2012-01-31 Google Inc. Systems and methods for dynamically choosing a processing element for a compute kernel
US8797337B1 (en) * 2009-07-02 2014-08-05 Google Inc. Graphics scenegraph rendering for web applications using native code modules
US8489765B2 (en) * 2010-03-19 2013-07-16 Cisco Technology, Inc. Dynamic directed acyclic graph (DAG) adjustment
US9424089B2 (en) * 2012-01-24 2016-08-23 Samsung Electronics Co., Ltd. Hardware acceleration of web applications
US9262795B2 (en) * 2012-07-31 2016-02-16 Intel Corporation Hybrid rendering systems and methods
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
US11061539B2 (en) * 2013-03-15 2021-07-13 The Mathworks, Inc. Reference nodes in a computational graph
US9183387B1 (en) * 2013-06-05 2015-11-10 Google Inc. Systems and methods for detecting online attacks
KR20150084098A (ko) * 2014-01-13 2015-07-22 한국전자통신연구원 스트림 데이터 분산 처리 시스템 및 그 방법
US9619544B2 (en) * 2014-06-26 2017-04-11 Amazon Technologies, Inc. Distributed state management using dynamic replication graphs
US9529882B2 (en) * 2014-06-26 2016-12-27 Amazon Technologies, Inc. Coordinated suspension of replication groups
US9619278B2 (en) * 2014-06-26 2017-04-11 Amazon Technologies, Inc. Log-based concurrency control using signatures
US9519674B2 (en) * 2014-09-10 2016-12-13 Amazon Technologies, Inc. Stateless datastore-independent transactions
US9619289B2 (en) * 2014-09-11 2017-04-11 Dell Products, L.P. Workload optimized server for intelligent algorithm trading platforms
US9747513B2 (en) * 2015-09-17 2017-08-29 International Business Machines Corporation Path compression of a network graph
WO2017075346A1 (en) * 2015-10-28 2017-05-04 Google Inc. Modifying computational graphs
US10635146B2 (en) * 2016-01-28 2020-04-28 Dell Products, L.P. Power monitoring calibration to a target performance level
KR20170102726A (ko) * 2016-03-02 2017-09-12 한국전자통신연구원 이종 컴퓨팅 방법
CN108280798B (zh) * 2016-12-30 2021-02-12 腾讯科技(深圳)有限公司 一种浏览器内核渲染显示的方法和装置
US9798527B1 (en) * 2017-01-06 2017-10-24 Google Inc. Loop and library fusion
CN108304177A (zh) * 2017-01-13 2018-07-20 辉达公司 计算图的执行
WO2018226621A1 (en) * 2017-06-05 2018-12-13 Umajin Inc. Methods and systems for an application system
US11922564B2 (en) * 2017-06-05 2024-03-05 Umajin Inc. Generative content system that supports location-based services and methods therefor
US20200007615A1 (en) * 2017-06-05 2020-01-02 Umajin Inc. Server kit configured to execute custom workflows and methods therefor
US10235182B2 (en) * 2017-06-20 2019-03-19 Palo Alto Research Center Incorporated System and method for hybrid task management across CPU and GPU for efficient data mining
US10552161B2 (en) * 2017-06-21 2020-02-04 International Business Machines Corporation Cluster graphical processing unit (GPU) resource sharing efficiency by directed acyclic graph (DAG) generation
US20180373986A1 (en) * 2017-06-26 2018-12-27 QbitLogic, Inc. Machine learning using dynamic multilayer perceptrons
US11170307B1 (en) * 2017-09-21 2021-11-09 Groq, Inc. Predictive model compiler for generating a statically scheduled binary with known resource constraints
US11636327B2 (en) * 2017-12-29 2023-04-25 Intel Corporation Machine learning sparse computation mechanism for arbitrary neural networks, arithmetic compute microarchitecture, and sparsity for training mechanism
WO2019151984A1 (en) * 2018-01-30 2019-08-08 Google Llc Dynamic placement of computation sub-graphs
WO2019152308A1 (en) * 2018-01-30 2019-08-08 D5Ai Llc Self-organizing partially ordered networks
US11126657B2 (en) * 2018-06-11 2021-09-21 Alibaba Group Holding Limited Efficient in-memory representation of computation graph for fast serialization and comparison
US10956132B1 (en) * 2018-06-11 2021-03-23 Amazon Technologies, Inc. Unified code and data management for model development
JP2022500755A (ja) * 2018-09-11 2022-01-04 ホアウェイ・テクノロジーズ・カンパニー・リミテッド 順次計算dagのための異種スケジューリング
US11281936B2 (en) * 2018-12-31 2022-03-22 Kofax, Inc. Systems and methods for identifying processes for robotic automation and building models therefor
US11455153B2 (en) * 2019-03-18 2022-09-27 Advanced Micro Devices, Inc. Dynamic instances semantics
GB2582782A (en) * 2019-04-02 2020-10-07 Graphcore Ltd Graph conversion method
CN111832736B (zh) * 2019-04-19 2024-04-12 伊姆西Ip控股有限责任公司 用于处理机器学习模型的方法、设备和计算机可读存储介质
US11256611B2 (en) * 2019-05-29 2022-02-22 Toyota Research Institute, Inc. Simulation-based technique to synthesize controllers that satisfy signal temporal logic specifications
US11797876B1 (en) * 2019-06-26 2023-10-24 Amazon Technologies, Inc Unified optimization for convolutional neural network model inference on integrated graphics processing units
US20190391796A1 (en) * 2019-06-28 2019-12-26 Intel Corporation Control of scheduling dependencies by a neural network compiler
US11262989B2 (en) * 2019-08-05 2022-03-01 Advanced Micro Devices, Inc. Automatic generation of efficient vector code with low overhead in a time-efficient manner independent of vector width
US11551106B2 (en) * 2019-08-07 2023-01-10 Saudi Arabian Oil Company Representation learning in massive petroleum network systems
CN112463709A (zh) * 2019-09-09 2021-03-09 上海登临科技有限公司 可配置的异构人工智能处理器
US11295165B1 (en) * 2019-09-30 2022-04-05 Amazon Technologies, Inc. Systems, methods, and apparatuses for determining data relevance and labeling, model updating, and deployment
WO2021084485A1 (en) * 2019-10-30 2021-05-06 Cerebras Systems Inc. Placement of compute and memory for accelerated deep learning
CN111078395B (zh) * 2019-11-12 2023-06-20 华中科技大学 一种基于张量的深度学习gpu内存管理优化方法及系统
US11741375B2 (en) * 2019-11-15 2023-08-29 International Business Machines Corporation Capturing the global structure of logical formulae with graph long short-term memory
US11914669B2 (en) * 2019-11-25 2024-02-27 Baidu Usa Llc Approximate nearest neighbor search for single instruction, multiple thread (SIMT) or single instruction, multiple data (SIMD) type processors
US20210182036A1 (en) * 2019-12-12 2021-06-17 Huawei Technologies Co., Ltd. Hardware platform specific operator fusion in machine learning
US20210191765A1 (en) * 2019-12-18 2021-06-24 Deep Vision Inc. Method for static scheduling of artificial neural networks for a processor
US11422932B2 (en) * 2019-12-20 2022-08-23 Microsoft Technology Licensing, Llc Integrated reference and secondary marking
US20210256385A1 (en) * 2020-02-14 2021-08-19 Northeastern University Computer-implemented methods and systems for dnn weight pruning for real-time execution on mobile devices
WO2021177976A1 (en) * 2020-03-06 2021-09-10 Google Llc Distributed computing pipeline processing
CN113391918A (zh) * 2020-03-13 2021-09-14 伊姆西Ip控股有限责任公司 用于处理计算作业的方法、设备和计算机程序产品
US20210326744A1 (en) * 2020-04-17 2021-10-21 Microsoft Technology Licensing, Llc Security alert-incident grouping based on investigation history
US20210334946A1 (en) * 2020-04-24 2021-10-28 Camtek Ltd. Method and system for classifying defects in wafer using wafer-defect images, based on deep learning
US11385931B2 (en) * 2020-04-29 2022-07-12 EMC IP Holding Company LLC Method, electronic device, and computer program product for processing computing job
US11327877B2 (en) * 2020-05-08 2022-05-10 Microsoft Technology Licensing, Llc Pipeline performance improvement using stochastic dags
WO2022009210A1 (en) * 2020-07-08 2022-01-13 B. G. Negev Technologies And Applications Ltd., At Ben-Gurion University Method and system for detection and mitigation of concept drift
US11698779B2 (en) * 2020-09-01 2023-07-11 Ansys, Inc. Systems using computation graphs for flow solvers
CN114283099A (zh) * 2020-09-21 2022-04-05 华为技术有限公司 一种图处理的方法,系统以及装置
US20220092439A1 (en) * 2020-09-23 2022-03-24 EMC IP Holding Company LLC Decoupled architecture for artificial intelligence model management
CN114330735A (zh) * 2020-09-30 2022-04-12 伊姆西Ip控股有限责任公司 处理机器学习模型的方法、电子设备和计算机程序产品
US11915056B2 (en) * 2020-10-15 2024-02-27 Nec Corporation Combination of multiple data processing and machine learning frameworks for a target hardware
US20240004776A1 (en) * 2020-10-22 2024-01-04 Arizona Board Of Regents On Behalf Of Arizona State University User-space emulation framework for heterogeneous soc design
US20220198296A1 (en) * 2020-12-23 2022-06-23 EMC IP Holding Comnpany LLC User context migration based on computation graph in artificial intelligence application executing in edge computing environment
US20220398450A1 (en) * 2021-06-15 2022-12-15 Lemon Inc. Automatically and efficiently generating search spaces for neural network
US20220413928A1 (en) * 2021-06-25 2022-12-29 Nvidia Corporation 5g-nr multi-cell software framework
US20230084951A1 (en) * 2021-09-16 2023-03-16 Nvidia Corporation Synchronizing graph execution
US11704226B2 (en) * 2021-09-23 2023-07-18 Intel Corporation Methods, systems, articles of manufacture and apparatus to detect code defects
US20230144498A1 (en) * 2021-11-09 2023-05-11 KOIDRA Inc. Simulation and automated control of physical systems
US20230176933A1 (en) * 2021-12-07 2023-06-08 Nvidia Corporation Techniques for modifying graph code
US20230185634A1 (en) * 2021-12-13 2023-06-15 Nvidia Corporation Application programming interface to cause graph code to update a semaphore
US20220107793A1 (en) * 2021-12-14 2022-04-07 Intel Corporation Concept for Placing an Execution of a Computer Program
US11487694B1 (en) * 2021-12-17 2022-11-01 SambaNova Systems, Inc. Hot-plug events in a pool of reconfigurable data flow resources
US20230222019A1 (en) * 2022-01-10 2023-07-13 Nvidia Corporation Application programming interface to control execution of graph nodes
US20230222010A1 (en) * 2022-01-10 2023-07-13 Nvidia Corporation Application programming interface to indicate execution of graph nodes
US20230244391A1 (en) * 2022-01-31 2023-08-03 Nvidia Corporation Graph-based memory storage
US20240037335A1 (en) * 2022-07-29 2024-02-01 Mohammad Akbari Methods, systems, and media for bi-modal generation of natural languages and neural architectures

Also Published As

Publication number Publication date
EP3903276A4 (en) 2022-08-03
EP3903276A1 (en) 2021-11-03
WO2020132833A1 (en) 2020-07-02
US20210232969A1 (en) 2021-07-29

Similar Documents

Publication Publication Date Title
US9152668B1 (en) Asynchronous computation batching
US11694299B2 (en) Methods and apparatus to emulate graphics processing unit instructions
US8752016B2 (en) Converting JavaScript into a device-independent representation
KR102077360B1 (ko) 애플리케이션에 대한 중간 언어 코드로부터 네이티브 코드를 생성하는 기법
US8209674B2 (en) Tier splitting support for distributed execution environments
US10176270B2 (en) Performance of template based javascript widgets
US9183396B2 (en) Detecting exploitable bugs in binary code
US9146759B2 (en) Assumption-based compilation
US20090024986A1 (en) Runtime code modification
US9195486B2 (en) Observation and analysis based code optimization
KR102183185B1 (ko) 애플리케이션 프로그래밍 인터페이스들에 대한 런타임 액세스의 제어
Cascaval et al. Zoomm: a parallel web browser engine for multicore mobile devices
US9189375B1 (en) Dynamic sandboxing
US9038185B2 (en) Execution of multiple execution paths
US20130024759A1 (en) Shared Script Files in Multi-Tab Browser
US9881351B2 (en) Remote translation, aggregation and distribution of computer program resources in graphics processing unit emulation
US8578355B1 (en) Scenario based optimization
KR20210107531A (ko) 멀티-프로세스 웹 브라우저 환경에서 머신 러닝 모델을 프로세싱하기 위한 방법들 및 장치
CN112148282A (zh) 用于推荐指令适配以改善计算性能的方法和装置
US11379712B2 (en) Avoiding cycles in neural networks
US9830307B1 (en) Ahead of time compilation of content pages
US9747448B2 (en) Cryptographic mechanisms to provide information privacy and integrity
US9703573B1 (en) Interposer for dynamic mapping of API calls
US9786026B2 (en) Asynchronous translation of computer program resources in graphics processing unit emulation
US10620980B2 (en) Techniques for native runtime of hypertext markup language graphics content

Legal Events

Date Code Title Description
E902 Notification of reason for refusal