WO2014175636A1 - 심드 구조 기반의 쓰레드 분기 관리 장치 및 방법 - Google Patents

심드 구조 기반의 쓰레드 분기 관리 장치 및 방법 Download PDF

Info

Publication number
WO2014175636A1
WO2014175636A1 PCT/KR2014/003504 KR2014003504W WO2014175636A1 WO 2014175636 A1 WO2014175636 A1 WO 2014175636A1 KR 2014003504 W KR2014003504 W KR 2014003504W WO 2014175636 A1 WO2014175636 A1 WO 2014175636A1
Authority
WO
WIPO (PCT)
Prior art keywords
thread
sim
branch
lane
information
Prior art date
Application number
PCT/KR2014/003504
Other languages
English (en)
French (fr)
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 삼성전자 주식회사
Priority to US14/786,417 priority Critical patent/US10831490B2/en
Publication of WO2014175636A1 publication Critical patent/WO2014175636A1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30058Conditional branch instructions
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • 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

Definitions

  • the present invention relates to an apparatus and method based on a SIMD structure for efficiently managing thread branches caused by conditional branches.
  • SIMD single instruction, multiple data
  • each lane of the SIMD corresponds to one logical thread
  • the SIMD lanes can follow different control paths when conditional branches occur, and SIMD lanes do not need to be executed when instructions from other control paths are issued. Has to rest, resulting in significant performance degradation.
  • a branch occurs in a thread group
  • a flag is set to distinguish the threads to be executed for each branch, and for the SIMD lane that is rested, the threads of different thread groups having the same PC (Program Counter) are merged.
  • PC Program Counter
  • a branch thread management apparatus based on a SIMD structure having two or more front-end units, and a branch thread management method for improving performance by minimizing idle SIMD lanes when control is divided by branches and the like through the apparatus.
  • an apparatus for managing thread divergence based on a SIMD Architecture may schedule a thread group based on two or more front end units and SIMD LANE available information. And a control unit for activating at least one front end unit of the two or more front end units to control the activated front end unit to fetch an instruction for processing the scheduled thread group.
  • the control unit may include an active thread manager that manages information of active threads for the thread group when a thread branch occurs in the thread group by a branch instruction.
  • the control unit may further include a SIM lane manager for identifying available SIM lanes based on the active thread information of the active thread manager to manage the SIM lane available information.
  • the apparatus may further include a distribution network that delivers instructions to the corresponding sim lanes fetched by the front end unit activated based on the active thread information of the active thread manager.
  • the sim lanes may include two or more, and each of the sim lanes may include an execution unit that performs an instruction transmitted through a distribution network.
  • control unit may schedule the thread group further based on one or more of the memory access characteristics of the thread group, the computation delay time, and the user input information.
  • the control unit may determine one or more thread groups in consideration of the number of idle sim lanes in the available simle lanes and schedule the depth and depth for the determined one or more thread groups.
  • the control unit activates one predefined front end unit before a thread branch occurs for a given thread group, or after the resulting thread branch terminates and merges again, and the activated front end unit uses the entire seam lane.
  • Command fetching can be controlled to perform a given thread group.
  • a method of managing thread divergence based on a SIMD architecture may include a step in which a first front end unit fetches an instruction, and a thread branch occurs in the first thread group by the fetched instruction. Activating a second front end unit among the available front end units if the thread branch occurs, and scheduling a thread group to be processed through the second front end unit based on the available SIMS lane information. And retrieving the instruction by the first and second front end units.
  • the thread branch management method may further include managing active thread information for the first thread group or the second thread group.
  • the thread branch management method may further include identifying a simul lane currently available based on active thread information for the first thread group or the second thread group, and managing the sim lane available information.
  • the thread branch management method may further include managing use state information of the sim lane immediately before the thread branch occurs when the thread branch occurs.
  • the thread branch management method may further include a step of jumping to the Taken-PC when the thread branch occurs due to the conditional branch.
  • the thread branch management method may include determining whether the instruction fetched by the first front end unit is a branch join instruction, and if the result is a branch join instruction, not-not yet processed by the thread branch for the first thread group.
  • the determining of whether the Taken PC exists and the first front end unit may further include, if the Not-Taken PC does not exist, drawing out an instruction for the first thread group based on the SIM lane usage state information.
  • the scheduling of the second thread group may schedule the thread group based on at least one of a memory access characteristic of the thread group, an operation delay time, and user input information.
  • Scheduling the second thread group may determine the second thread group in consideration of the number of idle simend lanes in the available simle lane information, and schedule the depth and depth for the determined second thread group. have.
  • the branched thread management apparatus and method based on the proposed SIMD structure can improve the utilization of idle SIMD lanes and improve processing performance by applying the optimal spatiotemporal partitioning processing for each thread group.
  • FIG. 1 is a block diagram of a thread branch management apparatus based on a simd structure according to an embodiment.
  • FIG. 2 is a flowchart illustrating a thread branch management method based on a sim structure according to an embodiment.
  • FIG. 3 is a view illustrating a state change of a sim lane according to a thread branch occurrence in a general apparatus.
  • FIG. 4 illustrates an example of a state change of a sim lane when a thread branch occurs in an apparatus according to an embodiment.
  • the thread branch management apparatus 100 may be a data processing apparatus based on a simd structure for processing multiple data, in particular, multiple threads with a single command.
  • a simd structure-based data processing device schedules multiple threads into a group of threads so that multiple threads can be processed by a single instruction.
  • a thread branch management apparatus 100 may include a front end unit 120, a distribution network 130, a SIMD lane 140, and a control unit ( 150).
  • the front end unit 120 fetches and decodes the instructions, and the distribution unit 130 transmits the instructions fetched by the front end unit 120 to the sim lane 140.
  • the thread branch management device 100 may include two or more front end units 120 (FEU 0 to FEU m).
  • the SIMD lane 140 is also composed of two or more SL 0 to SL n, and each of the SIM lanes SL 0 to SL n is an execution unit EU 0 to execute instructions fetched by the front end unit 120. EU n).
  • the thread branch management apparatus 100 may be implemented such that the number of front end units 120 does not exceed the number of sim lanes 140.
  • a general simd structure-based data processing apparatus includes a single front end unit to allow one front end unit to fetch an instruction for processing multiple threads using the entire sim lane. However, if a thread divergence occurs because a conditional branch instruction or the like is fetched in the program flow, some seams are rested and processing performance is reduced.
  • the thread branch management apparatus 100 includes two or more front end units, and thus, when a thread branch occurs and there is a recessed sim lane, efficient thread processing may be performed by using the recessed sim lane. It can be done.
  • the control unit 150 schedules a thread group to be processed by performing an instruction fetched from the front end unit 120 based on the SIM available information. At this time, the scheduled thread group waits until it is processed in the corresponding sim lane 140 in the thread pool 110.
  • the control unit 150 activates one or more of the two or more front end units FEU 0 to FEU m based on the sim lane available information, and causes the activated front end unit to execute instructions for processing the corresponding thread group. Can be controlled to withdraw.
  • the control unit 150 may include an active thread manager 151 that manages active thread information for each thread group scheduled in the thread pool 110.
  • the active thread information is information about a thread that is actually operating in a thread group, that is, processed by an instruction fetched from the front end unit 120 and to be written back to a register file.
  • the active thread manager 151 may be a space for storing active thread information (eg, a stack memory).
  • the active thread manager 151 may manage active thread information about the scheduled thread group.
  • control unit 150 includes a SIM lane manager that manages SIM lane availability information including information on IDs of the currently available SIM lanes, the number of available SIM lanes, and SIM lane status information immediately before a thread branch occurs. 152).
  • the sim lane manager 152 may be, for example, a stack memory as a space for storing various information.
  • the control unit 150 may determine the ID of the currently available sim lane and the number of available sim lanes based on the active thread information of the thread group managed by the active thread manager 151. The SIM lane available information thus identified may be recorded and managed in the SIM lane manager 152.
  • control unit 150 activates any one front end unit previously defined, for example FEU 0.
  • the control unit 150 may be initially available because all of the SIMS lanes SL 0 to SL 15 will be available. With a simp width of thread group 0 of 16 and a depth of 1, 16 threads can be scheduled to be processed at once in sixteen SIML lanes SL 0 through SL 15.
  • the activated front end unit FEU 0 fetches instructions for processing thread group 0, and when the instructions are fetched, the distribution network 130 delivers the instructions to each of the SIM 140 140 SL 0 to SL 15. In this case, the distribution network 130 may transfer the command to the corresponding sim lane 140 by referring to the active thread manager 151.
  • the SIM lanes SL 0 to SL 15 that receive the instruction execute the instruction through each execution unit EU 0 to EU 15 to process each thread and write the processing result to the register file.
  • the process of incrementing the PC (Program Counter) and fetching the next instruction from the front end unit FEU 0 is repeatedly performed.
  • the front end unit FEU 0 fetches a branch instruction, and as a result, when a thread branch occurs in thread group 0, the control unit 150 activates the thread group 0 due to the thread branch.
  • Thread information may be recorded and managed in the active thread manager 151.
  • the state of use of the sim lane immediately before the current thread branch occurs is recorded in the sim lane manager 152, and information on the currently available sim lane is based on the active thread information recorded in the active thread manager 151. This can be captured and recorded in the sim lane manager 152.
  • the control unit 150 may activate the remaining front end units FEU 1 to FEU m that are not currently active when the SIM group 140 where thread group 0 follows the Taken path and takes a rest. You can schedule a group of threads to execute a command. In this case, the control unit 150 may schedule the thread group in consideration of the number of available SIMS lanes 140.
  • control unit 150 additionally activates one front end unit (e.g., FEU 1) to process the Not-Taken path of thread group 0 using all of the available SIMD lanes 140, You can schedule to process threads in another thread group (for example, thread group 1).
  • FEU 1 front end unit
  • two or more front end units e.g., FEU 1 and FEU 2, etc.
  • FEU 1 and FEU 2 can be activated to divide some of the available SIMULA lanes 140 to divide two or more thread groups (e.g. Not-Taken paths of thread group 0). And thread group 1, or thread groups 2 and 3).
  • control unit 150 may schedule the thread group in consideration of memory access characteristics of the thread group, operation delay time, and user input information. For example, if thread groups 1 and 2 frequently access a particular address range, activate two front-end units (e.g., FEU 1 and FEU 2) and divide the available seams 140 into thread group 1 and You can schedule two to process at the same time.
  • FEU 1 and FEU 2 frequently access a particular address range
  • control unit 150 joins the branch when the branch join instruction is withdrawn from the front end unit FEU 0 and all the Not-Taken paths are terminated, and continues with respect to the thread group 0 using the currently available sim lane 140. Do it.
  • the SIM lane manager 152 retrieves the SIM lane usage state information before the branch occurrence and schedules thread group 0 according to the SIM lane usage state. To be processed.
  • FIG. 2 is a flowchart illustrating a thread branch management method based on a sim structure according to an embodiment.
  • the thread branch management method based on the sim structure of FIG. 2 may be performed by the thread branch management apparatus 100 according to the embodiment of FIG. 1.
  • FIG. 2 one embodiment of a thread branch management method that the thread branch management apparatus 100 may perform will be described.
  • the currently active front end unit 120 retrieves an instruction (201). As described above, after a thread branch occurs in the program flow or after all thread branches are terminated and merged again, only one predefined front end unit 120 is activated to operate as a sim. However, after a thread branch occurs in the program flow, the one or more front end units 120 may be the front end units 120 currently active.
  • the fetched instruction is passed through the distribution network 130 to the corresponding sim lane 140 and the execution units EU 0 to EU n. Run this command to process the thread (step 203).
  • the PC is then incremented (step 204) and the currently active front end unit 120 fetches the instructions of the corresponding PC (step 201).
  • step 202 the branch instruction generates a thread branch. It is determined whether the command is a branch join instruction that rejoins the branched thread (step 205).
  • the currently operating sim lane use status information that is, the sim lane information being used immediately before the thread branch occurs is recorded and managed in the sim lane manager 152. (Step 206).
  • the SIM lane manager 152 may include a J-STACK storing the SIM lane usage state information and an N-STACK storing the current SIM lane available information.
  • a thread branch occurs due to a conditional branch or the like, information on the currently running sim lane is pushed to the J-Stack.
  • active thread information that operates by following the Taken path for the thread group may be managed by the active thread manager 151.
  • the active thread information for the thread group is recorded in the active thread manager 151, the not-taken PC and the not-taken sim lane, that is, the sim lane information available by the thread branch are pushed to the n-stack.
  • the thread branch may then jump to the Taken PC (step 207) and cause the currently active front end unit 120 to fetch the instructions located on that Taken PC.
  • the currently active front end unit 120 fetches an instruction located in the Taken PC (step 201)
  • the active thread manager 151 reads the active thread information along the Taken path from the thread group, and transfers the command to the corresponding sim lane 140 to execute the command (step 203).
  • the process of incrementing the PC (204) and the currently active front end unit 120 withdraws the instruction from the increased PC position and processes it is repeated until a branch join instruction is encountered.
  • the ID and the number of SIM lanes currently available are determined by referring to the SIM lane manager (step 208). If one SIM lane exists, it is determined whether there is an available front end unit 120 (step 209).
  • one or more front end units 120 may be further activated (step 210), and the thread group to be processed in the newly activated front end unit 120 may be scheduled (step 211).
  • one or more thread groups are scheduled using information such as the number of available SIM lanes, memory access characteristics of a specific thread group, and operation delay time, and each of the scheduled thread groups is further activated.
  • Each of the end units 120 may be processed.
  • one thread group has 16 threads, and if four sim lanes 140 are currently available, the thread group has four seams width of four and depth of four, out of fourteen threads. After four runs, you can increase the PCs in that thread group.
  • three simlines 140 are currently available, two thread groups are scheduled to be allocated to one thread group, and the two simlines are allocated to have a simid width of 2 and a depth of 8, and the other threads are executed.
  • one SIML lane 140 may be allocated and scheduled to be performed with a SIMID width of 1 and a depth of 16.
  • the newly activated front end unit 120 fetches the corresponding instruction (step 201), and the instructions fetched from each front end unit 120 are processed in the assigned sim lane 140, respectively.
  • All or some of the steps in the program flow diagram shown in FIG. 2 may be repeated several times over the entire program flow.
  • the number of available SIMD lanes, thread group memory access patterns, and computational delay times, and so on are available depending on the situation until the thread branch is first generated by a conditional branch, etc., until all thread branches are resolved.
  • the number of front end units can vary. In other words, when the thread meets the conditional branch and the thread is branched, the SIME lane 140 may be available. Also, if any path is terminated first by the branch, the newly activated front end unit 120 may newly schedule the branch.
  • the number of available simlines can vary in various situations, such as when processing for a given thread group is terminated first. Accordingly, the scheduling steps 208 to 211 may be repeated several times according to the available sim lanes.
  • step 205 if the processing on the Taken path is completed and reaches the end of the Taken path and the currently active front end unit 120 issues a branch join instruction to join the thread branch (step 205), all processing of the Not-Taken path is completed. It is determined whether or not (step 213).
  • the Sim-lane manager 512 checks the en-stack and the information about the Not-Taken PC that has not been processed yet exists, the Not-Taken PC information is not displayed because the Not-Taken path is not completed yet. Take out and jump to the Not-Taken PC (step 216) and withdraw the next instruction (step 201) to be processed. If the end of the Not-Taken path is reached and a branch join instruction is met (step 205), the unstacked Not-Taken PC is not present in the n-stack of the SIM lane manager 512 (step 213). Thread branches are joined (step 214).
  • step 214 When the thread branch is joined (step 214), when the thread branch occurs, the simle lane usage status information immediately before the occurrence of the branch recorded in the second stack of the sim lane manager 152 is retrieved (step 215) so that the joined threads continue to be executed. .
  • the embodiment shown in FIG. 2 is just one example that may be performed in the thread branch management apparatus 100, and the thread branch management apparatus 100 may appropriately manage thread branch management in various situations. Can be done.
  • FIG. 3 is a view illustrating a state change of a sim lane according to a thread branch occurrence in a general apparatus.
  • 4 illustrates an example of a state change of a sim lane when a thread branch occurs in an apparatus according to an embodiment.
  • the thread branch management apparatus 100 schedules a thread group and accordingly, the state of the SIMD 140 is changed.
  • FIG. 3 illustrates a state change of a SIMD lane when a thread branch occurs in a general SIMD structure-based data processing apparatus having one front-end unit FEU 0 and eight SIMD lanes 0-7. .
  • state 1 eight threads in thread group 0 are processed in eight sim lanes (0-7) through one front-end unit (FEU 0).
  • FEU 0 front-end unit
  • State 2 to 5 is a state in which a thread branch occurs due to a conditional branch or the like, and five active threads along the Taken path in thread group 0 are processed in five sim lanes (0 to 4). At this time, the remaining three simlines (5-7) is to rest.
  • the thread branch management apparatus 100 includes four front end units FEU 0 to FEU 3 and eight sim lanes 0 to 7. In state 1, eight threads in thread group 0 are processed in the entire sim lanes (0 through 7) through one front-end unit FEU 0.
  • state 2 When state 2 reaches the conditional branch and the thread in thread group 0 branches, it first takes the branch's Taken path through front-end unit FEU 0. In thread group 0, five threads along the Taken path are processed using five simlanes (0-4), and by the thread branch, the simlanes (5-7) are rested.
  • the thread branch management apparatus 100 checks the available information of the sim lanes, and thus activates the new front end unit FEU 1 since three sim lanes 5 to 7 are available. Then, the newly activated front end unit FEU 1 performs a Not-Taken path of thread group 0. Taken path of thread group 0 terminates after executing state 5, and scheduled Not-Taken path of thread group 0 terminates after executing state 3.
  • This scheduling process can be repeated up to a certain point of time, after which the front end unit (eg FEU 0) is activated again and the entire sim lanes (eg 0 through 7) are activated through that front end unit (eg FEU 0). You can use to schedule a group of threads to be processed.
  • the front end unit eg FEU 0
  • the entire sim lanes eg 0 through 7
  • the processing performance may be improved by activating one or more front end units appropriately according to the changing availability of the sim lanes, and dynamically scheduling and processing a group of threads.
  • the embodiments may be embodied as computer readable codes on a computer readable recording medium.
  • the computer-readable recording medium includes all kinds of recording devices in which data that can be read by a computer system is stored.
  • Examples of computer-readable recording media include ROM, RAM, CD-ROM, magnetic tape, floppy disks, optical data storage devices, and the like, which may also be implemented in the form of carrier waves (for example, transmission over the Internet). Include.
  • the computer readable recording medium can also be distributed over network coupled computer systems so that the computer readable code is stored and executed in a distributed fashion.
  • functional programs, codes and code segments for implementing the embodiments can be easily inferred by programmers in the art to which the present invention belongs.

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)
  • Telephonic Communication Services (AREA)
  • Advance Control (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

조건 분기 등에 의해 발생하는 쓰레드 분기를 효율적으로 관리하기 위한 심드(SIMD) 구조 기반의 장치에 관한 것이다. 일 실시예에 따르면, 장치는 둘 이상의 프론트 엔드 유닛(Front End Unit) 및 심드 레인(SIMD LANE) 가용 정보에 기초하여 쓰레드 그룹을 스케줄링하고, 둘 이상의 프론트 엔드 유닛 중에서 적어도 하나의 프론트 엔드 유닛을 활성화하여 그 활성화된 프론트 엔드 유닛으로 하여금 스케줄링 된 쓰레드 그룹을 처리하기 위한 명령어를 인출하도록 제어하는 제어 유닛을 포함할 수 있다.

Description

심드 구조 기반의 쓰레드 분기 관리 장치 및 방법
조건 분기 등에 의해 발생하는 쓰레드 분기를 효율적으로 관리하기 위한 심드(SIMD) 구조 기반의 장치와 그 방법에 관한 것이다.
그래픽스나 물리 연산 등의 응용은 많은 데이터에 대해 동일한 연산을 반복적으로 수행하는 특징이 있다. 따라서, 이러한 응용에는 단일 명령어로 다중 데이터를 처리하는 SIMD(Single Instruction, Multiple Data) 프로그래밍 모델이 일반적으로 사용된다. 또한, 최근에는 보다 유연한 프로그래밍 모델의 지원을 위해 SIMD의 각 레인(Lane)을 하나의 데이터 대신 하나의 논리적 쓰레드에 대응하여 쓰레드 수준의 병렬성을 이용한 방식이 널리 사용된다.
하지만, SIMD의 각 레인은 하나의 논리적 쓰레드에 대응하기 때문에 조건 분기가 발생하는 경우 SIMD 레인이 다른 제어 경로를 따를 수 있으며, 다른 제어 경로의 명령어가 발행될 때에는 그 명령어를 실행할 필요가 없는 SIMD 레인은 쉬어야 하기 때문에 상당한 성능의 저하가 일어난다. 이와 같이, 쓰레드 그룹에서 분기가 발생하는 경우 플래그(flag)를 두어 각 분기에 대하여 실행할 쓰레드를 구분하고 이로 인해 쉬게 되는 SIMD 레인에 대하여는 동일한 PC(Program Counter)를 가진 다른 쓰레드 그룹의 쓰레드를 병합하여 효율성을 높이는 방법이 제시되고 있으나, 각 쓰레드 그룹간의 상관 관계를 모니터링하여야 하고 일반적으로 쓰레드 그룹의 진행 정도는 일정하지 않기 때문에 성능 향상을 기대하기 어렵다.
둘 이상의 프론트-엔드 유닛을 구비한 SIMD 구조 기반의 분기 쓰레드 관리 장치와 그 장치를 통해 분기 등에 의해 제어가 나뉘는 경우 유휴 SIMD 레인을 최소화하여 성능을 향상시키는 분기 쓰레드 관리 방법이 제시된다.
일 양상에 따르면, 심드 구조(SIMD Architecture) 기반의 쓰레드 분기(thread divergence)를 관리하는 장치는 둘 이상의 프론트 엔드 유닛(Front End Unit) 및 심드 레인(SIMD LANE) 가용 정보에 기초하여 쓰레드 그룹을 스케줄링하고, 둘 이상의 프론트 엔드 유닛 중에서 적어도 하나의 프론트 엔드 유닛을 활성화하여 그 활성화된 프론트 엔드 유닛으로 하여금 스케줄링 된 쓰레드 그룹을 처리하기 위한 명령어를 인출하도록 제어하는 제어 유닛을 포함할 수 있다.
제어 유닛은 분기 명령어에 의해 쓰레드 그룹에서 쓰레드 분기가 발생하면 상기 쓰레드 그룹에 대한 액티브 쓰레드의 정보를 관리하는 액티브 쓰레드 매니저를 포함할 수 있다.
제어 유닛은 액티브 쓰레드 매니저의 액티브 쓰레드 정보를 기초로 가용한 심드 레인을 확인하여 심드 레인 가용 정보를 관리하는 심드 레인 매니저를 더 포함할 수 있다.
추가적인 양상에 따르면, 장치는 액티브 쓰레드 매니저의 액티브 쓰레드 정보를 기초로 활성화된 프론트 엔드 유닛에 의해 인출된 명령어를 해당하는 심드 레인으로 전달하는 분배 네트워크를 더 포함할 수 있다.
이때, 심드 레인은 둘 이상으로 이루어지고, 심드 레인 각각은 분배 네트워크를 통해 전달되는 명령어를 수행하는 실행 유닛을 포함할 수 있다.
또한, 제어 유닛은 쓰레드 그룹의 메모리 접근 특성, 연산 지연 시간 및 사용자 입력 정보 중의 하나 이상에 더 기초하여 쓰레드 그룹을 스케줄링할 수 있다.
제어 유닛은 심드 레인 가용 정보 중의 유휴 심드 레인의 수를 고려하여 하나 이상의 쓰레드 그룹을 결정하고 결정된 하나 이상의 쓰레드 그룹에 대하여 심드 폭(depth)과 깊이(depth)를 스케줄링할 수 있다.
제어 유닛은 소정 쓰레드 그룹에 대하여 쓰레드 분기가 발생하기 전 또는 발생한 쓰레드 분기가 종료하여 다시 병합된 이후에는 미리 정의된 하나의 프론트 엔드 유닛을 활성화하고 그 활성화된 프론트 엔드 유닛이 전체 심드 레인을 사용하여 소정 쓰레드 그룹을 수행하도록 명령어 인출을 제어할 수 있다.
일 양상에 따르면, 심드 구조(SIMD Architecture) 기반의 쓰레드 분기(thread divergence)를 관리하는 방법은 제1 프론트 엔드 유닛이 명령어를 인출하는 단계, 인출된 명령어에 의해 제1 쓰레드 그룹에서 쓰레드 분기가 발생하는지 판단하는 단계, 판단 결과 쓰레드 분기가 발생하면 가용한 프론트 엔드 유닛 중에서 제2 프론트 엔드 유닛을 활성화하는 단계, 심드 레인 가용 정보를 기초로 제2 프론트 엔드 유닛을 통해 처리할 쓰레드 그룹을 스케줄링하는 단계 및 제1 및 제2 프론트 엔드 유닛이 명령어를 인출하는 단계를 포함할 수 있다.
추가적인 양상에 따르면, 쓰레드 분기 관리 방법은 제1 쓰레드 그룹 또는 제2 쓰레드 그룹에 대한 액티브 쓰레드 정보를 관리하는 단계를 더 포함할 수 있다.
또한, 쓰레드 분기 관리 방법은 제1 쓰레드 그룹 또는 제2 쓰레드 그룹에 대한 액티브 쓰레드 정보를 기초로 현재 가용한 심드 레인을 확인하여 심드 레인 가용 정보를 관리하는 단계를 더 포함할 수 있다.
또한, 쓰레드 분기 관리 방법은 판단 결과 쓰레드 분기가 발생하면 쓰레드 분기 발생 직전의 심드 레인의 사용 상태 정보를 관리하는 단계를 더 포함할 수 있다.
또한, 쓰레드 분기 관리 방법은 판단 결과 조건 분기에 의해 쓰레드 분기가 발생하면 Taken-PC로 점프하는 단계를 더 포함할 수 있다.
추가적인 양상에 따르면 쓰레드 분기 관리 방법은 제1 프론트 엔드 유닛에 의해 인출된 명령어가 분기 조인 명령어인지 판단하는 단계, 판단 결과 분기 조인 명령어이면 제1 쓰레드 그룹에 대한 쓰레드 분기에 의해 아직 처리되지 않은 Not-Taken PC가 존재하는지 판단하는 단계 및 제1 프론트 엔드 유닛은 Not-Taken PC가 존재하지 않으면 심드 레인 사용 상태 정보를 기초로 제1 쓰레드 그룹에 대하여 명령어를 인출하는 단계를 더 포함할 수 있다.
한편, 제2 쓰레드 그룹을 스케줄링하는 단계는 쓰레드 그룹의 메모리 접근 특성, 연산 지연 시간 및 사용자 입력 정보 중의 하나 이상에 더 기초하여 쓰레드 그룹을 스케줄링할 수 있다.
제2 쓰레드 그룹을 스케줄링하는 단계는 심드 레인 가용 정보 중의 유휴 심드 레인의 수를 고려하여 제2 쓰레드 그룹을 결정하고 결정된 제2 쓰레드 그룹에 대하여 심드 폭(depth)과 깊이(depth)를 스케줄링할 수 있다.
제시되는 SIMD 구조 기반의 분기 쓰레드 관리 장치 및 방법을 통해 분기 등에 의해 제어가 나뉘는 경우 각 쓰레드 그룹별로 최적의 시공간적 분할 처리를 적용하여 유휴 SIMD 레인의 활용도를 높이고 처리 성능을 향상시킬 수 있다.
도 1은 일 실시예에 따른 심드 구조 기반의 쓰레드 분기 관리 장치의 구성도이다.
도 2는 일 실시예에 따른 심드 구조 기반의 쓰레드 분기 관리 방법의 흐름도이다.
도 3은 일반적인 장치에서 쓰레드 분기 발생에 따른 심드 레인의 상태 변화를 나타낸 것이다.
도 4는 일 실시예에 따른 장치에서 쓰레드 분기 발생시 심드 레인의 상태 변화의 일 예를 나타낸 것이다.
기타 실시예들의 구체적인 사항들은 상세한 설명 및 도면들에 포함되어 있다. 기재된 기술의 이점 및 특징, 그리고 그것들을 달성하는 방법은 첨부되는 도면과 함께 상세하게 후술되어 있는 실시예들을 참조하면 명확해질 것이다. 명세서 전체에 걸쳐 동일 참조 부호는 동일 구성 요소를 지칭한다.
이하, 심드 구조(SIMD Architecture) 기반의 쓰레드 분기 관리 장치 및 방법의 실시예들을 도면들을 참고하여 자세히 설명하도록 한다.
도 1은 일 실시예에 따른 심드 구조 기반의 쓰레드 분기 관리 장치의 블록도이다. 일 실시예에 따른 쓰레드 분기 관리 장치(100)는 단일 명령으로 다중 데이터, 특히 다중 쓰레드를 처리하기 위한 심드 구조를 기반으로 하는 데이터 처리 장치일 수 있다. 일반적인 심드 구조 기반의 데이터 처리 장치는 다중 쓰레드를 쓰레드 그룹 단위로 스케줄링하여 단일 명령어로 다중 쓰레드가 처리되도록 한다.
도 1을 참조하면, 일 실시예에 따른 쓰레드 분기 관리 장치(100)는 프론트 엔드 유닛(Front End Unit)(120), 분배 네트워크(130), 심드 레인(SIMD Lane)(140) 및 제어 유닛(150)을 포함할 수 있다.
프론트 엔드 유닛(120)은 명령어를 인출 및 해독하고 분배 유닛(130)은 프론트 엔드 유닛(120)이 인출한 명령어를 심드 레인(140)에 전달한다.
일반적인 심드 구조 기반의 데이터 처리 장치와 달리 본 실시예에 따른 쓰레드 분기 관리 장치(100)는 프론트 엔드 유닛(120)을 둘 이상(FEU 0 ~ FEU m) 구비할 수 있다. 심드 레인(140) 역시 둘 이상(SL 0 ~ SL n)으로 이루어지고, 각각의 심드 레인(SL 0 ~ SL n)은 프론트 엔드 유닛(120)에 의해 인출된 명령어를 수행할 실행 유닛(EU 0 ~ EU n)을 포함할 수 있다. 이때, 쓰레드 분기 관리 장치(100)는 프론트 엔드 유닛(120)의 개수가 심드 레인(140)의 개수를 초과하지 않도록 구현될 수 있다.
일반적인 심드 구조 기반의 데이터 처리 장치는 하나의 프론트 엔드 유닛을 구비하여 하나의 프론트 엔드 유닛이 전체 심드 레인을 사용하여 다중 쓰레드를 처리하기 위한 명령어를 인출하도록 한다. 하지만, 프로그램 흐름 상에 조건 분기 명령어 등이 인출되어 쓰레드 분기(divergence)가 발생하면 일부의 심드 레인은 쉬게 되어 처리 성능이 감소하게 된다.
이하에서 자세히 설명하는 바와 같이, 쓰레드 분기 관리 장치(100)는 둘 이상의 프론트 엔드 유닛을 구비함으로써 이와 같이 쓰레드 분기가 발생하여 쉬는 심드 레인이 존재하는 경우 그 쉬는 심드 레인을 활용하여 효율적인 쓰레드 처리를 가능하게 할 수 있다.
제어 유닛(150)은 프론트 엔드 유닛(120)에서 인출된 명령어가 수행되어 처리될 쓰레드 그룹을 심드 레인 가용 정보를 기초로 스케줄링한다. 이때, 스케줄링된 쓰레드 그룹은 쓰레드 풀(110)에서 해당하는 심드 레인(140)에서 처리될 때까지 대기한다.
제어 유닛(150)은 심드 레인 가용 정보를 기초로 둘 이상의 프론트 엔드 유닛(FEU 0 ~ FEU m) 중에서 하나 이상을 활성화하고, 그 활성화된 프론트 엔드 유닛으로 하여금 해당하는 쓰레드 그룹을 처리하기 위한 명령어를 인출하도록 제어할 수 있다.
한편, 제어 유닛(150)은 쓰레드 풀(110)에서 스케줄링되는 각 쓰레드 그룹에 대한 액티브 쓰레드 정보를 관리하는 액티브 쓰레드 매니저(151)를 포함할 수 있다. 액티브 쓰레드 정보는 쓰레드 그룹에서 실제 동작하게 되는 즉, 프론트 엔드 유닛(120)에서 인출되는 명령어에 의해 처리되어 레지스터 파일에 기록(write-back)되어야 하는 쓰레드에 대한 정보이다. 한편, 액티브 쓰레드 매니저(151)는 액티브 쓰레드 정보를 저장하는 공간(예: 스택(stack) 메모리)일 수 있다.
예를 들어, 조건 분기 등에 의해 쓰레드 그룹에서 쓰레드 분기가 발생하게 되면 Taken 또는 Not-Taken 경로에 따라 일부의 쓰레드만이 액티브 상태에 있을 수 있다. 또한, 가용한 심드 레인이 존재하여 그 가용 심드 레인을 이용하여 처리할 쓰레드 그룹을 스케줄링하면 그 스케줄링된 쓰레드 그룹에 대한 액티브 쓰레드 정보를 액티브 쓰레드 매니저(151)에 관리할 수 있다.
도 1의 액티브 쓰레드 매니저(151)를 참조하면, 심드 레인(140)의 수가 16(n=15)이라 가정할 때 쓰레드 그룹 0의 경우에는 총 16개의 쓰레드 중에서 8개의 쓰레드만 액티브 상태에 있음을 알 수 있으며, 쓰레드 그룹 1의 경우에는 총 16개의 쓰레드 중에서 4개의 쓰레드만 액티브 상태에 있음을 알 수 있다.
또한, 제어 유닛(150)은 현재 가용한 심드 레인의 아이디, 가용 심드 레인의 갯수 등의 정보를 포함하는 심드 레인 가용 정보와 쓰레드 분기가 발생하기 직전의 심드 레인 상태 정보를 관리하는 심드 레인 매니저(152)를 포함할 수 있다. 심드 레인 매니저(152)는 액티브 쓰레드 매니저(151)와 마찬가지로 각종 정보를 저장하기 위한 공간으로서 예를 들어 스택 메모리일 수 있다. 제어 유닛(150)은 액티브 쓰레드 매니저(151)에 관리되는 쓰레드 그룹의 액티브 쓰레드 정보에 기초하여 현재 가용한 심드 레인의 아이디 및 가용 심드 레인의 갯수를 파악할 수 있다. 이와 같이 파악된 심드 레인 가용 정보를 심드 레인 매니저(152)에 기록하여 관리할 수 있다.
예를 들어, 제어 유닛(150)은 최초에 미리 정의되어 있는 어느 하나의 프론트 엔드 유닛, 예컨대, FEU 0을 활성화한다. 한편, 도 1에 도시된 심드 레인(140)의 수가 16(n=15)이라 가정하면, 처음에는 전체의 심드 레인(140) SL 0 내지 SL 15가 모두 가용 상태일 것이므로 제어 유닛(150)은 쓰레드 그룹 0의 심드 폭을 16으로 하고 깊이를 1로 하여 16개의 쓰레드가 16개의 심드 레인 SL 0 내지 SL 15에서 한 번에 처리되도록 스케줄링할 수 있다.
활성화된 프론트 엔드 유닛 FEU 0는 쓰레드 그룹 0을 처리하기 위한 명령어를 인출하고, 명령어가 인출되면 분배 네트워크(130)는 각 심드 레인(140) SL 0 내지 SL 15에 명령어를 전달하다. 이때, 분배 네트워크(130)는 액티브 쓰레드 매니저(151)를 참조하여 명령어를 해당하는 심드 레인(140)에 전달할 수 있다. 명령어를 전달받은 심드 레인 SL 0 내지 SL 15는 각 실행 유닛 EU 0 내지 EU 15를 통해 명령어를 수행하여 각 쓰레드를 처리하여 처리 결과를 레지스터 파일에 기록한다. 또한, 처리가 완료되면 PC(Program Counter)를 증가시키고 프론트 엔드 유닛 FEU 0이 다음 명령어를 인출하는 과정이 반복 수행된다.
이때, 프로그램 흐름 상에서 조건 분기가 존재하여 프론트 엔드 유닛 FEU 0이 분기 명령어를 인출하게 되고, 그 결과 쓰레드 그룹 0에서 쓰레드 분기가 발생하면 제어 유닛(150)은 쓰레드 분기로 인해 쓰레드 그룹 0에 대한 액티브 쓰레드 정보를 액티브 쓰레드 매니저(151)에 기록하여 관리할 수 있다. 또한, 현재 쓰레드 분기가 발생하기 직전의 심드 레인의 사용 상태 정보를 심드 레인 매니저(152)에 기록하고, 액티브 쓰레드 매니저(151)에 기록된 액티브 쓰레드 정보를 기초로 현재 가용한 심드 레인의 정보를 파악하여 심드 레인 매니저(152)에 기록할 수 있다.
제어 유닛(150)은 쓰레드 그룹 0이 Taken 경로를 따르게 되어 쉬게 되는 심드 레인(140)이 발생하면 현재 활성화되어 있지 않은 나머지 프론트 엔드 유닛(FEU 1 ~ FEU m)을 활성화하여 쉬는 심드 레인(140)을 통해 명령어를 수행하도록 쓰레드 그룹을 스케줄링할 수 있다. 이때, 제어 유닛(150)은 가용한 심드 레인(140)의 수를 고려하여 쓰레드 그룹을 스케줄링할 수 있다.
예를 들어, 제어 유닛(150)은 하나의 프론트 엔드 유닛(예: FEU 1)을 추가로 활성화하여 가용한 심드 레인(140) 전체를 사용하여 쓰레드 그룹 0의 Not-Taken 경로를 처리하도록 하거나, 다른 쓰레드 그룹(예 쓰레드 그룹 1)의 쓰레드들을 처리하도록 스케줄링할 수 있다.
또는, 둘 이상의 프론트 엔드 유닛(예: FEU 1과 FEU 2 등)을 활성화하여 가용한 심드 레인(140) 중에서 일부의 심드 레인을 나누어 두 개 이상의 쓰레드 그룹(예:쓰레드 그룹 0의 Not-Taken 경로와 쓰레드 그룹 1 또는, 쓰레드 그룹 2와 3 등)을 처리하도록 스케줄링할 수 있다.
또한, 제어 유닛(150)은 쓰레드 그룹의 메모리 접근 특성 및 연산 지연 시간, 사용자 입력 정보 등을 고려하여 쓰레드 그룹을 스케줄링할 수 있다. 예를 들어, 쓰레드 그룹 1과 2가 특정 주소 영역을 빈번하게 접근한다면, 두 개의 프론트 엔드 유닛(예: FEU 1과 FEU 2)를 활성화하고, 가용한 심드 레인(140)을 나누어 쓰레드 그룹 1과 2를 동시에 처리하도록 스케줄링할 수 있다.
또한, 특정 쓰레드 그룹의 현재 PC 값이 4 클럭 사이클인 명령어를 수행해야 하는 것처럼 연산의 지연이 발생하게 되는 상황에서는 특정 쓰레드 그룹에 대해 가용한 전체 심드 레인(120)을 사용하도록 스케줄링하면 다음 사이클에 다른 쓰레드 그룹으로 스위칭되어야 할 수 있다. 따라서, 이러한 경우에는 가용한 심드 레인(140) 중에서 4개의 심드 레인만 사용하여 4클럭 사이클 동안 수행되도록 하고 나머지 가용 심드 레인은 다른 쓰레드 그룹에 대해 처리되도록 스케줄링할 수 있다.
이후, 제어 유닛(150)은 프론트 엔드 유닛 FEU 0에서 분기 조인 명령어가 인출되고 Not-Taken 경로가 모두 종료되면 분기를 조인하고 현재 가용한 심드 레인(140)을 이용하여 쓰레드 그룹 0에 대해 계속 수행하도록 한다. 이때, 심드 레인 가용 정보에 따라 새로 스케줄링 된 쓰레드 그룹에 대한 처리가 모두 종료하면 심드 레인 매니저(152)에서 분기 발생 전의 심드 레인 사용 상태 정보를 인출하여 그 심드 레인 사용 상태에 따라 쓰레드 그룹 0을 스케줄링하여 처리되도록 할 수 있다.
도 2는 일 실시예에 따른 심드 구조 기반의 쓰레드 분기 관리 방법의 흐름도이다. 도 2의 심드 구조 기반의 쓰레드 분기 관리 방법은 도 1의 실시예에 따른 쓰레드 분기 관리 장치(100)에 의해 수행될 수 있다.
도 2를 참조하여, 쓰레드 분기 관리 장치(100)가 수행할 수 있는 쓰레드 분기 관리 방법 중에서 하나의 실시예를 설명한다.
먼저, 현재 활성화되어 있는 프론트 엔드 유닛(120)이 명령어를 인출한다(201). 전술한 바와 같이, 프로그램 흐름 상에서 쓰레드 분기가 발생하기 전 또는 모든 쓰레드 분기가 종료하고 다시 병합된 이후에는 미리 정의된 하나의 프론트 엔드 유닛(120)만을 활성화하여 심드로 동작하도록 한다. 하지만, 프로그램 흐름 상에서 쓰레드 분기가 발생한 이후에는 하나 이상의 프론트 엔드 유닛(120)이 현재 활성화되어 있는 프론트 엔드 유닛(120)일 수 있다.
프론트 엔드 유닛(120)이 인출한 명령어가 분기 명령어가 아니면(단계 202) 인출된 해당 명령어는 분배 네트워크(130)를 통해 해당하는 심드 레인(140)으로 전달되고 실행 유닛(EU 0 ~ EU n)이 명령어를 실행하여 쓰레드를 처리한다(단계 203). 그 다음, PC를 증가시키고(단계 204) 현재 활성화되어 있는 프론트 엔드 유닛(120)은 해당하는 PC의 명령어를 인출한다(단계 201).
이러한 과정은 프로그램 흐름에서 조건 분기 등을 만나 분기 명령어가 인출될 때까지 반복 수행되고, 프론트 엔드 유닛(120)이 인출한 명령어가 분기 명령어이면(단계 202), 그 분기 명령어가 쓰레드 분기를 발생하는 명령어인지, 분기된 쓰레드를 다시 조인하는 분기 조인 명령어인지를 판단한다(단계 205).
판단 결과(단계 205) 쓰레드 분기를 발생하는 명령어이면 현재 동작중인 심드 레인 사용 상태 정보, 즉 쓰레드 분기가 발생하기 바로 직전에 사용중인 심드 레인의 상태 정보를 심드 레인 매니저(152)에 기록하여 관리한다(단계 206).
구체적으로, 심드 레인 매니저(152)는 심드 레인 사용 상태 정보를 저장하는 제이-스택(J-STACK) 및 현재 심드 레인 가용 정보를 저장하는 엔-스택(N-STACK)을 포함할 수 있다. 조건 분기 등에 의해 쓰레드 분기가 발생하면 현재 동작중인 심드 레인의 정보는 제이-스택에 푸시(Push)된다.
한편, 쓰레드 분기가 발생하게 되면 쓰레드 그룹에 대하여 Taken 경로를 따르게 되어 동작하게 되는 액티브 쓰레드 정보가 액티브 쓰레드 매니저(151)에 관리될 수 있다.
또한, 액티브 쓰레드 매니저(151)에 쓰레드 그룹에 대한 액티브 쓰레드 정보가 기록되면, Not-Taken PC와, Not-Taken 심드 레인 즉, 쓰레드 분기에 의해 가용해진 심드 레인 정보를 엔-스택에 푸시한다.
그 다음, 쓰레드 분기에 의해 Taken PC로 점프하고(단계 207) 현재 활성화되어 있는 프론트 엔드 유닛(120)이 그 Taken PC에 위치하는 명령어를 인출하도록 할 수 있다. 현재 활성화되어 있는 프론트 엔드 유닛(120)이 Taken PC에 위치한 명령어를 인출하면(단계 201) 마찬가지로 그 명령어가 새로운 분기를 발생하는 명령어인지 판단하고(단계 202), 분기 명령어가 아니면 분배 네트워크(130)는 액티브 쓰레드 매니저(151)에서 그 쓰레드 그룹에서 Taken 경로를 따르는 액티브 쓰레드 정보를 읽어 해당하는 심드 레인(140)으로 명령어를 전달하여 명령어가 실행되도록 한다(단계 203). 그 다음, PC를 증가하여(204) 현재 활성화되어 있는 프론트 엔드 유닛(120)이 증가된 PC 위치에서 명령어를 인출하여 처리되는 과정은 분기 조인 명령어를 만날 때까지 반복 수행된다.
한편, 쓰레드 분기에 의해 심드 레인의 가용 정보가 심드 레인 매니저(152)에 기록되면(단계 206), 심드 레인 매니저를 참조하여 현재 가용한 심드 레인의 아이디 및 개수를 파악하고(단계 208), 가용한 심드 레인이 존재하게 되면 가용한 프론트 엔드 유닛(120)이 존재하는지 판단한다(단계 209).
가용한 프론트 엔드 유닛(120)이 존재하면 하나 이상의 프론트 엔드 유닛(120)을 추가로 활성화하고(단계 210), 새로 활성화된 프론트 엔드 유닛(120)에서 처리될 쓰레드 그룹을 스케줄링할 수 있다(단계 211). 전술한 바와 같이, 가용한 심드 레인의 갯수, 특정 쓰레드 그룹의 메모리 접근 특성, 연산 지연시간 등의 정보를 활용하여 하나 또는 둘 이상의 쓰레드 그룹을 스케줄링하고, 스케줄링된 쓰레드 그룹 각각을 추가로 활성화된 프론트 엔드 유닛(120) 각각이 처리하도록 할 수 있다.
예를 들어, 하나의 쓰레드 그룹이 16개의 쓰레드를 가진다고 할 때, 현재 4개의 심드 레인(140)이 가용하다면 그 쓰레드 그룹은 심드 폭을 4로 하고, 깊이를 4로 하여 전체 16개의 쓰레드 중 4개씩을 4번에 걸쳐 수행한 후 해당 쓰레드 그룹의 PC가 증가하도록 할 수 있다. 만약, 현재 3개의 심드 레인(140)이 가용한 경우에는 두 개의 쓰레드 그룹을 스케줄링하여, 어느 한 쓰레드 그룹에 대해서는 2개의 심드 레인을 할당하고 심드 폭 2, 깊이 8로 하여 수행되도록 하고, 다른 쓰레드 그룹에 대해서는 1개의 심드 레인(140)을 할당하여 심드 폭 1, 깊이 16으로 하여 수행되도록 스케줄링할 수 있다.
앞에서 설명한 바와 같이, 새로 활성화된 프론트 엔드 유닛(120)은 해당하는 명령어를 인출하고(단계 201), 각 프론트 엔드 유닛(120)에서 인출된 명령어들은 각각 할당된 심드 레인(140)에서 처리된다.
도 2에 도시된 프로그램 흐름도 상의 전부 또는 일부의 단계는 전체 프로그램 흐름 상에서 수회 반복 수행될 수 있다. 예를 들어, 최초에 조건 분기 등에 의해 쓰레드 분기가 발생한 후 모든 쓰레드 분기가 해소될 때까지, 상황에 따라 가용한 심드 레인의 개수, 쓰레드 그룹의 메모리 접근 패턴, 연산 지연 시간 등의 정보, 가용한 프론트 엔드 유닛의 수가 가변적일 수 있다. 즉, 조건 분기를 만나 쓰레드가 분기되는 시점에 심드 레인(140)이 가용해질 수 있으며, 또한, 분기에 의해 어느 하나의 경로가 먼저 종료되는 경우, 새로 활성화된 프론트 엔드 유닛(120)에서 새로 스케줄링 된 쓰레드 그룹에 대한 처리가 먼저 종료되는 경우 등 다양한 상황에서 가용한 심드 레인의 수는 달라질 수 있다. 따라서, 가용 심드 레인의 상태에 따라 스케줄링하는 단계(208 ~ 211)는 여러 번 반복 수행되는 것이 가능하다.
한편, Taken 경로 상의 처리가 완료하여 Taken 경로의 끝까지 도달하여 현재 활성화된 프론트 엔드 유닛(120)이 쓰레드 분기를 조인하는 분기 조인 명령어를 인출하면(단계 205), Not-Taken 경로의 처리가 모두 완료되었는지를 판단한다(단계 213).
예를 들어, 심드 레인 매니저(512)의 엔-스택을 확인하고 아직 처리되지 않은 Not-Taken PC에 대한 정보가 존재하는 경우에는 아직 Not-Taken 경로가 완료되지 않은 상태이므로 Not-Taken PC 정보를 꺼내 Not-Taken PC로 점프하고(단계 216) 다음 명령어를 인출하여(단계 201) 처리되도록 한다. 만약, Not-Taken 경로의 마지막에 도달하여 분기 조인 명령어를 만나게 되면(단계 205), 심드 레인 매니저(512)의 엔-스택에는 아직 처리되지 않은 Not-Taken PC가 존재하지 않으므로(단계 213), 쓰레드 분기가 조인된다(단계 214).
쓰레드 분기가 조인되면(단계 214) 쓰레드 분기가 발생할 때 심드 레인 매니저(152)의 제이-스택에 기록된 분기 발생 직전의 심드 레인 사용 상태 정보를 꺼내(단계 215) 조인된 쓰레드가 계속 수행되도록 한다.
도 2에 도시된 바와 같은 실시예는 앞서 언급한 바와 같이, 쓰레드 분기 관리 장치(100)에서 수행될 수 있는 하나의 예일 뿐이며, 쓰레드 분기 관리 장치(100)는 다양한 상황에 적절하게 쓰레드 분기 관리를 수행할 수 있다.
도 3은 일반적인 장치에서 쓰레드 분기 발생에 따른 심드 레인의 상태 변화를 나타낸 것이다. 도 4는 일 실시예에 따른 장치에서 쓰레드 분기 발생시 심드 레인의 상태 변화의 일 예를 나타낸 것이다. 도 3 및 도 4를 참조하여, 일 실시예에 따른 쓰레드 분기 관리 장치(100)가 쓰레드 그룹을 스케줄링하고 그에 따라 심드 레인(140)의 상태가 변화하는 것을 예를 들어 설명한다.
먼저, 도 3은 하나의 프론트 엔드 유닛(FEU 0)과 8개의 심드 레인(0~7)을 가지는 일반적인 심드 구조 기반의 데이터 처리 장치에서 쓰레드 분기가 발생하였을 때 심드 레인의 상태 변화를 도시한 것이다.
상태 1에서는 하나의 프론트 엔드 유닛(FEU 0)을 통해 쓰레드 그룹 0의 8개의 쓰레드가 8개의 심드 레인(0~7)에서 각각 처리된다.
상태 2 내지 5는 조건 분기 등에 의해 쓰레드 분기가 발생한 상태로서, 쓰레드 그룹 0에서 Taken 경로를 따르는 액티브 쓰레드 5개가 5 개의 심드 레인(0~4)에서 처리된다. 이때, 나머지 3 개의 심드 레인(5~7)은 쉬게 된다.
그 다음, Taken 경로가 종료하여 분기 조인 명령어가 인출되면 상태 6 및 7에서 Not-Taken 경로에 대한 처리가 3개의 심드 레인(5~7)을 통해 수행되고, 이때, 나머지 심드 레인(0~4)은 쉬게 된다.
이후, 상태 8에서 Not-Taken의 처리가 모두 종료하여 쓰레드 분기가 병합되어 전체 심드 레인(0~7)을 이용하여 쓰레드 그룹 0을 계속 처리하게 된다.
도 3에 도시된 바를 통해 알 수 있듯이, 특정 쓰레드 그룹을 처리하는 도중 조건 분기에 의해 쓰레드가 분기하게 되면 쉬게 되는 심드 레인이 발생하여 처리 성능이 감소하게 된다.
한편, 도 4를 참조하면, 일 실시예에 따른 쓰레드 분기 관리 장치(100)는 4개의 프론트 엔드 유닛(FEU 0 ~ FEU 3)과 8개의 심드 레인(0~7)을 구비한다. 상태 1에서 하나의 프론트 엔드 유닛 FEU 0을 통해 쓰레드 그룹 0에 포함된 8개의 쓰레드가 전체의 심드 레인(0~7)에서 처리된다.
상태 2가 되어 조건 분기를 만나 쓰레드 그룹 0의 쓰레드가 분기되면, 먼저, 프론트 엔드 유닛 FEU 0을 통해 분기의 Taken 경로를 수행한다. 쓰레드 그룹 0에서 Taken 경로를 따르는 5개의 쓰레드는 5 개의 심드 레인(0~4)를 이용하여 처리되고, 쓰레드 분기에 의해 심드 레인(5~7)은 쉬게 된다.
이때, 쓰레드 분기 관리 장치(100)는 심드 레인의 가용 정보를 확인하여 3개의 심드 레인(5~7)이 가용하므로 새로운 프론트 엔드 유닛 FEU 1을 활성화한다. 그리고, 새로 활성화된 프론트 엔드 유닛 FEU 1을 통해 쓰레드 그룹 0의 Not-Taken 경로를 수행하도록 한다. 쓰레드 그룹 0의 Taken 경로는 상태 5까지 수행된 후 종료하고, 스케줄링된 쓰레드 그룹 0의 Not-Taken 경로는 상태 3을 수행한 후 종료한다.
상태 4가 되면 쓰레드 그룹 0의 Not-Taken 경로의 수행이 종료하게 되어 다시 3개의 심드 레인(5~7)이 가용하게 되고, 쓰레드 분기 관리 장치(100)는 바뀐 심드 레인 가용 정보를 확인하여 새로운 프론트 엔드 유닛 FEU 2를 활성화한다. 그리고, 프론트 엔드 유닛 FEU 1과 FEU 2를 통해 처리될 쓰레드 그룹 1과 2를 스케줄링한다. 도시된 바에 따르면, 프론트 엔드 유닛 FEU 1을 통해 처리될 쓰레드 그룹 1은 2 개의 심드 레인(5,6)을 사용하여 4 번 수행된 후 PC가 증가되도록 스케줄링하고, 프론트 엔드 유닛 FEU 2를 통해 처리될 쓰레드 그룹 2는 하나의 심드 레인(7)을 사용하여 수행되도록 스케줄링한다.
상태 6이 되면, 쓰레드 그룹 0에 대한 분기가 모두 종료하여 조인되고, 이때, 3 개의 심드 레인(5~7)은 사용중이며 5 개의 심드 레인(0~4)가 가용하게 되므로 5개의 가용 심드 레인(0~4)을 이용하여 쓰레드 그룹을 다시 스케줄링한다. 도시된 바에 따르면, 병합된 쓰레드 그룹 0은 프론트 엔드 유닛 FEU 0을 통해 4개의 심드 레인(0~3)을 사용하여 처리되도록 스케줄링하고, 나머지 하나의 심드 레인(4)는 새로운 프론트 엔드 유닛 FEU 3을 추가로 활성화하여 그 프론트 엔드 유닛 FEU 3을 통해 쓰레드 그룹 3을 처리하도록 스케줄링할 수 있다.
이러한 스케줄링 과정은 특정한 시점까지 반복될 수 있으며, 이후 특정한 시점이 되면 다시 프론트 엔드 유닛(예: FEU 0)만을 활성화하고 그 프론트 엔드 유닛(예: FEU 0)을 통해 전체 심드 레인(0~7)을 사용하여 하나의 쓰레드 그룹이 처리되도록 스케줄링할 수 있다.
이와 같이, 변화되는 심드 레인의 가용 상태에 따라 적절하게 하나 이상의 프론트 엔드 유닛을 활성화하고, 쓰레드 그룹을 동적으로 스케줄링하여 처리함으로써 처리 성능을 향상시킬 수 있다.
한편, 본 실시 예들은 컴퓨터로 읽을 수 있는 기록 매체에 컴퓨터가 읽을 수 있는 코드로 구현하는 것이 가능하다. 컴퓨터가 읽을 수 있는 기록 매체는 컴퓨터 시스템에 의하여 읽혀질 수 있는 데이터가 저장되는 모든 종류의 기록 장치를 포함한다.
컴퓨터가 읽을 수 있는 기록 매체의 예로는 ROM, RAM, CD-ROM, 자기 테이프, 플로피디스크, 광 데이터 저장장치 등이 있으며, 또한 캐리어 웨이브(예를 들어 인터넷을 통한 전송)의 형태로 구현하는 것을 포함한다. 또한, 컴퓨터가 읽을 수 있는 기록 매체는 네트워크로 연결된 컴퓨터 시스템에 분산되어, 분산 방식으로 컴퓨터가 읽을 수 있는 코드가 저장되고 실행될 수 있다. 그리고 본 실시예들을 구현하기 위한 기능적인(functional) 프로그램, 코드 및 코드 세그먼트들은 본 발명이 속하는 기술 분야의 프로그래머들에 의하여 용이하게 추론될 수 있다.
본 개시가 속하는 기술분야의 통상의 지식을 가진 자는 본 발명이 그 기술적 사상이나 필수적인 특징을 변경하지 않고서 다른 구체적인 형태로 실시될 수 있다는 것을 이해할 수 있을 것이다. 그러므로 이상에서 기술한 실시예들은 모든 면에서 예시적인 것이며 한정적이 아닌 것으로 이해해야만 한다.

Claims (16)

  1. 심드 구조(SIMD Architecture) 기반의 쓰레드 분기(thread divergence)를 관리하는 장치에 있어서,
    둘 이상의 프론트 엔드 유닛(Front End Unit); 및
    심드 레인(SIMD LANE) 가용 정보에 기초하여 쓰레드 그룹을 스케줄링하고, 상기 둘 이상의 프론트 엔드 유닛 중에서 적어도 하나의 프론트 엔드 유닛을 활성화하여 그 활성화된 프론트 엔드 유닛으로 하여금 상기 스케줄링 된 쓰레드 그룹을 처리하기 위한 명령어를 인출하도록 제어하는 제어 유닛;을 포함하는 장치.
  2. 제1항에 있어서, 상기 제어 유닛은
    분기 명령어에 의해 쓰레드 그룹에서 쓰레드 분기가 발생하면 상기 쓰레드 그룹에 대한 액티브 쓰레드의 정보를 관리하는 액티브 쓰레드 매니저를 포함하는 장치.
  3. 제2항에 있어서, 상기 제어 유닛은
    상기 액티브 쓰레드 매니저의 액티브 쓰레드 정보를 기초로 가용한 심드 레인을 확인하여 상기 심드 레인 가용 정보를 관리하는 심드 레인 매니저;를 더 포함하는 장치.
  4. 제2항에 있어서,
    상기 액티브 쓰레드 매니저의 액티브 쓰레드 정보를 기초로 상기 활성화된 프론트 엔드 유닛에 의해 인출된 명령어를 해당하는 심드 레인으로 전달하는 분배 네트워크;를 더 포함하는 장치.
  5. 제4항에 있어서,
    상기 심드 레인은 둘 이상으로 이루어지고, 심드 레인 각각은 상기 분배 네트워크를 통해 전달되는 명령어를 수행하는 실행 유닛을 포함하는 장치.
  6. 제1항에 있어서, 상기 제어 유닛은
    쓰레드 그룹의 메모리 접근 특성, 연산 지연 시간 및 사용자 입력 정보 중의 하나 이상에 더 기초하여 쓰레드 그룹을 스케줄링하는 장치.
  7. 제1항에 있어서, 상기 제어 유닛은
    상기 심드 레인 가용 정보 중의 유휴 심드 레인의 수를 고려하여 하나 이상의 쓰레드 그룹을 결정하고 상기 결정된 하나 이상의 쓰레드 그룹에 대하여 심드 폭(depth)과 깊이(depth)를 스케줄링하는 장치.
  8. 제1항에 있어서, 상기 제어 유닛은
    소정 쓰레드 그룹에 대하여 쓰레드 분기가 발생하기 전 또는 발생한 쓰레드 분기가 종료하여 다시 병합된 이후에는 미리 정의된 하나의 프론트 엔드 유닛을 활성화하고 그 활성화된 프론트 엔드 유닛이 전체 심드 레인을 사용하여 상기 소정 쓰레드 그룹을 수행하도록 명령어 인출을 제어하는 장치.
  9. 심드 구조(SIMD Architecture) 기반의 쓰레드 분기(thread divergence)를 관리하는 방법에 있어서,
    제1 프론트 엔드 유닛이 명령어를 인출하는 단계;
    상기 인출된 명령어에 의해 제1 쓰레드 그룹에서 쓰레드 분기가 발생하는지 판단하는 단계;
    상기 판단 결과 쓰레드 분기가 발생하면 가용한 프론트 엔드 유닛 중에서 제2 프론트 엔드 유닛을 활성화하는 단계;
    심드 레인 가용 정보를 기초로 상기 제2 프론트 엔드 유닛을 통해 처리할 쓰레드 그룹을 스케줄링하는 단계; 및
    상기 제1 및 제2 프론트 엔드 유닛이 명령어를 인출하는 단계;를 포함하는 쓰레드 분기 관리 방법.
  10. 제9항에 있어서,
    상기 제1 및 제2 쓰레드 그룹에 대한 액티브 쓰레드 정보를 관리하는 단계;를 더 포함하는 쓰레드 분기 관리 방법.
  11. 제10항에 있어서,
    상기 제1 및 제2 쓰레드 그룹에 대한 액티브 쓰레드 정보를 기초로 현재 가용한 심드 레인을 확인하여 심드 레인 가용 정보를 관리하는 단계;를 더 포함하는 쓰레드 분기 관리 방법.
  12. 제9항에 있어서,
    상기 판단 결과 쓰레드 분기가 발생하면 상기 쓰레드 분기 발생 직전의 심드 레인의 사용 상태 정보를 관리하는 단계;를 더 포함하는 쓰레드 분기 관리 방법.
  13. 제12항에 있어서,
    상기 판단 결과 조건 분기에 의해 쓰레드 분기가 발생하면 Taken-PC로 점프하는 단계;를 더 포함하는 쓰레드 분기 관리 방법.
  14. 제12항에 있어서,
    상기 제1 프론트 엔드 유닛에 의해 인출된 명령어가 분기 조인 명령어인지 판단하는 단계;
    상기 판단 결과 분기 조인 명령어이면 제1 쓰레드 그룹에 대한 쓰레드 분기에 의해 아직 처리되지 않은 Not-Taken PC가 존재하는지 판단하는 단계; 및
    상기 제1 프론트 엔드 유닛은 Not-Taken PC가 존재하지 않으면 상기 심드 레인 사용 상태 정보를 기초로 상기 제1 쓰레드 그룹에 대하여 명령어를 인출하는 단계;를 더 포함하는 쓰레드 분기 관리 방법.
  15. 제9항에 있어서, 상기 제2 쓰레드 그룹을 스케줄링하는 단계는
    쓰레드 그룹의 메모리 접근 특성, 연산 지연 시간 및 사용자 입력 정보 중의 하나 이상에 더 기초하여 쓰레드 그룹을 스케줄링하는 쓰레드 분기 관리 방법.
  16. 제9항에 있어서, 상기 제2 쓰레드 그룹을 스케줄링하는 단계는
    상기 심드 레인 가용 정보 중의 유휴 심드 레인의 수를 고려하여 제2 쓰레드 그룹을 결정하고 상기 결정된 제2 쓰레드 그룹에 대하여 심드 폭(depth)과 깊이(depth)를 스케줄링하는 쓰레드 분기 관리 방법.
PCT/KR2014/003504 2013-04-22 2014-04-22 심드 구조 기반의 쓰레드 분기 관리 장치 및 방법 WO2014175636A1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
US14/786,417 US10831490B2 (en) 2013-04-22 2014-04-22 Device and method for scheduling multiple thread groups on SIMD lanes upon divergence in a single thread group

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
KR1020130044433A KR102102166B1 (ko) 2013-04-22 2013-04-22 심드 구조 기반의 쓰레드 분기 관리 장치 및 방법
KR10-2013-0044433 2013-04-22

Publications (1)

Publication Number Publication Date
WO2014175636A1 true WO2014175636A1 (ko) 2014-10-30

Family

ID=51792125

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/KR2014/003504 WO2014175636A1 (ko) 2013-04-22 2014-04-22 심드 구조 기반의 쓰레드 분기 관리 장치 및 방법

Country Status (3)

Country Link
US (1) US10831490B2 (ko)
KR (1) KR102102166B1 (ko)
WO (1) WO2014175636A1 (ko)

Families Citing this family (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20170365237A1 (en) * 2010-06-17 2017-12-21 Thincl, Inc. Processing a Plurality of Threads of a Single Instruction Multiple Data Group
US9952876B2 (en) 2014-08-26 2018-04-24 International Business Machines Corporation Optimize control-flow convergence on SIMD engine using divergence depth
US10713059B2 (en) * 2014-09-18 2020-07-14 Advanced Micro Devices, Inc. Heterogeneous graphics processing unit for scheduling thread groups for execution on variable width SIMD units
KR102511006B1 (ko) * 2015-05-29 2023-03-17 삼성전자 주식회사 전력 공급을 제어하는 방법 및 장치
GB2540937B (en) * 2015-07-30 2019-04-03 Advanced Risc Mach Ltd Graphics processing systems
US10289415B2 (en) * 2015-10-14 2019-05-14 International Business Machines Corporation Method and apparatus for execution of threads on processing slices using a history buffer for recording architected register data
US10282205B2 (en) * 2015-10-14 2019-05-07 International Business Machines Corporation Method and apparatus for execution of threads on processing slices using a history buffer for restoring architected register data via issued instructions
US10755468B2 (en) 2016-12-09 2020-08-25 Sony Interactive Entertainment Inc. Image processing apparatus, image processing method, and program to improve speed for calculating a color of pixels in image data
US10990409B2 (en) 2017-04-21 2021-04-27 Intel Corporation Control flow mechanism for execution of graphics processor instructions using active channel packing
US10990394B2 (en) * 2017-09-28 2021-04-27 Intel Corporation Systems and methods for mixed instruction multiple data (xIMD) computing
CN110716750A (zh) * 2018-07-11 2020-01-21 超威半导体公司 用于部分波前合并的方法和系统
US11093250B2 (en) 2018-09-29 2021-08-17 Intel Corporation Apparatus and method for gang invariant operation optimizations using dynamic evaluation
US10831505B2 (en) 2018-09-29 2020-11-10 Intel Corporation Architecture and method for data parallel single program multiple data (SPMD) execution
US10776110B2 (en) 2018-09-29 2020-09-15 Intel Corporation Apparatus and method for adaptable and efficient lane-wise tensor processing
US11107263B2 (en) * 2018-11-13 2021-08-31 Intel Corporation Techniques to manage execution of divergent shaders
US10915328B2 (en) * 2018-12-14 2021-02-09 Intel Corporation Apparatus and method for a high throughput parallel co-processor and interconnect with low offload latency
US20200409695A1 (en) * 2019-06-28 2020-12-31 Advanced Micro Devices, Inc. Compute unit sorting for reduced divergence
US11397578B2 (en) * 2019-08-30 2022-07-26 Advanced Micro Devices, Inc. Selectively dispatching waves based on accumulators holding behavioral characteristics of waves currently executing
US10996960B1 (en) * 2019-11-22 2021-05-04 Blaize, Inc. Iterating single instruction, multiple-data (SIMD) instructions
US11307860B1 (en) 2019-11-22 2022-04-19 Blaize, Inc. Iterating group sum of multiple accumulate operations
US20210349717A1 (en) * 2020-05-05 2021-11-11 Intel Corporation Compaction of diverged lanes for efficient use of alus
CN112114877B (zh) * 2020-09-28 2023-03-14 西安芯瞳半导体技术有限公司 一种动态补偿线程束warp的方法、处理器及计算机存储介质
US11816061B2 (en) * 2020-12-18 2023-11-14 Red Hat, Inc. Dynamic allocation of arithmetic logic units for vectorized operations
GB2605375B (en) * 2021-03-29 2023-11-29 Advanced Risc Mach Ltd Data processors
US20230102767A1 (en) * 2021-09-29 2023-03-30 Advanced Micro Devices, Inc. System and methods for efficient execution of a collaborative task in a shader system
GB2621199A (en) * 2022-07-29 2024-02-07 Advanced Risc Mach Ltd An apparatus and method of optimising divergent processing in thread groups

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20070100797A (ko) * 2005-02-04 2007-10-11 밉스 테크놀로지스 인크. 멀티쓰레딩 마이크로프로세서에서의 분기 쓰레드 스케줄러
US7353369B1 (en) * 2005-07-13 2008-04-01 Nvidia Corporation System and method for managing divergent threads in a SIMD architecture
US7594095B1 (en) * 2005-11-29 2009-09-22 Nvidia Corporation Multithreaded SIMD parallel processor with launching of groups of threads
US20120194526A1 (en) * 2010-12-15 2012-08-02 Benjamin Thomas Sander Task Scheduling

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2000062182A2 (en) 1999-04-09 2000-10-19 Clearspeed Technology Limited Parallel data processing apparatus
US20020083311A1 (en) 2000-12-27 2002-06-27 Paver Nigel C. Method and computer program for single instruction multiple data management
US7761697B1 (en) * 2005-07-13 2010-07-20 Nvidia Corporation Processing an indirect branch instruction in a SIMD architecture
US7543136B1 (en) 2005-07-13 2009-06-02 Nvidia Corporation System and method for managing divergent threads using synchronization tokens and program instructions that include set-synchronization bits
US8381203B1 (en) * 2006-11-03 2013-02-19 Nvidia Corporation Insertion of multithreaded execution synchronization points in a software program
US7617384B1 (en) * 2006-11-06 2009-11-10 Nvidia Corporation Structured programming control flow using a disable mask in a SIMD architecture
US8060724B2 (en) 2008-08-15 2011-11-15 Freescale Semiconductor, Inc. Provision of extended addressing modes in a single instruction multiple data (SIMD) data processor
US20110219221A1 (en) 2010-03-03 2011-09-08 Kevin Skadron Dynamic warp subdivision for integrated branch and memory latency divergence tolerance
US8751771B2 (en) 2010-09-29 2014-06-10 Nvidia Corporation Efficient implementation of arrays of structures on SIMT and SIMD architectures
KR20120074762A (ko) 2010-12-28 2012-07-06 삼성전자주식회사 재구성 가능한 심드 아키텍처 기반의 컴퓨팅 장치 및 방법
US8726252B2 (en) 2011-01-28 2014-05-13 International Business Machines Corporation Management of conditional branches within a data parallel system
US9830156B2 (en) * 2011-08-12 2017-11-28 Nvidia Corporation Temporal SIMT execution optimization through elimination of redundant operations
US9378181B2 (en) * 2012-11-09 2016-06-28 Intel Corporation Scalable computing array
US9851977B2 (en) * 2012-12-06 2017-12-26 Kalray Apparatus and method for combining thread warps with compatible execution masks for simultaneous execution and increased lane utilization
US9606797B2 (en) * 2012-12-21 2017-03-28 Intel Corporation Compressing execution cycles for divergent execution in a single instruction multiple data (SIMD) processor
US9519479B2 (en) * 2013-11-18 2016-12-13 Globalfoundries Inc. Techniques for increasing vector processing utilization and efficiency through vector lane predication prediction

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20070100797A (ko) * 2005-02-04 2007-10-11 밉스 테크놀로지스 인크. 멀티쓰레딩 마이크로프로세서에서의 분기 쓰레드 스케줄러
US7353369B1 (en) * 2005-07-13 2008-04-01 Nvidia Corporation System and method for managing divergent threads in a SIMD architecture
US7594095B1 (en) * 2005-11-29 2009-09-22 Nvidia Corporation Multithreaded SIMD parallel processor with launching of groups of threads
US20120194526A1 (en) * 2010-12-15 2012-08-02 Benjamin Thomas Sander Task Scheduling

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
G. DIAMOS ET AL.: "SIMD Re-Convergence At Thread Frontiers", MICRO'' 11 JOURNAL, 3 December 2011 (2011-12-03), PORTO ALEGRE, BRAZIL *

Also Published As

Publication number Publication date
KR102102166B1 (ko) 2020-04-21
US10831490B2 (en) 2020-11-10
US20160132338A1 (en) 2016-05-12
KR20140126193A (ko) 2014-10-30

Similar Documents

Publication Publication Date Title
WO2014175636A1 (ko) 심드 구조 기반의 쓰레드 분기 관리 장치 및 방법
CN106257411B (zh) 单指令多线程计算系统及其方法
US6671827B2 (en) Journaling for parallel hardware threads in multithreaded processor
KR102074961B1 (ko) 비대칭 실행 유닛들의 효율적인 스케줄링을 위한 방법 및 장치
US9772879B2 (en) System and method for isolating I/O execution via compiler and OS support
CN106055310B (zh) 图形处理中管理活动线程依赖关系
CN100538640C (zh) 动态配置虚拟处理器资源的装置
EP1139215B1 (en) Method and apparatus for releasing functional units in a multithreaded VLIW processor
US20070074217A1 (en) Scheduling optimizations for user-level threads
JPH0766329B2 (ja) 情報処理装置
CN106462395A (zh) 多线程处理器架构中的线程等待
WO2014015725A1 (zh) 基于应用效果即时反馈的显卡虚拟化下资源调度系统、方法
CN110308982B (zh) 一种共享内存复用方法及装置
US10915488B2 (en) Inter-processor synchronization system
US20070157199A1 (en) Efficient task scheduling by assigning fixed registers to scheduler
Bertolotti et al. Real-time embedded systems: open-source operating systems perspective
CN115668142A (zh) 一种处理器、处理方法及相关设备
CN113254070A (zh) 加速单元、片上系统、服务器、数据中心和相关方法
US10496409B2 (en) Method and system for managing control of instruction and process execution in a programmable computing system
CN106708473B (zh) 一种统一染色器阵列多warp取指电路
KR20130080721A (ko) 병렬 컴퓨팅 프레임워크 기반 클러스터 시스템의 호스트 노드 및 메모리 관리 방법
CN111708622B (zh) 一种指令组调度方法、架构、设备及存储介质
CN117931729B (zh) 向量处理器访存指令处理方法和系统
TWI428833B (zh) 多執行緒處理器及其指令執行及同步方法及其電腦程式產品
JPH07244588A (ja) データ処理装置

Legal Events

Date Code Title Description
121 Ep: the epo has been informed by wipo that ep was designated in this application

Ref document number: 14788950

Country of ref document: EP

Kind code of ref document: A1

NENP Non-entry into the national phase

Ref country code: DE

WWE Wipo information: entry into national phase

Ref document number: 14786417

Country of ref document: US

122 Ep: pct application non-entry in european phase

Ref document number: 14788950

Country of ref document: EP

Kind code of ref document: A1