KR102333341B1 - 마이크로프로세서 시스템에서의 예외 처리 - Google Patents

마이크로프로세서 시스템에서의 예외 처리 Download PDF

Info

Publication number
KR102333341B1
KR102333341B1 KR1020167028039A KR20167028039A KR102333341B1 KR 102333341 B1 KR102333341 B1 KR 102333341B1 KR 1020167028039 A KR1020167028039 A KR 1020167028039A KR 20167028039 A KR20167028039 A KR 20167028039A KR 102333341 B1 KR102333341 B1 KR 102333341B1
Authority
KR
South Korea
Prior art keywords
exception
thread
task
threads
processing
Prior art date
Application number
KR1020167028039A
Other languages
English (en)
Other versions
KR20160132437A (ko
Inventor
로버트 엘리엇
바트살야 프라사드
안드레스 잉-할스트베드트
Original Assignee
에이알엠 리미티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 에이알엠 리미티드 filed Critical 에이알엠 리미티드
Publication of KR20160132437A publication Critical patent/KR20160132437A/ko
Application granted granted Critical
Publication of KR102333341B1 publication Critical patent/KR102333341B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4812Task transfer initiation or dispatching by interrupt, e.g. masked
    • 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, look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • 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/542Event management; Broadcasting; Multicasting; Notifications

Abstract

마이크로프로세서 시스템(1)은 호스트 프로세서(2), 다수의 프로세싱 코어들을 포함하는 그래픽 프로세싱 시스템(GPU)(3)과, 예외 처리기를 구비한다. 프로세싱 코어(4) 상에서 실행되고 있는 스레드가 그것의 명령 시퀀스 내부의 예외와 마주치면, 스레드가 예외 처리기로 방향전환된다. 그러나, 예외 이벤트도 GPU(3)의 태스크 관리자(5)로 전달된다. 그후, 태스크 관리자(5)는 원인 예외 메시지를 각각의 프로세싱 코어(4)에게 브로드캐스트한다. 그후, 각각의 프로세싱 코어는, 그것이 현재 실행하고 있으며 원인 예외 메시지가 관련되는 스레드들을 식별하고, 이들 스레드들을 예외 처리기로 방향전환한다. 이에 따르면, 한 개의 스레드에 의해 발생된 예외가 태스크 내부의 모든 스레드들에 브로드캐스트된다.

Description

마이크로프로세서 시스템에서의 예외 처리{EXCEPTION HANDLING IN MICROPROCESSOR SYSTEMS}
본 발명은, 마이크로프로세서 시스템에서의 예외 처리에 관한 것으로, 특히 다수의 스레드들이 병렬로 독립적으로 실행되는 마이크로프로세서 시스템에서의 예외 처리에 관한 것이다.
예를 들어, 예외를 기동하는 스레드가, 예외가 기동되었는지 아닌지를 판정하기 위해 나머지 실행되고 있는 스레드들이 주기적으로 폴링(poll)하는 규정된 메모리 위치에서 데이터 상태를 설정하는 예외 처리 메카니즘을 제공하는 것이 공지되어 있다. 병렬로 실행되고 있는 제한된 수의 스레드들이 존재하는 경우에는 이와 같은 종류의 예외 처리가 충분할 수 있지만, 본 출원인은, 병렬로 독립적으로 실행되고 있는 다수의 스레드들이 존재하는(그리고 각각의 스레드가 기동되고 있는 예외를 뒤따를 필요가 있는) 경우에는 이와 같은 구성이 적합하지 않다는 것을 인식하였다. 더구나, 본 출원인은, 다수의 스레드들이 병렬로 실행되고 있는 상황이 마이크로프로세서 시스템에서는 더 흔한 일이 되고 있다는 것을 더 인식하였다. 예를 들어, (예를 들어, OpenCL을 사용하는) 고도의 병렬 데이터 처리 연산을 위한 한 개 이상의 그래픽 프로세싱 코어들(그래픽 프로세서들)을 포함하는 그래픽 처리 시스템을 사용할 때 이와 같은 문제가 일어날 수 있다. 이 경우, 각각의 그래픽 프로세싱 코어는, 예를 들어, 256개까지의 독립된 스레드들을 지원한다.
따라서, 본 출원인은 마이크로프로세서 시스템에서의 예외 처리에 대한 개량된 구성의 여지가 남아 있다고 생각한다.
이하, 다음의 첨부도면을 참조하여 본 발명에서 설명하는 기술의 다수의 실시예를 설명한다.
도 1은 본 발명에서 설명하는 기술의 방식으로 동작하는 마이크로프로세서 시스템을 개략적으로 나타낸 것이다.
도 2 및 도 3은 본 발명에서 설명하는 기술의 실시예들에서의 도 1의 마이크로프로세서 시스템의 동작을 개략적으로 나타낸 것이다.
필요한 경우에는, 전체 도면에 걸쳐 동일한 특징에 대해 동일한 참조번호를 사용한다.
본 발명에서 설명하는 기술의 제 1 실시예는,
복수의 실행 스레드들을 병렬로 실행하도록 각각 동작하는 한 개 이상의 프로세싱 코어들과,
태스크들을 상기 프로세싱 코어들에게 발행하여 처리하도록 동작하는 태스크 관리자와,
실행중에 예외와 마주치는 스레드들을 처리하도록 동작하는 예외 처리기를 구비하고,
상기 프로세싱 코어들 중에서 적어도 한 개는, 이 프로세싱 코어가 실행하고 있는 스레드가 예외와 마주치거나 예외를 발생하기를 원하는 경우에, 이 프로세싱 코어가 태스크 관리자에 대해 예외 이벤트를 기동할 수 있도록 구성되고,
상기 태스크 관리자는, 프로세싱 코어로부터 예외 이벤트의 표시를 수신하는 경우에, 상기 프로세싱 코어들 중에서 적어도 한 개에 원인 예외(cause exception) 메시지를 브로드캐스트하도록 구성되고,
상기 프로세싱 코어들은, 상기 태스크 관리자로부터 브로드캐스트된 상기 원인 예외 메시지를 수신하는 경우에, 코어가 현재 실행하고 있으며 상기 원인 예외 메시지가 적용되고 따라서 종결되거나 보류되어야 하는 스레드들을 식별하고, 이와 같이 식별된 스레드들을 처리를 위한 상기 예외 처리기로 방향전환(redirect)하고, 상기 예외 처리기에 의한 처리는 상기 예외 처리기로 방향전환되는 상기 식별된 스레드들의 실행을 종결하거나 보류시키는 것을 포함하는 마마이크로프로세서 시스템을 포함한다.
본 발명에서 설명하는 기술의 제 2 실시예는,
복수의 실행 스레드들을 병렬로 실행하도록 각각 동작하는 한 개 이상의 프로세싱 코어들과,
태스크들을 상기 프로세싱 코어들에게 발행하여 처리하도록 동작하는 태스크 관리자와,
실행중에 예외와 마주치는 스레드들을 처리하도록 동작하는 예외 처리기를 구비한 마이크로프로세서 시스템의 작동방법으로서,
프로세싱 코어가 실행하고 있는 스레드가 예외와 마주치거나 예외를 발생하기를 원하는 경우에, 이 프로세싱 코어가 태스크 관리자에 대해 예외 이벤트를 기동하는 단계와,
상기 태스크 관리자가 프로세싱 코어로부터 예외 이벤트의 표시를 수신하는 경우에, 상기 프로세싱 코어들 중에서 적어도 한 개에 원인 예외 메시지를 브로드캐스트하는 단계와,
상기 태스크 관리자로부터 브로드캐스트된 상기 원인 예외 메시지를 수신한 각각의 프로세싱 코어가, 코어가 현재 실행하고 있으며 상기 원인 예외 메시지가 적용되고 따라서 종결되거나 보류되어야 하는 스레드들을 식별하고, 이와 같이 식별된 스레드들을 처리를 위한 상기 예외 처리기로 방향전환하는 단계를 포함하고, 상기 예외 처리기에 의한 처리는 상기 예외 처리기로 방향전환되는 상기 식별된 스레드들의 실행을 종결하거나 보류시키는 것을 포함하는 마이크로프로세서 시스템의 작동방법을 포함한다.
본 발명에 설명하는 기술은, 실행할 실행 스레드들을 실행하는 한 개 이상의 프로세싱 코어들과, 예외와 마주치는 스레드들을 처리하는 예외 처리기를 구비한 마이크로프로세서 시스템에 관한 것이다. 그러나, 종래의 시스템과 달리, 본 발명에서 설명하는 기술에서는, 실행되고 있는 스레드가 예외와 마주치거나 예외를 발생하고자 하면, 프로세싱 코어(들)에 대한 태스크들의 분배를 제어하고 있는 태스크 관리자에게 이 이벤트가 표시될 수 있고, 그후 태스크 관리자는 예외 이벤트를 프로세싱 코어들에게 브로드캐스트한다.
이하에서 더욱 상세히 설명하는 것과 같이, 이와 같은 구성은 프로세싱 코어 내부의 (한개의) 스레드에 의해 마주치거나 기동되는 한 개의 예외가, 동일한 또는 다른 프로세싱 코어에 있는지에 무관하게, 복수의 다른 스레드들에 효과적으로 표시될 수 있도록 한다. 따라서, 이와 같은 구성은, 예를 들어, 다수의 독립적인 스레드들을 병렬로 지원 및 실행하는 시스템에서 더욱 효율적이고 효과적인 예외 처리를 용이하게 한다. 예를 들어, 본 발명에서 설명하는 기술을 사용하여, 다수의 독립적인 실행 스레드들에 걸쳐(예를 들어, 복수의 프로세싱 코어들에 걸쳐) 분배된 병렬 검색 또는 다른 귀납적(goal driven) 알고리즘을 효율적으로 종결시킬 수 있다.
본 발명에서 설명하는 기술의 마이크로프로세서 시스템의 프로세싱 코어 또는 코어들은, 범용 프로세싱 코어, 그래픽 프로세싱 코어(예를 들면, 셰이더 코어), OpenCL "산출 유닛(compute-unit)"으로 기능할 수 있는 것 등의 임의의 적절한 프로세싱 코어가 될 수 있다. 일 실시예에서, 이들 프로세싱 코어는 그래픽 프로세싱 코어이다. 각각의 코어는 일 실시예에서는 복수의 독립적인 실행 스레드들을 병렬로 실행할 수 있다. 일 실시예에서, 코어들은 (동시에) 256개까지의 독립적인 스레드를 병렬로 실행할 수 있다.
본 발명에서 설명하는 기술은, 예를 들어, 예외가 발생할 때 독립적인 스레드들을 폴링하는 비용이 눈에 띄게 증가할 수도 있는 상황과 같이, 복수의(그리고 다수의) 독립적인 실행 스레드들을 처리하는 시스템에서 특히 적용가능하다. 따라서, 본 발명에서 설명하는 기술은, 다수의 독립적인 프로세싱 코어들, 스레드 그룹들(스레드 워프들) 등이 존재하는 경우에 유리하다. 그러나, 본 발명에서 설명하는 기술은, 필요한 경우에는, 모든 스레드들이 한 개의 스레드 그룹(워프)으로 구성되거나, 또는, 사실상, 한 개 또는 몇 개의 스레드만 존재하는 경우에도 사용될 수 있다.
시스템은 단지 한 개의 프로세싱 코어를 구비해도 되지만, 일 실시예에서는, 복수의 프로세싱 코어들이 존재한다. 일 실시예에서는, 4 내지 8개의 프로세싱 코어들이 존재한다. 복수의 프로세싱 코어가 존재하는 경우에는, 각각의 코어는 일 실시예에서는 본 발명에서 설명하는 기술의 방식으로 동작한다. 각각의 코어는 일 실시예에서는 동일한 종류(예를 들어, 그래픽 프로세싱 코어)이다.
태스크 관리자는 프로세싱 코어들에 의해 행해질 태스크를 프로세싱 코어들에게 발행하도록 동작한다. 태스크 관리자는 임의의 적절한 방식으로 이것을 행하도록 동작할 수 있다. 태스크 관리자는, 필요한 경우에는, 마이크로콘트롤러(MCU) 상에서 실행되는 프로세스로서 구현되어도 된다.
일 실시예에서, 태스크 관리자는, 일 실시예에서는, 태스크에 대한 스레드 색인 공간에 걸쳐 반복하여 태스크를 실행을 위한 더 작은 부분들로 분할하도록 동작하는 고정 기능의 하드웨어 블록으로 구현된다.
태스크 관리자(와 그것의 기능)는, 필요한 경우에는, "분배된(distributed)" 방식으로, 예를 들면, "태스크 분배 네트워크"의 형태로 구현될 수도 있다. 이들 구성에서, 태스크 관리자는, 예를 들어, 수행할 태스크들을 실행을 위한 더 작은 그룹들로 점진적으로 분할하는, 예를 들면, 복수의 스테이지들 또는 레이어들을 구비할 수도 있다.
필요한 경우에는, 태스크 관리자와 프로세싱 코어 또는 코어들에 대한 태스크 분배에 대한 다른 구성이 사용될 수도 있다.
일 실시예에서, 태스크 관리자는, (예를 들어, 호스트 프로세서 상에서 실행되고 있는 어플리케이션들에 대해) 프로세싱 코어들에 의해 행해질 태스크들을 요구하는 호스트 프로세서(예를 들어, 호스트 CPU)로부터 태스크들을 수신한다. 태스크 관리자는, 호스트로부터 태스크들을 수신한 후, 이들 태스크와 관련된 프로세싱을 적절히 프로세싱 코어 또는 코어들에게 발행하게 된다. 호스트 프로세서는, 예를 들어, 태스크 명령들을 사용하여 태스크 관리자에게 태스크를 전달한다.
따라서, 일 실시예에서, 본 발명에서 설명하는 기술의 시스템은, 수행할 태스크들을 태스크 관리자에게 표시하여 프로세싱 코어들에 발행하도록 동작하는 호스트 프로세서를 더 구비한다.
일 실시예에서, 프로세싱 코어들은, 일 실시예에서는, 그래픽 프로세싱 유닛(GPU) 등의 동일한 전체 프로세싱 유닛의 일부이다. 따라서, 일 실시예에서, 시스템은 프로세싱 유닛과 통신하고 프로세싱 유닛에게 태스크를 송신하는 호스트 프로세서를 구비하고, 이 프로세싱 유닛은 프로세싱 코어 또는 코어들과 태스크 관리자를 구비한다.
태스크 관리자는 수행할 태스크에 대한 프로세싱을 임의의 적절한 방식으로 프로세싱 코어 또는 코어들에게 분배할 수 있다. 단지 한 개의 프로세싱 코어가 존재하는 경우에, 태스크 관리자는 수행할 태스크를 적절한 방식으로 프로세싱 코어에게 단순히 전달한다.
복수의 프로세싱 코어들이 존재하는 경우에, 태스크 관리자는, 일 실시예에서, 해당 태스크에 대한 프로세싱을 복수의 프로세싱 코어들 사이에서 분배한다. 이 경우, 필요한 경우에는, 서로 다른 프로세싱 코어들 사이에서 태스크에 대한 프로세싱의 분배가 행해질 수 있다. 예를 들어, 태스크에 대한 프로세싱이 식별가능한 부분들 또는 프로세싱의 세트들로, 예를 들어, 일 실시예에서 (워크 그룹들로 분할된 OpenCL 커널에 대한 경우에서와 같이) 식별가능한 별개의 스레드 그룹들로 이미 분할된 경우에, 태스크 관리자는 일 실시예에서 태스크의 기존의 분할을 사용하여 서로 다른 프로세싱 코어들 사이에서 태스크에 대한 프로세싱을 분배하도록 동작한다.
따라서, 일 실시예에서, 태스크에 대한 프로세싱은 분리된 별개의 스레드 그룹들(예를 들면, OpenCL 워크 그룹들)로 분할되고, 태스크 내부의 서로 다른 스레드 그룹들(워크 그룹들)이 서로 다른 프로세싱 코어들에 할당된다. 일 실시예에서는, 각각의 개별적인 스레드 그룹(워크 그룹)이 전체가 특정한 프로세싱 코어에 할당된다(즉, 개별적인 스레드 그룹(워크 그룹)이 복수의 프로세싱 코어들 사이에서 분할되지 않게 된다).
일 실시예에서, 태스크 관리자는 태스크를 스레드 그룹들로 분할한다. 따라서, 일 실시예에서, 태스크 관리자는 OpenCL NS Ranges를 받고 이것들을 프로세싱 코어(들)에 발행되는 워크 그룹들로 분할한다.
태스크 관리자는, 임의의 원하는 적절한 방식으로, 예를 들어, 적절한 태스크 제어 버스를 거쳐, 프로세싱 코어들과 통신한다.
수행하고자 하는 태스크는 해당 프로세싱 코어 또는 코어들에 의해 행해지는 임의의 적절한 원하는 태스크일 수 있다. 예를 들어, 각각의 태스크는 OpenCL "커널"일 수 있다(그리고, 일 실시예에서는 이것이 성립한다). 마찬가지로, 태스크는, Direct Compute에서의 커널 등과 같이, OpenCL 커널에 대응하는 구성요소가 될 수도 있다.
당업계에서 공지된 것과 같이, OpenCL API 하에서, "커널"은 다수회 호출되는 (보통 작은) 프로그램이다. 커널의 대표적인 용도는 다량의 연산을 병렬로 행하는 것으로, 이때 커널의 각각의 호출은 (예를 들어, 처리할 화상 또는 압축할 텍스처의 특정한 영역에 대해) 작은 부분의 연산만을 행한다. 각각의 커널 호출은 독립된 실행 스레드로서 실행되어도 되고, 커널 호출(따라서 스레드들)은 병렬로 실행되어도 된다.
OpenCL의 대표적인 용도는, 화상 처리(예를 들어, 필터링), 텍스처 또는 다른 데이터 어레이의 압축, 미분 방정식을 반복적으로 푸는 것, 반복적인 검색 처리 등의 고도의 병렬 데이터 처리 연산을 위해 그래픽 처리 유닛을 이용하는 것이다.
수행될 태스크는, 일 실시예에서는, 예를 들어, 일 실시예에서는 귀납적 알고리즘이고, 일 실시예에서는 병렬 검색인, 다수의 독립된 실행 스레드들 및/또는 스레드 그룹들의 실행을 요구하는 태스크이다. 병렬 검색의 경우에, 이 검색은, 단순한 무차별 검색(brute force searching) 또는 발견적교수법(heuristics) 기반의 검색(예를 들면, 시뮬레이티드 어닐링(simulated annealing)) 등의 임의의 원하는 형태의 검색일 수 있다. 일 실시예에서, 이것은, 태스크 종단점(endpoint)(예를 들면, 목표(goal))이 서로 다른 시기에 스레드 또는 스레드들 및/또는 스레드 그룹들에 의해 도달할 가능성이 큰 태스크이다(즉, 모든 독립적인 스레드들 및/또는 스레드 그룹들에 대해 태스크 종단점이 즉시 일어나지 않는다).
프로세싱 코어들에게(태스크 관리자에게) 발행되는 각각의 태스크는, 당업계에 공지된 것과 같이, 그것과 관련하여, 태스크의 정규 연산을 위해 실행되는 프로그램(명령들의 시퀀스)을 갖는다(예를 들어, 일 실시예에서는, 태스크가 실행되고 있을 때, 각각의 실행 스레드들은 해당 프로그램을 실행한다).
태스크 관리자로부터 태스크를 수신하여 실행하는 프로세싱 코어들은 해당 태스크(또는 코어가 실행하려는 태스크의 적어도 일부)를 행하기 위한 적절한 실행 스레드들을 실행하도록 동작해야 한다. 따라서, 예를 들어, OpenCL "커널"을 실행하는 경우에, 각각의 프로세싱 코어는 프로세싱 코어가 처리하려는 커널의 각각의 호출에 대해 스레드를 실행하게 된다. 이와 같은 경우에 각각의 스레드는 OpenCL 작업 항목에 대응한다.
개별적인 스레드들과 이들 개별적인 스레드들이 관련되는 태스크의 처리, 분배 및 식별을 용이하게 하기 위해, 일 실시예에서의 스레드는 그것들과 관련하여, OpenCL의 경우에 적절한 커널 호출 색인(invocation index: ID) 등의 적절한 색인들을 갖는다.
일 실시예에서 각각의 프로세싱 코어는, 태스크 관리자로부터 태스크 관련 명령들을 수신하고, 태스크에 대한 프로세싱을 실행하기 위한 스레드들을 해당 프로세싱 코어에 발행(및 제어)하도록 동작하는 스레드 실행 제어 유닛을 구비한다. 스레드 실행 제어 유닛은 일 실시예에서는, 한 개 이상의 스레드 그룹들(예를 들면, 워크 그룹들)을 갖고 그것과 관련된 프로세싱 코어에 대응하는 스레드들(작업 항목들)을 발행한다.
예외 처리기는 임의의 원하는 적절한 방식으로 구성 및 구현될 수 있다. 이 예외 처리기는 일 실시예에서는 프로세싱 코어들을 구비한 프로세싱 유닛, 예를 들면, GPU 상에서 실행된다. 일 실시예에서는, 예외와 마주치는 하드웨어 스레드 당 고유한 인스턴스의 예외 처리기가 존재한다. 따라서, 시스템 내부에는 복수의 인스턴스들의 예외 처리기(복수의 "예외 처리기들")가 존재해도 되고, 일 실시예에서는 존재한다. 또한, 예외 처리기는, 필요한 경우에는, 예를 들어, 함께 전체적인 "예외 처리기"를 제공하는(예외 처리 프로세스) 역할을 하는 전체 프로세싱 유닛(예를 들면, GPU) 및/또는 프로세싱 코어들의 서로 다른 프로세싱 스테이지들 및/또는 유닛들을 갖는, "분배된" 형태로 구현되어도 된다.
스레드들은 임의의 원하는 적절한 방식으로 방향전환되어 예외 처리기에 도달할 수 있다. 일 실시예에서는, 스레드가 그것의 현재 명령을 완료할 때, 이 스레드가 스레드 처리 계층구조(일 실시예에서는 스레드가 실행되고 있는 프로세싱 코어의 스레드 실행 제어 유닛) 내부의 지점을 통해 순환한 후, 예외(존재하는 경우에)에 작용하여 스레드를 예외 처리기로 방향전환하도록 구성이 이루어진다. 이와 같은 구성은, 스레드들이 효율적으로, 그러나 "느리게(lazy)" 예외 처리기에 이를 수 있게 한다.
예외 처리기는, 그것이 수신한 스레드들을 임의의 원하는 적절한 방식으로 처리할 수 있으며, 예외 처리기에게 방향전환된 스레드들을 처리하기 위해 임의의 원하는 적절한 방식으로 구성될 수 있다. 일 실시예에서, 예외 처리기에 의한 스레드의 처리는 스레드를 예외 처리기로 방향전환하게 만든 예외의 속성에 의존한다.
일 실시예에서, 예외 처리기는, (예를 들면, 일 실시예에서는, 스레드가 예외 처리기로 방향전환하게 만든 예외의 속성에 따라) 그것이 수신한 스레드와 관련하여 다음 중에서 한 개 이상, 일 실시예에서는 다음의 전체를 행할 수 있다: 스레드의 실행의 재개 및 스레드에 대한 추적 데이터(trace data)의 기억(일 실시예에서는 스레드의 메인 프로그램의 실행이 재개하도록 한다). 예외 처리기는, 일 실시예에서는, 적어도 보류 동작의 경우에, 해당 스레드 및/또는 태스크와 관련된 정보를 기억함으로써, 예를 들어, 필요한 경우에(즉시 또는 나중에), 스레드 및/또는 태스크가 재개될 수 있도록 할 수 있으며, 일 실시예에서는 재개되도록 한다.
예외 처리기가 추적 데이터를 기록하고 있는 경우에는, 이 추적 데이터가 일 실시예에서는 이 추적 데이터에 대한 목적지인 것으로 표시되는 적절한 메모리 위치(예를 들면, 버퍼)에 기록된다.
예외 처리기는 일 실시예에서는 이 예외 처리기가 수신한 스레드들을 처리하기 위한 한 개 이상의 프로그램을 실행한다. 일 실시예에서, 예외 처리기는, 예외 처리기가 스레드를 수신하여 처리할 때 이 스레드와 관련되는 태스크와 연관된 프로그램을 실행한다.
일 실시예에서는, 태스크의 정규 연산을 위해 실행할 프로그램(명령들의 시퀀스) 뿐만 아니라, 이와 같은 동작을 용이하게 하기 위해, 각각의 태스크는, 그것과 관련하여, 태스크와 관련된 스레드가 예외 처리기로 방향전환될 때 프로그램이 호출되는(실행되는) 스레드를 보류 및/또는 종결시키는 제 2 프로그램(명령들의 시퀀스)과, 예외 처리기로의 방향전환 후에 태스크와 관련된 스레드가 재개되는 경우에(재개될 때) 호출되는(실행되는) 제 3 프로그램을 더 갖는다.
따라서, 일 실시예에서, 태스크 관리자에게 발행된 각각의 태스크는, 3개의 프로그램, 즉 태스크의 정규 연산을 위해 호출될 프로그램, 태스크에 대한 스레드들이 예외 처리기로 방향전환되어 보류/종결될 때 호출될 프로그램, 및 예외 처리기로 방향전환된 스레드가 재개될 때 호출될 프로그램에 대한 참조를 포함한다(이 3개의 프로그램과 관련된다). 일 실시예에서, 이들 프로그램에 대한 참조(태스크와 관련된 프로그램의 식별정보(identity))는, 해당 태스크와 관련된 태스크 서술자 등의 메타 데이터로 표시된다.
예외 처리기는 임의의 원하는 적절한 방식으로 그것이 수신한 스레드와 관련하여 적절한 처리를 행하도록 구성될 수 있다. 예를 들어, 일 실시예에서는, (예를 들어, 한 개의 스레드에 의한 병렬 검색 또는 다른 목표의 도달이 완료하였기 때문에) 예외 처리기로 방향전환되는 태스크에 대한 스레드의 종결을 기동하기 위한 이벤트의 경우에, 일 실시예에서 예외를 기동하는 초기 스레드는 태스크의 관련된 내부 상태를 갱신하게 함으로써 예외를 식별한다(따라서, 해당 스레드들이 종결될 수 있다는 것을 표시한다). 그후, 이것은, 후속하는(관련된) 스레드들이 다음의 명령들을 위해 배정될 때, 이 후속하는 스레드들이 예외 처리기로 조건부로 방향전환되어 종결되게 한다.
예외 처리기는 일 실시예에서는, 예외 처리기로 스레드들의 방향전환을 기동한 예외에 근거하여 원하는 거동을 완료한다.
따라서, 일 실시예에서, 예외 처리기로의 방향전환이 한 개의 스레드에 의한 병렬 검색의 완료 또는 목표의 도달에 의한 것인 경우에는, 제 1 스레드가 예외를 기동할 때, 태스크 상태가 일 실시예에서는 이것을 표시하도록 갱신된 후, 예외 처리기(예외 처리 소프트웨어)가 일 실시예에서 이 상태를 이용하여 스레드의 방향전환 및 종결을 행한다.
예외 처리기로의 방향전환이 중지점(breakpoint) 또는 보류 동작으로 인한 경우에는, 일 실시예에서는 태스크와 관련된 상태가 기억되어 나중에 태스크가 재개될 수 있도록 한다. 이 경우에, 예외가 프로세싱 코어 명령에 의해 일어난 경우에는, 일 실시예에서는 메모리 내부의 값이 호스트 CPU 어플리케이션이 검사하도록 설정된다.
예외 처리기로의 방향전환이 추적 지점(trace point)으로 인한 경우에는, 예외 처리기는 일 실시예에서 추적 데이터를 (예를 들면, 상수 레지스터에 의해 참고되는) 첨부된 버퍼에 기록한 후, 메인 프로그램을 재개한다. 일 실시예에서, 추적은 실행중인(in flight) 모든 스레드를 위한 것이다(따라서, 스레드 "공간"(예를 들어, OpenCL에서 NDRange)에 걸친 태스크의 상태의 "스냅 숏(snap shot)"을 제공한다).
예외 처리기의 스레드의 방향전환 및 원인 예외 메시지의 (잠재적인) 브로드캐스트를 기동하는 예외는 임의의 원하는 적절한 형태의 예외(즉, 스레드가 대체 처리(alternative processing)(특수 처리)를 겪을 필요가 있다는 것을 표시하는 이벤트)일 수 있다.
본 출원인은, 본 발명에서 설명하는 기술이, 부정확한 장애(즉 모든 독립적인 스레드들 또는 스레드 그룹들에 즉시 발생할 필요가 없는 장애)가 일어난 경우에 예외 거동이나 검색 등의 태스크의 종결에 특히 유용하다는 것을 인식하였다. 따라서, 일 실시예에서는, 예외 처리기의 방향전환을 기동하는 예외는, 해당 태스크와 관련되는 다른 스레드들 또는 스레드 그룹들에 대해 반드시 즉시 또는 동시에 일어나지는 않으면서, 개별적으로 스레드에 대해 발생할 수 있는 이벤트이다.
또한, 본 발명에서 설명하는 기술은, 태스크에 대해 동작하고 있는 다른 스레드들 또는 스레드 그룹들에게 메시지로 보낼 필요가 있는 예외를 스레드가 실행하고 있다는 것을 프로그래머가 프로그램에서 식별할 수 있는 구성을 용이하게 한다. 따라서, 일 실시예에서, 예외 처리기로의 스레드의 방향전환과 원인 예외 메시지의 (잠재적인) 브로드캐스트를 기동하는 예외는, (프로그래머에 의해) 태스크에 대한 명령 스트림에 포함되는 예외 명령을 포함한다. 이와 관련하여, 본 발명에서 설명하는 기술은, 명령 스트림에 적절한 추적 지점 명령들을 포함시켜 태스크에 실행되는 복수의 독립적인 스레드들에 의한 태스크 진행 정보의 기록을 기동함으로써, 태스크 진행의 효율적인 추적을 위해 사용될 수 있다는 것을 알 수 있다.
일 실시예에서, 예외는, 검색 처리 또는 다른 귀납적 알고리즘의 완료 등과 같이, 스레드가 필요한, 일 실시예에서는 선택된, 일 실시예에서는 사전에 결정된 조건에 도달하는 것과, 스레드가 그것의 실행 플로우에서 중지점에 도달하는 것과, 스레드가 그것의 실행 플로우에서 보류점(suspend point)에 도달하는 것과, 스레드가 그것의 실행 플로우에서 추적 지점에 도달하는 것 중에서 한 개이다.
예외는, 일 실시예에서는, 스레드가 필요한 전제조건에 도달한 것을 나타내는 명령의 완료, 중지점 명령, 추적 지점 명령 등과 같이, 스레드가 실행하고 있는 명령에 의해 기동된다.
일 실시예에서는, 예외가 (스레드의 명령 시퀀스의 적절한 명령에 도달하는 스레드에 의해) 스레드에 대한 명령 시퀀스 내부의 적절한 명령에 의해 호출될 뿐만 아니라, 예외는 호스트 프로세서에 의해 프로세싱 코어들에 대한 태스크 관리자에게 발행된 명령에 의해 호출될 수도 있다. 이와 같은 경우에, 호스트 프로세서는 태스크 관리자에게 예외 기동 명령을 발행하고, 그후 태스크 관리자는 호스트 프로세서로부터의 예외 명령의 수신에 응답하여 적절히 프로세싱 코어 또는 코어들에게 원인 예외 이벤트 메시지를 브로드캐스트하게 된다.
따라서, 일 실시예에서는, 2가지 방법으로, 즉 (스레드가 실행하고 있는 명령들의 스트림 내부의) 프로세싱 코어 명령 스트림의 명령에 의해, 또한 호스트 프로세서에 의해 태스크 관리자에게 발행된 명령에 의해, 호출될 수 있다.
프로세싱 코어 상에서 실행되고 있는 스레드가 예외와 마주칠 때의 예외 이벤트는 임의의 적절한 원하는 방식으로 태스크 관리자에게 표시(전달)될 수 있다. 일 실시예에서, 이벤트는 먼저 프로세싱 코어의 스레드 실행 제어 유닛(존재하는 경우에는)에 전달되고, 그후 이 스레드 실행 제어 유닛에 의해 (예를 들어, 태스크 제어 버스를 거쳐) 태스크 관리자에게 전달된다.
그후, 예외 이벤트 표시를 수신하면, 태스크 관리자는 원인 예외 메시지를 프로세싱 코어들 중에서 적어도 한 개에 브로드캐스트한다. 복수의 프로세싱 코어들이 존재하는 경우에는, 원인 예외 메시지가 복수의 프로세싱 코어들 중에서 한 개에만, 또는 선택된 수(그러나, 전체는 아니다)의 프로세싱 코어들에만 전송될 수도 있지만, 일 실시예에서는 모든 프로세싱 코어들(각각의 프로세싱 코어)에 브로드캐스트된다.
원인 예외 메시지는, 임의의 적절한 원하는 방식으로, 예를 들면, 태스크 관리자와 프로세싱 코어(들) 사이의 버스 접속을 거쳐, 프로세싱 코어 또는 코어들에게 브로드캐스트될 수 있다.
프로세싱 코어는, 태스크 관리자로부터 브로드캐스트된 상기 원인 메시지를 수신하면, 원인 예외 메시지가 적용되는 현재 실행을 겪는 스레드들을 임의의 적절한 원하는 방식으로, 예를 들어, 원인 예외 메시지와 관련된 태스크 식별 정보에 근거하여, 식별하도록 동작할 수 있다. 일 실시예에서는, 프로세싱 코어의 스레드 실행 제어 유닛(존재하는 경우에는)이 원인 예외 메시지가 적용되는 스레드들을 식별한다.
프로세싱 코어는 마찬가지로, 원인 예외 메시지가 적용되는 것으로 식별된 현재 실행되고 있는 모든 스레드들을 예외 처리기로 임의의 원하는 적절한 방식으로 방향전환하도록 동작할 수 있다.
일 실시예에서, 일 실시예에서 예외 이벤트를 기동하는 스레드를 실행하고 있는 프로세싱 코어는, 스레드로부터 예외 이벤트 표시를 수신하면, 태스크 관리자로부터 브로드캐스트된 상기 원인 메시지의 수신을 대기하지 않고, 예외 이벤트가 적용되는 프로세싱 코어가 실행하고 있는 스레드들을 즉시 식별하고, 이들 스레드들을 강제로 예외 처리기 내부로 전달한다.
스레드가 예외와 마주칠 때마다 본 발명에서 설명하는 기술의 동작을 수행하는 것이 가능할 수도 있지만, 일 실시예에서는, 본 발명에서 설명하는 기술의 방식으로의 동작(즉, 예외 이벤트의 태스크 관리자에 대한 표시와 그후의 원인 예외 메시지의 브로드캐스트)은 특정한, 일 실시예에서는 선택된 예외 이벤트(예외의 형태)에 대해서만 행해진다. 따라서, 이와 같은 구성은, 예를 들어, 마주친 예외가 해당 스레드에만 적용되는 경우에, 시스템이 예외 이벤트 메시지를 브로드캐스트하지 못하게 할 수 있다.
이와 같은 동작은 필요에 따라 달성된다. 일 실시예에서, 스레드가 실행하고 있는 명령 시퀀스 내부의 예외를 기동하는 명령은, (기동되는 경우에) 예외가 예외 이벤트 메시지의 브로드캐스트도 기동해야 하는지 여부를 표시하도록 구성된다. 예를 들어, 일 실시예에서는, "예외" 명령은, 설정된 경우에 예외 이벤트 메시지의 브로드캐스트를 기동하는 변경자(modifier) 또는 플래그를 포함할 수도 있다.
따라서, 일 실시예에서, 브로드캐스트 예외 이벤트 메시지는 해당 태스크와 관련된 전체가 아닌 일부의 스레드들, 및/또는 해당 태스크 내부의 스레드들의 그룹들에 적용될 수 있다. 일 실시예에서, 시스템은, 스레드당(per-thread) 예외, 스레드 그룹(예를 들어, 워크 그룹) 예외, 태스크 예외 및 태스크 연쇄(chain) 예외(즉, 복수의 태스크들이 시퀀스로 함께 연관 또는 "연쇄화된" 예외) 중에서 한 개 이상, 일 실시예에서는, 전체를 지원한다. 특정한 태스크 및/또는 태스크들의 연쇄 내부의 서로 다른 해상도(resolution)들의 스레드에 예외들이 브로드캐스트(따라서 적용)되도록 허용하는 것은, 태스크(또는 태스크들) 내부에서 다양한 해상도들의 스레드들에 대한 추적이 발생될 수 있도록 하므로, 예를 들어, 추적에 유리하다.
마찬가지로, 이와 같은 동작은 필요에 따라 달성될 수 있지만, 일 실시예에서는, 스레드가 실행하고 있는 명령 시퀀스 내부의 예외를 기동하는 명령 및/또는 브로드캐스트 예외 이벤트 메시지는(일 실시예에서는 모두가), 예를 들어 그것이 적용하는 스레드 "해상도"를 표시하도록 구성되고, 일 실시예에서는, 그것이 스레드 그룹(워크 그룹), 태스크 또는 태스크들의 연쇄에 적용되는지(또는 한 개의 스레드에만 적용되는지) 여부를 표시하도록 구성된다. 예를 들어, 브로드캐스트 메시지는 워크 그룹, 태스크, 또는 연쇄에 도달하도록 변형되어도 된다(또는 예외가 한 개의 스레드에만 적용되도록 의도되는 경우에는 변형되지 않는다).
따라서, 일 실시예에서, 예외 명령들은 태스크에 대한 스레드들에 의해 실행할 명령 시퀀스 내부에 포함될 수 있으며, 이 예외 명령들은, 예외가 해당 스레드에만 적용되는지, 또는 나머지 스레드들에 브로드캐스트되어야 하는지를 표시할 수 있다. 일 실시예에서, 예외 명령은, 나머지 스레드들에 브로드캐스트될 것인지 여부와, 어떤 레벨의 스레드 그룹에 예외가 브로드캐스트되어야 하는지(즉, 예외가 적용되는 범위 또는 "스코프(scope)"도 표시할 수 있다.
예외를 기동한 스레드가 속하는 스레드 그룹(워크 그룹)에만 예외를 적용하는 상황에서, 일 실시예에서는, 예외가 해당 프로세싱 코어 내부의 스레드 그룹에 브로드캐스트되지만, (프로세싱 코어 외부의) 태스크 관리자로 전달되지 않는다.
일 실시예에서, 브로드캐스트 예외 이벤트 메시지 및 예외가 처음에 태스크에 대한 다음의 더 큰 그룹의 스레드들에(예를 들어, 예외를 기동한 스레드가 속하는 워크 그룹에) 적용되고, 그후, 이 스레드 그룹에 있는 모든 스레드들(예를 들면, 모든 워크 그룹 스레드들)이 동일한 예외 상태를 갖고 종료하는 경우에, 예외 브로드캐스트가 다음의 더 높은 레벨의 스레드 그룹으로(예를 들어, 일 실시예에서는 해당 태스크로) 전파되도록, 시스템이 더 구성되거나 이와 달리 구성된다.
또한, 예외를 기동한 스레드가 예외 처리기로부터 복귀되는지(즉, 그것의 처리를 재개하는지) 여부에 근거하여, 예외 이벤트 메시지의 브로드캐스트를 제어하는 것도 가능하다(일 실시예에서는 이와 같이 제어한다). 이와 같은 경우에, 예외를 기동한 스레드가 예외 처리기로부터 복귀되는 경우에, 예외는 일 실시예서는 다른 스레드들에게 브로드캐스트되지 않지만, 스레드가 예외 처리기에서 종결되는 경우에는, 예외는 일 실시예에서 다른(일 실시예에서는 나머지 모든) 스레드들에게 브로드캐스트된다.
한 개의 스레드에만(예를 들면, 추적 지점) 적용되는 예외의 경우에, 이 한 개의 스레드가 예외를 발생하면, 스레드가 예외 처리기로 점프하며, 예를 들어, 예외 처리기로부터 복귀하거나 종결된다.
모든 관련된 스레드들이 예외 처리기로 방향전환된 후, 모든 스레드들이 종결되고, 모든 예외 처리기들이 종료하면, 관련된 워크 그룹, 스레드 그룹, 태스크 및/또는 태스크 연쇄가 종결되거나, 또는 예외 명령으로부터의 복귀가 발행되는 경우에는 이것들이 재개한다(예외 처리기는 일 실시예에서는 예외 처리기로 방향전환된 스레드들의 정규 처리를 재개하는 예외 명령으로부터의 복귀를 실행할 수 있다).
본 발명에서 설명하는 기술은 적절히 구성된 마이크로프로세서 기반의 시스템에서 구현될 수 있다.
본 발명에서 설명하는 기술의 다양한 기능은 임의의 원하는 적절한 방식으로 행해질 수 있다. 예를 들면, 본 발명에서 설명하는 기술의 기능은 필요에 따라 하드웨어 또는 소프트웨어로 구현될 수 있다. 따라서, 예를 들어, 달리 언급하지 않는 한, 본 발명에서 설명하는 기술의 다양한 기능 구성요소 및 "수단"은, 원하는 방식으로 동작하도록 프로그래밍될 수 있는 적절한 전용 하드웨어 구성요소 및/또는 프로그래머블 하드웨어 구성요소와 같이, 다양한 기능을 행하도록 동작가능한 적절한 프로세서 또는 프로세서들, 제어기 또는 제어기들, 기능 유닛, 회로, 처리 로직, 마이크로프로세서 배치 등을 구비한다.
또한, 본 발명의 기술분야의 당업자에게 있어서 자명한 것과 같이, 본 발명에서 설명하는 기술의 다양한 기능 등은 특정한 프로세서 상에서 복제되거나, 및/또는 병렬로 수행되어도 된다는 점에 주목하기 바란다. 마찬가지로, 다양한 처리 스테이지는, 필요에 따라 처리회로를 공유해도 된다.
전술한 특정한 기능을 행하는데 필요한 하드웨어에 대해, 마이크로프로세서 시스템은 마이크로프로세서 시스템이 구비한 통상적인 기능 유닛들 중에서 한 개 이상 또는 전체를 구비할 수 있다.
일 실시예에서, 마이크로프로세서 시스템은, 본 발명에서 설명하는 데이터를 기억하고 및/또는 본 발명에서 설명하는 프로세스를 실행하기 위한 소프트웨어를 기억하는 한 개 이상의 메모리 또는 메모리 소자들을 구비하고, 및/또는 이것들과 통신한다.
또한, 본 발명이 속한 기술분야의 당업자에게 자명한 것과 같이, 본 발명에서 설명하는 기술의 모든 실시예들은 필요에 따라 전술한 본 발명의 특징들의 한 개 이상 또는 전체를 포함할 수 있고 바람직하게는 포함한다.
본 발명에서 설명하는 기술에 따른 방법은, 소프트웨어, 예를 들면, 컴퓨터 프로그램을 적어도 일부 사용하여 구현되어도 된다. 따라서, 또 다른 실시예에서 볼 때, 본 발명에서 설명하는 기술은 데이터 프로세서에 설치되었을 때 본 발명에서 설명한 방법을 행하도록 명시적으로 구성된 컴퓨터 소프트웨어를 제공하고, 컴퓨터 프로그램은 프로그램이 데이터 프로세서 상에서 실행될 때 전술한 본 발명의 방법을 행하는 컴퓨터 소프트웨어 코드를 포함하고, 컴퓨터 프로그램은 이 프로그램이 데이터 처리 시스템 상에서 실행될 때 전술한 본 발명의 방법 또는 방법들의 모든 스텝들을 행하도록 구성된 코드를 포함한다. 데이터 프로세서는 마이크로프로세서 시스템, 프로그래머블 FPGA(field programmable gate array) 등이어도 된다.
또한, 본 발명에서 설명하는 기술, 프로세서 또는 데이터 프로세서를 구비한 마이크로프로세서 시스템을 동작하도록 사용될 때, 상기 데이터 프로세서와 연계하여, 상기 프로세서, 또는 시스템이 본 발명에서 설명하는 기술의 방법의 단계들을 행하도록 하는 소프트웨어를 포함하는 컴퓨터 소프트웨어 기록매체로 더 확장된다. 이와 같은 컴퓨터 소프트웨어 기록매체는, ROM 칩, CD ROM, RAM, 플래시 메모리 또는 디스크 등의 물리적인 기억매체일 수도 있으며, 또는 선로를 거친 전자 신호, 광학 신호, 위성을 등에 대한 무선신호 등의 신호일 수도 있다.
더구나, 본 발명에서 설명하는 기술의 방법의 모든 단계들이 컴퓨터 소프트웨어에 의해 실행될 필요는 없다는 것이 명백하므로, 더 넓은 국면에서, 본 발명에서 설명하는 기술은, 본 발명에서 설명한 방법의 단계들 중에서 적어도 한 개를 행하는 컴퓨터 소프트웨어와 컴퓨터 소프트웨어 기록매체 상에 설치된 소프트웨어를 제공한다.
따라서, 본 발명에서 설명하는 기술은 컴퓨터 시스템에서 사용되는 컴퓨터 프로그램 제품으로서 적절히 구현되어도 된다. 이와 같은 구현은, 예를 들어 디스켓, CD-ROM, ROM, RAM, 플래시 메모리 또는 하드디스크 등의 컴퓨터 판독가능한 매체와 같은 유형의 비일시적인 매체 위에 고정된 일련의 컴퓨터 판독가능한 명령들을 포함해도 된다. 또한, 이와 같은 구현은, 모뎀이나 다른 인터페이스 장치를 거쳐, 광 또는 아날로그 통신 라인을 포함하는 유형의 매체를 거쳐, 또는 적외선 또는 다른 전송 기술을 포함하는 무선 기술을 사용하여 무형으로 컴퓨터 시스템에 송신가능한 일련의 컴퓨터 판독가능한 명령들을 포함할 수도 있다. 이들 일련의 컴퓨터 판독가능한 명령들은 본 발명에서 전술한 기능의 전체 또는 일부를 구현한다.
본 발명의 기술분야의 당업자에게 있어서, 이와 같은 컴퓨터 판독가능한 명령들이 다수의 컴퓨터 아키텍처 또는 운영체계와 사용되는 다수의 프로그래밍 언어로 기록될 수 있다는 것은 자명하다. 더구나, 이와 같은 명령은, 반도체, 자기 또는 광학을 포함하는 현재 및 미래의 메모리 기술을 사용하여, 또는 광, 적외선 또는 마이크로웨이브를 포함하는 현재 및 장래의 통신기술을 이용하여 전송되어 기억될 수도 있다. 이와 같은 컴퓨터 프로그램은, 예를 들어 수축 포장된 소프트웨어와 같이 첨부된 인쇄되거나 전자 문서와 함께 착탈가능한 매체로서 배포되거나, 예를 들어, 시스템 ROM이나 고정 디스크와 같이 컴퓨터 시스템에 미리 로드되거나, 예를 들어 인터넷이나 월드 와이드 웹 등의 네트워크를 거쳐 서버 또는 전자 게시판으로부터 배포될 수도 있다.
이하, 본 발명에서 설명하는 기술의 다수의 실시예들을 설명한다. 본 실시예들은 주로 OpenCL 개념 및 용어를 참조하여 설명하지만, 본 실시예들(및 본 발명에서 설명하는 기술)은 이에 대응하여 행해질 수 있는 다른 형태의 프로세싱에도 마찬가지로 적용될 수 있다는 것은 본 발명이 속한 기술분야의 당업자에게 있어서 자명하다.
도 1은 본 발명에서 설명하는 기술의 방식으로 동작하는 예시적인 마이크로프로세서 시스템(1)을 나타낸 것이다.
도 1에 도시된 것과 같이, 마이크로프로세서 시스템(1)은, 호스트 프로세서(2)와, (예를 들어, 호스트 프로세서(2) 상에서 실행되고 있는 어플리케이션들에 대해) 호스트 프로세서(2)로부터의 명령에 응답하여 처리 동작을 행하는 그래픽 프로세싱 유닛(GPU)(3)을 구비한다.
GPU(3)는 (이 경우에는 셰이더 코어의 형태를 갖는) 다수의 프로세싱 코어들(4)을 구비한다. GPU(3)는 도 1에 도시된 것보다 많거나 적은 셰이더 코어들(4)을 구비해도 되고, 일부 실시예에서는 한 개의 셰이더 코어(4)만을 구비한다. (OpenCL 용어에서는, 각각의 셰이더 코어(4)가 OpenCL "산출 유닛"에 대응하고, GPU(3)는 OpenCL "디바이스"에 대응한다).
그래픽 프로세싱 코어(3)는, 태스크 관리 유닛으로서의 역할을 하여 호스트 프로세서(2)에서 수신된 프로세싱 태스크들을 셰이더 코어들(4)에게 분배 및 발행하는 잡(태스크) 관리자(5)를 더 구비한다. 태스크 관리자(5)는, 태스크들에 대한 프로세싱을 태스크(잡) 제어 버스(7)를 거쳐 셰이더 코어들(4)의 각각의 스레드 실행 제어 유닛들(산출 종단점)(6)에 분배한다. 태스크 관리자(5)는, 예를 들어, 적절히 프로그래밍된 마이크로콘트롤러(MCU)로 구현되어도 된다.
본 실시예에서, 호스트 프로세서(2)에 대한 태스크들은 GPU(3)의 셰이더 코어들(4) 상에서 실행 스레드들을 실행함으로써 행해진다. GPU(3)는 코어당 복수의 독립적인 하드웨어 스레드들(예를 들어, 셰이더 코어(4)당 256개까지의 독립적인 스레드들)을 실행할 수 있다. 셰이더 코어들(4)은 실행할 준비가 된 태스크들의 파이프라인을 각각 갖고, 이들 태스크 각각은 스레드들이 이용가능하게 될 때(즉, 그들의 이전의 작업을 종료할 때) 작업을 독립된 스레드들로 스폰(spawn)한다. 셰이더 코어 상에서 실행될 때 스레드들은 셰이더 명령들(즉, OpenCL에서의 커널 명령들)의 시퀀스를 실행하게 된다.
태스크를 GPU(3)에 의해 행하고자 할 때(예를 들어, 호스트 프로세서(2)로부터의 명령들을 거쳐 GPU(3)에게 전달될 때), 태스크 관리자(5)는 태스크를 각각의 셰이더 코어들(4)에게 발행되는 스레드 그룹들로 분할한다. (따라서, OpenCL 산출 태스크의 경우에는, 태스크 관리자(5)가 태스크에 대한 OpenCL NDRange를 취하고, 그것을 각각의 셰이더 코어들(4)에게 발생되는 워크 그룹들로 분할하게 된다.)
태스크 관리자(5)는 각각의 스레드 그룹들(워크 그룹들)을 태스크 제어 버스(7)를 거쳐 각각의 셰이더 코어들(4)의 각각의 산출 종단점들(스레드 실행 제어 유닛들)(6)에게 발행한다. 그후, 셰이더 코어(4)의 각각의 스레드 실행 제어 유닛(산출 종단점들)(6)은 그것의 수신한 스레드 그룹 또는 그룹들(워크 그룹들)을 취하고, 그것의 대응하는 셰이더 코어 위에 대응하는 스레드들(작업 항목들)을 발생하여 실행한다.
마이크로프로세서 시스템(1)은, 그들의 처리에서 예외와 마주치는 스레드들이 (당업계에 공지된) 특수한 처리를 위해 방향전환되는 예외 처리기를 더 구비한다. 예외 처리기는 소프트웨어 루틴을 실행하여 그 자신에게 방향전환된 스레드들을 적절히 처리한다.
본 실시예에서, 예외 처리기와 예외 처리 프로세스는 마이크로프로세서 시스템(1)의 다수의 구성요소로 그리고 이들 구성요소를 사용하여 구현된다. 이것을 예시하기 위해 예외 처리 "부품들" 8, 9 및 10을 도 1에 개략적으로 도시하였다.
특히, 태스크 관리자(5) 및 스레드 실행 제어 유닛(6)은 예외 메시지들을 브로드캐스트하는 역할을 하고, 그후 프로세싱 코어들(4) 내부의 예외 처리 하드웨어는 브로드캐스트 예외 메시지들과 이들 메시지와 연관된 상태 또는 스레드들과 연관된 상태에 근거하여 스레드들을 예외 처리 소프트웨어 루틴으로 방향전환하는 역할을 한다. 예외 처리를 위한 소프트웨어 루틴들은 각각의 프로세싱 코어들(4) 상에서 실행되고, 예외 처리 루틴들이 완료하면, 스레드 실행 제어 유닛(6) 내부에 프로세싱 코어 레벨 예외 처리를 완료하는 고정된 기능(예를 들면, 보류 동작)의 하드웨어가 존재한다. 각각의 스레드 실행 제어 유닛(6) 상에서 코어 레벨 예외 처리가 완료되면, 태스크 관리자(5)는 이에 따라 태스크 레벨 실행 처리를 완료한다(예를 들어, 태스크를 보류 또는 종결한다).
예외 처리기 및 예외 처리 프로세스에 대한 다른 구성도 물론 가능하다.
본 실시예에서의 예외 처리기는, 마주친 예외의 종류에 따라 예외 처리기로 방향전환되는 스레드들을 처리한다. 예를 들어, 예를 들어, 예외가 병렬 검색의 완료나 한 개의 스레드에 의한 목표 도달에 의한 경우에는, 이것을 표시하도록 메모리 내부의 값이 설정되고, 예외 처리기(예외 처리 소프트웨어)는 이 값을 검사하고, 이 값이 적용되는 스레드들을 즉시 종결한다.
예외가 중지점 또는 보류 동작으로 인한 경우에는, 예외 처리기가 태스크와 관련된 상태를 기억하여 나중에 그것이 재개될 수 있도록 한다. 명령을 실행하는 스레드에 의해 이것이 기동되는 경우에는, 호스트 CPU 어플리케이션이 검사하도록 메모리 내부에 값이 더 설정된다.
예외가 추적 지점으로 인한 경우에는, 예외 처리기는 추적 데이터를 버퍼에 기록한 후, 메인 프로그램 실행을 재개한다. 이 추적은 실행중인(in flight) 모든 스레드를 위한 것이다(본 발명에서 설명하는 기술의 동작은 이와 같은 형태의 동작을 용이하게 한다).
도 2는 전술한 실시예의 마이크로프로세서 시스템의 다양한 구성요소들의 동작을 개략적으로 나타낸 것이다. 도 2에는 한 개의 셰이더 코어(4)와 산출 종단점(스레드 실행 제어 유닛)(6)만을 도시하였지만, GPU(3)의 셰이더 코어들(4) 및 산출 종단점들(6)의 각각은 이에 대응하는 방식으로 동작한다는 것을 알 수 있다.
본 실시예들의 방식에서 도 1에 도시된 마이크로프로세서 시스템(1)의 동작시에, 호스트 프로세서(2)는 태스크를 행하도록 하는 명령들을 GPU(2)의 태스크 관리자(5)에게 발행한다. 그후, 태스크 관리자(5)는 행하고자 하는 태스크를 적절한 스레드 그룹들로 분할하고, 이들 스레드 그룹들을 각각의 셰이더 코어들의 스레드 실행 제어 유닛들(6)에 발행한다. 그후, 각각의 스레드 실행 제어 유닛(6)은 그것의 스레드 그룹(들)을 취하고, 스레드 그룹(들)으로부터의 스레드들을 적절히 그 자신의 셰이더 코어(4)에 발행하여 실행한다.
본 실시예에서, GPU(3)에 발행되는 각각의 태스크는 3개의 프로그램(실행할 명령들의 시퀀스)에 대한 참조를 포함한다. 첫 번째 프로그램은 태스크의 정규 연산을 위해 호출되는 프로그램이다(즉, 태스크가 실행되고 있을 때, 태스크를 실행하는 각각의 스레드가 이 프로그램을 실행한다). 두 번째 프로그램은, 스레드들이 예외 처리기로 방향전환되어 보류 또는 종결될 때 예외 처리기 내부에서 호출되는 프로그램이다. 세 번째 프로그램은 스레드들이 예외 처리기로 방향전환된 후 그들의 정규 처리를 재개하고자 할 때 호출되는 프로그램이다. 이들 프로그램 참조들은 해당 태스크와 관련된 메타데이터("태스크 헤더")로 표시된다.
도 2는 태스크 관리자(5)가 태스크를 각각의 셰이더 코어들(4)에게 발행하여(20), 각각의 셰이더 코어들(4)의 스레드 실행 제어 유닛들(산출 종단점들)(6)이 그들 각각의 셰이더 코어들(4)에게 스레드들을 발행하여(21) 실행하는(22) 처리를 나타낸 것이다. 일 실시예에서, 셰이더 코어들(4) 상에서 실행되고 있는 스레드들은 진정으로 독립된 하드웨어 스레드들이다. 본 발명은, 특히, 예를 들어 소위 "워프들" 또는 "파면들(wavefront)들"로, 처리되고 있는 복수의 독립된 그룹들 또는 세트들의 스레드들을 갖는 구성에서, 매우 유용하게 사용될 수도 있다.
도 2에 도시된 것과 같이, 셰이더 코어(4)가 그것의 활성 스레드들을 실행하고 있을 때(22), 어떤 시점에서, 실행하고 있는 스레드가 그것의 명령 시퀀스에서 예외와 마주치는(23) 것으로 가정한다. 이와 같은 예외는, 예를 들면, 트랩(trap), 중지점, 보류점 또는 추적 지점 명령에 의해, 또는 병렬 검색의 완료 또는 스레드에 의한 목표의 도달로 인해 기동된다.
따라서, 예외(23)에 응답하여, 예외와 마주친 스레드는, 도 2에 도시된 것과 같이, 예외(보류)[?] 처리기(24)로 방향전환된다(즉, 스레드가 실행하고 있는 명령이 예외 처리기로 분기된다). 그러나, 본 발명에서 설명하는 기술에 따르면, 예외는 해당 셰이더 코어(4)에 대한 스레드 실행 제어 유닛(산출 종단점)(6)에도 전달된다(25).
이에 응답하여, 도 2에 도시된 것과 같이, 스레드 실행 제어 유닛(산출 종단점)(6)은 이에 따라 예외 이벤트를 태스크(잡) 관리자(5)에게 전달한다. 그후, 이와 같은 예외 이벤트 메시지의 수신에 응답하여, 태스크 관리자(5)는 각각의 셰이더 코어(4)의 스레드 실행 제어 유닛(산출 종단점)(6)에게 "원인 예외 메시지"를 브로드캐스트한다(27).
그후, 각각의 셰이더 코어 스레드 실행 제어 유닛(산출 종단점)(6)은 그것의 셰이더 코어가 현재 실행하고 있으며 원인 예외 메시지와 관련되는 스레드들을 (적절한 태스크 식별자를 참조하여) 식별한 후, 원인 예외 메시지(28)를 이들 모든 스레드들에게 브로드캐스트(28)하여 이들 스레드들을 예외 처리기로 방향전환한다. 이에 따라, 한 개의 스레드에 의해 발생된 예외가 태스크 내부의 모든 스레드들에 브로드캐스트될 수 있으며 브로드캐스트된다.
도 2에 도시된 것과 같이, 태스크에 대한 모든 관련된 스레드들이 특정한 셰이더 코어의 예외 처리기로 방향전환될 때까지, 그리고 이에 따라서 태스크에 대한 모든 셰이더 코어 처리 스레드들이 보류되고 드레인(drain)(30)될 때까지, 이와 같은 동작이 계속된다(29). 따라서, 모든 셰이더 코어들(4)이 모든 스레드들을 예외 처리기 내부로 강제로 전달하고, 모든 스레드들이 예외 처리기를 벗어나면, 태스크가 종결된다.
도 2에 도시된 것과 같이, 셰이더 코어 내부의 스레드들에 대해 예외 처리 프로세스가 완료하면(31), 이것이 다시 셰이더 코어의 스레드 실행 제어 유닛(6)에게 표시된다. 이에 따라, 셰이더 코어에 대한 모든 스레드 그룹들이 그들의 예외 처리를 완료하면(33), 이것이 다시 태스크 관리자(5)에게 표시되고, 이에 따라, 해당 모든 태스크에 대한 예외 처리(이때 예외는 복수의 태스크와 관련된다)가 완료하면(35), 이것이 다시 호스트에게 표시된다(36).
모든 관련된 스레드들이 예외 처리기로 방향전환된 후, 모든 스레드들이 종결되고, 모든 예외 처리기들이 종료하면, 관련된 워크 그룹, 스레드 그룹, 태스크 및/또는 태스크 연쇄가 종결된다. 이와 달리, 예외 명령으로부터의 복귀가 발행되는 경우에는 이것들이 재개한다(예외 처리기는 일 실시예에서는 예외 처리기로 방향전환된 스레드들의 정규 처리를 재개하는 예외 명령으로부터의 복귀를 실행할 수 있다).
도 3은 본 발명에서 설명하는 기술의 일 실시예에서 도 1에 도시된 마이크로프로세서 시스템(1)의 동작을 나타낸 흐름도이다.
도 3에 도시된 것과 같이, 태스크에 대한 스레드가 예외와 마주치면(스텝 50), 스레드가 예외 처리기(24)로 방향전환되고, 해당 셰이더 코어에 대한 스레드 실행 제어 유닛(산출 종단점)(6)으로 예외 이벤트가 표시된다(스텝 51). 그후, 스레드 실행 제어 유닛(산출 종단점)(6)은 예외가 적용되는 셰이더 코어에 의해 현재 실행되고 있는 스레드들을 식별하고, 이들 스레드들을 예외 처리기(24)로 방향전환한다(스텝 52). 이 스레드 실행 제어 유닛도 마찬가지로 예외 이벤트를 태스크 관리자(5)에게 표시한다(스텝 52).
스레드 실행 제어 유닛으로부터의 예외 이벤트 표시에 응답하여, 태스크 관리자(5)는 원인 예외 메시지를 모든 셰이더 코어들에게 브로드캐스트한다(스텝 53).
브로드캐스트된 상기 원인 예외 메시지에 응답하여, 모든 셰이더 코어들의 스레드 실행 제어 유닛들(산출 종단점들)은, 이 원인 예외 메시지가 적용되는 그들의 제어하에 있는 스레드들을 식별하고, 이에 따라 이들 스레드들을 예외 처리기로 방향전환한다(스텝 54).
예외 처리기는, 모든 방향전환된 스레드들이 완료할 때까지, 그것으로 방향전환된 모든 스레드들을 적절히 처리한다(스텝 55).
본 실시예에서, 스레드가 실행하고 있는 명령 시퀀스에서 예외를 기동하는 명령은, 예외가(기동되는 경우에) 예외 이벤트 메시지의 브로드캐스트도 기동해야 하는지 아닌지를 표시하도록 구성된다. 이것을 용이하게 하기 위해, 이와 같은 각각의 "예외"를 일으키는 명령은, 설정되는 경우에 예외 이벤트 메시지의 브로드캐스트를 기동하는 변경자 또는 플래그를 포함한다. 따라서, 이와 같은 구성은, 예를 들어, 마주친 예외가 해당 스레드에만 적용가능한 경우에, 시스템이 예외 이벤트 메시지를 브로드캐스트하지 못하게 할 수 있다.
스레드가 실행하고 있는 명령 시퀀스 내부에 예외를 기동하는 명령은, 예외가 적용되는 스레드 "해상도"(예외의 스코프 또는 범위)를 표시하도록 더 구성되고, 예를 들어, 일 실시예에서는, 예외가 스레드 그룹(워크 그룹), 태스크, 또는 태스크들의 연쇄에 적용되는지(또는 한 개의 스레드에만 적용되는지) 여부를 표시하도록 더 구성된다.
브로드캐스트 예외 이벤트 메시지는 브로드캐스트가 적용되는 스레드 "해상도"를 표시하도록 더 구성된다. 예를 들어, 브로드캐스트 메시지는 워크 그룹, 태스크 또는 연쇄에 도달하도록 수정되어도 된다(또는 예외가 한 개의 스레드에만 적용되도록 의도된 경우에는 수정되지 않는다).
이와 같은 구성은, 해당 태스크 또는 태스크들에 관련되는 전체가 아닌 일부의 스레드들, 및/또는 해당 태스크 또는 태스크들 내부의 서로 다른 그룹의 스레드들에 적용되는 예외 이벤트 메시지의 브로드캐스팅을 용이하게 한다. 본 실시예에서, 시스템은, 스레드당 예외, 스레드 그룹(예를 들어, 워크 그룹) 예외, 태스크 예외 및 태스크 연쇄 예외(즉, 복수의 태스크들이 시퀀스로 함께 연관 또는 "연쇄화된" 예외)를 지원한다.
한 개의 스레드에만(예를 들면, 추적 지점) 적용되는 예외의 경우에, 이 한 개의 스레드가 예외를 발생하면, 스레드가 예외 처리기로 점프하며, 예를 들어, 예외 처리기로부터 복귀하거나 종결된다.
본 실시예는, 호스트 프로세서(2)에 의해 GPU(3)에(GPU(3) 상의 태스크 관리자(5)에게) 발행된 명령을 사용한 예외의 기동 및 예외 이벤트 메시지의 브로드캐스트도 지원한다.
도 2는, 이와 같은 동작을 나타내며, 예를 들어, 호스트(2) 상에서 실행되고 있는 디버거/스케줄러로부터 송신되는 예시적인 원인 예외 명령(40)을 나타낸 것이다. 호스트(2)로부터의 이와 같은 원인 예외 명령에 응답하여, 태스크 관리자(5)는 마찬가지로 적절한 원인 예외 메시지를 태스크 제어 버스(7)를 거쳐 모든 셰이더 코어들에게 브로드캐스트하고, 그후 셰이더 코어들은 전술한 방식으로 관련된 스레드들을 예외 처리기로 방향전환하는 역할을 한다.
필요한 경우에는, 전술한 실시예들의 동작에 대해 다양한 대안 및 변형이 가능하다.
예를 들어, 예외를 기동한 스레드가 속하는 스레드 그룹(워크 그룹)에만 예외를 적용하고자 하는 경우에는, 예외가 (프로세싱 코어의 외부에 있는) 태스크 관리자로 다시 전달되지 않고, 해당 프로세싱 코어 내부의 스레드 그룹으로 브로드캐스트될 수도 있다.
브로드캐스트 예외 이벤트 메시지 및 예외가 처음에 태스크에 대한 다음의 더 큰 그룹의 스레드들에(예를 들어, 예외를 기동한 스레드가 속하는 워크 그룹에) 적용되고, 그후, 이 스레드 그룹에 있는 모든 스레드들(예를 들면, 모든 워크 그룹 스레드들)이 동일한 예외 상태를 갖고 종료하는 경우에, 예외 브로드캐스트가 다음의 더 높은 레벨의 스레드 그룹으로(예를 들어, 일 실시예에서는 해당 태스크로) 전파된다.
또한, 예외를 기동한 스레드가 예외 처리기로부터 복귀되는지(즉, 그것의 처리를 재개하는지) 여부에 근거하여, 예외 이벤트 메시지의 브로드캐스트를 제어하는 것도 가능하다. 이와 같은 경우에, 예외를 기동한 스레드가 예외 처리기로부터 복귀되는 경우에, 예외는 일 실시예서는 다른 스레드들에게 브로드캐스트되지 않지만, 스레드가 예외 처리기에서 종결되는 경우에는, 예외는 일 실시예에서 다른 스레드들에게 브로드캐스트된다.
전술한 내용으로부터 알 수 있는 것과 같이, 본 발명에서 설명하는 기술은, 그것의 실시예에서, 적어도, 복수의 독립적인 스레드들을 병렬로 실행하고 있는 다수의 스레드 프로세서에서 예외를 효율적으로 처리하는 메카니즘을 제공한다. 따라서, 이와 같은 구성은, 예를 들어, 병렬 검색 또는 기타의 귀납적 알고리즘의 효율적인 종결, 다수의 스레드들을 포함하는 프로그램의 상태를 유지한(statefully) 보류, 및 다수의 스레드로 이루어진 프로그램들 내부의 중지점의 처리 및 이들 프로그램의 프로파일링을 용이하게 할 수 있다. 다수의 스레드 병렬 처리 연산에서, 각각의 스레드는 가장 빠른 기회에 효율적으로 예외 처리기에 도달할 수 있다(여기에서, 예를 들어, 예외가 적절히 복구될 수 있다).
이것은, 본 발명에서 설명하는 기술의 실시예들에서는, 태스크 내부의 한 개의 스레드에 의해 발생된 예외를 태스크 내부의 다른(일 실시예에서는 다른 모든) 스레드들에게 브로드캐스트함으로써 달성된다.
본 발명에서 설명하는 기술의 전술한 설명은 예시 및 설명을 위해 제시되었다. 이것은 개시된 정확한 형태로 본 발명에서 설명하는 기술을 제한하도록 의도된 것은 아니다. 전술한 내용에 비추어 다양한 변형 및 변경이 이루어질 수 있다. 전술한 실시예는 본 발명에서 설명하는 기술의 원리와 그것의 실제적인 응용을 가장 잘 설명하기 위해 선택된 것으로, 본 기술분야의 당업자가 다양한 실시예와 특정한 용도에 적합한 다양한 변형예에서 본 발명에서 설명하는 기술을 가장 잘 이용할 수 있도록 의도된 것이다. 이것은 본 발명에서 설명하는 기술의 보호범위가 첨부된 청구범위에 정의되도록 의도된다.

Claims (27)

  1. 복수의 실행 스레드들을 병렬로 실행하도록 각각 동작하는 한 개 이상의 프로세싱 코어들과,
    태스크들을 상기 프로세싱 코어들에게 발행하여 처리하도록 동작하는 태스크 관리자와,
    실행중에 예외와 마주치는 스레드들을 처리하도록 동작하는 예외 처리기를 구비하고,
    상기 프로세싱 코어들 중에서 적어도 한 개는, 이 프로세싱 코어가 실행하고 있는 스레드가 예외와 마주치거나 예외를 발생하기를 원하는 경우에, 태스크 관리자에 대해 예외 이벤트를 기동할 수 있고,
    상기 태스크 관리자는, 프로세싱 코어로부터 예외 이벤트의 표시를 수신하는 경우에, 상기 프로세싱 코어들 중에서 적어도 한 개에 원인 예외(cause exception) 메시지를 브로드캐스트할 수 있으며,
    상기 프로세싱 코어들은, 상기 태스크 관리자로부터 브로드캐스트된 상기 원인 예외 메시지를 수신하는 경우에, 코어가 현재 실행하고 있으며 상기 원인 예외 메시지가 적용되고 따라서 종결되거나 보류되어야 하는 스레드들을 식별하고, 이와 같이 식별된 스레드들을 처리를 위한 상기 예외 처리기로 방향전환(redirect)하고, 상기 예외 처리기에 의한 처리는 상기 예외 처리기로 방향전환되는 상기 식별된 스레드들의 실행을 종결하거나 보류시키는 것을 포함하는 마이크로프로세서 시스템.
  2. 제 1항에 있어서,
    상기 프로세싱 코어들은 그래픽 프로세싱 코어들인 마이크로프로세서 시스템.
  3. 제 1항 또는 제 2항에 있어서,
    수행한 태스크들을 상기 태스크 관리자에게 표시하여 상기 프로세싱 코어들에게 발행하도록 동작하는 호스트 프로세서를 더 구비한 마이크로프로세서 시스템.
  4. 제 1항 또는 제 2항에 있어서,
    수행하고자 하는 태스크는 병렬 검색 또는 다른 귀납적(goal driven) 알고리즘인 마이크로프로세서 시스템.
  5. 제 1항 또는 제 2항에 있어서,
    상기 예외 처리기는, 그것이 수신한 스레드와 관련하여, 스레드의 실행의 재개, 스레드에 대한 추적 데이터의 기억 및 해당 스레드와 관련된 상태 정보의 기억, 및 해당 태스크와 관련된 상태 정보의 기억 중에서 한가지 이상을 더 행하도록 구성되는 마이크로프로세서 시스템.
  6. 제 1항 또는 제 2항에 있어서,
    상기 프로세싱 코어들에게 발행되는 각각의 태스크는, 그것과 관련하여, 태스크의 정규 연산을 위해 실행될 제 1 프로그램, 태스크와 관련된 스레드가 상기 예외 처리기로 방향전환되어 보류 또는 종결될 때 스레드를 보류 또는 종결하기 위한 제 2 프로그램, 및 상기 예외 처리기로 방향전환한 후 스레드를 재개하기 위한 제 3 프로그램을 갖는 마이크로프로세서 시스템.
  7. 제 1항 또는 제 2항에 있어서,
    상기 예외 처리기로 스레드의 방향전환을 기동하는 예외는, 스레드가 검색 처리 또는 다른 귀납적 알고리즘의 완료에 도달하는 것, 스레드가 그것의 실행 플로우에서 중지점에 도달하는 것, 스레드가 그것의 실행 플로우에서 보류점에 도달하는 것, 및 스레드가 그것의 실행 플로우에서 추적 지점에 도달하는 것 중에서 한 개인 마이크로프로세서 시스템.
  8. 제 1항 또는 제 2항에 있어서,
    스레드가 실행하고 있는 명령들의 스트림 내부의 명령 및 호스트 프로세서에 의해 상기 태스크 관리자에게 발행되는 명령에 의해 예외가 호출될 수 있는 마이크로프로세서 시스템.
  9. 제 1항 또는 제 2항에 있어서,
    프로세싱 코어는 선택된 형태의 예외에 대해서만 상기 태스크 관리자에게 예외 이벤트를 표시하는 마이크로프로세서 시스템.
  10. 제 1항 또는 제 2항에 있어서,
    브로드캐스트 예외 이벤트 메시지가, 해당 태스크와 관련된 전부가 아닌 일부의 스레드들, 및 해당 태스크 내부의 스레드들의 서로 다른 그룹들 중에서 적어도 한개에 적용가능한 마이크로프로세서 시스템.
  11. 제 1항 또는 제 2항에 있어서,
    예외를 기동할 수 있는 태스크에 대한 스레드들에 의해 실행될 명령 시퀀스 내부에 포함된 명령들은, 예외가 해당 스레드에만 적용되는지 또는 다른 스레드들에도 브로드캐스트되어야 하는지를 표시할 수 있는 마이크로프로세서 시스템.
  12. 제 1항 또는 제 2항에 있어서,
    다른 스레드들에 브로드캐스트될 예외 명령은, 예외가 브로드캐스트되어야 하는 스레드 그룹의 레벨을 더 표시하는 마이크로프로세서 시스템.
  13. 복수의 실행 스레드들을 병렬로 실행하도록 각각 동작하는 한 개 이상의 프로세싱 코어들과,
    태스크들을 상기 프로세싱 코어들에게 발행하여 처리하도록 동작하는 태스크 관리자와,
    실행중에 예외와 마주치는 스레드들을 처리하도록 동작하는 예외 처리기를 구비한 마이크로프로세서 시스템의 작동방법으로서,
    프로세싱 코어가 실행하고 있는 스레드가 예외와 마주치거나 예외를 발생하기를 원하는 경우에, 이 프로세싱 코어가 스레드를 상기 예외 처리기로 방향전환하고 상기 태스크 관리자에 대해 예외 이벤트를 기동하는 단계와,
    상기 태스크 관리자가 프로세싱 코어로부터 예외 이벤트의 표시를 수신하는 경우에, 상기 프로세싱 코어들 중에서 적어도 한 개에 원인 예외 메시지를 브로드캐스트하는 단계와,
    상기 태스크 관리자로부터 브로드캐스트된 상기 원인 예외 메시지를 수신한 각각의 프로세싱 코어가, 코어가 현재 실행하고 있으며 상기 원인 예외 메시지가 적용되고 따라서 종결되거나 보류되어야 하는 스레드들을 식별하고, 이와 같이 식별된 스레드들을 처리를 위한 상기 예외 처리기로 방향전환하는 단계를 포함하고, 상기 예외 처리기에 의한 처리는 상기 예외 처리기로 방향전환되는 상기 식별된 스레드들의 실행을 종결하거나 보류시키는 것을 포함하는 마이크로프로세서 시스템의 작동방법.
  14. 제 13항에 있어서,
    상기 프로세싱 코어들은 그래픽 프로세싱 코어들인 마이크로프로세서 시스템의 작동방법.
  15. 제 13항 또는 제 14항에 있어서,
    호스트 프로세서가 수행한 태스크들을 상기 태스크 관리자에게 표시하여 상기 프로세싱 코어들에게 발행하는 단계를 더 포함하는 마이크로프로세서 시스템의 작동방법.
  16. 제 13항 또는 제 14항에 있어서,
    프로세싱 코어에 의해 수행되고 있는 태스크는 병렬 검색 또는 다른 귀납적 알고리즘인 마이크로프로세서 시스템의 작동방법.
  17. 제 13항 또는 제 14항에 있어서,
    상기 예외 처리기는, 그것이 수신한 스레드와 관련하여, 스레드의 실행의 재개, 스레드에 대한 추적 데이터의 기억, 해당 스레드와 관련된 상태 정보의 기억, 및 해당 태스크와 관련된 상태 정보의 기억 중에서 한가지 이상을 더 행하도록 구성되는 마이크로프로세서 시스템의 작동방법.
  18. 제 13항 또는 제 14항에 있어서,
    태스크의 정규 연산을 위해 실행될 제 1 프로그램, 태스크와 관련된 스레드가 상기 예외 처리기로 방향전환되어 보류 또는 종결될 때 스레드를 보류 또는 종결하기 위한 제 2 프로그램, 및 상기 예외 처리기로 방향전환한 후 스레드를 재개하기 위한 제 3 프로그램을, 상기 프로세싱 코어들에게 발행되는 태스크와 관련시키는 단계를 포함하는 마이크로프로세서 시스템의 작동방법.
  19. 제 13항 또는 제 14항에 있어서,
    상기 예외 처리기로 스레드의 방향전환을 기동하는 예외는, 스레드가 검색 처리 또는 다른 귀납적 알고리즘의 완료에 도달하는 것, 스레드가 그것의 실행 플로우에서 중지점에 도달하는 것, 스레드가 그것의 실행 플로우에서 보류점에 도달하는 것, 및 스레드가 그것의 실행 플로우에서 추적 지점에 도달하는 것 중에서 한 개인 마이크로프로세서 시스템의 작동방법.
  20. 제 13항 또는 제 14항에 있어서,
    스레드가 실행하고 있는 명령들의 스트림 내부의 명령 및 호스트 프로세서에 의해 상기 태스크 관리자에게 발행되는 명령에 의해 예외가 호출될 수 있는 마이크로프로세서 시스템의 작동방법.
  21. 제 13항 또는 제 14항에 있어서,
    프로세싱 코어는 선택된 형태의 예외에 대해서만 상기 태스크 관리자에게 예외 이벤트를 표시하는 마이크로프로세서 시스템의 작동방법.
  22. 제 13항 또는 제 14항에 있어서,
    브로드캐스트 예외 이벤트 메시지가, 해당 태스크와 관련된 전부가 아닌 일부의 스레드들에 적용가능한 마이크로프로세서 시스템의 작동방법.
  23. 제 13항 또는 제 14항에 있어서,
    예외를 기동하는 명령 내부의 표시를 사용하여, 예외가 해당 스레드에만 적용되는지 또는 다른 스레드들에도 브로드캐스트되어야 하는지를 판정하는 단계를 포함하는 마이크로프로세서 시스템의 작동방법.
  24. 제 13항 또는 제 14항에 있어서,
    예외를 기동하는 명령 내부의 표시를 사용하여, 예외가 브로드캐스트되어야 하는 스레드 그룹의 레벨을 판정하는 단계를 포함하는 마이크로프로세서 시스템의 작동방법.
  25. 실행될 때, 청구항 13 또는 14에 기재된 방법이 실행되도록 하는 소프트웨어 코드가 기억된 컴퓨터 판독가능한 기록매체.
  26. 삭제
  27. 삭제
KR1020167028039A 2014-03-14 2015-03-11 마이크로프로세서 시스템에서의 예외 처리 KR102333341B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB1404585.0 2014-03-14
GB1404585.0A GB2524085B (en) 2014-03-14 2014-03-14 Exception handling in microprocessor systems
PCT/GB2015/050712 WO2015136283A1 (en) 2014-03-14 2015-03-11 Exception handling in microprocessor systems

Publications (2)

Publication Number Publication Date
KR20160132437A KR20160132437A (ko) 2016-11-18
KR102333341B1 true KR102333341B1 (ko) 2021-12-01

Family

ID=50634785

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020167028039A KR102333341B1 (ko) 2014-03-14 2015-03-11 마이크로프로세서 시스템에서의 예외 처리

Country Status (5)

Country Link
US (1) US11003489B2 (ko)
KR (1) KR102333341B1 (ko)
CN (1) CN106104483B (ko)
GB (1) GB2524085B (ko)
WO (1) WO2015136283A1 (ko)

Families Citing this family (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10360264B2 (en) 2016-04-08 2019-07-23 Wmware, Inc. Access control for user accounts using a bidirectional search approach
US10104087B2 (en) * 2016-04-08 2018-10-16 Vmware, Inc. Access control for user accounts using a parallel search approach
US10536476B2 (en) * 2016-07-21 2020-01-14 Sap Se Realtime triggering framework
US10482241B2 (en) 2016-08-24 2019-11-19 Sap Se Visualization of data distributed in multiple dimensions
US10542016B2 (en) 2016-08-31 2020-01-21 Sap Se Location enrichment in enterprise threat detection
US10353766B2 (en) * 2016-09-09 2019-07-16 International Business Machines Corporation Managing execution of computer tasks under time constraints
US10630705B2 (en) 2016-09-23 2020-04-21 Sap Se Real-time push API for log events in enterprise threat detection
US10673879B2 (en) 2016-09-23 2020-06-02 Sap Se Snapshot of a forensic investigation for enterprise threat detection
US10534908B2 (en) 2016-12-06 2020-01-14 Sap Se Alerts based on entities in security information and event management products
US10534907B2 (en) 2016-12-15 2020-01-14 Sap Se Providing semantic connectivity between a java application server and enterprise threat detection system using a J2EE data
US10530792B2 (en) 2016-12-15 2020-01-07 Sap Se Using frequency analysis in enterprise threat detection to detect intrusions in a computer system
US10552605B2 (en) 2016-12-16 2020-02-04 Sap Se Anomaly detection in enterprise threat detection
US11470094B2 (en) 2016-12-16 2022-10-11 Sap Se Bi-directional content replication logic for enterprise threat detection
US10764306B2 (en) 2016-12-19 2020-09-01 Sap Se Distributing cloud-computing platform content to enterprise threat detection systems
US10530794B2 (en) 2017-06-30 2020-01-07 Sap Se Pattern creation in enterprise threat detection
US9934287B1 (en) * 2017-07-25 2018-04-03 Capital One Services, Llc Systems and methods for expedited large file processing
CN108021463B (zh) * 2017-11-24 2021-07-16 中国航空工业集团公司西安航空计算技术研究所 一种基于有限状态机的gpu故障管理方法
US10681064B2 (en) 2017-12-19 2020-06-09 Sap Se Analysis of complex relationships among information technology security-relevant entities using a network graph
US10986111B2 (en) 2017-12-19 2021-04-20 Sap Se Displaying a series of events along a time axis in enterprise threat detection
CN108563581A (zh) * 2018-04-25 2018-09-21 咪咕文化科技有限公司 异常检测处理方法及装置、电子设备及计算机存储介质
CN110287020A (zh) * 2019-05-10 2019-09-27 中国船舶重工集团公司第七一五研究所 一种实时操作系统平台下的高效并行计算方法
US11386518B2 (en) 2019-09-24 2022-07-12 Advanced Micro Devices, Inc. Exception handler for sampling draw dispatch identifiers
US11675785B2 (en) 2020-01-31 2023-06-13 Oracle International Corporation Dynamic asynchronous traversals for distributed graph queries
US11340942B2 (en) * 2020-03-19 2022-05-24 Raytheon Company Cooperative work-stealing scheduler
US11461130B2 (en) * 2020-05-26 2022-10-04 Oracle International Corporation Methodology for fast and seamless task cancelation and error handling in distributed processing of large graph data
US11456946B2 (en) 2020-06-11 2022-09-27 Oracle International Corporation Regular path queries (RPQS) for distributed graphs
CN112817760A (zh) * 2021-01-28 2021-05-18 深圳宏芯宇电子股份有限公司 多核处理器及多核处理器信号处理方法
US11782602B2 (en) 2021-06-24 2023-10-10 Western Digital Technologies, Inc. Providing priority indicators for NVMe data communication streams
US11960730B2 (en) * 2021-06-28 2024-04-16 Western Digital Technologies, Inc. Distributed exception handling in solid state drives

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6199179B1 (en) * 1998-06-10 2001-03-06 Compaq Computer Corporation Method and apparatus for failure recovery in a multi-processor computer system
US20050149711A1 (en) * 2003-12-30 2005-07-07 Zimmer Vincent J. Method and system for firmware-based run time exception filtering
US20110078427A1 (en) * 2009-09-29 2011-03-31 Shebanow Michael C Trap handler architecture for a parallel processing unit
US20130298133A1 (en) * 2012-05-02 2013-11-07 Stephen Jones Technique for computational nested parallelism

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH03156559A (ja) * 1989-11-14 1991-07-04 Nec Corp マルチプロセッサシステムに於ける割込み処理方式
US5555420A (en) * 1990-12-21 1996-09-10 Intel Corporation Multiprocessor programmable interrupt controller system with separate interrupt bus and bus retry management
US5794047A (en) * 1994-09-29 1998-08-11 International Business Machines Corporation Method of walking-up a call stack for a client/server program that uses remote procedure call
CN1326037A (zh) 2000-05-28 2001-12-12 陈旭如 下水管道防回流阀门
US7171663B2 (en) * 2002-12-09 2007-01-30 International Business Machines Corporation External event interrupt for server-side programs
US7849297B2 (en) 2003-08-28 2010-12-07 Mips Technologies, Inc. Software emulation of directed exceptions in a multithreading processor
US7418585B2 (en) 2003-08-28 2008-08-26 Mips Technologies, Inc. Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts
CN1326037C (zh) * 2004-02-06 2007-07-11 智慧第一公司 用于更正微处理器中的内部调用或返回堆栈的方法与装置
US7162666B2 (en) * 2004-03-26 2007-01-09 Emc Corporation Multi-processor system having a watchdog for interrupting the multiple processors and deferring preemption until release of spinlocks
US7577962B2 (en) * 2004-12-03 2009-08-18 Microsoft Corporation Routing exceptions to operating system subsystems
US8019947B2 (en) * 2005-10-19 2011-09-13 Intel Corporation Technique for thread communication and synchronization
FR2894709A1 (fr) * 2005-12-13 2007-06-15 Gemplus Sa "detecteur de destruction anormale de secteur memoire"
US8146085B2 (en) * 2007-06-25 2012-03-27 Microsoft Corporation Concurrent exception handling using an aggregated exception structure
US7861072B2 (en) * 2007-06-25 2010-12-28 Microsoft Corporation Throwing one selected representative exception among aggregated multiple exceptions of same root cause received from concurrent tasks and discarding the rest
CN101639803A (zh) * 2008-07-30 2010-02-03 株式会社日立制作所 多线程应用系统的异常处理方法和异常处理装置
US8365198B2 (en) * 2008-12-09 2013-01-29 Microsoft Corporation Handling exceptions in a data parallel system
GB2484729A (en) * 2010-10-22 2012-04-25 Advanced Risc Mach Ltd Exception control in a multiprocessor system
US9298497B2 (en) 2012-07-13 2016-03-29 Wisconsin Alumni Research Foundation Computer processor providing exception handling with reduced state storage

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6199179B1 (en) * 1998-06-10 2001-03-06 Compaq Computer Corporation Method and apparatus for failure recovery in a multi-processor computer system
US20050149711A1 (en) * 2003-12-30 2005-07-07 Zimmer Vincent J. Method and system for firmware-based run time exception filtering
US20110078427A1 (en) * 2009-09-29 2011-03-31 Shebanow Michael C Trap handler architecture for a parallel processing unit
US20130298133A1 (en) * 2012-05-02 2013-11-07 Stephen Jones Technique for computational nested parallelism

Also Published As

Publication number Publication date
GB2524085A (en) 2015-09-16
GB201404585D0 (en) 2014-04-30
CN106104483A (zh) 2016-11-09
US11003489B2 (en) 2021-05-11
GB2524085B (en) 2021-01-20
US20170004005A1 (en) 2017-01-05
CN106104483B (zh) 2020-07-14
WO2015136283A1 (en) 2015-09-17
KR20160132437A (ko) 2016-11-18

Similar Documents

Publication Publication Date Title
KR102333341B1 (ko) 마이크로프로세서 시스템에서의 예외 처리
US10564978B2 (en) Operation of a multi-slice processor with an expanded merge fetching queue
US9417935B2 (en) Many-core process scheduling to maximize cache usage
US20230185607A1 (en) Hardware accelerated dynamic work creation on a graphics processing unit
US10831490B2 (en) Device and method for scheduling multiple thread groups on SIMD lanes upon divergence in a single thread group
US9983875B2 (en) Operation of a multi-slice processor preventing early dependent instruction wakeup
US9858101B2 (en) Virtual machine input/output thread management
US10346174B2 (en) Operation of a multi-slice processor with dynamic canceling of partial loads
CN110308982B (zh) 一种共享内存复用方法及装置
US20170329641A1 (en) Operation of a multi-slice processor implementing a load/store unit maintaining rejected instructions
US10067793B2 (en) Data processing method and apparatus for executing task code using reservation instruction and release instruction
US10042647B2 (en) Managing a divided load reorder queue
US20150123980A1 (en) Method and apparatus for supporting programmable software context state execution during hardware context restore flow
KR20190126728A (ko) 데이터 처리 시스템
CN114610394B (zh) 指令调度的方法、处理电路和电子设备
US8977752B2 (en) Event-based dynamic resource provisioning
US20230236878A1 (en) Efficiently launching tasks on a processor
US9703601B2 (en) Assigning levels of pools of resources to a super process having sub-processes
US20220092725A1 (en) Register compaction with early release
US11138050B2 (en) Operation of a multi-slice processor implementing a hardware level transfer of an execution thread
US9983879B2 (en) Operation of a multi-slice processor implementing dynamic switching of instruction issuance order
US20120155462A1 (en) Processing Multicast Messages In A Data Processing System
TWI428833B (zh) 多執行緒處理器及其指令執行及同步方法及其電腦程式產品
US20210373975A1 (en) Workgroup synchronization and processing
US11593159B2 (en) External exception handling

Legal Events

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