KR101485068B1 - 복수의 프로세서들을 포함하는 시스템 및 그 동작 방법 - Google Patents
복수의 프로세서들을 포함하는 시스템 및 그 동작 방법 Download PDFInfo
- Publication number
- KR101485068B1 KR101485068B1 KR1020097027561A KR20097027561A KR101485068B1 KR 101485068 B1 KR101485068 B1 KR 101485068B1 KR 1020097027561 A KR1020097027561 A KR 1020097027561A KR 20097027561 A KR20097027561 A KR 20097027561A KR 101485068 B1 KR101485068 B1 KR 101485068B1
- Authority
- KR
- South Korea
- Prior art keywords
- processor
- variables
- slave
- instruction
- master processor
- Prior art date
Links
- 238000000034 method Methods 0.000 title claims description 36
- 230000004044 response Effects 0.000 claims abstract description 20
- 230000007704 transition Effects 0.000 claims description 5
- 230000008569 process Effects 0.000 description 17
- 238000010586 diagram Methods 0.000 description 9
- 238000012545 processing Methods 0.000 description 7
- 230000008859 change Effects 0.000 description 6
- 230000004048 modification Effects 0.000 description 6
- 238000012986 modification Methods 0.000 description 6
- 238000012546 transfer Methods 0.000 description 6
- 230000005540 biological transmission Effects 0.000 description 4
- 230000009471 action Effects 0.000 description 3
- 230000008901 benefit Effects 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 230000006978 adaptation Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 238000012937 correction Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 238000010977 unit operation Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations 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/163—Interprocessor communication
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30043—LOAD or STORE instructions; Clear instruction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
- G06F9/30087—Synchronisation or serialisation instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
- G06F9/3009—Thread control instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30181—Instruction operation extension or modification
- G06F9/30189—Instruction operation extension or modification according to execution mode, e.g. mode flag
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/32—Address formation of the next instruction, e.g. by incrementing the instruction counter
- G06F9/322—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3851—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3861—Recovery, e.g. branch miss-prediction, exception handling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3877—Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3877—Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
- G06F9/3879—Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor for non-native instruction execution, e.g. executing a command; for Java instruction set
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3889—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- Computer Hardware Design (AREA)
- Advance Control (AREA)
- Hardware Redundancy (AREA)
- Multi Processors (AREA)
- Executing Machine-Instructions (AREA)
- Electrotherapy Devices (AREA)
- Control Of Eletrric Generators (AREA)
Abstract
시스템(300)은 마스터 프로세서(301) 및 적어도 하나의 슬레이브 프로세서(321, 331)를 포함한다. 상기 마스터 프로세서(301)의 상태는 제 1 복수의 변수들을 포함하고, 상기 슬레이브 프로세서(321, 331)의 상태는 제 2 복수의 변수들을 포함한다. 상기 시스템(300)은 데이터가 상기 마스터 프로세서(301) 및 상기 슬레이브 프로세서(321, 331)에 의해 처리되는 병렬 연산 모드 및 데이터가 상기 마스터 프로세서(301)에 의해 처리되는 직렬 연산 모드를 포함한다. 인터럽트 또는 예외가 상기 병렬 연산 모드에서 발생하는 것에 반응하여, 상기 시스템(300)은 상기 제 1 복수의 변수들 및 상기 제 2 복수의 변수들중 적어도 일부를 버퍼 메모리(313)에 저장하고, 상기 시스템(300)을 상기 직렬 연산 모드로 전환하는 단계들을 수행한다. 인터럽트 또는 예외가 상기 슬레이브 프로세서(321, 331)에서 발생하는 것에 반응하여, 상기 제 1 복수의 변수들 중 적어도 하나는 상기 제 2 복수의 변수들 중 적어도 하나의 값으로 설정된다.
병렬 연산 모드, 직렬 연산 모드, 마스터 프로세서, 슬레이브 프로세서
Description
본 발명은 일반적으로 컴퓨터 시스템 분야에 관한 것이며, 더욱 상세하게는 복수의 프로세서를 포함하는 시스템에 관한 것이다.
현대의 컴퓨터 시스템에서는, 복수의 명령을 포함하는 프로세서가 이용된다. 이러한 프로세서는 그 프로세서에 연결된 시스템 메모리로부터 명령 및 데이터를 판독하고, 명령에 따라 명령 및/또는 데이터를 수정한다. 시스템 메모리는 하드 디스크와 같은 영구적이지만 느린 메모리 장치뿐만 아니라, 램(RAM)과 같은 휘발성이지만 빠르게 접근 가능한 메모리 장치도 포함할 수 있다. 또한, 컴퓨터는 키보드, 마우스 및/또는 네트워크 연결과 같은 장치로부터 입력을 수신할 수 있고, 예를 들어 모니터, 하나 이상의 스피커(loudspeaker) 및/또는 프린터와 같은 장치에 출력을 제공할 수 있다. 대부분의 컴퓨터 시스템에서, "운영 체제(operating system)"라 불리는 특화된 컴퓨터 프로그램이 컴퓨터 시스템 구성요소 사이의 데이터 전송뿐만 아니라 다양한 프로그램의 처리를 제어하는 데에 사용된다.
도 1a는 종래 기술에 따른 컴퓨터 시스템(100)의 개략적인 블록도를 나타낸다. 컴퓨터 시스템(100)은 프로세서(101), 시스템 메모리(104) 및 하나 이상의 입/ 출력 장치(103)를 포함한다. 화살표(102)는 프로세서(101), 시스템 메모리(104) 및 입/출력 장치(들)(103) 사이의 데이터 전송을 개략적으로 나타낸다.
프로세서(101)는 복수의 레지스터(102, 103, 104, 105)를 포함한다. 데이터는 시스템 메모리(104)로부터 레지스터(102-105)로 판독될 수 있고, 레지스터(102-105)의 데이터는 시스템 메모리(104)에 기록될 수 있다. 프로세서(101)는 레지스터(102-105) 및 시스템 메모리(104) 사이 및/또는 레지스터(102-105) 사이에 데이터를 전송하기 위한 명령뿐만 아니라, 레지스터(102-105)의 컨텐츠(content)를 수정하는 명령을 포함할 수 있다. 또한, 이와 같은 작업(task)들의 조합을 수행하는 명령도 제공될 수 있다. 일반적으로, 프로세서(101)는 시스템 메모리(104)에 저장된 데이터 보다 레지스터(102-105)의 데이터에 더욱 빠르게 접근할 수 있다.
컴퓨터 시스템(100)의 성능을 향상시키기 위하여, 하나의 단일 프로세서(101) 대신에, 복수의 프로세서를 제공하는 것이 바람직할 수 있다. 이에 따라, 복수의 작업 및/또는 스레드(thread)가 동시에 실행될 수 있다. 이는 컴퓨터 시스템(100)의 동작 속도를 증가시키는 데에 도움을 줄 수 있다.
하지만, 종래 기술에 따른 컴퓨터 시스템에서 프로세서 수의 증가는, 도 1b를 참조하여 이하에서 설명되는 바와 같이, 운영 체제의 변경을 요구한다. 도 1b는 종래 기술에 따라 컴퓨터 시스템(100)의 프로세서(101) 상에서 실행되는 작업(201)의 개략적인 흐름도를 나타낸다. 작업(201)은 프로세서(101)에 의해 순차적으로 처리될 복수의 명령(210-215)을 포함한다. 이에 따라, 프로세서(101)는 명령(210)에서 명령(211)까지 처리하고, 명령(211)에서 명령(212)까지 처리한다.
예를 들어, 명령(212)의 처리 중 또는 후에, 작업(201)이 처리되는 동안, 도 1b의 화살표(230)에 의해 개략적으로 표시되는 인터럽트(inturrupt) 또는 예외(exception)가 발생할 수 있다. 예외는, 예를 들어 0으로 나눗셈 또는 페이지 폴트(fault)와 같은 시스템 메모리(104)로부터의 에러 메시지의 경우와 같은 명령(212)의 처리 중의 에러의 경우에 생성될 수 있다. 예외는, 작업(210)의 명령, 예를 들어 명령(212)에 의해 정기적으로 생성될 수도 있다. 작업(201)에 의해 생성되는 예외의 전형적인 애플리케이션은 컴퓨터 시스템(100)의 운영 체제의 호출이다. 인터럽트는 프로세서(101)가 아닌 다른 장치부터 발생하는 이벤트, 예를 들어 입/출력 장치(103)로의 입력 또는 입/출력 장치(103)의 동기화(synchronization) 요청에 의해 생성될 수 있다. 컴퓨터 시스템(100)에서 멀티태스킹(multitasking)이 수행되면, 프로세스 또는 스레드가 될 수 있는 다양한 작업들을 선택적으로 활성화하기 위해 타이밍 회로(timing circuit)에 의해 생성되는 인터럽트가 사용될 수 있다.
인터럽트 또는 예외의 경우, 작업(201)의 실행이 일시적으로 중단될 수 있고, 예를 들어 운영 체제의 일부가 될 수 있는 인터럽트 루틴(202)이 실행된다. 인터럽트 루틴(202)은 복수의 명령(220-225)을 포함할 수 있다. 이 명령들은 순차적으로 처리된다. 인터럽트 루틴(202)의 마지막 명령(225)을 처리한 후, 인터럽트가 발생한 명령(212)을 뒤따르는 명령, 즉 상기 예에서, 명령(213)에서 작업(201)의 처리가 계속된다.
인터럽트 루틴(202)은 프로세서(101)의 레지스터(102-105)의 컨텐츠를 수정할 수 있다. 인터럽트 또는 예외가 발생한 후에 인터럽트 또는 예외에도 불구하고 작업(201)이 정확하게 이루어질 것임을 보장하기 위해, 레지스터(102-105)의 컨텐츠가 시스템 메모리(104)의 저장 위치에 복사(copy)된다. 작업(201)의 실행이 계속되기 전에, 저장 위치의 컨텐츠가 레지스터(102-105) 내로 다시 판독된다. 이에 따라, 명령(213)의 실행에 의해 작업(201)의 실행이 계속될 때, 레지스터(102-105)는 명령(213)이 명령(212) 뒤에 즉시 실행된 것처럼 실질적으로 동일한 데이터를 포함할 수 있다.
종래 기술에 따른 컴퓨터 시스템(100)에서, 레지스터의 컨텐츠를 저장 위치로 복사하고 다시 판독하는 것은, 컴퓨터 시스템(100)의 운영 체제의 일부로서 구현되는 인터럽트 루틴(202)에서 제공되는 명령에 의해 영향을 받는다. 따라서, 추가적인 프로세서들이 컴퓨터 시스템(100)에 제공될 경우에는, 운영 체제의 수정이 요구될 수 있는데, 이는 임의의 프로세서에서 발생하는 인터럽트 또는 예외의 경우, 프로세서의 레지스터의 컨텐츠가 인터럽트 루틴의 완료 후에 시스템 메모리에 정확하게 저장되고 레지스터로 다시 판독되는 것을 보장하기 위해서이다.
각 프로세서에서 프로세스 및 작업의 실행을 스케쥴링(scheduling)하기 위해서는 운영 체제에 대한 추가의 수정이 요구된다. 종래 기술에 따른 컴퓨터 시스템에 있어서, 프로세서에서의 프로세스 및/또는 스레드의 실행 제어 및 프로그램 및/또는 스레드의 프로세서로의 분배는 운영 체제에 의해 수행된다. 복수의 프로세서들의 존재에 대해 운영 체제를 적합하게 해야 함을 요구하는 것에 부가하여, 프로세스 및/또는 스레드의 실행 제어는 프로세스 및/또는 스레드의 생성 및/또는 제어를 위해 비교적 많은 오버헤드를 요구할 수 있다. 특히, 운영 체제 루틴이 호출되기 전에 프로세서의 레지스터의 컨텐츠를 저장 위치로 복사하는 것 및 운영 체제 루틴의 종료 후에 저장 위치의 컨텐츠를 레지스터로 되돌려서 판독하는 것에 의해 상당한 오버헤드가 생성될 수 있다.
종래 기술에 따른 컴퓨터 시스템(100)의 문제는, 운영 체제의 제조업자들이 추가적인 프로세서 또는 어떤 다른 가능한 장치들을 위한 지원을 구현할 때 까지 컴퓨터 시스템(100)에 제공되는 추가적인 프로세서들이 합리적으로 사용될 수 없다는 것이다.
종래 기술에 따른 컴퓨터 시스템(100)의 다른 문제는, 운영 체제에 의한 프로세스 및/또는 스레드의 생성 및/또는 제어를 위한 비교적 많은 오버헤드가 컴퓨터 시스템(100)의 성능을 감소시킨다는 것이다. 특히, 비교적 미세 단위(fine grain)의 멀티태스킹 및/또는 멀티스레딩이 사용되는 경우에 더욱 그러하다.
또한, 다중 프로세서 지원을 제공하는 종래 기술에 따른 컴퓨터 시스템에서도, 추가적인 프로세서 또는 피쳐(feature)들을 운영 체제로부터 숨기는 것이 바람직할 수 있다. 이것은 또한 운영 체제에 알려지지 않은 추가적인 하드웨어 및/또는 프로세서를 포함할 수도 있다. 이에 따라, 종래 기술에 따른 컴퓨터 시스템의 다른 문제는, 운영 체제에 보이지 않는 프로세서 또는 하드웨어와 같은 추가적인 자원들을 이용하기가 어려울 수 있다는 것이다.
본 발명은 이상에서 확인된 하나 이상의 문제점의 영향을 회피하거나 적어도 감소시키기 위한 다양한 시스템 및 방법에 관한 것이다.
이하, 본 발명의 일부 양상들을 기본적으로 이해할 수 있도록 본 발명의 단순화된 개요를 제시한다. 이러한 개요가 본 발명의 광범위한 개요는 아니다. 이는 본 발명의 기본적인 또는 중요한 요소들을 식별하지 않으며, 본 발명의 범위를 규정하지 않는다. 본 개요의 유일한 목적은 이하 제시되는 보다 상세한 설명에 대한 서두로서 본 발명의 일부 개념들을 단순화된 형태로 제시하는 것이다.
일 실시예에 따르면, 시스템은 마스터 프로세서 및 적어도 하나의 슬레이브 프로세서를 포함한다. 상기 마스터 프로세서의 상태는 제 1 복수의 변수들을 포함하고, 상기 슬레이브 프로세서의 상태는 제 2 복수의 변수들을 포함한다. 상기 시스템은 데이터가 상기 마스터 프로세서 및 상기 슬레이브 프로세서에 의해 처리되는 병렬 연산 모드 및 데이터가 상기 마스터 프로세서에 의해 처리되는 직렬 연산 모드를 포함한다. 상기 시스템은, 인터럽트 또는 예외가 상기 병렬 연산 모드에서 발생하는 것에 반응하여, 상기 제 1 복수의 변수들 및 상기 제 2 복수의 변수들의 적어도 일부를 버퍼 메모리에 저장하고, 상기 시스템을 상기 직렬 연산 모드로 전환하는 단계를 수행하도록 구성된다. 상기 시스템은 또한, 인터럽트 또는 예외가 상기 슬레이브 프로세서에서 발생하는 것에 반응하여, 상기 제 1 복수의 변수들 중 적어도 하나를 상기 제 2 복수의 변수들 중 적어도 하나의 값으로 설정하도록 구성된다.
다른 실시예에 따르면, 시스템은 마스터 프로세서 및 적어도 하나의 슬레이브 프로세서를 포함한다. 마스터 프로세서의 상태는 제 1 복귀 어드레스(return address)를 포함하는 제 1 복수의 변수들을 포함하고, 슬레이브 프로세서의 상태는 제 2 복귀 어드레스를 포함하는 제 2 복수의 변수들을 포함한다. 상기 시스템은 데이터가 상기 마스터 프로세서 및 상기 슬레이브 프로세서에 의해 처리되는 병렬 연산 모드 및 데이터가 상기 마스터 프로세서에 의해 처리되는 직렬 연산 모드를 포함한다. 상기 시스템은 트램폴린 명령(trampoline instruction)을 포함한다. 상기 시스템은, 인터럽트 또는 예외가 병렬 연산 모드 동안 상기 마스터 프로세서에서 발생하는 것에 반응하여, 상기 제 1 복귀 어드레스 및 상기 제 2 복수의 변수들을 상기 버퍼 메모리에 저장하고, 상기 제 1 복귀 어드레스를 상기 트램폴린 명령의 어드레스로 대체하며, 그리고 상기 직렬 연산 모드로 전환하는 단계를 수행하도록 구성된다. 상기 시스템은 또한, 인터럽트 또는 예외가 상기 병렬 연산 모드 동안 상기 슬레이브 프로세서에서 발생하는 것에 반응하여, 상기 제 1 복수의 변수들 및 상기 제 2 복수의 변수들을 버퍼 메모리에 저장하고, 상기 제 1 복수의 변수들 중 적어도 하나를 상기 제 2 변수 중 적어도 하나의 값으로 설정하고, 상기 제 1 복귀 어드레스를 상기 트램폴린 명령의 어드레스로 대체하며, 그리고 제 1 연산 모드로 전환하는 단계를 수행하도록 구성된다. 상기 트램폴린 명령은, 인터럽트 또는 예외가 상기 마스터 프로세서에서 발생하는 것에 반응하여, 상기 시스템을 병렬 연산 모드로 전환하고, 상기 제 2 복수의 변수들 및 상기 제 1 복귀 어드레스를 상기 버퍼 메모리로부터 판독하는 단계를 수행하도록 구성된다. 상기 트램폴린 명령은 또한, 인터럽트 또는 예외가 상기 적어도 하나의 슬레이브 프로세서에서 발생하는 것에 반응하여, 상기 시스템을 병렬 연산 모드로 전환하고, 상기 버퍼 메모리로부터 상기 제 2 복수의 변수들을 판독하고, 상기 제 2 복수의 변수들 중 적어도 하나를 상기 제 1 복수의 변수들 중 적어도 하나의 값으로 설정하며, 그리고 상기 버퍼 메모리로부터 상기 제 1 복수의 변수들을 판독하는 단계를 수행하도록 구성된다.
또 다른 실시예에 따르면, 마스터 프로세서 및 적어도 하나의 슬레이브 프로세서를 포함하는 시스템을 동작시키는 방법이 개시되는 바, 상기 마스터 프로세서의 상태는 제 1 복수의 변수들을 포함하고 상기 슬레이브 프로세서의 상태는 제 2 복수의 변수들을 포함하며, 상기 시스템은 데이터가 상기 마스터 프로세서 및 상기 슬레이브 프로세서에서 처리되는 병렬 연산 모드 및 데이터가 상기 마스터 프로세서에서 처리되는 직렬 연산 모드를 포함한다. 상기 방법은 다음의 특징들을 포함한다. 인터럽트 또는 예외가 상기 병렬 연산 모드에서 발생하는 것에 반응하여, 상기 제 1 복수의 변수들 및 상기 제 2 복수의 변수들 중 적어도 일부를 버퍼 메모리에 저장하고, 상기 시스템을 직렬 연산 모드로 전환하는 단계가 수행된다. 인터럽트 또는 예외가 상기 적어도 하나의 슬레이브 프로세서에서 발생하는 것에 반응하여, 상기 제 1 복수의 변수들 중 적어도 하나는 상기 제 2 복수의 변수들 중 적어도 하나의 값으로 설정된다.
본 발명은 첨부되는 도면과 함께 설명되는 다음의 설명을 참조하여 이해될 수 있으며, 도면에서 동일한 참조 번호는 동일한 요소를 나타낸다.
도 1a는 종래 기술에 따른 컴퓨터 시스템의 개략도를 나타내고;
도 1b는 종래 기술에 따른 컴퓨터 시스템 상에서 실행되는 프로그램 및 인터럽트 루틴의 개략적인 흐름도를 나타내고;
도 2a는 본 발명의 일 실시예에 따른 컴퓨터 시스템의 개략도를 나타내고;
도 2b는 본 발명의 일 실시예에 따른 컴퓨터 시스템 상에서 실행되는 프로그램의 개략적인 흐름도를 나타내고;
도 2c는 본 발명의 일 실시예에 따른 컴퓨터 시스템 상에서 실행되는 프로그램 및 인터럽트 루틴의 개략적인 흐름도를 나타낸다.
본 발명의 여러 수정과 대안적 형태가 가능하지만, 특정 실시예들이 도면에서 예로서 제시되어 상세히 설명된다. 하지만, 특정 실시예들의 설명은 본 발명을 개시되는 특별한 형태로 한정하려는 것이 아니며, 첨부되는 특허청구범위에 의해 정의되는 본 발명의 사상 및 범위 내에서의 모든 수정, 등가 및 대안을 포괄하려는 것임이 이해되어야 한다.
이하, 본 발명의 예시적 실시예가 설명된다. 명확함을 위해 실제 구현의 모든 양상들이 본 명세서에서 설명되지는 않는다. 이와 같은 실질적인 실시예의 개발에 있어서, 실시예 마다 변하는 개발자의 특정 목표, 예를 들어 시스템 관련 제약 및 비즈니스 관련 제약을 따르는 목표를 달성하기 위해 다양한 구현별 특정의 결정들이 이루어져야 한다는 것은 당연히 이해되어야 한다. 또한, 그러한 개발 노력은 복잡하고 시간 소모적이지만, 그럼에도 불구하고 본 명세서의 개시되는 내용의 이득을 갖는 본 발명의 기술분야에서 통상의 지식을 가진 자에 대해서는 일상적인 것임을 알아야 한다.
본 발명은 이제 첨부 도면을 참조하여 설명될 것이다. 여러 가지 구조, 시스템 및 장치가 도면에서 개략적으로 묘사되며, 이것은 단지 설명을 위한 것이며 그 리고 본 발명의 기술분야에서 숙련된 자들에게는 잘 알려진 세부적인 것들로 본 발명을 모호하게 하지 않도록 하기 위한 것이다. 그럼에도 불구하고, 첨부된 도면들은 본 발명의 예시적 예들을 서술하고 설명하기 위해 포함될 수 있다. 여기에서 사용되는 단어 및 문구들은 그 단어 및 문구의 이해와 일치하는 뜻을 가진 것으로 본 발명의 관련 기술분야에서 숙련된 자들에 의해 이해되고 해석되어야 한다. 여기에서 어떠한 용어 또는 문구를 일관되게 사용한다고 해서, 이러한 용어 또는 문구의 특별한 정의, 즉 본 발명의 기술분야에서 숙련된 자들에 의해 이해되는 통상적이고 관례적인 뜻과 다른 정의가 암시되는 것은 아니다. 어떠한 용어 또는 문구가 특별한 의미, 즉 숙련된 기술자들에 의해 이해되는 것과 다른 의미를 가지도록 의도되는 경우, 그러한 특별한 정의는 그 용어 또는 문구에 대한 특별한 정의를 직접적이고 분명하게 제공하는 정의 방식으로 본 명세서에서 명확히 설명될 것이다.
일 예시적인 실시예에 따르면, 마스터 프로세서 및 적어도 하나의 슬레이브 프로세서를 포함하는 컴퓨터 시스템이 제공된다. 몇몇 실시예에서는 컴퓨터 시스템이 단일 슬레이브 프로세서를 포함할 수 있는 반면, 다른 실시예에서는 복수의 슬레이브 프로세서가 제공될 수 있다. 컴퓨터 시스템은 데이터가 마스터 프로세서 및 적어도 하나의 슬레이브 프로세서 모두에 의해 처리되는 병렬 연산 모드를 포함한다. 컴퓨터 시스템이 다수의 슬레이브 프로세서들을 포함하는 실시예들에서는, 슬레이브 프로세서들 각각 또는 슬레이브 프로세서들중 단지 일부 만이 병렬 연산 모드에서 명령들을 동시에 실행할 수 있다. 따라서, 병렬 연산 모드에서는, 컴퓨터 시스템의 성능을 향상시키기 위해, 복수의 작업들이 마스터 프로세서 및 슬레이브 프로세서에서 동시에 실행될 수 있다. 몇몇 실시예에서, 직렬 연산 모드는 컴퓨터 시스템이 단일 프로세서 만을 갖는 구형 모델(predecessor model)의 기능성을 제공하는 호환성 모드(compatibility mode)가 될 수 있다.
마스터 프로세서의 상태는 마스터 프로세서의 레지스터의 컨텐츠를 나타낼 수 있는 복수의 변수들을 포함한다. 이와 유사하게, 각 슬레이브 프로세서의 상태는 슬레이브 프로세서의 레지스터의 컨텐츠를 나타낼 수 있는 복수의 변수들 및/또는 슬레이브 프로세서가 현재 명령들을 실행중인 지를 나타내는 실행 상태 비트(running status bit)를 포함할 수 있다. 마스터 프로세서 및 슬레이브 프로세서들 모두에서, 각 프로세서의 복수의 변수들 중 하나는 프로세서가 인터럽트 또는 예외가 없을 때 명령 실행을 계속하는 복귀 어드레스를 포함할 수 있다. 예를 들어, 복귀 어드레스는 각 프로세서의 레지스터 중 하나에 제공될 수 있다.
컴퓨터 시스템은 마스터 프로세서의 복수의 변수들 중 하나 이상의 값들을 슬레이브 프로세서 중 하나의 복수의 변수들 중 하나 이상에 기록하는 변수 송신 명령(variable sending instruction)을 포함할 수 있다. 따라서, 슬레이브 프로세서의 파라미터는 슬레이브 프로세서에 의한 스레드의 실행이 시작되기 전에 설정될 수 있다. 각 슬레이브 프로세서에서의 명령 실행은, 명령 실행이 시작될 슬레이브 프로세서의 식별 번호(identification number) 및 명령 실행이 시작되는 목적 어드레스(target address)를 아규먼트(arguments)로서 수신할 수 있는 포크 명령(fork instruction)에 의해 초기화될 수 있다. 슬레이브 프로세서에서의 스레드의 실행은 슬레이브 조인 명령(slave join instruction)에 의해 중지될 수 있다. 슬레이브 조인 명령이 슬레이브 프로세서에 의해 실행되는 명령 순서로 발생하면, 슬레이브 프로세서는 명령의 실행을 중지할 것이다. 마스터 조인 명령(master join instruction)은 마스터 프로세서 및 하나의 슬레이브 프로세서 사이의 동기화를 위해 사용될 수 있다. 마스터 조인 명령은 아규먼트로서 슬레이브 프로세서의 식별 번호를 가지며 호출된다. 마스터 조인 명령이 마스터 프로세서에 의해 실행되는 명령 순서로 발생하면, 마스터 프로세서는 마스터 조인 명령의 아규먼트에서 특정되는 슬레이브 프로세서에서의 명령 실행이 종료될 때까지 기다린다. 컴퓨터 시스템은 슬레이브 프로세서 중 하나의 복수의 변수들 중 하나 이상의 값들을 마스터 프로세서의 복수의 변수들 중 하나 이상에 기록하는 변수 수신 명령(variable receiving instruction)을 포함한다. 이러한 변수 수신 명령은 결과값 또는 슬레이브 프로세서에서의 작업 실행 결과를 포함하는 메모리 버퍼에 대한 포인터(pointer)를 수신하는 데에 이용된다.
이에 따라, 컴퓨터 시스템에서, 프로세스 및/또는 스레드는 마스터 프로세서 및 슬레이브 프로세서에서 병렬 방식으로 실행될 수 있다. 상기에서 설명된 명령들을 사용하게 되면, 하나 이상의 슬레이브 프로세서에서의 작업들의 실행은 컴퓨터 시스템 상에서 실행되는 운영 체제와 독립적으로 시작 및 중지될 수 있다.
상기 컴퓨터 시스템은, 병렬 연산 모드에서 발생하는 인터럽트 또는 예외의 경우, 마스터 프로세서 및 슬레이브 프로세서의 상태를 나타내는 변수들의 적어도 일부를 버퍼 메모리에 저장하고, 시스템을 직렬 연산 모드로 전환할 수 있다. 특히, 컴퓨터 시스템의 구형 모델에서 존재하지 않는 레지스터의 컨텐츠와 같은 슬레이브 프로세서의 변수들 및 마스터 프로세서의 변수들이 저장될 수 있다. 따라서, 운영 체제는 단일 프로세서를 포함하는 컴퓨터 시스템에서 사용되지 않는 슬레이브 프로세서의 변수들 및 마스터 프로세서의 변수들을 저장할 필요가 없다. 이에 따라, 단일 프로세서를 포함하는 구형 모델과 상기 컴퓨터 시스템의 호환성이 제공되고, 구형 모델에 채택된 운영 체제가 상기 컴퓨터 시스템을 위해 사용될 수 있다.
슬레이브 프로세서에서 인터럽트 또는 예외가 발생하면, 마스터 프로세서의 복수의 변수들 중 적어도 하나가 인터럽트 또는 예외가 발생한 슬레이브 프로세서의 복수의 변수들 중 적어도 하나의 값으로 설정될 수 있다. 따라서, 마스터 프로세서로부터 운영 체제에 의해 수행되는 인터럽트 루틴과 관련된 데이터를 수신할 수 있는 슬레이브 프로세서의 변수들이 운영 체제에 전달될 수 있다.
상기 컴퓨터 시스템은 트램폴린 명령을 더 포함할 수 있다. 이러한 트램폴린 명령은 슬레이브 프로세서 및 선택적으로 마스터 프로세서의 인터럽트 또는 예외시에 저장되는 변수들을 버퍼 메모리로부터 판독할 수 있다. 부가적으로, 트램폴린 명령은 컴퓨터 시스템이 직렬 연산 모드에서 병렬 연산 모드로 전환할 수 있다. 슬레이브 프로세서에서 인터럽트 또는 예외가 발생하는 경우, 트램폴린 명령은 인터럽트 또는 예외가 발생했을 때 슬레이브 프로세서의 변수들의 값들로 설정되었던 마스터 프로세서의 변수들을 슬레이브 프로세서의 변수들로 기록할 수 있다. 이는 버퍼 메모리로부터 마스터 프로세서의 최초 값들을 판독하기 전에 수행될 수 있다.
인터럽트 또는 예외의 경우, 마스터 프로세서의 복귀 어드레스는 트램폴린 명령의 어드레스로 대체될 수 있다. 따라서, 트램폴린 명령은 인터럽트 루틴의 종료 후에 자동으로 호출된다. 이에 따라, 단일 프로세서를 포함하는 컴퓨터 시스템 에 존재하지 않는 슬레이브 프로세서 및/또는 마스터 프로세서의 변수들은 운영 체제와 독립적으로 처리될 수 있다. 이는 운영 체제에 투명한(transparent) 방식으로 컴퓨터 시스템의 병렬 연산 모드를 사용을 가능하게 한다. 따라서, 컴퓨터 시스템의 병렬 연산 모드의 이용을 가능하게 하는 데에 실질적으로 운영 체제의 어떠한 적응도 요구되지 않는다.
도 2a는 일 예시적인 실시예에 따른 컴퓨터 시스템(300)의 개략도를 나타낸다. 컴퓨터 시스템(300)은 마스터 프로세서(301) 및 슬레이브 프로세서(321, 331)를 포함한다. 하지만, 본 발명은 도 2a에 도시된 바와 같이 두 개의 슬레이브 프로세서가 제공되는 실시예로 한정되지 않는다. 다른 실시예에서는, 셋 이상의 슬레이브 프로세서가 제공될 수 있다. 또 다른 실시예에서, 컴퓨터 시스템(300)은 단일 슬레이브 프로세서를 포함할 수 있다. 또한, 본 발명은 슬레이브 프로세서(321, 331)가 범용의 프로세서가 되는 실시예들로 한정되지 않는다. 다른 실시예들에서, 슬레이브 프로세서(321, 331)는 특수(special) 기능 하드웨어를 포함한다.
컴퓨터 시스템(300)은 시스템 메모리(304) 및 입/출력 장치(303)를 더 포함할 수 있다. 화살표(314)는 마스터 프로세서(301), 슬레이브 프로세서(321, 331), 시스템 메모리(304) 및 입/출력 장치(303) 사이의 데이터의 전송을 개략적으로 나타낸다.
마스터 프로세서(301)는 복수의 레지스터(302-307)를 포함한다. 몇몇 실시예에서, 복수의 레지스터(302-307)는, 예를 들어 레지스터(302-305)를 포함할 수 있는 제 1 서브세트(subset) 및 레지스터(306, 307)를 포함할 수 있는 제 2 서브세트 를 포함할 수 있다. 제 1 서브세트의 레지스터(302-305)는 종래 기술에 따른 컴퓨터 시스템에서 프로세서의 레지스터, 예를 들어 도 1a-도 1b를 참조하여 설명된 컴퓨터 시스템(100)에서 프로세서(101)의 레지스터(102-105)에 대응할 수 있다. 마스터 프로세서(301)는 또한, 컴퓨터 시스템(300)의 직렬 연산 모드에서, 종래 기술에 따른 프로세서(101)의 명령들의 세트를 포함하는 명령들의 세트를 제공하도록 구성될 수 있다. 따라서, 직렬 연산 모드에서, 컴퓨터 시스템(300)은 종래 기술에 따른 컴퓨터 시스템(100)에 제공되는 이진 코드(binary code)를 실행할 수 있다.
이하에서 더욱 상세히 설명되는 바와 같이, 제 2 서브세트의 레지스터(306, 307)는 마스터 프로세서(301) 및 슬레이브 프로세서(321, 331)의 데이터의 병렬 처리와 관련된 데이터의 전송을 처리하는 데에 이용될 수 있다.
마스터 프로세서(301)와 유사하게, 제 1 슬레이브 프로세서(321)는 복수의 레지스터(322-325)를 포함하고, 제 2 슬레이브 프로세서(331)는 복수의 레지스터(332-335)를 포함한다. 몇몇 실시예에서, 슬레이브 프로세서(321, 331)의 레지스터(322-325, 332-335)는 마스터 프로세서(301)의 레지스터의 제 1 서브세트(302-305)에 대응할 수 있다. 각 레지스터(302-307, 322-325 및 332-335)에는, 마스터 프로세서(302), 제 1 슬레이브 프로세서(321) 및 제 2 슬레이브 프로세서(331)의 상태를 나타내는 변수들이 저장될 수 있다.
몇몇 실시예에서, 각 마스터 프로세서(301) 및 슬레이브 프로세서(321, 331)는 본 발명의 기술분야에서 숙련된 자들에게 잘 알려진 x86 또는 x86-64 타입 프로세서의 기능을 제공할 수 있다. 다른 실시예에서, 각 마스터 프로세서(301) 및 슬 레이브 프로세서(321, 331)는 다른 타입의 프로세서의 기능을 제공할 수 있다. 또 다른 실시예에서, 마스터 프로세서(301)는 슬레이브 프로세서(321, 331)와 다른 타입의 프로세서의 기능을 제공할 수 있다.
일 실시예에서, 마스터 프로세서(301)는 기존의 운영 체제에 의해 지원되는 프로세서 타입의 기능, 예를 들어, x86 또는 x86-64 프로세서의 기능을 제공할 수 있고, 슬레이브 프로세서(321, 331)는 운영 체제에 의해 지원될 필요가 없는 다른 타입의 프로세서가 될 수 있다. 예를 들어, 슬레이브 프로세서(321, 331)는 슬레이브 프로세서(321, 331)에 의해 점유되는 다이(die) 상의 영역을 최소화하기 위해 단순화된 아키텍쳐(architecture)를 포함할 수 있다. 이것은 컴퓨터 시스템(300)의 성능을 향상시키기 위하여 컴퓨터 시스템(300)의 슬레이브 프로세서(321, 331)의 수를 증가시키는 데에 도움을 줄 수 있다. 부가적으로, 슬레이브 프로세서(321, 331)의 단순화된 아키텍쳐는 슬레이브 프로세서(321, 331)의 증가된 클럭 속도(clock rate)가 각각의 개별적인 슬레이브 프로세서의 동작 속도를 증가시키게 할 수 있다.
몇몇 실시예에서, 마스터 프로세서(301) 및 하나 이상의 슬레이브 프로세서(321, 331)는 단일 다이 상에 제공될 수 있다. 다른 실시예에서, 마스터 프로세서(301) 및 슬레이브 프로세서(321, 331)는 다른 다이 상에서 제공될 수 있다.
마스터 프로세서(301)는 지시 비트(indicator bit)(308) 및 제어 레지스터 비트(309)를 포함할 수 있다. 지시 비트(308)는 넌-아키텍쳐널 가시 비트(non-architectural visible bit)일 수 있는데, 이는 컴퓨터 시스템(300)이 현재, 데이 터가 마스터 프로세서(301)에 의해 처리될 수 있는 직렬 연산 모드에서 실행되고 있는지, 아니면 데이터가 마스터 프로세서(301) 및 하나 이상의 슬레이브 프로세서(321, 331)에 의해 처리될 수 있는 병렬 연산 모드에서 실행되고 있는 지를 나타낸다. 제어 레지스터 비트(309)는 병렬 연산 모드가 허용되는지 여부를 나타낸다. 제어 레지스터 비트(309)가 제 1 값, 예를 들어 "온(ON)"으로 설정되면, 프로그램은 컴퓨터 시스템(300)의 병렬 연산 모드로 실행될 수 있다. 하지만, 제어 레지스터 비트(309)가 제 2 값, 예를 들어 "오프(OFF)"로 설정되면, 컴퓨터 시스템(300)은 직렬 연산 모드에서만 이용될 수 있다.
마스터 프로세서(301)와 유사하게, 각 슬레이브 프로세서(321, 331)는 지시 비트 및 제어 레지스터 비트를 포함할 수 있다. 도 2a에서, 참조 번호(328, 338)는 슬레이브 프로세서(321, 331)의 지시 비트를 나타내고, 참조 번호(329, 339)는 슬레이브 프로세서(321, 331)의 제어 레지스터 비트를 나타낸다. 다른 실시예들에서, 슬레이브 프로세서(321, 331)는 지시 비트(328, 329)를 포함할 필요가 없다. 이러한 실시예들에서, 마스터 프로세서(301)의 제어 레지스터 비트(309)는 컴퓨터 시스템(300)의 병렬 연산 모드가 허용됨을 나타내기 위해 이용될 수 있고, 마스터 프로세서(301)의 지시 비트(309)는 컴퓨터 시스템(300)이 병렬 연산 모드에 있음을 나타내는 데에 이용될 수 있다.
제 1 슬레이브 프로세서(321)는 실행 상태 비트(running status bit)(330)를 더 포함할 수 있다. 이러한 실행 상태 비트(330)는 제 1 슬레이브 프로세서(321)가 현재 실행중인지, 아니면 제 1 슬레이브 프로세서(321)가 중단되었는지를 나타낸 다. 예를 들어, 실행 상태 비트(330)의 "온(ON)" 값은 제 1 슬레이브 프로세서(321)가 현재 실행 중임을 나타내고, "오프(OFF)" 값은 제 1 슬레이브 프로세서(321)가 중단되었음을 나타낸다. 제 1 슬레이브 프로세서(321)와 유사하게, 제 2 슬레이브 프로세서(331)도 실행 상태 비트(340)를 포함할 수 있다.
시스템 메모리(304)에는, 버퍼 메모리(313)가 제공될 수 있다. 하기에서 더욱 상세히 설명되는 바와 같이, 컴퓨터 시스템(300)이 병렬 연산 모드에 있는 동안 인터럽트 또는 예외가 발생하는 경우, 버퍼 메모리(313)에는, 마스터 프로세서(301)의 레지스터(302-307)의 일부 또는 모두의 컨텐츠, 슬레이브 프로세서(321, 331)의 레지스터(322-325, 332-335)의 일부 또는 모두의 컨텐츠, 및 예를 들어 지시 비트(308, 328, 338), 제어 레지스터 비트(309, 329, 339) 및/또는 실행 상태 비트(330, 340)의 값들과 같은 다른 정보가 저장될 수 있다. 컴퓨터 시스템(300) 상에서 멀티태스킹이 수행되는 경우, 각 버퍼 메모리는 각 프로세스에 할당될 수 있다.
몇몇 실시예에서, 버퍼 메모리(313)는 컴퓨터 시스템(300)의 병렬 연산 모드가 사용될 프로그램의 코드로부터 CPU 드라이버 루틴을 호출함으로써 할당될 수 있다. 앞에서 설명된 바와 같이, CPU 드라이버 루틴은 레지스터(302-307, 322-325 및 332-335)의 컨텐츠 및 선택적으로 다른 정보를 저장하기에 충분한 크기의 메모리 영역을 할당할 수 있다. 몇몇 실시예에서, 버퍼 메모리(313)는 넌-페이지 풀 시스템 메모리(non-paged pool system memory)에 제공될 수 있는데, 운영 체제에 의해, 예를 들어 하드 디스크와 같은 대용량(mass) 저장 매체로 스왑(swap)되지 않는다. 몇몇 컴퓨터 시스템(300)에서, 넌-페이지 풀 시스템 메모리 내의 메모리의 할당은 CPU 드라이버 루틴들에 대해서만 허용될 수 있다.
유익하게는, 넌-페이지 풀 시스템 메모리 내에 메모리 버퍼(313)를 할당하게 되면, 메모리 버퍼(313)가 항상 물리적 메모리에 존재하고 페이지 폴트가 발생하지 않게 되도록 보장하는 것을 도울 수 있다. 이는 원자단위 연산(즉, 원자적 연산)(atomic operation)에 의해 제 2 복수 레지스터(309-312)의 컨텐츠를 버퍼 메모리(313)에 기록하고 이로부터 판독하며, 그리고 선택적으로는 다른 데이터를 버퍼 메모리(313)에 기록하고 이로부터 판독하는 것을 더 용이하게 할 수 있다. 따라서, 유익하게는, 데이터가 메모리 버퍼(313)에 기록되는 동안의 인터럽트 또는 예외의 경우에 발생할 수 있는 에러들이 회피된다.
CPU 드라이버 루틴은 메모리 버퍼(313)의 메모리 어드레스를 반환하도록 구성될 수 있다. 몇몇 실시에에서, 메모리 어드레스는 가상 어드레스가 될 수 있다. 이것은 컴퓨터 시스템(300) 상에서 실행되는 모든 프로세스를 서로 분리시키는 데에 도움을 줄 수 있으며, 각 프로세스에 대해 개별적인 메모리 페이지를 이용할 것을 요구할 수 있다. 메모리 버퍼(313)의 할당이 불가능하면, 예를 들어 넌-페이지 풀 메모리 영역에서 어떠한 메모리도 이용가능하지 않으면, CPU 드라이버 루틴은 실패를 나타낼 수 있다.
몇몇 실시예에서, 버퍼 메모리(313)를 할당하기 위한 CPU 드라이버 루틴은 프로세서 공급자에 의해 제공될 수 있는 CPU 드라이버의 일부가 될 수 있다. 버퍼 메모리(313)를 할당하기 위한 CPU 드라이버 루틴에 부가하여, 버퍼 메모리(313)를 해제(free)하기 위한 제 2 CPU 드라이버 루틴이 제공될 수 있다. 본 발명의 기술분야에서 숙련된 자들이 숙지하고 있는 바와 같이, CPU 드라이버 루틴은 운영 체제의 부팅 중에 운영 체제에 의해 로딩될 수 있고, 컴퓨터 시스템(300) 상에서 실행중인 프로그램에 의해 실행될 수 있는 기능들을 제공할 수 있다. 따라서, 제 2 연산 모드를 사용하는 프로그램은 메모리 버퍼(313)를 할당 및 해제하기 위한 CPU 드라이버 루틴을 호출할 수 있다.
컴퓨터 시스템(300)은 컴퓨터 시스템(300)의 병렬 연산 모드를 가능하게 하기 위한 인에이블링 명령(enabling instruction)을 포함할 수 있다. 이러한 인에이블링 명령은 오퍼랜드(operand)들로서, 버퍼 메모리(313)의 어드레스, 예를 들어 가상 어드레스 및 트램폴린 명령의 어드레스를 수신한다. 트램폴린 명령은 컴퓨터 시스템(300)에 의해 제공된다. 몇몇 실시예에서, 트램폴린 명령은 마스터 프로세서(301)에 의해 제공된다. 일반적으로, 트램폴린 명령은, 이하에서 더욱 상세하게 설명디는 바와 같이, 인터럽트 루틴의 완료 후에 레지스터(302-307, 322-325 및 332-335)의 일부 또는 전부의 컨텐츠를 복구하기 위해 사용될 수 있다. 트램폴린 명령은 병렬 연산 모드를 사용하는 프로그램에 제공될 수 있고, 트램폴린 명령의 어드레스는 프로그램에 제공되는 트램폴린 명령의 메모리 위치로의 포인터가 될 수 있다.
컴퓨터 시스템(300)은 인에이블링 명령이 호출되는 경우 다음의 단계들을 수행하도록 구성될 수 있다. 컴퓨터 시스템(300)은 제어 레지스터 비트(309)를 검사한다. 제어 레지스터 비트(309)가 병렬 연산 모드가 허용되지 않음을 나타내면, 인 에이블링 명령은 잘못된(illegal) 명령 폴트를 생성할 것이고, 어떠한 추가의 단계들도 수행되지 않는다. 그렇지 않으면, 마스터 프로세서(301)의 레지스터(302-307)의 제 2 서브세트의 첫 번째 것, 예를 들어 레지스터(306)는 버퍼 메모리(313)의 어드레스로 설정될 수 있고, 레지스터(302-307)의 제 2 서브세트(306)의 두 번째 것, 예를 들어 레지스터(307)는 트램폴린 명령의 어드레스로 설정될 수 있다. 다른 실시예들에서, 마스터 프로세서(301)의 레지스터(302-307) 중 다른 하나는 버퍼 메모리(313)의 어드레스 및 트램폴린 명령을 저장하는 데에 사용될 수 있다. 또한, 컴퓨터 시스템(300)은 지시 비트(308) 및 선택적으로 슬레이브 프로세서(321, 331)의 지시 비트(328, 338)를 컴퓨터 시스템이 병렬 연산 모드에 있음을 나타내는 값으로 설정할 수 있다. 이후, 컴퓨터 시스템(300)은 병렬 연산 모드에서 다음 명령을 실행할 수 있다.
몇몇 실시예에서, 인에이블링 명령은 또한 슬레이브 프로세서(321, 331)의 레지스터(322-325, 332-335)를 클리어(clear)하도록 구성될 수 있다. 따라서, 서로 다른 프로세스들 간의 상태 정보의 전파(propagation)가 회피될 수 있게 됨으로써, 컴퓨터 시스템(300)의 안전성(security) 증가에 도움을 줄 수 있다.
컴퓨터 시스템(300)은 마스터 프로세서(301)의 레지스터(302-307) 중 하나 이상의 컨텐츠를 슬레이브 프로세서(321, 331)의 레지스터(322-325, 332-335) 중 하나 이상에 기록하는 변수 송신 명령을 더 포함할 수 있다. 몇몇 실시예에서, 변수 송신 명령은, 오퍼랜드들로서, 컨텐츠가 기록될 레지스터를 포함하는 슬레이브 프로세서(321, 331)의 식별 번호, 슬레이브 프로세서(321, 331)에 송신될 컨텐츠를 포함하는 마스터 프로세서(301)의 레지스터를 식별하는 데이터 및 설정될 값을 포함하는 슬레이브 프로세서(321, 331)의 레지스터를 식별하는 데이터를 수신한다. 일 실시예에서, 변수 송신 명령은 마스터 프로세서(301)의 레지스터 중 하나의 컨텐츠를 한번에 하나의 슬레이브 프로세서(321, 331)에 송신하도록 구성될 수 있고, 마스터 프로세서(301) 및 각 슬레이브 프로세서(321, 331)의 레지스터를 식별하는 데이터는 마스터 프로세서(301) 및 슬레이브 프로세서(321, 331)의 각 레지스터의 식별 번호를 포함할 수 있다.
컴퓨터 시스템(300)은 변수 송신 명령이 호출되면 다음 단계들을 수행하도록 구성될 수 있다. 컴퓨터 시스템(300)은 지시 비트(308)를 검사한다. 지시 비트(308)가 컴퓨터 시스템(300)이 병렬 연산 모드에 있지 않음을 나타내면, 변수 송신 명령은 잘못된 명령 폴트를 생성하고, 그 이상의 어떠한 단계들도 수행되지 않는다. 그렇지 않으면, 변수 송신 명령이 마스터 프로세서(301)에 의해 실행되는지 검사될 수 있다. 변수 송신 명령이 슬레이브 프로세서(321, 331) 중 하나에 의해 실행되면, 잘못된 명령 폴트가 생성되고, 그 이상의 어떠한 행동도 수행되지 않는다. 그렇지 않으면, 변수 송신 명령의 오퍼랜드에서 특정되는 마스터 프로세서(301)의 레지스터(302-307)중 하나 이상의 레지스터의 컨텐츠는 특정된 슬레이브 프로세서(321, 321)의 특정된 레지스터에 기록된다. 이후, 컴퓨터 시스템(300)은 다음 명령을 실행할 수 있다.
컴퓨터 시스템(300)은 슬레이브 프로세서(321, 331) 중 하나의 레지스터(322-325, 332-335) 중 하나 이상의 레지스터의 컨텐츠들을 마스터 프로세 서(301)의 레지스터(302-307) 중 하나 이상의 레지스터에 기록하는 변수 수신 명령을 더 포함할 수 있다. 변수 수신 명령은, 오퍼랜드들로서, 슬레이브 프로세서(321, 331)(이 프로세서로부터 변수들이 수신된다)의 식별 번호, 컨텐츠가 판독될 슬레이브 프로세서(321, 331)의 레지스터를 식별하는 데이터 및 값이 설정될 마스터 프로세서(301)의 레지스터를 식별하는 데이터를 수신한다. 변수 송신 명령과 유사하게, 레지스터들을 식별하는 데이터는 슬레이브 프로세서(321, 331)의 레지스터의 식별 번호 및 마스터 프로세서(301)의 레지스터의 식별 번호를 포함할 수 있다.
컴퓨터 시스템(300)은 변수 수신 명령이 호출되면 이하의 단계들을 수행하도록 구성될 수 있다. 컴퓨터 시스템(300)은 지시 비트(308)를 검사한다. 지시 비트(308)가 컴퓨터 시스템(300)이 병렬 연산 모드에 있지 않음을 나타내면, 변수 수신 명령은 잘못된 명령 폴트를 생성하고, 더 이상의 어떠한 동작도 수행되지 않는다. 그렇지 않으면, 마스터 프로세서(301)에 의해 변수 수신 명령이 실행되는지가 검사된다. 변수 수신 명령이 슬레이브 프로세서(321, 331) 중 하나에 의해 실행되면, 변수 수신 명령은 잘못된 명령 폴트를 생성하고, 더 이상의 어떠한 동작도 수행되지 않는다. 그렇지 않으면, 특정된 슬레이브 프로세서(321, 331) 중 특정된 하나 이상의 레지스터의 컨텐츠가 마스터 프로세서(301)의 특정된 레지스터에 기록된다.
변수 송신 명령 및 변수 수신 명령은 마스터 프로세서(301)와 슬레이브 프로세서(321, 331) 사이에 정보를 교환하는 데에 사용될 수 있다. 특히, 이하에서 더욱 상세하게 설명되는 바와 같이, 변수 송신 명령은 스레드가 슬레이브 프로세 서(321, 331)에서 시작되기 전에 슬레이브 프로세서(321, 331)의 파라미터를 설정하는 데에 사용될 수 있고, 변수 수신 명령은 스레드의 실행이 완료된 후에 결과 값 또는 하나 이상의 결과값을 포함하는 저장 위치에 대한 포인터를 검색하는 데에 사용될 수 있다.
컴퓨터 시스템(300)은 슬레이브 프로세서(321, 331) 중 하나에 의해 명령 실행을 초기화하는 포크 명령을 더 포함할 수 있다. 포크 명령은, 오퍼랜드들로서, 명령 실행이 시작될 슬레이브 프로세서(321, 331)의 식별 번호 및 명령 실행이 시작될 목적 어드레스를 수신할 수 있다.
컴퓨터 시스템(300)은 포크 명령이 호출되면 이하의 단계들을 수행하도록 구성될 수 있다. 컴퓨터 시스템(300)은 지시 비트(308)를 검사할 수 있다. 지시 비트(308)가 컴퓨터 시스템(300)이 병렬 연산 모드에 있지 않음을 나타내면, 잘못된 명령 폴트가 생성되고, 그 이상의 어떠한 동작도 수행되지 않는다. 그렇지 않으면, 마스터 프로세서(301)에 의해 포크 명령이 실행되는지가 검사된다. 포크 명령(301)이 슬레이브 프로세서(321, 331) 중 하나에 의해 실행되면, 잘못된 명령 폴트가 생성되고, 그 이상의 어떠한 동작도 수행되지 않는다. 그렇지 않으면, 지정된 목적 어드레스가 지정된 슬레이브 프로세서(321, 331)에 송신된다. 슬레이브 프로세서(321, 331)는 목적 어드레스를 수신한다. 슬레이브 프로세서(321, 331)에서, 실행 상태 비트(330, 340)는 슬레이브 프로세서(321, 331)가 실행중임을 나타내는 값으로 설정되고, 슬레이브 프로세서(321, 331)는 목적 어드레스에서 명령 실행을 시작한다. 이후, 다른 명령들이 실행될 수 있다.
몇몇 실시예들에서, 명령의 오퍼랜드에서 지정된 각 슬레이브 프로세서(321, 331)가 실행되고 있는 동안, 변수 송신 명령, 변수 수신 명령 및/또는 포크 명령을 이용하게 되면, 예상치못한 결과를 야기할 수 있다. 이러한 실시예들에서는, 컴퓨터 시스템에서 실행되는 프로그램의 코드에 의해 이것이 발생하지 않게 할 수 있다. 다른 실시예들에서, 컴퓨터 시스템(300)은, 오퍼랜드에서 지정된 슬레이브 프로세서(321, 331)가 실행되고 있는 동안 변수 송신 명령, 변수 수신 명령 또는 포크 명령이 호출되는 경우, 잘못된 명령 폴트를 생성할 수 있다.
컴퓨터 시스템(300)은 슬레이브 프로세서(321, 331) 중 하나에 의한 명령 실행을 중지시키는 슬레이브 조인 명령을 더 포함할 수 있다. 이러한 슬레이브 조인 명령은 슬레이브 프로세서(321, 331) 중 하나에 의해 실행될 수 있고, 명령 실행은 슬레이브 조인 명령을 실행하는 슬레이브 프로세서 상에서 중지될 수 있다. 더욱 상세하게는, 컴퓨터 시스템(300)은 슬레이브 조인 명령이 호출되면 이하의 단계들을 수행할 수 있다. 컴퓨터 시스템(300)은 지시 비트(308)를 검사할 수 있다. 지시 비트(308)가 컴퓨터 시스템(300)이 병렬 연산 모드에 있지 않음을 나타내면, 잘못된 명령 폴트가 생성되고, 그 이상의 어떠한 동작도 수행되지 않는다. 그렇지 않으면, 슬레이브 프로세서(321, 331) 중 하나에 의해 슬레이브 조인 명령이 실행되는지가 검사될 수 있다. 슬레이브 조인 명령이 슬레이브 프로세서(321, 331) 상에서 실행되지 않으면, 잘못된 명령 폴트가 생성되고, 그 이상의 어떠한 동작도 수행되지 않는다. 그렇지 않으면, 실행 상태 비트(330)는 슬레이브 프로세서(321, 331)가 실행중이 아님을 나타내는 값으로 설정되고, 슬레이브 프로세서(321, 331)에서의 명령 실행은 중지될 수 있다.
컴퓨터 시스템(300)은 마스터 프로세서(301)로 하여금 슬레이브 프로세서(321, 331) 중 하나에서의 명령 실행이 중지될 때 까지 대기하게 하는 마스터 조인 명령을 더 포함할 수 있다. 이러한 마스터 조인 명령은, 오퍼랜드들로서, 마스터 프로세서(310)가 기다려야 하는 슬레이브 프로세서(321, 331) 중 하나의 식별 번호를 수신할 수 있다.
컴퓨터 시스템(300)은 마스터 조인 명령이 호출되면 이하의 단계들을 수행하도록 구성될 수 있다. 컴퓨터 시스템(300)은 지시 비트(308)를 검사할 수 있다. 지시 비트(308)가 컴퓨터 시스템(300)이 병렬 연산 모드에 있지 않음을 나타내면, 잘못된 명령 폴트가 생성되고, 더 이상의 어떠한 동작도 수행되지 않는다. 그렇지 않으면 마스터 프로세서(301)에 의해 마스터 조인 명령이 실행되는지가 검사된다. 마스터 조인 명령이 마스터 프로세서(301)에 의해 실행되지 않으면, 잘못된 명령 폴트가 생성되고, 더 이상의 어떠한 동작도 수행되지 않는다. 그렇지 않으면, 마스터 조인 명령의 오퍼랜드에서 지정된 슬레이브 프로세서(321, 331)의 실행 상태 비트(330, 340)가 각 슬레이브 프로세서(321, 331)가 실행 중임을 나타내는지를 검사한다. 그런 다음, 마스터 프로세서(301)는, 실행 상태 비트(330, 340)가 슬레이브 프로세서(321, 331)가 더 이상 실행 중이 아님을 나타내는 값으로 설정될 때 까지 대기한다. 이후, 마스터 프로세서(301)에서의 명령 실행은 마스터 조인 명령에 후속하는 명령으로 계속될 수 있다.
다른 실시예들에서, 마스터 조인 명령은 각 슬레이브 프로세서(321, 331)가 계속 실행 중인지 아닌지를 검사할 수 있다. 그런 다음, 마스터 조인 명령은 이러한 결과를 아키텍쳐널 가시 레지스터(architectural visible register), 예를 들어 마스터 프로세서(301)의 레지스터(302-307) 중 하나에 반환한다. 컴퓨터 시스템(300) 상에서 실행되는 프로그램은 그 상태를 이용하여 다른 동작을 결정할 수 있다. 따라서, 마스터 프로세서(301)는 각 슬레이브 프로세서(321, 331)의 실행 상태를 검사한 다음, 프로그램 실행을 계속할 수 있다. 이러한 실시예에서, 마스터 조인 명령의 다른 특징들은 상기에서 설명된 다른 실시예들의 특징들과 유사하다.
슬레이브 조인 명령 및 마스터 조인 명령은 마스터 프로세서(301) 및 슬레이브 프로세서(321, 331)에서 실행하는 스레드를 동기화시키는 데에 사용될 수 있다. 마스터 조인 명령은 슬레이브 코어(321, 331) 중 하나를 정확히 지정한다. 따라서, 상이한 슬레이브 프로세서에서 실행하는 스레드는 모든 스레드에 대한 공통 조인 포인트(join point)를 필요로 하지 않으면서 프로그램의 실행 동안 상이한 시점들에서 동기화될 수 있다. 따라서, 보다 큰 정도의 유연성(flexibility)을 얻을 수 있다.
본 발명은 서로 구분되는 마스터 조인 명령 및 슬레이브 조인 명령이 제공되는 실시예들로 한정되지 않는다. 다른 실시예들에서는, 단일 조인 명령이 제공될 수 있다. 조인 명령이 호출되면, 조인 명령이 마스터 프로세서(301) 또는 슬레이브 프로세서(321, 331) 중 하나에서 실행되는지가 검사된다. 조인 명령이 슬레이브 프로세서(321, 331) 중 하나에서 실행되면, 슬레이브 조인 명령에 대해 상기에서 설명된 것에 대응하는 단계들이 수행된다. 반대로, 조인 명령이 마스터 프로세서(301)에서 실행되면, 마스터 조인 명령에 대해 상기에서 설명된 것에 대응하는 단계들이 수행된다.
이상에서 이미 언급된 바와 같이, 컴퓨터 시스템(300)은 트램폴린 명령을 더 포함할 수 있다. 트램폴린 명령은 인터럽트 루틴의 완료 후에 마스터 프로세서(301)의 레지스터(302-307) 및 슬레이브 프로세서(321, 331)의 레지스터(322-325, 332-335)의 일부 또는 전부의 컨텐츠를 복구하는 데에 사용될 수 있다.
트램폴린 명령은, 마스터 프로세서(301)에서 인터럽트가 발생하면 컴퓨터 시스템(300)을 병렬 연산 모드로 전환하고, 버퍼 메모리(313)로부터 레지스터(322-325, 332-335)의 컨텐츠 및 마스터 프로세서(301)의 복귀 어드레스를 판독하는 단계를 수행할 수 있다. 부가적으로, 레지스터(302-307) 중 제 2 서브세트(306, 307)의 컨텐츠들이 버퍼 메모리로부터 판독될 수 있다.
트램폴린 명령은, 슬레이브 프로세서(321, 331) 중 하나에서 인터럽트 또는 예외가 발생하면 컴퓨터 시스템(300)을 병렬 연산 모드로 전환하고, 버퍼 메모리로부터 슬레이브 프로세서(321, 331)의 레지스터(322-325, 332-335)의 컨텐츠를 판독하고, 인터럽트 또는 예외가 발생한 슬레이브 코어(321, 331)의 레지스터에 마스터 프로세서의 레지스터(302-307) 중 하나 이상의 레지스터의 컨텐츠를 기록하며, 그리고 버퍼 메모리로부터 마스터 프로세서(301)의 레지스터(302-307)의 컨텐츠를 판독하는 단계를 수행할 수 있다.
몇몇 실시예에서, 컴퓨터 시스템(300)은 트램폴린 명령이 호출되면 이하의 단계들을 수행하도록 구성될 수 있다. 컴퓨터 시스템(300)은 제어 레지스터 비트(309)를 검사할 수 있다. 제어 레지스터 비트(309)가 컴퓨터 시스템(300)의 병렬 연산 모드가 허용되지 않음을 나타내면, 잘못된 명령 폴트가 생성된다. 그렇지 않으면, 버퍼 메모리(313)의 어드레스가 마스터 프로세서(301)의 레지스터(302-307) 중 하나로부터 판독될 수 있다. 몇몇 실시예에서, 버퍼 메모리(313)의 어드레스는 마스터 프로세서(301)의 레지스터(302-307)의 제 1 서브세트 중 하나, 예를 들어 레지스터(305)로부터 판독될 수 있다.
이후, 컴퓨터 시스템(300)은 버퍼 메모리(313)로부터 인터럽트 또는 예외를 발생하게 한 프로세서의 식별 번호를 판독할 수 있다. 몇몇 실시예에서, 마스터 프로세서(301)는 식별 번호 0을 가질 수 있고, 제 1 슬레이브 프로세서(321)는 식별 번호 1을 가질 수 있으며, 제 2 슬레이브 프로세서(331)는 식별 번호 2를 가질 수 있다. 2개와 다른 다수의 슬레이브 프로세서가 제공되는 실시예들에서, 각 슬레이브 프로세서는 0보다 큰 자연수인 식별 번호를 가질 수 있고, 마스터 프로세서(301)는 식별 번호 0을 가질 수 있다. 다른 실시예들에서는, 프로세서들(301, 321, 331)의 다른 넘버링 방식이 이용될 수 있다. 컴퓨터 시스템(300)은 식별 번호로부터, 인터럽트 또는 예외가 마스터 프로세서(301)에 의해 발생되었는지, 아니면 슬레이브 프로세서(321, 331) 중 하나에 의해 발생되었는지를 결정할 수 있다.
마스터 프로세서(301)에 의해 인터럽트 또는 예외가 발생하게 되면(이것은 프로세서 식별 번호가 0이 되는 것에 의해 표시될 수 있다), 컴퓨터 시스템(300)은 버퍼 메모리(313)로부터 제 1 슬레이브 프로세서(321)의 각 레지스터(322-325) 및 제 2 슬레이브 프로세서(331)의 각 레지스터(332-335)의 컨텐츠를 판독할 수 있다. 부가적으로, 마스터 프로세서(301)의 레지스터(302-307)의 제 2 서브세트(306, 307)의 컨텐츠가 버퍼 메모리(313)로부터 판독될 수 있다. 또한, 마스터 프로세서(301)의 복귀 어드레스가 버퍼 메모리로부터 판독될 수 있다. 몇몇 실시예에서, 마스터 프로세서의 복귀 어드레스는 마스터 프로세서(301)의 레지스터 중 하나, 예를 들어 레지스터(302)에 기록될 수 있다. 또한, 슬레이브 프로세서(321, 331)의 실행 상태 비트(330, 340)가 버퍼 메모리(313)로부터 판독될 수 있다. 몇몇 실시예에서, 버퍼 메모리(313)로부터 판독된 슬레이브 프로세서(321, 331)의 레지스터(322-325, 332-335)의 컨텐츠는 슬레이브 프로세서(321, 331)의 복귀 어드레스를 포함할 수 있다. 다른 실시예에서, 슬레이브 프로세서(321, 331)의 복귀 어드레스는 버퍼 메모리(313)로부터 개별적으로 판독될 수 있다.
이후, 마스터 프로세서(301)의 레지스터(302-307)의 제 2 서브세트(306, 307) 중 하나의 컨텐츠, 예를 들어 레지스터(306)의 컨텐츠와, 버퍼 메모리의 어드레스가 판독되는 레지스터의 컨텐츠, 예를 들어 레지스터(305)의 컨텐츠가 교환(swap)될 수 있다. 따라서, 버퍼 메모리(313)의 어드레스는 레지스터(306)에 기록되는데, 이는 버퍼 메모리(313)의 어드레스가 인에이블링 명령에 의해 저장되는 레지스터가 될 수 있다. 버퍼 메모리(313)로부터 판독된 제 2 서브세트(306, 307)의 다른 레지스터, 예를 들어 레지스터(307)는 트램폴린 명령의 어드레스를 포함할 수 있다.
이후, 지시 비트(308)는 컴퓨터 시스템(300)이 병렬 연산 모드에 있음을 나타내는 값, 예를 들어 "온(ON)" 값으로 설정될 수 있다. 따라서, 컴퓨터 시스템(300)은 병렬 연산 모드로 전환될 수 있고, 명령 실행은 실행 상태 비트(330, 340)가 각 슬레이브 프로세서(321, 331)의 실행 상태를 나타내는 각 슬레이브 프로세서(321, 331)에서 시작될 수 있다. 마스터 프로세서(301)에서, 명령 실행은 버퍼 메모리(301)로부터 판독되는 복귀 어드레스에서 시작될 수 있다. 따라서, 인터럽트 또는 예외에 의해 중단된 프로그램의 처리는 컴퓨터 시스템(300)의 병렬 연산 모드에서 계속될 수 있다.
인터럽트 또는 예외가 슬레이브 프로세서(321, 331) 중 하나에 의해 야기되었다면, 실행 상태 비트(330, 340) 뿐만 아니라, 제 1 슬레이브 프로세서(321)의 레지스터(322-325) 및 제 2 슬레이브 프로세서(331)의 레지스터(332-335)의 컨텐츠가 버퍼 메모리(313)로부터 판독될 수 있다. 부가적으로, 마스터 프로세서(301)의 레지스터(302-307)의 제 2 서브세트(306, 307)의 컨텐츠는 버퍼 메모리(313)로부터 판독될 수 있다. 레지스터(307), 또는 다른 실시예에서는, 레지스터의 제 2 서브세트(306, 307) 중 다른 하나는 트램폴린 명령의 어드레스를 포함할 수 있다.
이후, 버퍼 메모리의 어드레스가 판독된 레지스터 중 하나의 컨텐츠, 예를 들어 레지스터(305)의 컨텐츠는, 예를 들어 버퍼 메모리(313)에서 제공될 수 있는 임시 레지스터(temporary register)에 기록될 수 있고, 인터럽트 또는 예외를 발생한 슬레이브 프로세서(321, 331)의 대응하는 레지스터의 컨텐츠는 버퍼 메모리(313)로부터 레지스터(305)에 판독될 수 있다. 예를 들어, 인터럽트 또는 예외가 제 1 슬레이브 프로세서(321)에 의해 발생되면, 제 1 슬레이브 프로세서(321)의 레지스터(325)의 저장된 컨텐츠가 버퍼 메모리(313)로부터 레지스터(305)에 판독될 수 있다. 인터럽트 또는 예외가 제 2 슬레이브 프로세서(331)에 의해 발생되면, 제 2 슬레이브 프로세서(331)의 레지스터(335)의 저장된 컨텐츠가 버퍼 메모리(313)로부터 레지스터(305)로 판독될 수 있다.
이하에서 더욱 상세하게 설명되는 바와 같이, 인터럽트 루틴의 완료 후, 제 1 프로세서(301)의 다른 레지스터(302-305)는, 레지스터 중 일부의 컨텐츠가 인터럽트 루틴에 의해 수정된 인터럽트 또는 예외가 발생한 슬레이브 프로세서(321, 331)의 레지스터의 컨텐츠를 포함할 수 있다. 이에 따라, 인터럽트 또는 예외가 발생한 슬레이브 프로세서의 대응하는 레지스터의 컨텐츠를 마스터 프로세서(301)의 레지스터(305)에 기록한 후, 마스터 프로세서(301)의 레지스터의 제 1 서브세트(302-305)는 인터럽트 또는 예외가 발생한 슬레이브 프로세서의 대응하는 레지스터의 컨텐츠를 나타내는 데이터를 포함하며, 레지스터 중 일부 레지스터의 컨텐츠는 인터럽트 루틴에 의해 수정된 것일 수 있다.
마스터 프로세서(301)의 레지스터(302-305)의 제 1 서브세트(302-305)의 컨텐츠는 이제 인터럽트 또는 예외가 발생한 슬레이브 프로세서(321, 331)의 레지스터에 기록될 수 있다. 예를 들어, 인터럽트 또는 예외가 제 1 슬레이브 프로세서(321)에서 발생하면, 레지스터(302-305)의 컨텐츠는 제 1 슬레이브 프로세서(321)의 레지스터(322-325)에 기록될 수 있다. 인터럽트 또는 예외가 제 2 슬레이브 프로세서(331)에서 발생하면, 레지스터(302-305)의 컨텐츠는 제 2 슬레이브 프로세서(331)의 레지스터(332-335)에 기록될 수 있다. 따라서, 인터럽트 루틴에 의해 야기된 레지스터 컨텐츠의 수정은 슬레이브 프로세서(321, 331)의 레지스터들에 기록될 수 있다.
본 발명은 마스터 프로세서의 레지스터(302-307)의 제 1 서브세트(302-305) 각각의 컨텐츠가 인터럽트 또는 예외를 발생한 슬레이브 프로세서의 레지스터에 복사되는 실시예들로 한정되지 않는다. 다른 실시예들에서는, 인터럽트 루틴에 의해 수정될 수 있는 레지스터의 제 1 서브세트(302-305) 중 일부의 컨텐츠 만이 슬레이브 프로세서에 복사될 수 있다. 따라서, 더욱 적은 양의 데이터가 마스터 프로세서(301)에서 슬레이브 프로세서(321, 331)로 복사될 필요가 있기 때문에, 트램폴린 명령의 실행이 가속화될 수 있다.
마스터 프로세서(301)의 레지스터(302-307)의 제 1 서브세트(302-305)의 일부 또는 전부의 컨텐츠를 인터럽트 또는 예외를 야기한 슬레이브 프로세서(321, 331)의 레지스터에 기록한 후, 마스터 프로세서(301)의 복귀 어드레스를 또한 포함할 수 있는 마스터 프로세서(301)의 레지스터(302-307)의 제 1 서브세트(302-305)의 컨텐츠가 버퍼 메모리(313)로부터 판독될 수 있다. 또한, 임시 레지스터에 저장된 버퍼 메모리(313)의 어드레스는 마스터 프로세서(301)의 제 2 복수 레지스터 중 하나, 예를 들어 레지스터(306)에 기록될 수 있다. 따라서, 인터럽트 또는 예외 전의 마스터 프로세서(301)의 상태가 복구될 수 있다.
후속적으로, 마스터 프로세서(300)의 지시 비트(308) 및 선택적으로 슬레이브 프로세서(321, 331)의 지시 비트(328, 338)는 컴퓨터 시스템(300)이 병렬 연산 모드에서 동작함을 나타내는 값으로 설정될 수 있고, 명령 실행은 실행 상태 비트(330, 340)가 인터럽트 또는 예외 전에 각 슬레이브 프로세서가 실행중이었음을 나타내는 슬레이브 프로세서(321, 331)에서 가능하게 될 수 있다. 또한, 마스터 프 로세서(301)의 명령 실행은 마스터 프로세서(301)의 복귀 어드레스에서 시작될 수 있다. 따라서, 컴퓨터 시스템(300)에서, 프로그램의 실행이 계속될 수 있다.
컴퓨터 시스템(300)은 트램폴린 명령의 상기 설명된 단계들을 원자단위 연산으로 수행하게 될 수 있다. 따라서, 유익하게는, 트램폴린 명령의 실행 중에 발생하는 인터럽트 또는 예외로 인한 에러들이 회피될 수 있다.
컴퓨터 시스템(300)은 컴퓨터 시스템을 병렬 연산 모드에서 직렬 연산 모드로 전환시키는 엔드 명령(end instruction)을 더 포함할 수 있다. 이를 위하여, 컴퓨터 시스템(300)은 지시 비트(308) 및 선택적으로 슬레이브 프로세서(321, 331)의 지시 비트(328, 338)를 컴퓨터 시스템(300)이 직렬 연산 모드에서 동작하고 있음을 나타내는 값으로 설정할 수 있다. 일 실시예에서, 지시 비트(308, 328, 338)는 "오프(OFF)" 값으로 설정될 수 있다.
컴퓨터 시스템(300)은 또한, 병렬 연산 모드 중에 발생하는 인터럽트 또는 예외의 경우, 마스터 프로세서(301)의 레지스터(302-307) 및 슬레이브 프로세서(321, 331)의 레지스터(322-325, 332-335)의 컨텐츠 중 적어도 일부의 컨텐츠 및 선택적으로 슬레이브 프로세서(321, 331)의 실행 상태 비트(330, 340)의 값을 버퍼 메모리(313)에 저장하고, 컴퓨터 시스템(300)을 직렬 연산 모드로 전환하는 단계를 수행할 수 있다. 인터럽트 또는 예외가 슬레이브 프로세서(321, 331) 중 하나에서 발생하면, 컴퓨터 시스템(300)은 마스터 프로세서의 레지스터(302-307) 중 적어도 하나의 컨텐츠를 각 슬레이브 프로세서의 레지스터 중 적어도 하나의 컨텐츠로 설정할 수 있다. 따라서, 프로세서(301, 321, 331)의 레지스터의 데이터는 운영 체제 와 독립적으로 저장될 수 있다. 인터럽트 또는 예외가 슬레이브 프로세서(321, 331) 중 하나에서 발생하면, 운영 체제의 인터럽트 루틴과 관련된 데이터는 슬레이브 프로세서(321, 331)로부터 마스터 프로세서(301)의 레지스터에 기록될 수 있다. 따라서, 이러한 데이터는 운영 체제에 의해 처리될 수 있고, 이러한 운영 체제는 슬레이브 프로세서(321, 331)의 존재를 고려할 필요가 없다. 특히, 운영 체제는 슬레이브 프로세서(321, 331) 중 어떠한 것으로부터도 인터럽트 루틴의 실행과 관련된 데이터를 획득할 필요가 없다.
몇몇 실시예에서, 컴퓨터 시스템(300)은 지시 비트(308)가 컴퓨터 시스템(300)이 제 2 연산 모드에 있음을 나타내는 값으로 설정되는 동안 인터럽트 또는 예외가 발생하면, 이하의 단계들을 수행하도록 구성될 수 있다. 컴퓨터 시스템(300)에 의해 수행되는 동작들은 인터럽트 또는 예외가 마스터 프로세서(301) 또는 슬레이브 프로세서(321, 331)에서 발생하는지에 의존할 수 있다.
인터럽트 또는 예외가 마스터 프로세서(301)에서 발생하면, 컴퓨터 시스템(300)은 슬레이브 프로세서(321, 331)에서의 명령 실행을 중단할 수 있다. 슬레이브 프로세서(321, 331) 각각에서 명령의 실행이 중단된 후, 컴퓨터 시스템(300)은 슬레이브 프로세서(321, 331)의 레지스터(322-325, 332-335)의 컨텐츠를 버퍼 메모리(313)에 기록할 수 있고, 그 어드레스는 마스터 프로세서(301)의 레지스터(302-307)의 제 2 서브세트(306, 307) 중 하나, 예를 들어 레지스터(306)로부터 판독될 수 있다. 이 레지스터들은 슬레이브 프로세서(321, 331) 각각에 대한 복귀 어드레스를 포함할 수 있다. 부가적으로, 슬레이브 프로세서(321, 331)의 실행 상 태 비트(330, 340)가 버퍼 메모리(313)에 저장될 수 있다. 실행 상태 비트(330, 340)는 인터럽트 또는 예외가 발생하기 전에 슬레이브 프로세서(321, 331) 각각이 명령들을 실행하고 있었는지를 나타낸다. 또한, 마스터 프로세서(301)의 식별 번호가 버퍼 메모리(313)에 저장될 수 있다. 상기에서 이미 언급된 바와 같이, 몇몇 실시예에서, 마스터 프로세서(301)는 식별 번호 0을 가질 수 있다. 이러한 실시예들에서, 인터럽트 또는 예외가 마스터 프로세서(301)에서 발생하면, 식별 번호 0이 버퍼 메모리(313)에 저장될 수 있다.
이후, 몇몇 실시예들에서, 레지스터(306)가 될 수 있는 버퍼 메모리(313)의 어드레스를 포함하는 마스터 프로세서(301)의 레지스터(302-307)의 제 2 서브세트(306, 307) 중 하나의 컨텐츠는, 마스터 프로세서(301)의 레지스터(302-307)의 제 1 서브세트(302-305) 중 하나의 컨텐츠, 예를 들어 레지스터(305)의 컨텐츠로 교체될 수 있다. 레지스터(306)와 교체된 컨텐츠를 포함하는 레지스터는 버퍼 메모리(313)의 어드레스가 트램폴린 명령에 의해 판독되는 레지스터와 같을 수 있다.
마스터 프로세서(301)의 레지스터(302-305)의 제 1 서브세트는 종래 기술에 따른 프로세서의 레지스터들의 세트에 대응할 수 있다. 이에 따라, 컴퓨터 시스템(300) 상에서 실행되는 종래 기술에 따른 프로세서에 적합한 운영 체제는, 인터럽트 또는 예외가 발생한 경우 마스터 프로세서(301)의 레지스터의 제 1 서브세트(302-305)의 컨텐츠를 저장하고, 운영 체제의 일부가 되는 인터럽트 루틴의 완료 후에 레지스터의 제 1 서브세트(302-305)의 컨텐츠를 복구할 수 있다. 따라서, 버퍼 메모리의 어드레스를 포함하는 레지스터 및 레지스터의 제 1 서브세트(302-305) 중 하나의 컨텐츠를 교체하는 것은, 버퍼 메모리의 어드레스가 인터럽트 루틴의 완료 후에 마스터 프로세서(301)의 레지스터(302-305) 중 하나에 존재한다는 것과, 트램폴린 명령에 의해 접근될 수 있다는 것을 보장한다. 또한, 컴퓨터 시스템(300)의 병렬 연산 모드에서, 제 1 서브세트의 각 레지스터(302-305)는, 병렬 연산 모드에서 버퍼 메모리(313)의 어드레스가 마스터 프로세서의 레지스터의 제 2 서브세트(306, 307) 중 하나에 저장되기 때문에, 컴퓨터 시스템(300) 상에서 실행되는 프로그램에 의해 사용될 수 있다. 따라서, 컴퓨터 시스템(300)의 종래 기술에 따른 컴퓨터 시스템(100)과의 호환성이 향상될 수 있다.
그런 다음, 마스터 프로세서(301)의 레지스터(302-307)의 제 2 서브세트(306, 307)의 컨텐츠는 버퍼 메모리(313)에 저장될 수 있다. 이후, 마스터 프로세서(301)의 복귀 어드레스가 검색될 수 있다. 몇몇 실시예에서, 마스터 프로세서(301)의 복귀 어드레스는 레지스터의 제 1 서브세트 중 하나, 예를 들어 레지스터(302)로부터 판독될 수 있다. 마스터 프로세서(301)의 복귀 어드레스를 저장한 후, 마스터 프로세서(301)의 복귀 어드레스는 마스터 프로세서(301)의 레지스터(302-307)의 제 2 서브세트(306, 307) 중 하나, 예를 들어 레지스터(307)로부터 판독될 수 있는 트램폴린 명령의 어드레스로 교체될 수 있다. 따라서, 운영 체제의 인터럽트 루틴이 완료된 후, 트램폴린 명령은 운영 체제에 의해 복구되지 않는 마스터 프로세서(301)의 레지스터의 제 2 서브세트(306, 307)의 컨텐츠, 슬레이브 프로세서(321, 331)의 레지스터(322-325, 332-335)의 컨텐츠 및 슬레이브 프로세서(321, 331)의 실행 상태 비트(330, 340)를 복구하기 위해 호출될 수 있다. 슬레 이브 프로세서(321, 331)는 각 슬레이브 프로세서(321, 331)에 대한 복귀 어드레스를 포함한다.
인터럽트 또는 예외가 슬레이브 프로세서(321, 331) 중 하나에서 발생하면, 각 슬레이브 프로세서(321, 331) 뿐만 아니라 마스터 프로세서(301)에서의 명령 실행도 중단될 수 있다. 명령의 실행이 모든 프로세서(301, 321, 331)에서 중지된 후, 컴퓨터 시스템(300)은 마스터 프로세서(301)의 각 레지스터(302-307)의 컨텐츠를 버퍼 메모리(313)에 저장할 수 있으며, 각 레지스터(302-307)의 어드레스는 마스터 프로세서(301)의 레지스터(302-307)의 제 2 서브세트(306, 307) 중 하나, 예를 들어 레지스터(306)로부터 판독될 수 있다. 부가적으로, 각 슬레이브 프로세서(321, 331)의 실행 상태 비트(330, 340)의 값 뿐만 아니라, 각 슬레이브 프로세서(321, 331)의 레지스터(322-325, 332-335)의 컨텐츠도 버퍼 메모리(313)에 저장될 수 있다. 실행 상태 비트(330, 340)의 값은 인터럽트 또는 예외가 발생한 시점에 어떤 슬레이브 프로세서(321, 331)가 실행 중이었는지를 나타낸다.
이후, 버퍼 메모리(313)의 어드레스가 저장되는 마스터 프로세서(301)의 레지스터(302-307)의 제 2 서브세트(306, 307) 중 하나의 컨텐츠는, 몇몇 실시예에서 버퍼 메모리(313)에서 제공될 수 있는 임시 레지스터에 기록될 수 있다. 부가적으로, 인터럽트 또는 예외가 발생한 슬레이브 프로세서(321, 331)의 식별 번호가 버퍼 메모리(313)에 저장될 수 있다. 몇몇 실시예들에서, 제 1 슬레이브 프로세서(321)는 식별 번호 1을 갖고, 제 2 슬레이브 프로세서(331)는 식별 번호 2를 갖는다. 이러한 실시예들에서, 인터럽트 또는 예외가 제 1 슬레이브 프로세서(321)에 서 발생하면, 식별 번호 1이 버퍼 메모리(313)에 저장되고, 인터럽트 또는 예외가 제 2 슬레이브 프로세서(331)에서 발생하면, 식별 번호 2가 버퍼 메모리(313)에 저장될 수 있다. 슬레이브 프로세서(321, 331)의 레지스터는 각 슬레이브 프로세서(321, 331)의 복귀 어드레스를 포함할 수 있다.
후속적으로, 인터럽트 또는 예외가 발생한 슬레이브 프로세서(321, 331)의 레지스터의 컨텐츠는 마스터 프로세서(301)의 레지스터(302-307)의 제 1 서브세트(302-305)에 기록될 수 있다. 인터럽트 또는 예외가 제 1 슬레이브 프로세서(321)에서 발생하면, 제 1 슬레이브 프로세서(321)의 레지스터(322-325)의 컨텐츠는 마스터 프로세서(301)의 레지스터(302-305)에 기록될 수 있다. 유사하게, 인터럽트 또는 예외가 제 2 슬레이브 프로세서(331)에서 발생하면, 제 2 슬레이브 프로세서(331)의 레지스터(322-325)의 컨텐츠가 레지스터(302-305)에 기록될 수 있다. 본 발명은 제 1 슬레이브 프로세서(321) 또는 제 2 슬레이브 프로세서(331)의 각 레지스터(322-325 또는 332-335)의 컨텐츠가 각각 마스터 프로세서(301)의 대응하는 레지스터에 각각 기록되는 실시예로 한정되지 않는다. 다른 실시예들에서는, 운영 체제의 인터럽트 루틴에 의해 수정될 수 있는 일부 슬레이브 프로세서 레지스터들의 컨텐츠 만이 마스터 프로세서(301)의 레지스터에 기록될 수 있다.
인터럽트 루틴에서, 운영 체제는 종래 기술에 따른 프로세서의 레지스터들의 세트, 예를 들어 도 1a에서 도 1b를 참조하여 상기에서 설명된 종래 프로세서(101)의 레지스터(102-105)에 대응할 수 있는 마스터 프로세서(301)의 레지스터(302-307)의 제 1 서브세트(302-305)의 컨텐츠를 처리할 수 있다. 인터럽트 또는 예외에 대한 다른 정보를 포함하는 슬레이브 프로세서(321, 331)의 스택의 메모리 어드레스를 포함하는 레지스터(302-305)의 컨텐츠는 운영 체제와 관련된 인터럽트 또는 예외에 관한 모든 정보를 포함할 수 있다.
인터럽트 또는 예외가 발생한 슬레이브 프로세서(321, 331)의 레지스터의 컨텐츠를 마스터 프로세서(301)의 레지스터(302-305)에 기록한 후, 마스터 프로세서(301)의 상태는, 인터럽트 또는 예외가 마스터 프로세서(301)에서 발생했을 경우 달성되었을 상태에 대응할 수 있다. 이에 따라, 운영 체제에게는, 마스터 프로세서(301)가 인터럽트 또는 예외에 직면했던 것처럼 보일 것이다. 따라서, 운영 체제는 운영 체제가 단일 프로세서 만을 포함하는 컴퓨터 시스템에 적합하게 되는 실시예들에서도 인터럽트 또는 예외를 처리할 수 있다.
이후, 마스터 프로세서(301)의 레지스터(302-307)의 제 1 서브세트(302-305) 중 하나, 예를 들어 레지스터(305)(레지스터의 컨텐츠가 인터럽트 또는 예외가 발생한 슬레이브 프로세서(321, 331)의 대응하는 레지스터의 컨텐츠와 동일한)의 컨텐츠는, 그 어드레스가 임시 버퍼로부터 검색될 수 있는 버퍼 메모리(313)에 기록될 수 있고, 버퍼 메모리(313)의 어드레스는 레지스터(305)에 기록될 수 있다. 따라서, 버퍼 메모리(313)의 어드레스가 인터럽트 루틴의 완료 후에 운영 체제에 의해 복구될 수 있는 마스터 프로세서(301)의 레지스터(302-307)의 제 1 서브세트(302-305) 중 하나에 제공될 수 있다.
후속적으로, 마스터 프로세서(301)의 복귀 어드레스가 버퍼 메모리(313)에 저장될 수 있고, 마스터 프로세서(301)의 레지스터(302-307)의 제 2 서브세트(306, 307) 중 하나, 예를 들어 레지스터(307)로부터 판독될 수 있는 마스터 프로세서(301)의 복귀 어드레스가 트램폴린 명령의 어드레스로 대체될 수 있다. 따라서, 트램폴린 명령은 인터럽트 루틴의 완료 후에 실행될 수 있다.
컴퓨터 시스템(300)의 병렬 연산 모드 중에 발생하는 인터럽트 또는 예외의 경우 컴퓨터 시스템(300)에 의해 수행되는 상기 설명한 단계들은 원자단위 연산으로 수행될 수 있다. 따라서, 본 발명의 기술분야에서 숙련된 자들이 아는 바와 같이, 컴퓨터 시스템(300)이 상기 단계들을 수행하는 동안의 인터럽트 또는 예외의 발생이 회피될 수 있다.
상기 설명한 단계들을 수행한 후, 인터럽트 또는 예외가 마스터 프로세서(301) 또는 슬레이브 프로세서(321, 331) 중 하나에서 발생되는지에 관계없이, 컴퓨터 시스템(300)은 마스터 프로세서(301)의 지시 비트(308)에 컴퓨터 시스템(300)이 직렬 연산 모드에 있음을 나타내는 값, 예를 들어 "오프(OFF)" 값을 설정할 수 있다. 이러한 방식으로, 컴퓨터 시스템(300)은 직렬 연산 모드로 전환될 수 있다. 이후, 운영 체제의 인터럽트 루틴이 수행될 수 있다.
하기에서는, 컴퓨터 시스템(300)의 동작이 도 2b 및 도 2c를 참조하여 설명되는 바, 도 2b는 컴퓨터 시스템(300) 상에서 실행하는 프로그램(400)의 개략적인 흐름도를 나타내고, 도 2c는 프로그램(400) 및 인터럽트 루틴(502)의 개략적인 흐름도를 나타낸다.
마스터 프로세서(301) 및 슬레이브 프로세서(321, 331)는 컴퓨터 시스템(300)의 운영 체제가 로딩되기 전에 식별될 수 있다. 몇몇 실시예에서, 마스터 프로세서(301) 또는 슬레이브 프로세서(321, 331) 중 하나가 되는 프로세서의 할당은 하드웨어의 형태로 제공될 수 있다. 몇몇 실시예에서, 마스터 프로세서(301) 또는 슬레이브 프로세서(321, 331) 중 하나가 되는 프로세서의 할당은 컴퓨터 시스템(300)의 수명 동안 일정하게 유지될 것이다. 다른 실시예들에서, 마스터 프로세서(301) 또는 슬레이브 프로세서(321, 331) 중 하나가 되는 프로세서의 할당은 소프트웨어에 의해 영향받을 수 있다. 예를 들어, 마스터 프로세서(301) 및 슬레이브 프로세서(321, 331)는 컴퓨터 시스템(300)의 기본 입출력 소프트웨어(BIOS)에 의해 식별될 수 있다. 이러한 실시예들에서, 프로세서들의 할당은 컴퓨터 시스템(300)의 BIOS 설정을 변경함으로써 바뀔 수 있다.
마스터 프로세서(301) 및 슬레이브 프로세서(321, 331)를 식별한 후, 컴퓨터 시스템(300)의 운영 체제가 로딩될 수 있다. 운영 체제가 시작되었을 때, 컴퓨터 시스템(300)은 직렬 연산 모드일 수 있다. 따라서, 마스터 프로세서(301)는 종래 기술에 따른 컴퓨터 프로세서의 기능성, 예를 들어 도 1a 및 도 1b를 참조하여 상기에서 설명된 컴퓨터 시스템(100)에서 프로세서(101)의 기능을 제공할 수 있다. 따라서, 컴퓨터 시스템(300)은, 몇몇 실시예에서, 종래 기술에 따른 컴퓨터 시스템(100)에 부합될 수 있는 운영 체제와 협력할 수 있다. 일단 운영 체제가 컴퓨터 시스템(300) 상에서 실행하게 되면, 프로그램(400)이 시작될 수 있다.
프로그램(400)의 단계(401)에서, 버퍼 메모리(313)는 이를 위해 제공되는 CPU 드라이버 루틴을 호출함으로써 시스템 메모리(304)에 할당될 수 있다. 이후, 단계(402)에서, 인에이블링 명령이 컴퓨터 시스템(300)의 병렬 연산 모드를 가능하 게 하기 위해 실행될 수 있고, 단계(403)에서, 슬레이브 프로세서(321, 331)에 의해 실행되는 프로그램의 스레드를 위한 스택 메모리가 할당될 수 있다. 본 발명의 기술분야에서 숙련된 자들에게 잘 알려진 메모리 할당 기술들이 스택 메모리를 할당하기 위해 사용될 수 있다.
단계(404)에서, 제 1 복수 명령이 수행될 수 있다. 제 1 복수 명령은 마스터 프로세서(301)에 의해 직렬 방식으로 실행될 수 있다. 마스터 프로세서(301)가, 예를 들어 도 1a 및 도 1b를 참조하여 상기에서 설명된 프로세서(101)와 같은 종래 기술에 따른 프로세서의 명령들의 세트를 제공할 수 있기 때문에, 제 1 복수 명령들은 종래 기술에 따른 프로세서에 의해서도 실행될 수 있는 코드를 포함할 수 있다. 이에 따라, 제 1 복수 명령은 종래 기술에 따라 프로세서(101)에 코드를 제공하는 컴파일러(compiler)에 의해 생성될 수 있다. 따라서, 기존의 라이브러리로부터의 코드가 프로그램(400)에 포함될 수 있다.
단계(405)에서, 변수 송신 명령은 데이터를 참조 번호(406)에 의해 표시된 제 1 슬레이브 프로세서(321)의 레지스터(322-325)에 송신하기 위하여 한번 이상 호출될 수 있다. 따라서, 제 1 슬레이브 프로세서(321)는 프로그램(400)의 스레드를 실행하기 위해 준비될 수 있다. 단계(407)에서, 변수 송신 명령은 프로그램(400)의 다른 스레드를 실행하기 위한 제 2 슬레이브 프로세서(331)를 준비하기 위하여 참조 번호(407)에 의해 표시된 제 2 슬레이브 프로세서(331)의 레지스터(332-335)에 데이터를 송신하기 위해 사용될 수 있다. 본 발명은 제 1 데이터가 제 1 슬레이브 프로세서(321)의 레지스터(322-325)에 송신되고, 데이터가 제 2 슬 레이브 프로세서(331)에 송신되는 실시예들로 한정되지 않는다. 다른 실시예들에서, 데이터는, 제 1 슬레이브 프로세서(321)의 레지스터(322-325)에 데이터를 송신하기 전에, 제 2 슬레이브 프로세서(331)의 레지스터(332-335)에 송신될 수 있다.
단계(409)에서, 포크 명령이 제 1 슬레이브 프로세서(321)에서 명령 실행을 초기화하기 위하여 실행될 수 있다. 따라서, 단계(410)에서, 제 2 복수 명령은 제 1 슬레이브 프로세서(321)에 의해 실행될 수 있다. 단계(411)에서, 포크 명령은 제 2 슬레이브 프로세서(331)에서 명령 실행을 시작하기 위하여 사용될 수 있다. 따라서, 단계(412)에서, 제 2 슬레이브 프로세서(331)는 제 3 복수 명령을 실행할 수 있다. 이후, 마스터 프로세서(301)는 제 4 복수 명령을 실행할 수 있다. 제 2 복수 명령, 제 3 복수 명령 및 제 4 복수 명령은 컴퓨터 시스템(300)에 의해 동시에 실행될 수 있고, 여기에서 제 2 복수 명령의 실행, 제 3 복수 명령의 실행 및 제 4 복수 명령의 실행은 프로그램(400)의 상이한 스레드를 구성한다. 따라서, 프로그램(400)의 실행 속도는, 도 1a 내지 도 1b를 참조하여 상기에서 설명된 종래 기술에 따른 컴퓨터 시스템(100)과 비교하여 증가될 수 있다.
마스터 프로세서(301) 및 슬레이브 프로세서(321, 331) 각각이 특정 유형의 프로세서의 기능성, 예를 들어 도 1a 내지 도 1b를 참조하여 상기에서 설명된 종래 기술에 따른 프로세서(101)의 기능성을 제공하는 실시예들에서, 제 2, 제 3 및 제 4 복수 명령은 각 타입의 프로세서에서 실행하기 위한 코드를 포함할 수 있다. 예를 들어, 제 2, 제 3 및 제 4 복수 명령 각각은 x86 또는 x86-64 유형의 프로세서에서 실행하기 위한 코드를 포함할 수 있다.
슬레이브 프로세서(321, 331)가 마스터 프로세서(301)와는 다른 유형의 프로세서인 다른 실시예들에서, 제 2 복수 명령 및 제 3 복수 명령은 특히 슬레이브 프로세서(321, 331)에서 실행되기 위한 코드를 포함할 수 있고, 이에 반하여 제 4 복수 명령은 특히 마스터 프로세서(301)에서 실행되기 위한 코드를 포함할 수 있다.
제 2 복수 명령을 포함하는 스레드의 완료 후, 제 1 슬레이브 프로세서(321)는 제 1 슬레이브 프로세서(321)에서 명령의 실행을 중단하기 위해 슬레이브 조인 명령을 실행할 수 있다(단계 415). 이를 위하여, 슬레이브 조인 명령은 제 2 복수 명령의 마지막 명령으로서 제공될 수 있다. 유사하게, 슬레이브 조인 명령은, 제 3 복수 명령의 실행 후에 제 2 슬레이브 프로세서(331)에서 명령의 실행이 중단되도록, 제 3 복수 명령의 마지막 명령으로서 제공될 수도 있다(단계 423).
제 4 복수 명령의 실행의 완료 후에, 마스터 프로세서(301)는 단계(414)에서 제 1 슬레이브 프로세서(321)가 제 2 복수 명령의 실행을 완료할 때 까지 대기하기 위해 마스터 조인 명령을 실행할 수 있다. 후속적으로, 단계(416)에서, 마스터 조인 명령은 제 2 슬레이브 프로세서(331)가 제 3 복수 명령의 실행을 완료할 때 까지 대기하기 위해 마스터 프로세서(301)에 의해 한번 더 실행될 수 있다.
이후, 마스터 프로세서(301)는, 단계(417, 419)에서, 제 2 복수 명령 및 제 3 복수 명령에 의해 제 1 슬레이브 프로세서(321) 및 제 2 슬레이브 프로세서(331)로부터 각각 제공되는 스레드의 실행 결과를 판독하기 위하여 변수 수신 명령을 실행할 수 있다. 도 2b에서, 제 1 슬레이브 프로세서(321)에 의한 레지스터(322-325)의 컨텐츠의 제공은 참조 번호(418)에 의해 표시되고, 제 2 슬레이브 프로세 서(331)에 의한 레지스터(332-335)의 컨텐츠의 제공은 참조 번호(420)에 의해 표시된다.
후속적으로, 마스터 프로세서(421)는 제 5 복수 명령을 직렬 방식으로 실행할 수 있다(단계 421). 단계(404)에서 실행되는 제 1 복수 명령과 유사하게, 제 5 복수 명령은 도 1a 내지 도 1b를 참조하여 상기에서 설명된 프로세서(101)와 같은 종래 기술에 따른 프로세서에서 실행하게 하는 코드를 포함할 수 있고, 종래 기술에 따른 프로세서의 기능은 마스터 프로세서(301)에 의해 제공된다. 따라서, 제 5 복수 명령은 종래 기술에 따른 프로세서(101)를 위한 코드를 제공하게 되는 컴파일러에 의해 생성된 코드를 포함할 수 있다.
프로그램(400)의 실행 종료 전에, 마스터 프로세서(301)는 단계(422)에서, 컴퓨터 시스템(300)을 직렬 연산 모드로 전환하기 위하여 엔드 명령을 실행할 수 있다. 또한, 버퍼 메모리(313)는 프로그램(400)의 실행이 종료되기 전에 해제될 수 있고, 이는 컴퓨터 시스템(300)에서 제공되는 CPU 드라이버 루틴을 호출함으로써 수행될 수 있다.
도 2c는 프로그램(400) 및 제 2 복수 명령, 제 3 복수 명령 및 제 4 복수 명령이 슬레이브 프로세서(321, 331) 및 마스터 프로세서(301)에서 각각 실행되는 동안에 인터럽트 또는 예외가 발생하는 경우 실행될 수 있는 인터럽트 루틴(502)의 개략적인 흐름도를 나타낸다.
도 2c에서, 참조 번호(510, 511, 512)는 마스터 프로세서(301)에 의해 실행되는 제 4 복수 명령의 명령들을 나타낸다. 참조 번호(510', 511', 512')는 제 1 슬레이브 프로세서(321)에 의해 실행되는 제 2 복수 명령의 명령들을 나타내고, 참조 번호(510", 511" 및 512")는 제 2 슬레이브 프로세서(331)에 의해 처리되는 제 3 복수 명령의 명령들을 나타낸다.
명령들(512, 512', 512")이 마스터 프로세서(301) 및 슬레이브 프로세서(321, 331)에서 각각 실행되는 시점에서, 인터럽트 또는 예외(460)가 발생할 수 있다. 인터럽트 또는 예외(460) 이후, 시스템(300)은 마스터 프로세서(301)의 레지스터(302-307) 및 슬레이브 프로세서(321, 331)의 레지스터(322-325, 332-335)의 컨텐츠의 적어도 일부를 버퍼 메모리(313)에 저장하고, 컴퓨터 시스템(300)을 직렬 연산 모드로 전환하는 단계를 수행할 수 있다. 인터럽트 또는 예외가 슬레이브 프로세서(321, 331) 중 하나에서 발생하면, 컴퓨터 시스템(300)은 인터럽트 또는 예외가 발생한 슬레이브 프로세서(321, 331)의 레지스터(322-325 또는 332-335) 중 적어도 하나의 컨텐츠를 각각 마스터 프로세서(301)의 레지스터(302-307)의 제 1 서브세트(302-305) 중 적어도 하나에 기록할 수 있다. 도 2c에서, 인터럽트 또는 예외의 경우 컴퓨터 시스템(300)에 의해 수행되는 동작들은 참조 번호(540)에 의해 표시된다. 컴퓨터 시스템(300)은 도 2a를 참조하여 상기에서 설명된 바와 같이, 컴퓨터 시스템(300)이 병렬 연산 모드에 있는 동안 발생하는 인터럽트 또는 예외의 경우에 다른 동작들을 수행할 수 있다.
후속적으로, 컴퓨터 시스템(300)은 인터럽트 루틴(502)의 명령들(520-525)을 수행할 수 있다. 인터럽트 루틴(502)은 컴퓨터 시스템(300)의 직렬 연산 모드의 지원을 포함하고 병렬 연산 모드를 지원할 필요가 없는 운영 체제의 일부가 될 수 있 다. 따라서, 인터럽트 루틴(502)은 마스터 프로세서의 레지스터(302-307)의 제 1 서브세트(302-305)의 컨텐츠를 시스템 메모리(304)에 저장하고, 인터럽트 루틴(502)의 실행의 종료시에 레지스터의 제 1 서브세트(302-305)의 컨텐츠를 시스템 메모리(304)로부터 판독하는 명령들을 포함할 수 있다. 또한, 인터럽트 루틴(502)은 마스터 프로세서(301)의 레지스터(302-307)의 제 1 서브세트(302-305)의 일부 또는 전부의 컨텐츠를 수정할 수 있다.
하지만, 인터럽트 루틴(502)은 마스터 프로세서(301)의 레지스터(302-307)의 제 2 서브세트(306, 307)의 컨텐츠, 제 1 슬레이브 프로세서(321)의 레지스터(322-325)의 컨텐츠, 제 2 슬레이브 프로세서(331)의 레지스터(332-335)의 컨텐츠 및 슬레이브 프로세서(321, 331)의 실행 상태 비트(330, 340)의 값을 저장하고 복구할 필요는 없다. 몇몇 실시예들에서, 인터럽트 루틴(502)은 멀티태스킹을 허용하는 운영 체제의 일부가 될 수 있다. 특히, 인터럽트 루틴은 컴퓨터 시스템(300)의 병렬 연산 모드를 사용할 수 있는 다른 프로그램을 실행하게 할 수 있고, 여기에 레지스터(306, 307, 322-325, 332-335)의 컨텐츠 및 실행 상태 비트(330, 340)는 수정될 수 있다. 인터럽트 루틴(502)이 인터럽트 루틴(502)의 마지막 명령(525)을 실행한 이후 레지스터(306, 307, 322-325, 332-335)의 컨텐츠 및 실행 상태 비트(330, 340)를 복구할 필요가 없기 때문에, 레지스터(306, 307, 322-325, 332-335)의 컨텐츠 및 실행 상태 비트(330, 340)는 프로그램(400)의 명령들(512, 512', 512")을 실행한 후의 이들의 컨텐츠와 다를 수 있다.
인터럽트 루틴(502)의 완료 후에, 인터럽트 루틴(502)이 실행될 수 있는 마 스터 프로세서(301)의 복귀 어드레스가 트램폴린 명령(550)의 어드레스로 대체되었기 때문에, 컴퓨터 시스템(300)은 트램폴린 명령(550)을 실행한다.
트램폴린 명령(550)을 실행할 때, 컴퓨터 시스템(300)은 도 2a를 참조하여 상기에서 설명된 단계들을 수행한다. 트램폴린 명령을 실행한 후, 프로세서(301, 321, 331)의 레지스터(302-307, 322-325, 332-335) 및 실행 상태 비트(330, 340) 각각의 컨텐츠는 복구되고, 여기서 인터럽트 루틴(502)에 의해 이루어진 일부 레지스터의 수정이 적절하게 고려될 수 있다.
따라서, 비록 컴퓨터 시스템(300)의 운영 체제 및, 특히 인터럽트 루틴(502)이 프로세서(301, 321, 331)의 레지스터(302-307, 322-325, 332-335) 및 실행 상태 비트(330, 340) 각각의 컨텐츠를 저장 및 복구하지 않는다고 할지라도, 프로세서(301, 321, 331)의 레지스터(302-307, 322-325, 332-335) 및 실행 상태 비트(330, 340)의 컨텐츠는 인터럽트 루틴(502)을 실행한 후에 복구된다. 또한, 인터럽트 루틴(502)은 컴퓨터 시스템(300)의 직렬 연산 모드에서 실행될 수 있다. 따라서, 컴퓨터 시스템(300)의 병렬 연산 모드로의 운영 체제의 부합은 요구되지 않는다. 따라서, 본 발명에 따른 컴퓨터 시스템(300)은 슬레이브 프로세서(321, 331)의 존재를 지원하지 않는 기존의 컴퓨터 시스템을 위해 생성된 소프트웨어와의 높은 수준의 호환성을 제공한다.
몇몇 실시예에서, 컴퓨터 시스템(300)은 컴퓨터 시스템(300)을 병렬 연산 모드에서 직렬 연산 모드로 전환하기 위한 제 1 모드 전환 명령(mode switching instruction)을 더 포함할 수 있다. 제 1 모드 전환 명령이 호출될 때 상기 시스템은 마스터 프로세서(301) 및 슬레이브 프로세서(321, 331)의 레지스터(302-307, 322-325, 332-335)의 적어도 일부의 컨텐츠를 버퍼 메모리(313)에 저장하고 시스템을 직렬 연산 모드로 전환하는 단계를 수행할 수 있다. 제 1 모드 전환 명령이 슬레이브 프로세서(321, 331) 중 하나에 의해 실행되면, 컴퓨터 시스템(300)은 제 1 모드 전환 명령이 실행되는 슬레이브 프로세서(321) 또는 슬레이브 프로세서(331) 각각의 레지스터(322-325 또는 332-335) 각각의 적어도 하나의 컨텐츠를 마스터 프로세서(301)의 레지스터(302-307) 중 적어도 하나에 기록하도록 부가적으로 구성될 수 있다.
몇몇 실시예에서, 컴퓨터 시스템(300)은 제 1 모드 전환 명령을 실행할 때 이하의 단계들을 수행하도록 구성된다. 컴퓨터 시스템(300)은 지시 비트(308)가 컴퓨터 시스템(300)이 병렬 연산 모드에 있음을 나타내는 값으로 설정되었는 지의 여부를 검사할 수 있다. 지시 비트(308)가 컴퓨터 시스템(300)이 직렬 연산 모드에 있음을 나타내면, 잘못된 명령 폴트가 생성되고, 어떠한 추가 동작들도 수행되지 않는다. 컴퓨터 시스템(300)에 의해 수행되는 추가 동작들은 제 1 모드 전환 명령이 마스터 프로세서(301) 또는 슬레이브 프로세서(321, 331) 중 하나에 의해 수행되는지에 의존할 수 있다.
제 1 모드 전환 명령이 마스터 프로세서(301)에 의해 실행되면, 컴퓨터 시스템(300)은 슬레이브 프로세서(321, 331)에서 명령 실행을 중단할 수 있다. 각 슬레이브 프로세서(321, 331)의 명령 실행이 중단된 후, 슬레이브 프로세서(321, 331)의 레지스터(322-325, 332-335) 및 선택에 따라서는 슬레이브 프로세서(321, 331)의 실행 상태 비트(330, 340)의 컨텐츠가 버퍼 메모리(313)에 기록될 수 있고, 그 어드레스가 마스터 프로세서(301)의 레지스터(302-307)의 제 2 서브세트(306, 307) 중 하나, 예를 들어 레지스터(306)로부터 판독될 수 있다. 부가적으로, 마스터 프로세서(301)의 식별 번호(이는 몇몇 실시예에서 번호 0이 될 수 있다)가 버퍼 메모리(313)에 기록될 수 있다.
후속적으로, 버퍼 메모리(313)의 어드레스를 포함하는 마스터 프로세서(301)의 레지스터(302-307)의 제 2 서브세트(306, 307) 중 하나의 컨텐츠, 예를 들어 레지스터(306)의 컨텐츠가, 마스터 프로세서(301)의 레지스터(302-307)의 제 1 서브세트(302-305) 중 하나의 컨텐츠, 예를 들어 레지스터(305)의 컨텐츠로 교체될 수 있다. 상기에서 설명된 바와 같이, 컴퓨터 시스템(300) 상에서 실행하는 운영 체제는 인터럽트 또는 예외의 경우 마스터 프로세서(301)의 레지스터의 제 1 서브세트(302-305)를 처리하도록 구성될 수 있다. 따라서, 레지스터(305, 306)의 컨텐츠의 교체는 버퍼 메모리(313)의 어드레스가 인터럽트 또는 예외의 경우에 운영 체제에 의해 저장되고 복구된다는 것을 보장하는데 도움을 줄 수 있다.
이후, 컴퓨터 시스템은 마스터 프로세서(301)의 제 2 서브세트(306, 307)의 컨텐츠를 버퍼 메모리(313)에 저장할 수 있다. 상기 설명한 바와 같이, 레지스터(302-307)의 제 2 서브세트(306, 307) 중 하나, 예를 들어 레지스터(307)는 트램폴린 명령의 어드레스를 포함할 수 있다. 따라서, 레지스터(306, 307)의 컨텐츠를 저장할 때 트램폴린 명령의 어드레스가 버퍼 메모리(313)에 저장될 수 있다. 후속적으로, 컴퓨터 시스템(300)은 컴퓨터 시스템이 제 2 연산 모드에 있다는 것을 나타내는 값, 예를 들어 "오프(OFF)" 값을 지시 비트(308)에 설정할 수 있다.
제 1 모드 전환 명령이 슬레이브 프로세서(321, 331) 중 하나에 의해 실행되는 경우, 컴퓨터 시스템(300)은 슬레이브 프로세서(321, 331) 뿐만 아니라 마스터 프로세서(301)에서의 명령 실행도 중단할 수 있다. 명령 실행이 모든 프로세서(302, 321, 331)에서 중단된 후, 마스터 프로세서(301)의 레지스터(302-307)의 컨텐츠는 버퍼 메모리(313)에 저장될 수 있고, 그 어드레스는 마스터 프로세서(301)의 레지스터(302-307)의 제 2 서브세트(306, 307) 중 하나, 예를 들어 레지스터(306)로부터 판독될 수 있다. 부가적으로, 슬레이브 프로세서(321, 331)의 레지스터(322-325, 332-335)의 컨텐츠 및 선택적으로 슬레이브 프로세서(321, 331)의 실행 상태 비트(330, 340)의 값들은 버퍼 메모리(313)에 저장될 수 있다.
몇몇 실시예에서, 제 1 모드 전환 명령이 수행되는 슬레이브 프로세서(321, 331)의 컨텐츠는 버퍼 메모리에 저장될 필요가 없다. 이러한 실시예들에서는, 다른 슬레이브 프로세서들의 레지스터들의 컨텐츠들 만이 버퍼 메모리(313)에 저장된다. 따라서, 제 1 모드 전환 명령이 제 1 슬레이브 프로세서(321)에 의해 실행되면, 제 2 슬레이브 프로세서(331)의 레지스터(332-335)의 컨텐츠 및 선택적으로 슬레이브 프로세서(321, 331)에 더하여 컴퓨터 시스템(300)에서 제공되는 다른 슬레이브 프로세서의 레지스터의 컨텐츠가 버퍼 메모리(313)에 저장된다. 반대로, 제 1 모드 전환 명령이 제 2 슬레이브 프로세서(331)에 의해 실행되면, 상기 시스템은 제 1 슬레이브 프로세서(321)의 레지스터(322-325)의 컨텐츠를 버퍼 메모리(313)에 저장할 수 있다. 하지만, 이러한 실시예들에서, 각 실행 상태 비트(330, 340)의 값들은 버퍼 메모리(313)에 저장될 수 있다.
이후, 버퍼 메모리의 어드레스를 포함하는 마스터 프로세서(301)의 레지스터의 컨텐츠, 예를 들어 레지스터(306)의 컨텐츠는, 몇몇 실시예에서 버퍼 메모리(313)에 제공되는 임시 레지스터에 저장될 수 있다. 또한, 제 1 모드 전환 명령이 실행되는 프로세서의 식별 번호가 버퍼 메모리(313)에 저장될 수 있다. 예를 들어, 제 1 모드 전환 명령이 제 1 슬레이브 프로세서(321)에 의해 실행되면, 컴퓨터 시스템(300)은 식별 번호 1을 버퍼 메모리(313)에 저장할 수 있다. 제 1 모드 전환 명령이 제 2 슬레이브 프로세서(331)에 의해 실행되면, 컴퓨터 시스템(300)은 식별 번호 2를 버퍼 메모리(313)에 저장할 수 있다. 다른 실시예들에서는, 다른 식별 번호들이 사용될 수 있다.
후속적으로, 제 1 모드 전환 명령을 실행하는 슬레이브 프로세서(321 또는 331) 각각의 레지스터(322-325 또는 332-335) 각각의 컨텐츠는 마스터 프로세서(301)의 레지스터(302-307)의 제 1 서브세트(302-305)에 기록될 수 있다. 몇몇 실시예에서, 레지스터(322-325 또는 332-335)의 컨텐츠를 레지스터의 제 1 서브세트(302-305)에 기록하는 동안, 마스터 프로세서(301)의 레지스터(302-307)의 제 2 서브세트(306, 307)의 일부 또는 전부의 컨텐츠가 오버라이트(overwrite)될 수 있다.
그런 다음, 컴퓨터 시스템(300)은 마스터 프로세서(301)의 레지스터(302-305)의 제 1 서브세트 중 하나의 컨텐츠, 예를 들어 레지스터(305)의 컨텐츠를 버퍼 메모리(313)에 저장할 수 있다. 후속적으로, 임시 버퍼의 컨텐츠가 레지스터(305)에 기록될 수 있다. 따라서, 버퍼 메모리(313)의 어드레스는 레지스터에 저 장되고, 인터럽트 또는 예외의 경우에 레지스터의 컨텐츠는 운영 체제에 의해 처리된다. 이후, 지시 비트(308)는 컴퓨터 시스템(300)을 직렬 연산 모드로 전환하기 위해 컴퓨터 시스템(300)이 제 1 연산 모드에 있음을 나타내는 값, 예를 들어 "오프(OFF)" 값으로 설정될 수 있다.
몇몇 실시예에서, 컴퓨터 시스템(300)은 제 1 모드 전환 명령의 실행 중에 발생하는 인터럽트 또는 예외로 인한 문제들을 회피하기 위하여, 상기 설명된 단계들을 원자단위 인터럽션으로 수행하도록 구성될 수 있다.
제 1 모드 전환 명령을 실행한 후, 컴퓨터 시스템은 하나 이상의 명령들을 직렬 연산 모드에서 수행할 수 있다. 컴퓨터 시스템(300)은 상기에서 설명된 인에이블링 명령 또는 이하에서 더욱 상세히 설명될 제 2 모드 전환 명령이 실행될 때 까지 직렬 연산 모드로 존재할 수 있다. 예를 들어, 컴퓨터 시스템(300)은 컴퓨터 시스템(300)의 운영 체제의 호출을 실행할 수 있다.
컴퓨터 시스템(300)은, 컴퓨터 시스템(300)을 직렬 연산 모드에서 병렬 연산 모드로 전환하고, 프로세서(301, 321, 331)의 레지스터(302-307, 322-325, 332-335)의 일부 또는 전부의 컨텐츠 및 선택적으로 슬레이브 프로세서(321, 331)의 실행 상태 비트(330, 340)의 값을 버퍼 메모리(313)로부터 판독하는 제 2 모드 전환 명령을 더 포함할 수 있다. 선행하는 제 1 모드 전환 명령의 실행이 슬레이브 프로세서(321, 331) 중 하나에 의해 수행되면, 컴퓨터 시스템(300)은 마스터 프로세서(301)의 적어도 하나의 레지스터(302-307)의 컨텐츠를 제 1 모드 전환 명령을 실행한 슬레이브 프로세서(321, 331)에 부가적으로 기록할 수 있다.
몇몇 실시예에서, 컴퓨터 시스템(300)은 제 2 모드 전환 명령을 실행할 때 이하의 단계를 수행하도록 구성될 수 있다. 먼저, 컴퓨터 시스템(300)은 제어 레지스터 비트(309)를 검사한다. 제어 레지스터 비트(309)의 값이 컴퓨터 시스템(300)의 병렬 연산 모드가 허용되지 않음을 나타내면, 잘못된 명령 폴트가 생성되고, 더 이상의 어떠한 추가 동작도 수행되지 않는다. 그렇지 않으면, 컴퓨터 시스템(300)은 선행하는 제 1 모드 전환 명령을 실행한 프로세서를 나타내는 식별 번호를 판독할 수 있다. 컴퓨터 시스템(300)에 의해 수행되는 다른 단계들은 제 1 모드 전환 명령이 마스터 프로세서(301) 또는 슬레이브 프로세서(321, 331)에 의해 실행되었는지에 의존할 수 있다.
제 1 모드 전환 명령이 몇몇 실시예에서 지시 번호 0의 값으로 표시될 수 있는 마스터 프로세서(301)에 의해 실행되었으면, 컴퓨터 시스템(300)은 슬레이브 프로세서(321, 331)의 레지스터(322-325, 332-335)의 컨텐츠 및 선택적으로 실행 상태 비트(330, 340)의 값들을 버퍼 메모리(313)로부터 판독할 수 있다. 부가적으로, 컴퓨터 시스템(300)은 마스터 프로세서(301)의 레지스터(302-307)의 제 2 서브세트(306, 307)의 컨텐츠를 버퍼 메모리(313)로부터 판독할 수 있다. 후속적으로, 버퍼 메모리의 어드레스를 포함하는 마스터 프로세서(301)의 레지스터(302-307)의 제 1 서브세트(302-305) 중 하나의 컨텐츠 및 레지스터의 제 2 서브세트(306, 307) 중 하나의 컨텐츠가 버퍼 메모리(313)의 어드레스를 레지스터의 제 2 서브세트(306, 307)에 저장하기 위하여 교환될 수 있다. 몇몇 실시예들에서는, 레지스터들(305, 306)의 컨텐츠들이 교환될 수 있다.
그 후에, 컴퓨터 시스템(300)은 지시 비트(308)를 컴퓨터 시스템(300)이 병렬 연산 모드에 있음을 나타내는 값으로 설정할 수 있다. 몇몇 실시예에서, 지시 비트(308)는 "오프(OFF)" 값으로 설정될 수 있다. 그런 다음, 명령들의 실행은 마스터 프로세서(301) 및 임의의 슬레이브 프로세서(321, 331)에서 재개될 수 있는데, 여기에서 실행 상태 비트(330, 340)의 값은 각 슬레이브 프로세서(321, 331)가 제 1 모드 전환 명령이 수행되기 전에 명령들을 실행하고 있었다는 것을 나타낸다.
0보다 큰 지시 번호의 값으로 표시될 수 있는 선행하는 제 1 모드 전환 명령의 실행이 슬레이브 프로세서 중 하나에 의해 수행되었으면, 실행 상태 비트(330, 340)의 값 뿐만 아니라, 슬레이브 프로세서(321, 331)의 레지스터(322-325, 332-335)의 컨텐츠가 버퍼 메모리(313)로부터 판독될 수 있는데, 그 어드레스는 마스터 프로세서(301)의 제 1 서브세트(302-305) 중 하나, 예를 들어 레지스터(305)로부터 판독될 수 있다. 몇몇 실시예들에서는, 선행하는 제 1 모드 전환 명령의 실행을 수행하지 않은 슬레이브 프로세서(321, 331)의 레지스터의 컨텐츠 만이 버퍼 메모리(313)로부터 판독될 필요가 있다. 부가적으로, 컴퓨터 시스템(300)은 마스터 프로세서(301)의 레지스터(302-307)의 제 2 서브세트(306, 307)의 컨텐츠를 버퍼 메모리(313)로부터 판독할 수 있다.
그런 다음, 몇몇 실시예에서 레지스터(305)가 될 수 있는 버퍼 메모리(313)의 어드레스를 포함하는 레지스터의 컨텐츠는 버퍼 메모리(313)에 제공될 수 있는 임시 레지스터에 기록될 수 있고, 레지스터(305)의 컨텐츠는 버퍼 메모리(313)로부터 판독될 수 있다. 이후, 마스터 프로세서(301)의 레지스터(302-307)의 제 1 서브 세트(302-305)의 컨텐츠는 선행하는 제 1 모드 전환 명령의 실행이 실행된 슬레이브 프로세서(321, 331)의 레지스터에 기록될 수 있다. 따라서, 슬레이브 프로세서(321, 331)의 레지스터는 컴퓨터 시스템(300)이 직렬 연산 모드에서 동작하는 동안 이루어진 마스터 프로세서(301)의 레지스터의 수정을 포함할 수 있다. 따라서, 직렬 연산 모드 동안 마스터 프로세서(301) 상에서 실행하는 스레드의 실행이 슬레이브 프로세서 상에서 더욱 용이하게 계속될 수 있다. 예를 들어, 마스터 프로세서(301)의 레지스터(302-307)의 제 1 서브세트(302-305)는 컴퓨터 시스템(300)이 병렬 연산 모드에 있을 때 컴퓨터 시스템(300)이 슬레이브 프로세서(321, 331)에 의해 고려될 수 있는 직렬 연산 모드에서 동작하고 있는 동안 발생하는 인터럽트 또는 예외에 관한 예외 정보를 포함할 수 있다.
후속적으로, 마스터 프로세서(301)의 레지스터(302-307)의 제 1 서브세트(302-205)의 컨텐츠가 버퍼 메모리(313)로부터 판독될 수 있고, 지시 비트(308)는 컴퓨터 시스템(300)이 병렬 연산 모드에 있음을 나타내는 값으로 설정될 수 있으며, 명령들의 실행은 마스터 프로세서(301) 및 각 실행 상태 비트(330, 340)가 제 1 모드 전환 명령이 컴퓨터 시스템(300)을 직렬 연산 모드로 전환하기 위해 호출되었을 때 명령들이 각 슬레이브 프로세서(321, 331)에서 실행되었음을 나타내는 슬레이브 프로세서(321, 331)에서 재개될 수 있다.
몇몇 실시예들에서, 컴퓨터 시스템(300)은, 제 2 모드 전환 명령을 실행하는 동안 발생하는 인터럽트 또는 예외로 인한 문제들을 회피하기 위해, 제 2 모드 전환 명령의 상기에서 설명된 단계들을 원자단위 연산으로 실행하도록 구성될 수 있 다.
컴퓨터 시스템(300)을 병렬 및 직렬 연산 모드 사이에 전환할 수 있는 프로그램을 구현하기 위해, 제 1 모드 전환 명령 및 제 2 모드 전환 명령이 사용될 수 있다. 제 1 모드 전환 명령이 실행되면, 인에이블링 명령 또는 제 2 모드 전환 명령이 실행될 때 까지 프로그램의 다른 실행이 직렬 연산 모드에서 수행될 수 있다. 제 1 모드 전환 명령 및/또는 제 2 모드 전환 명령을 사용하는 프로그램은 제 1 모드 전환 명령의 실행 후에 버퍼 메모리(313)의 어드레스가 시스템 메모리(304)에 저장되는 마스터 프로세서의 레지스터(305) 또는 다른 레지스터(302-307)의 컨텐츠를 저장하고, 제 2 모드 전환 명령의 실행 전에 레지스터(305)의 컨텐츠를 시스템 메모리(304)로부터 판독하기 위한 다른 명령들을 포함할 수 있다. 이는 컴퓨터 시스템(300)의 직렬 연산 모드의 표준 저장 및 로딩 명령에 의해 수행될 수 있다. 시스템 메모리에 레지스터(305)의 컨텐츠를 저장한 후, 상기 프로그램은 마스터 프로세서(301)의 레지스터(302-307)의 각 제 1 서브세트(302-305)를 사용할 수 있다. 대안적으로, 메모리 버퍼(313)의 어드레스는 변수로 저장될 수 있고 이로부터 제 1 및/또는 제 2 모드 전환 명령의 실행 전에 레지스터(305)에 로딩될 수 있다.
상기에서 설명된 컴퓨터 시스템(300)의 기능성 및 명령들은 마스터 프로세서(301) 및 슬레이브 프로세서(321, 331)에 제공되는 전용 회로 또는 마스터 프로세서(301) 및 슬레이브 프로세서(321, 331)에서 제공되는 마이크로 코드에 의해 제공될 수 있다.
상기 개시된 특정 실시예들은 단지 예시적인 것이며, 본 발명은 여기에서의 교시의 이득을 갖는 당업자에게 명백한, 다르지만 등가인 방법들로 수정 및 실행될 수 있다. 예를 들어, 상기 설명된 프로세스 단계들은 다른 순서로 수행될 수 있다. 또한, 아래 청구항들에서 서술되는 것 이외에, 여기에 제시된 구조 또는 디자인의 상세 사항들에 대한 어떠한 한정도 의도되지 않는다. 따라서, 상기 개시된 특정 실시예들은 변경 또는 수정될 수 있으며, 이러한 모든 변형들은 본 발명의 사상 및 범위 내에 있는 것으로 고려되어야 함이 명백하다. 따라서, 본 명세서에서 청구하고자 하는 보호 범위는 아래의 특허청구범위에서 설명되는 바와 같다.
Claims (13)
- 마스터 프로세서(master processor)(301) 및 적어도 하나의 슬레이브 프로세서(slave processor)(321, 331)를 포함하는 시스템(300)으로서,상기 마스터 프로세서(301)의 상태는 제 1 복수의 변수들을 포함하고, 상기 슬레이브 프로세서(321, 331)의 상태는 제 2 복수의 변수들을 포함하며, 상기 시스템(300)은 데이터가 상기 마스터 프로세서(301)와 상기 슬레이브 프로세서(321, 331)에 의해 처리되는 병렬 연산 모드 및 데이터가 상기 마스터 프로세서(301)에 의해 처리되는 직렬 연산 모드를 포함하고;상기 시스템(300)은, 인터럽트(interrupt) 또는 예외(exception)가 상기 병렬 연산 모드에서 발생하는 것에 반응하여, 상기 제 1 복수의 변수들과 상기 제 2 복수의 변수들의 적어도 일부를 버퍼 메모리(buffer memory)(313)에 저장하는 단계 및 상기 시스템(300)을 상기 직렬 연산 모드로 전환(switch)시키는 단계를 수행하도록 되어 있고; 그리고상기 시스템(300)은 또한, 상기 인터럽트 또는 예외가 상기 슬레이브 프로세서(321, 331)에서 발생하는 것에 반응하여, 상기 제 1 복수의 변수들 중 적어도 하나의 변수를 상기 제 2 복수의 변수들 중 적어도 하나의 변수의 값으로 설정하도록 되어 있고;상기 제 1 복수의 변수들은 제 1 복귀 어드레스(return address)를 포함하고, 상기 제 2 복수의 변수들은 제 2 복귀 어드레스를 포함하며, 상기 시스템(300)은 트램폴린 명령(trampoline instruction)을 포함하고;상기 시스템(300)은, 상기 인터럽트 또는 예외가 상기 마스터 프로세서(301)에서 발생하는 것에 반응하여, 상기 제 1 복귀 어드레스와 상기 제 2 복수의 변수들을 상기 버퍼 메모리(313)에 저장하는 단계 및 상기 제 1 복귀 어드레스를 상기 트램폴린 명령의 어드레스로 대체(replace)하는 단계를 수행하도록 되어 있고; 그리고상기 트램폴린 명령은, 상기 인터럽트 또는 예외가 상기 마스터 프로세서(301)에서 발생하는 것에 반응하여, 상기 시스템(300)을 상기 병렬 연산 모드로 전환시키는 단계 및 상기 버퍼 메모리(313)로부터 상기 제 2 복수의 변수들과 상기 제 1 복귀 어드레스를 판독하는 단계를 수행하도록 되어 있는 것을 특징으로 하는 마스터 프로세서 및 적어도 하나의 슬레이브 프로세서를 포함하는 시스템.
- 제1항에 있어서,상기 시스템(300)은 또한, 상기 인터럽트 또는 예외가 상기 슬레이브 프로세서(321, 331)에서 발생하는 것에 반응하여, 상기 제 1 복수의 변수들과 상기 제 2 복수의 변수들을 상기 버퍼 메모리(313)에 저장하는 단계, 상기 제 1 복귀 어드레스를 상기 트램폴린 명령의 어드레스로 대체하는 단계, 및 상기 직렬 연산 모드로 전환하는 단계를 수행하도록 되어 있고; 그리고상기 트램폴린 명령은, 상기 인터럽트 또는 예외가 상기 적어도 하나의 슬레이브 프로세서(321, 331)에서 발생하는 것에 반응하여, 상기 시스템(300)을 상기 병렬 연산 모드로 전환시키는 단계, 상기 버퍼 메모리(313)로부터 상기 제 2 복수의 변수들을 판독하는 단계, 상기 제 2 복수의 변수들 중 적어도 하나의 변수를 상기 제 1 복수의 변수들 중 적어도 하나의 변수의 값으로 설정하는 단계, 및 상기 버퍼 메모리(313)로부터 상기 제 1 복수의 변수들을 판독하는 단계를 수행하도록 되어 있는 것을 특징으로 하는 마스터 프로세서 및 적어도 하나의 슬레이브 프로세서를 포함하는 시스템.
- 제1항에 있어서,상기 시스템(300)은 상기 병렬 연산 모드를 가능하게 하는 인에이블링 명령(enabling instruction)을 더 포함하고, 상기 인에이블링 명령은, 상기 제 1 복수의 변수들 중 제 1 변수를 상기 버퍼 메모리(313)의 어드레스로 설정하고, 상기 제 1 복수의 변수들 중 제 2 변수를 상기 트램폴린 명령의 어드레스로 설정하고, 그리고 상기 프로세서를 상기 병렬 연산 모드로 전환시키도록 되어 있는 것을 특징으로 하는 마스터 프로세서 및 적어도 하나의 슬레이브 프로세서를 포함하는 시스템.
- 제1항에 있어서,상기 시스템(300)은 상기 제 1 복수의 변수들 중 하나 이상의 변수들의 값들을 상기 제 2 복수의 변수들 중 하나 이상의 변수들에 기록(write)하도록 되어 있는 변수 송신 명령(variable sending instruction)을 더 포함하는 것을 특징으로 하는 마스터 프로세서 및 적어도 하나의 슬레이브 프로세서를 포함하는 시스템.
- 제1항에 있어서,상기 시스템(300)은 상기 제 2 복수의 변수들 중 하나 이상의 변수들의 값들을 상기 제 1 복수의 변수들 중 하나 이상의 변수들에 기록하도록 되어 있는 변수 수신 명령(variable receiving instruction)을 더 포함하는 것을 특징으로 하는 마스터 프로세서 및 적어도 하나의 슬레이브 프로세서를 포함하는 시스템.
- 제1항에 있어서,상기 시스템(300)은 상기 적어도 하나의 슬레이브 프로세서(321, 331)에 의한 명령 실행을 개시시키도록 되어 있는 포크 명령(fork instruction)을 더 포함하고, 상기 명령 실행은 지정된 메모리 어드레스에서 시작하는 것을 특징으로 하는 마스터 프로세서 및 적어도 하나의 슬레이브 프로세서를 포함하는 시스템.
- 제1항에 있어서,상기 시스템(300)은 상기 적어도 하나의 슬레이브 프로세서(321, 331)에 의한 명령 실행을 중단시키도록 되어 있는 슬레이브 조인 명령(slave join instruction)을 더 포함하는 것을 특징으로 하는 마스터 프로세서 및 적어도 하나의 슬레이브 프로세서를 포함하는 시스템.
- 제7항에 있어서,상기 시스템(300)은 상기 마스터 프로세서(301)로 하여금 상기 적어도 하나의 슬레이브 프로세서(321, 331)에서의 명령 실행이 종료될 때까지 대기(wait)하도록 하는 마스터 조인 명령(master join instruction)을 더 포함하는 것을 특징으로 하는 마스터 프로세서 및 적어도 하나의 슬레이브 프로세서를 포함하는 시스템.
- 제1항에 있어서,상기 시스템(300)은 상기 시스템(300)을 상기 병렬 연산 모드로부터 상기 직렬 연산 모드로 전환시키도록 되어 있는 엔드 명령(end instruction)을 더 포함하는 것을 특징으로 하는 마스터 프로세서 및 적어도 하나의 슬레이브 프로세서를 포함하는 시스템.
- 마스터 프로세서(301) 및 적어도 하나의 슬레이브 프로세서(321, 331)를 포함하는 시스템(300)을 동작시키는 방법으로서, 상기 마스터 프로세서(301)의 상태는 제 1 복수의 변수들을 포함하고, 상기 슬레이브 프로세서(321, 331)의 상태는 제 2 복수의 변수들을 포함하며, 상기 시스템(300)은 데이터가 상기 마스터 프로세서(301)와 상기 슬레이브 프로세서(321, 331)에 의해 처리되는 병렬 연산 모드 및 데이터가 상기 슬레이브 프로세서(321, 331)에 의해 처리되는 직렬 연산 모드를 포함하고, 상기 방법은,인터럽트 또는 예외가 상기 병렬 연산 모드에서 발생하는 것에 반응하여, 상기 제 1 복수의 변수들과 상기 제 2 복수의 변수들의 적어도 일부를 버퍼 메모리(313)에 저장하는 단계 및 상기 시스템(300)을 상기 직렬 연산 모드로 전환시키는 단계를 수행하는 것과; 그리고상기 인터럽트 또는 예외가 상기 적어도 하나의 슬레이브 프로세서(321, 331)에서 발생하는 것에 반응하여, 상기 제 1 복수의 변수들 중 적어도 하나의 변수를 상기 제 2 복수의 변수들 중 적어도 하나의 변수의 값으로 설정하는 단계를 포함하며;여기서, 상기 제 1 복수의 변수들은 제 1 복귀 어드레스를 포함하고, 상기 제 2 복수의 변수들은 제 2 복귀 어드레스를 포함하며, 상기 시스템(300)은 트램폴린 명령을 포함하며;상기 방법은,상기 인터럽트 또는 예외가 상기 마스터 프로세서(301)에서 발생하는 것에 반응하여, 상기 제 1 복귀 어드레스와 상기 제 2 복수의 변수들을 상기 버퍼 메모리(313)에 저장하는 단계 및 상기 제 1 복귀 어드레스를 상기 트램폴린 명령의 어드레스로 대체하는 단계를 수행하는 것과; 그리고상기 트램폴린 명령이 실행될 때, 상기 인터럽트 또는 예외가 상기 마스터 프로세서(301)에서 발생하는 것에 반응하여, 상기 시스템(300)을 상기 병렬 연산 모드로 전환시키는 단계 및 상기 버퍼 메모리(313)로부터 상기 제 2 복수의 변수들과 상기 제 1 복귀 어드레스를 판독하는 단계를 수행하는 것을 더 포함하는 것을 특징으로 하는 마스터 프로세서 및 적어도 하나의 슬레이브 프로세서를 포함하는 시스템을 동작시키는 방법.
- 제10항에 있어서,상기 방법은,상기 인터럽트 또는 예외가 상기 슬레이브 프로세서(321, 331)에서 발생하는 것에 반응하여, 상기 제 1 복수의 변수들과 상기 제 2 복수의 변수들을 상기 버퍼 메모리(313)에 저장하는 단계, 상기 제 1 복귀 어드레스를 상기 트램폴린 명령의 어드레스로 대체하는 단계, 및 상기 직렬 연산 모드로 전환하는 단계를 수행하는 것과; 그리고상기 트램폴린 명령을 실행할 때, 상기 인터럽트 또는 예외가 상기 적어도 하나의 슬레이브 프로세서(321, 331)에서 발생하는 것에 반응하여, 상기 시스템(300)을 상기 병렬 연산 모드로 전환시키는 단계, 상기 버퍼 메모리(313)로부터 상기 제 2 복수의 변수들을 판독하는 단계, 상기 제 2 복수의 변수들 중 적어도 하나의 변수를 상기 제 1 복수의 변수들 중 적어도 하나의 변수의 값으로 설정하는 단계, 및 상기 버퍼 메모리(313)로부터 상기 제 1 복수의 변수들을 판독하는 단계를 수행하는 것을 더 포함하는 것을 특징으로 하는 마스터 프로세서 및 적어도 하나의 슬레이브 프로세서를 포함하는 시스템을 동작시키는 방법.
- 삭제
- 삭제
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
DE102007025397.6 | 2007-05-31 | ||
DE102007025397A DE102007025397B4 (de) | 2007-05-31 | 2007-05-31 | System mit mehreren Prozessoren und Verfahren zu seinem Betrieb |
US12/014,868 | 2008-01-16 | ||
US12/014,868 US7689809B2 (en) | 2007-05-31 | 2008-01-16 | Transparent return to parallel mode by rampoline instruction subsequent to interrupt processing to accommodate slave processor not supported by operating system |
PCT/US2008/006744 WO2008153797A1 (en) | 2007-05-31 | 2008-05-28 | System comprising a plurality of processors and methods of operating the same |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20100036279A KR20100036279A (ko) | 2010-04-07 |
KR101485068B1 true KR101485068B1 (ko) | 2015-01-21 |
Family
ID=39917349
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020097027561A KR101485068B1 (ko) | 2007-05-31 | 2008-05-28 | 복수의 프로세서들을 포함하는 시스템 및 그 동작 방법 |
Country Status (10)
Country | Link |
---|---|
US (1) | US7689809B2 (ko) |
EP (1) | EP2171575B1 (ko) |
JP (1) | JP5295228B2 (ko) |
KR (1) | KR101485068B1 (ko) |
CN (1) | CN101730881B (ko) |
AT (1) | ATE516533T1 (ko) |
DE (1) | DE102007025397B4 (ko) |
GB (1) | GB2461841A (ko) |
TW (1) | TWI467490B (ko) |
WO (1) | WO2008153797A1 (ko) |
Families Citing this family (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100138575A1 (en) | 2008-12-01 | 2010-06-03 | Micron Technology, Inc. | Devices, systems, and methods to synchronize simultaneous dma parallel processing of a single data stream by multiple devices |
US7930519B2 (en) * | 2008-12-17 | 2011-04-19 | Advanced Micro Devices, Inc. | Processor with coprocessor interfacing functional unit for forwarding result from coprocessor to retirement unit |
JP4572259B1 (ja) * | 2009-04-27 | 2010-11-04 | 株式会社フォティーンフォティ技術研究所 | 情報機器、プログラム及び不正なプログラムコードの実行防止方法 |
CN101882098B (zh) * | 2009-07-10 | 2012-07-11 | 威盛电子股份有限公司 | 微处理器集成电路以及相关除错方法 |
US9436475B2 (en) * | 2012-11-05 | 2016-09-06 | Nvidia Corporation | System and method for executing sequential code using a group of threads and single-instruction, multiple-thread processor incorporating the same |
US20160147536A1 (en) * | 2014-11-24 | 2016-05-26 | International Business Machines Corporation | Transitioning the Processor Core from Thread to Lane Mode and Enabling Data Transfer Between the Two Modes |
US9747108B2 (en) * | 2015-03-27 | 2017-08-29 | Intel Corporation | User-level fork and join processors, methods, systems, and instructions |
US20170090927A1 (en) * | 2015-09-30 | 2017-03-30 | Paul Caprioli | Control transfer instructions indicating intent to call or return |
JP6943942B2 (ja) | 2016-03-23 | 2021-10-06 | クラビスター アクティエボラーグ | 順次パケット処理アルゴリズム及び並列パケット処理アルゴリズムを用いることによってトラフィックシェーピングを行う方法 |
WO2017164804A1 (en) * | 2016-03-23 | 2017-09-28 | Clavister Ab | Method for traffic shaping using a serial packet processing algorithm and a parallel packet processing algorithm |
US10541868B2 (en) * | 2017-02-24 | 2020-01-21 | Quanta Computer Inc. | System and method for automatically updating bios setup options |
US10831503B2 (en) | 2018-11-06 | 2020-11-10 | International Business Machines Corporation | Saving and restoring machine state between multiple executions of an instruction |
US10831502B2 (en) * | 2018-11-06 | 2020-11-10 | International Business Machines Corporation | Migration of partially completed instructions |
US10831478B2 (en) | 2018-11-06 | 2020-11-10 | International Business Machines Corporation | Sort and merge instruction for a general-purpose processor |
CN111181169B (zh) * | 2020-01-13 | 2023-10-20 | 深圳市禾望电气股份有限公司 | Svg并联运行系统的控制方法、装置以及存储介质 |
CN113094111B (zh) * | 2021-04-16 | 2024-01-09 | 三星(中国)半导体有限公司 | 设备以及设备的启动方法 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6651163B1 (en) | 2000-03-08 | 2003-11-18 | Advanced Micro Devices, Inc. | Exception handling with reduced overhead in a multithreaded multiprocessing system |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5197138A (en) * | 1989-12-26 | 1993-03-23 | Digital Equipment Corporation | Reporting delayed coprocessor exceptions to code threads having caused the exceptions by saving and restoring exception state during code thread switching |
US5481719A (en) * | 1994-09-09 | 1996-01-02 | International Business Machines Corporation | Exception handling method and apparatus for a microkernel data processing system |
US5812823A (en) * | 1996-01-02 | 1998-09-22 | International Business Machines Corporation | Method and system for performing an emulation context save and restore that is transparent to the operating system |
US6058465A (en) * | 1996-08-19 | 2000-05-02 | Nguyen; Le Trong | Single-instruction-multiple-data processing in a multimedia signal processor |
US6003129A (en) * | 1996-08-19 | 1999-12-14 | Samsung Electronics Company, Ltd. | System and method for handling interrupt and exception events in an asymmetric multiprocessor architecture |
US6230259B1 (en) * | 1997-10-31 | 2001-05-08 | Advanced Micro Devices, Inc. | Transparent extended state save |
US6574725B1 (en) * | 1999-11-01 | 2003-06-03 | Advanced Micro Devices, Inc. | Method and mechanism for speculatively executing threads of instructions |
KR100456630B1 (ko) * | 2001-12-11 | 2004-11-10 | 한국전자통신연구원 | 프로세서간 통신을 위한 인터럽트 중계 장치 및 방법 |
US7765388B2 (en) * | 2003-09-17 | 2010-07-27 | Broadcom Corporation | Interrupt verification support mechanism |
JP4457047B2 (ja) * | 2005-06-22 | 2010-04-28 | 株式会社ルネサステクノロジ | マルチプロセッサシステム |
US7386646B2 (en) * | 2005-08-25 | 2008-06-10 | Broadcom Corporation | System and method for interrupt distribution in a multithread processor |
US7912302B2 (en) * | 2006-09-21 | 2011-03-22 | Analog Devices, Inc. | Multiprocessor decoder system and method |
-
2007
- 2007-05-31 DE DE102007025397A patent/DE102007025397B4/de active Active
-
2008
- 2008-01-16 US US12/014,868 patent/US7689809B2/en active Active
- 2008-05-28 CN CN200880018013.4A patent/CN101730881B/zh active Active
- 2008-05-28 WO PCT/US2008/006744 patent/WO2008153797A1/en active Application Filing
- 2008-05-28 AT AT08767909T patent/ATE516533T1/de not_active IP Right Cessation
- 2008-05-28 KR KR1020097027561A patent/KR101485068B1/ko active IP Right Grant
- 2008-05-28 EP EP08767909A patent/EP2171575B1/en active Active
- 2008-05-28 JP JP2010510321A patent/JP5295228B2/ja active Active
- 2008-05-28 TW TW97119627A patent/TWI467490B/zh active
-
2009
- 2009-11-30 GB GB0920863A patent/GB2461841A/en not_active Withdrawn
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6651163B1 (en) | 2000-03-08 | 2003-11-18 | Advanced Micro Devices, Inc. | Exception handling with reduced overhead in a multithreaded multiprocessing system |
Also Published As
Publication number | Publication date |
---|---|
DE102007025397B4 (de) | 2010-07-15 |
JP5295228B2 (ja) | 2013-09-18 |
US7689809B2 (en) | 2010-03-30 |
EP2171575B1 (en) | 2011-07-13 |
CN101730881A (zh) | 2010-06-09 |
KR20100036279A (ko) | 2010-04-07 |
TW200905566A (en) | 2009-02-01 |
DE102007025397A1 (de) | 2008-12-04 |
CN101730881B (zh) | 2014-07-09 |
WO2008153797A1 (en) | 2008-12-18 |
GB2461841A (en) | 2010-01-20 |
US20080301408A1 (en) | 2008-12-04 |
ATE516533T1 (de) | 2011-07-15 |
JP2010529533A (ja) | 2010-08-26 |
TWI467490B (zh) | 2015-01-01 |
EP2171575A1 (en) | 2010-04-07 |
GB0920863D0 (en) | 2010-01-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101485068B1 (ko) | 복수의 프로세서들을 포함하는 시스템 및 그 동작 방법 | |
US6671827B2 (en) | Journaling for parallel hardware threads in multithreaded processor | |
CA1303225C (en) | Register management system in a computer processor with out-of-sequence instruction execution | |
JP6807383B2 (ja) | 転送プレフィックス命令 | |
US5148544A (en) | Apparatus and method for control of asynchronous program interrupt events in a data processing system | |
US20040205747A1 (en) | Breakpoint for parallel hardware threads in multithreaded processor | |
JPH0242569A (ja) | ベクター処理システムに用いる文脈スイッチング方法及び装置 | |
KR20120025492A (ko) | Smt 기계에서 비교 및 전달 명령어를 사용한 안정적 실행 | |
JP2007102781A (ja) | 持続的なユーザレベルスレッド用の装置、システムおよび方法 | |
US10241829B2 (en) | Information processing device, information processing method, recording medium, calculation processing device, calculation processing method | |
EP1760580B1 (en) | Processing operation information transfer control system and method | |
US7600082B2 (en) | Virtualization logic | |
EP0290942B1 (en) | Guest machine execution control system for virtual machine system | |
JP5289688B2 (ja) | プロセッサシステム及びプロセッサシステムを動作させるオペレーティングシステムプログラムの処理方法 | |
JP4608100B2 (ja) | 多重処理システムにおける改良結果処理方法 | |
US7890740B2 (en) | Processor comprising a first and a second mode of operation and method of operating the same | |
EP0297892B1 (en) | Apparatus and method for control of asynchronous program interrupt events in a data processing system | |
CA1302579C (en) | Apparatus and method for providing an extended processing environment on nonmicrocoded data processing system | |
CA1304823C (en) | Apparatus and method for synchronization of arithmetic exceptions in central processing units having pipelined execution units simultaneously executing instructions | |
US8732721B2 (en) | Method for reducing trap overhead when executing a guest in a virtual machine | |
JP2006506727A (ja) | コピーレジスタファイルを有するvliw | |
JP2864496B2 (ja) | 多重処理計算機 | |
JP2022107229A (ja) | 情報処理装置、制御方法及び制御プログラム | |
JP2023500604A (ja) | スレッドを格納するためのシャドウラッチ構成レジスタファイル内のシャドウラッチ |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
GRNT | Written decision to grant | ||
FPAY | Annual fee payment |
Payment date: 20171219 Year of fee payment: 4 |
|
FPAY | Annual fee payment |
Payment date: 20181226 Year of fee payment: 5 |
|
FPAY | Annual fee payment |
Payment date: 20191217 Year of fee payment: 6 |