WO2016024508A1 - マルチプロセッサ装置 - Google Patents

マルチプロセッサ装置 Download PDF

Info

Publication number
WO2016024508A1
WO2016024508A1 PCT/JP2015/072246 JP2015072246W WO2016024508A1 WO 2016024508 A1 WO2016024508 A1 WO 2016024508A1 JP 2015072246 W JP2015072246 W JP 2015072246W WO 2016024508 A1 WO2016024508 A1 WO 2016024508A1
Authority
WO
WIPO (PCT)
Prior art keywords
instruction
processor
processing
register
memory
Prior art date
Application number
PCT/JP2015/072246
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 US15/317,183 priority Critical patent/US10754818B2/en
Priority to JP2016542545A priority patent/JP6551751B2/ja
Publication of WO2016024508A1 publication Critical patent/WO2016024508A1/ja

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8053Vector processors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • 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/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • 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/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • 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/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • 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/3824Operand accessing
    • 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/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]
    • G06F9/38873Iterative single instructions for multiple data lanes [SIMD]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining

Definitions

  • the present invention relates to a multiprocessor device including a plurality of processors.
  • a processor that operates according to a program such as a DSP
  • a program such as a DSP
  • processing with a large amount of processing such as image processing has become necessary.
  • a device composed of a plurality of processors such as a GPU (graphics processing unit), has emerged as an alternative to the DSP.
  • FIG. 2 shows a configuration of a GPU described in Japanese Patent Application Laid-Open No. 2009-37593.
  • the GPU includes an external memory device (EMU) 201, an external memory 202, a vector processing engine (VPE) 205, a vector control device (VCU) 206, and a vector processing device (VPU) 207.
  • EMU external memory device
  • VPE vector processing engine
  • VCU vector control device
  • VPU vector processing device
  • the vector processing unit (VPU) 207 has a multiprocessor and a plurality of arithmetic units. There is a vector control unit (VCU) 206 as a higher-level control unit, and a vector processing engine (VPE) 205 is one set including these units. A plurality of vector processing engines (VPE) 205 are provided, and are connected via a crossbar via an external memory unit (EMU) 201 so that they can access each other. Since the external memory 202 is also connected, memory access is also possible.
  • VCU vector control unit
  • VPE vector processing engine
  • EMU external memory unit
  • L1 cache level 1 cache or temporary storage device as the lowest layer
  • L2 cache upper layer
  • VPE vector processing engine
  • Level 2 cache or temporary storage device Each is a hierarchical memory access flow.
  • the performance increases as the number of vector processing engines (VPE) 205 mounted increases.
  • the operation of the vector processing engine (VPE) 205 is based on the SIMD (single instruction multiple data) type that executes the same instruction at the same time, when the number of implementations increases, memory access concentrates at the same time, and external memory Performance degradation occurs due to physical memory bandwidth limitations of the unit (EMU) 206 or external memory 202.
  • the number of vector processing units (VPU) 207 is limited to several, and the number of vector processing engines (VPE) 205 is increased. If the vector processing engine (VPE) 205 is given a different program or the same program in consideration of the time difference, it is possible to avoid the above-mentioned concentration of accesses at the same time.
  • each vector processing engine (VPE) 205 is loosely coupled via the external memory unit (EMU) 201 and requires a mechanism for efficiently exchanging data.
  • Data exchange is necessary when a large program is decomposed into small programs (processing is distributed to the vector processing unit (VPU) 207 to improve performance). In order to avoid complication of programming, these data exchanges are performed automatically regardless of the program.
  • a memory access request, a transfer destination, and a transfer source message are defined. Each device issues and receives them for processing. Multiple messages are arbitrated by each device and processed in parallel while keeping the order.
  • Message processing is mainly performed by a DMA (Direct Memory Access) device in a vector processing engine (VPE). With such a mechanism, data communication between the L2 cache of the vector processing engine (VPE) 205 and the L1 cache of the vector processing unit (VPU) 207 and the external memory 202 is automatically performed. These processes are controlled by the distance, so there is no need to be aware of them in the program.
  • VPE Direct Memory Access
  • VPU vector processing unit
  • FIG. 3 shows the presence or absence of a hazard along the time axis in the pipeline processing, and shows a hazard that occurs when the instruction 1 write and the instruction 2 read register are the same.
  • FIG. 4 In order to solve this problem in the conventional processor, a method in which different programs are given alternately as shown in FIG. 4 and flow dependence does not occur has been considered.
  • FIG. 4 four programs ABCD are prepared, and the respective instructions are given alternately. If different registers are prepared in the program ABCD, the register written by the program A does not overlap with the read register of the other program BCD. Further, since there are three time differences between the instruction A1 and the instruction A2 of the program A, there is no fear of causing a hazard even if flow dependence occurs.
  • the conventional multiprocessor device has the following problems.
  • a dynamic method there is a method equipped with a mechanism for monitoring the state of each processor. Monitoring is performed by placing the progress of the program in a shared memory or the like, and if there is a program that can be executed by the processor itself referring to it. Alternatively, separate processors are prepared separately, and the status of each processor is sequentially managed and activated. In any case, the overall hardware mechanism is complicated and increases costs.
  • VPE vector processing engines
  • the multiprocessor device includes an external memory, a plurality of processors, a memory aggregation device, a register memory, a multiplexer, and an overall control device.
  • the memory aggregation device aggregates memory accesses of a plurality of processors.
  • the register memory the number of products of the number of registers managed by the processor and the maximum processing number of the processor is prepared.
  • the multiplexer accesses the register memory in accordance with an instruction given to the register access of the processor.
  • the overall control device extracts parameters from the instructions and gives them to the processor and multiplexer for control.
  • the overall control device sequentially processes the given number of processings by changing the addressing of the register memory by the processor with the same instruction, and switches to the next instruction when the number of processings is over. Repeat the process.
  • registers for the number of physical processors are prepared, but registers for a very large number of logical processors are prepared, and the number of processes is automatically adjusted.
  • the number of processes is automatically adjusted.
  • the adjustment is only the addition / subtraction of the number of processes, the degree of parallelism of the processors can be easily increased or decreased.
  • the program is not aware of the number of processors.
  • the present invention can provide a multiprocessor device that facilitates program creation, is scalable in performance and function, and has excellent cost performance.
  • FIG. 1 is a diagram illustrating a multiprocessor device according to an embodiment of the present invention.
  • FIG. 2 is a diagram illustrating the configuration of a conventional multiprocessor device.
  • FIG. 3 is a diagram for explaining the pipeline operation in the case where the hazard of the conventional multiprocessor device does not occur.
  • FIG. 4 is a diagram for explaining a pipeline operation in which different programs of a conventional multiprocessor device are executed alternately.
  • FIG. 5 is a diagram for explaining access to the registers of the multiprocessor device according to the embodiment of the present invention.
  • FIG. 6 is a diagram for explaining the structure of the multiprocessor device for the register memory according to the embodiment of the present invention.
  • FIG. 7 is a diagram for explaining a processing cycle and addressing for a register memory when no hazard occurs in the multiprocessor device according to the embodiment of the present invention.
  • FIG. 8 is a diagram for explaining the processing cycle and addressing for the register memory when a hazard occurs in the multiprocessor device according to the embodiment of the present invention.
  • FIG. 9 is a diagram for explaining that the multiprocessor device according to the embodiment of the present invention includes a plurality of processing units.
  • FIG. 10 is a diagram illustrating register access to different logical processors in the multiprocessor device according to the embodiment of the present invention.
  • FIG. 11 is a diagram for explaining horizontal and vertical register access in image processing in the multiprocessor device according to the embodiment of the present invention.
  • FIG. 12 is a diagram for explaining the generation of the branch condition of the multiprocessor device according to the embodiment of the present invention.
  • FIG. 13 is a diagram illustrating an example of an image generated using a branch condition in the multiprocessor device according to the embodiment of the present
  • a multiprocessor device according to the first embodiment of the present invention will be described. This embodiment will be described with reference to FIGS. 1 and 5 to 9.
  • the multiprocessor device 100 includes a memory aggregation device 101, an external memory 102, a multiplexer 103, an overall control device 105, a register memory 106, and a plurality of processors 107.
  • the memory aggregating apparatus 101 aggregates memory accesses of a plurality of processors 107.
  • the multiplexer 103 accesses the register memory 106 according to an instruction given to the register access of the processor 107.
  • the number of processors 107 is physically eight, and the logical number (maximum number of processes) that can be processed as SIMD is 1024.
  • the register memory 106 is a register that reads and writes from the processor 107, and registers for the number of logical processors are prepared. For example, if there are 16 registers per processor, 16384 registers of 16384 are prepared. That is, there are 1024 processors (16384 registers) logically held, and the maximum number that can be physically processed per unit time (1 cycle) is 8.
  • the eight processors 107 change the addressing for the registers and sequentially process the instructions with the given processing number N.
  • the overall control device 105 sequentially processes the given number of processes by changing the addressing of the register memory 106 by the processor 107 with the same instruction. Further, when the processing by the processor 107 is completed, the overall control device 105 switches to the next instruction and repeats the processing for the given number of processing.
  • the instructions are stored in the external memory 102 here. Further, the overall control device 105 extracts parameters from the commands and gives them to the processor 107 and the multiplexer 103 for control.
  • FIG. 5 is a diagram showing the above operation.
  • the register memory 106 is illustrated as being divided into two, reading and writing.
  • reading and writing occur as described above. For example, in the binary operation, two of the 16 prepared registers per processor are read and written to one register. Which register is selected as an operand is described as an operand number in the instruction, and the multiplexer 103 receives the operand number and switches.
  • the register memory 106 simultaneously receives accesses from the eight processors 107, but since all the eight instructions are the same, the operand numbers are the same. Therefore, the multiplexer 103 may realize the same addressing and the same switch for each processor 107. However, it is necessary to divide up to 16 register groups so that a plurality of 16 registers can be selected simultaneously. In order to maximize throughput, reading and writing should be possible at the same time. These can be realized by preparing 16 banks of 2-port SRAM.
  • FIG. 6 is a diagram showing the above operation.
  • the multiplexer 103 is divided into two, a multiplexer 103 that performs a read operation and a multiplexer 103 that performs a write operation.
  • common addressing is performed on the 16 banks of SRAM, and the two read operand numbers described in the instruction are placed in the multiplexer 103 (downwardly divided into upper and lower for convenience). And two necessary operands are selected and entered into the processor 107.
  • one write operand number described in the instruction is placed in the multiplexer 103 (upper and lower divided for convenience), and the operation result of the processor 107 is stored in the SRAM of the designated bank.
  • FIG. 7 the horizontal axis corresponds to time, and the vertical axis corresponds to addressing.
  • R0 generated by the instruction 0 is the instruction 1
  • there is no problem because the writing of the instruction 0 to the R0 is completed a long time though it is flow-dependent.
  • the memory aggregating apparatus 101 basically connects a plurality of requests when there are adjacent addresses in response to a random address request to the memory, or mounts a cache to speed up local memory access. To do. However, the more the optimization is performed, the more fluctuation occurs in the latency that is an index of the response speed. However, if the upper limit of the number of pipeline stages is high and a hazard is unlikely to occur, these latencies can be absorbed to some extent.
  • CORDIC Coordinat Rotation Digital Computer
  • a register that reads and writes at a high operating frequency is generally configured by a flip-flop.
  • a flip-flop In this configuration, there is no problem even if a low-cost SRAM is used because there is a sufficient number of pipeline stages. For example, if a pipelined SRAM is used, even if several cycles are required for the access time, the throughput is one cycle, which is not a problem.
  • the instruction is unchanged for a period of 38 cycles.
  • the instruction update frequency is low, and it is not necessary to take a means for speeding up access such as an instruction cache.
  • This feature also eliminates restrictions on instruction length (word length) and is advantageous for the implementation of horizontal instructions called VLIW (Very Long Instruction Word) (operators are parallel and basically do not interfere with each other). It is.
  • FIG. 9 is a diagram for explaining that the multiprocessor device is composed of a plurality of processing units.
  • this multiprocessor device 100 includes an integer unit 801 (multiplication and addition), a floating point unit 802 (multiplication and addition), and the above-described CORDIC unit 803 (calculation and division of trigonometric and hyperbolic functions), A memory access unit 804 is provided.
  • Each processor 107 includes these, and the multiplexer 103 is expanded to select and supply necessary registers for each instruction of each unit.
  • Each unit 801 to 804 is pipelined and consumes 1 cycle of the square of each unit in the figure, but each has a different latency.
  • the FIFO memory absorbs the timing shift, synchronizes it, and returns the result to the multiplexer 103.
  • FIG. 9 basically, one-way operation from register reading to register writing is performed, and the structure is simple without mutual interference. This is advantageous when speeding up.
  • the instruction word length can be easily expanded. Further, since the unit can be easily attached and detached (validation and invalidation), addition and reduction of circuits can be easily realized. As a result, it is easy to provide a multiprocessor device that allows the user to easily customize the processing circuit in accordance with the purpose.
  • the register memory 106 basically accesses each processor, but a separately accessible register may be prepared separately. Such a register is used, for example, when referring to a variable common to the entire processing. However, when written from multiple processors, the value may be different from the original value. To avoid this, it is possible to create a histogram by summing the values written for each logical processor. preferable.
  • a multiprocessor device according to the second embodiment of the present invention will be described. This embodiment will be described with reference to FIG.
  • the multiprocessor device 100 described in the first embodiment is more effective as the number of processes N is larger.
  • the number of logical processors maximum number of processes
  • 1024 there are cases where it is necessary to cope with the case where the number of processes N is less than the number of logical processors and the case where the number of processes N exceeds the number of logical processors. is there.
  • division processing is necessary. The division is not switched for each instruction as in a conventional processor, but is switched after a series of programs are completed.
  • variables x and y are QVGA coordinates
  • C0 to C5 are constants representing the rotation of the Affine transformation
  • mem [] [] is a memory description for storing each QVGA pixel.
  • the coordinates of the transfer source obtained by matrix calculation (Affine transformation) are substituted for R2 and R3, the transfer source data is read via R0, and the read values are the transfer destinations indicated by the variables x and y. The coordinates are written.
  • variable x is scanned every eight, which is the number of physical processors, and the variable i is processed in parallel for the number of processors of eight. That is, in the step in which the variable y changes by 1, all the series of programs are processed, and this is repeated until the Y coordinate becomes maximum.
  • the number of loops is 1/3 times as the variable y and 3 times as the variable x as follows. (The correction of the part referring to the variables x and y is omitted). As a result, it is possible to perform processing in a state where pixels for three rows are combined in one row in the direction along the variable y.
  • correction may be performed by setting the number of loops to be twice as large as the variable y and 1/2 as large as the variable x as follows. Thereby, the process in the state which divided
  • an example is shown in which one process is divided into two, but the number of divisions is not particularly limited and can be arbitrarily set.
  • the overall control device 105 automatically adjusts. Such an adjustment can be realized by finding a multiple of the maximum X coordinate not exceeding 1024, for example. That is, also in this embodiment, it is not necessary to be aware of the number of logical processors or the number of physical processors, and a conventional program may be given.
  • FIG. 8 shows a hazard that occurs when the number of pipeline stages is 60.
  • the processor 107 immediately after the processor 107 is activated 38 times with the instruction 0, the processor 107 cannot be activated with the instruction 1. It is necessary to wait until the cycle 60 where the processing of the instruction 0 is completed. That is, when a command is switched and a new command is executed, if the processing performed in the same processing order as the processing order of the new command is not completed in the command before switching, a new command is executed until the processing is completed. There is a need to wait for processing on the instruction.
  • the processing order means a processing position in an instruction of the number N of processing processed in order. For example, a process having a process order of “10” means a process that has been executed tenth out of N instructions.
  • the overall control device 105 In order for the overall control device 105 to dynamically control these, it is only necessary to detect flow dependency before and after the command or between several commands. However, this control requires a round-robin inspection of operand numbers.
  • static flow-dependent information may be given to the overall control device 105 for processing.
  • the presence or absence of overlapping register numbers before and after the program is flow-dependent information.
  • the compiler converts such that it ignores the dependency relationship of the n-th previous instruction. That is, in the instruction before switching, it is executed in the same processing order as the processing order of the new instruction, and if the processing executed before the number of instructions specified in advance is not completed, a new one is executed until the processing is completed. Wait for processing on the instruction. In this case, processing for a new command is performed without confirming the end of processing performed after the number of commands specified in advance.
  • FIG. 6 A multiprocessor device according to the third embodiment of the present invention will be described. This embodiment will be described with reference to FIG. 6, FIG. 7, FIG. 10, and FIG.
  • the multiprocessor device 100 handles image processing. As shown in FIG. 7, the multiprocessor device 100 takes a form in which addressing is changed and instructions are sequentially executed, and addressing is performed along the X coordinate of image processing. Also, after executing the instructions in the program, the next Y coordinate is processed again, and the process ends when the entire image has been processed.
  • the addressing to the register file 106 is changed according to the shift amount. Since an operand for which the shift amount is specified and an operand for which the shift amount is not specified may be performed at the same time, the bank in which the shift amount is not specified is not operated.
  • FIG. 10 refers to a register of a logical processor 12 away in the forward direction. Since the addressing during processing is n, the relative addressing spans n + 1 and n + 2. Since eight pieces of continuous data (for the number of physical processors) that can be read out by one addressing are performed, only two steps at the beginning of addressing are performed when straddling this data. The next and subsequent addressing needs only one new addressing if the previously accessed value (data) is remembered.
  • the local position number of addressing n + 2 not used (remainder of dividing logical processor number by 8) Data from “4” to “7” is stored. Then, in the next addressing, eight data of addressing n + 3 are acquired. As a result, the stored data of the local position numbers “4” to “7” of the addressing n + 2 and the newly acquired data of the local position numbers “0” to “3” of the addressing n + 3 can be used. . In this case, the data of the local position numbers “4” to “7” of the addressing n + 3 that is not used is stored and used for subsequent processing.
  • the overall control device 105 makes access only twice at the start of addressing.
  • the relative reference is a multiple of 8
  • the addressing does not extend over two, so there is no need to access it twice.
  • the multiplexer 103 allocates addressing n + 1 data to physical processor numbers 0 to 3 for addressing n + 1 and addressing n + 2 data, and addressing n + 2 to physical processor numbers 4 to 7. Allocate data.
  • the former shifts and gives the logical processor local position numbers 4 to 7 to each.
  • the latter shifts and gives the logical processor local position numbers 0 to 3 to each.
  • the multiprocessor device 100 does not execute different Y coordinates until execution of all instructions for the X coordinates is completed. Therefore, it is not possible to refer to values during processing of different Y coordinates. However, at the start of a new Y coordinate program, the result of processing with the previous Y coordinate remains in the register memory 106. By referring to this, the register value of the logical processor having the smaller Y coordinate can be used.
  • R0 to R3 can be used as they are. However, when processing the next Y coordinate, it is necessary to newly update R0 to R3.
  • R0 to R3 Since it is inefficient to change the program every time the Y coordinate is updated, R0 to R3 must be shown at the same relative position in the processing of the next Y coordinate regardless of the processing of the Y coordinate. Therefore, when the processing of the X coordinate is finished, the current Y coordinate result must be transferred from R1 to R0, from R2 to R1, from R3 to R2, and to R3. If this is done on a program, several instructions will be consumed.
  • the least significant 4 bits of the Y coordinate are added to the operand number designated by the instruction to the multiplexer 103 that selects the register.
  • the horizontal and vertical start / end points include end processing such as mirroring and copying.
  • the mirror is processed assuming that the coordinates are -1 and 2 if the coordinates are -2, and the copy is processed assuming that the coordinates are all 0 if the coordinates are negative. The same applies not only to negative values but also when the maximum number of coordinates is exceeded.
  • FIG. 7 A multiprocessor device according to the fourth embodiment of the present invention will be described. This embodiment will be described with reference to FIG. 7, FIG. 9, FIG. 12, and FIG.
  • the multiprocessor device 100 stores branch conditions for each logical processor, and determines the presence / absence of processing from the stored information. Thereby, even when the same instruction is input to the eight processors 107, a branch can be realized for each processor 107.
  • the register memory 106 has an operation result such as carry or overflow and the above-described branch condition flag in addition to a register that is generally used.
  • condition code The condition codes of the integer unit 801 and the memory access unit 804 in FIG. 9 are collectively CCint, the floating point unit is CCmad, and the CORDIC unit is CCcor.
  • CC consists of 4 bits, N representing positive / negative, Z representing zero, V representing overflow, and C representing carry.
  • FIG. 12 shows a process of generating branch flags F0 to F3.
  • the branch flag 111 included in the register memory 106 includes four levels F0 to F3. Selection of original information for generating the branch flag 111 is performed based on the selection table 112. The selection is specified in the instruction.
  • the generation table 113 represents all combinations of 4 bits (16 patterns of 2 to the 4th power) constituting the original information selected based on the selection table 112, and an update branch flag from the state of each 4 bit digit. Is a table that generates Generation of a branch flag for update using the generation table 113 is also specified in the instruction.
  • the instruction table 114 is a table that generates (selects) a new branch flag by combining the branch flag 111 and the update branch flag generated in the generation table 113. Generation of a new branch flag using the instruction table 114 is also specified in the instruction.
  • the determination table 115 represents all the combinations of 4 bits (16 patterns of 2 to the 4th power) constituting the branch flag 111, and is a table for generating (selecting) a determination flag from each 4-bit digit state. Generation of a determination flag using the determination table 115 is also specified in the instruction.
  • the write instruction table 116 is a table for determining whether to write to the register memory 106 and whether to write to the branch flag 111 based on the determination flag generated in the determination table 115. Determination of whether or not to write using the write instruction table is also specified in the command.
  • a branch flag for update is generated based on the selection table 112 from either the CC (CCint, CCmad, CCcor) attached to the calculation result of each unit or the branch flag 111. For example, if N and Z bits of CCint's NZVC are set to 1, if the branch flag is set, the selection table 112 is “1”, and the generation table 113 is “1111,000,000,000,000” (a pattern in which NZ is compatible). ).
  • the instruction table 114 is used to instruct how to incorporate the update branch flag into the original four-level branch flag. For example, when the most recently generated flag is pushed out and a new branch flag is inserted at an empty position, the instruction table 114 is set to “2”. The result generated based on this instruction table 114 becomes the next branch flag 111.
  • the branch flag 111 in FIG. 12 it is determined whether to write the operation result to the register memory 106 and whether to write to the branch flag 111. For example, when two states of F0 and F1 of the branch flag 111 are changed to create four states, the setting is made for each state in the determination table 115 and the instruction table 116 is set to “1” for processing. This will be described in a writing method similar to the following C language (for statements related to the multiprocessor are omitted).
  • the program given to the processor 107 is as follows.
  • Judge [] is a binary table index
  • F3210 is a bit concatenation of branch flags F3 to F0.
  • the condition may be described in the instruction. However, for example, when a loop is executed at a branch, the condition for exiting the loop may not be true. This is because, although it becomes a condition for each logical processor to exit, there may be a case where all the logical processors (except for the unprocessed part) do not meet all the conditions. Therefore, in addition to the description of conditions, the upper limit of the number of loops is described.
  • the switching from the instruction 0 to the instruction 1 is when the last addressing of the instruction 0 is completed.
  • Parameters relating to the instruction 0 (operand designation, etc.) need only be read once and stored, and the instruction 1 may be read in advance after the cycle immediately after the instruction 0 is read. In this case, parameters are stacked in a FIFO memory or the like.
  • the branch flags of all the logical processors cannot be determined unless the cycle 37 of the instruction 0 is reached. If it is attempted to acquire the instruction branched off at the cycle 37 of the instruction 0, the activation of the processor 107 is delayed correspondingly. This leads to performance degradation.
  • delay branching is adopted.
  • the instruction 1 is executed unconditionally and a branch is performed at the end of the instruction 1.
  • the parameter of the instruction 1 is acquired during the execution of the instruction 0
  • the parameter of the branch destination instruction determined at the end of the instruction 0 is acquired during the execution of the instruction 1, and the processor 107 can be started continuously. it can.
  • Instructions 0 and 1 normalize the X and Y coordinates to be operated, initialize the branch flag 111, and initialize variables.
  • the recurrence formula calculation (R2) is performed in the floating point unit 802, and the convergence determination calculation (R8) is performed in the CORDIC unit 803. Also, the convergence count R3 is incremented.
  • the instruction 2 is looped (the symbol “! &” In the instruction means negative and all). .
  • the number of loops is set to a maximum of 64, and instruction 3 is always executed because it is a delayed branch. If the result of the CORDIC unit 803 is not an overflow V (a result that cannot be expressed, that is, R * R-2 * 2 ⁇ 0), F0 is overwritten. This indicates that R1 diverges and ends when it is 2 or more.
  • instruction 3 as in instruction 2, the recursion formula calculation (R1) is performed in the floating point unit 802, and the convergence determination calculation (R9) is performed in the CORDIC unit 803.
  • the branch flag F0 is determined in the same manner as the instruction 2, and the result is overwritten.
  • a program can be executed with a small number of instructions.
  • it is effective in a system that reduces the number of instructions by using arithmetic units in parallel.
  • this specification discloses a multiprocessor device including an external memory, a plurality of processors, an external memory, a plurality of processors, a memory aggregation device, a register memory, a multiplexer, and an overall control device.
  • the memory aggregation device aggregates memory accesses of a plurality of processors.
  • the register memory the number of products of the number of registers managed by the processor and the maximum processing number of the processor is prepared.
  • the multiplexer accesses the register memory in accordance with an instruction given to the register access of the processor.
  • the overall control unit extracts the parameters from the instructions, gives them to the processor and the multiplexer, and controls them, and sequentially processes the given number of processes by changing the addressing of the register memory in the processor with the same instruction. For example, the process is switched to the next instruction and the process for the given number of processes is repeated.
  • the overall control apparatus executes the process by dividing the number into a number of processes if the given number of processes exceeds the maximum number of processes, and the given number of processes is the maximum number of processes. If the number of processes is less than this, it is possible to adopt a configuration in which some processes are combined to execute processes.
  • the overall control device executes a new command by switching the command, the processing executed in the same processing order as the processing order of the new command is completed in the command before switching. If there is not, it is possible to adopt a configuration in which processing for a new instruction is waited until the processing is completed. Or, if the register writing position of the processing executed in the same processing order in the instruction before switching is equal to the register reading position in the new instruction, the overall control device performs processing for the new instruction until the processing is completed. A configuration for waiting can also be adopted. Alternatively, in the instruction before switching, the overall control device is executed in the same processing order as the processing order of the new instruction, and if the processing executed before the number of instructions specified in advance is not completed, the processing is executed. It is also possible to adopt a configuration in which processing for a new instruction is waited until the process is completed. In this case, the overall control apparatus performs processing for a new command without confirming the end of processing performed after the number of commands specified in advance.
  • the overall control device extracts a relative shift amount related to the processing order by each processor from a given instruction, gives the shift amount to the multiplexer, and the shift amount is equal to the number of processors. If it is not an integer multiple, a configuration in which the addressing to the register memory is instructed to be performed only twice at the beginning may be employed.
  • the multiplexer shifts and extracts the data from the data obtained by the addressing of the register memory and the data obtained by the past addressing according to the above-described shift amount, and supplies the extracted data to a plurality of processors. Can be configured. With this configuration, data can be exchanged between processors only by addressing and data shift at the time of register access, and is particularly effective for 2D processing such as image processing.
  • the processor generates a flag indicating a branch condition from a given instruction and each operation result, and registers it as a new branch flag in combination with a plurality of branch flags stored in the register memory according to the instruction.
  • a configuration for storing in a memory can be employed.
  • the processor determines whether or not to write the operation result to the register memory or whether to move to the designated instruction from the given instruction and a plurality of branch flags stored in each of the register memories.
  • the multiprocessor device of the present invention can be applied to digital AV equipment, mobile terminals, mobile phones, computer equipment, in-vehicle control equipment, medical equipment, and the like, which are applications of computer systems.

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Mathematical Analysis (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Multimedia (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)
  • Multi Processors (AREA)
  • Complex Calculations (AREA)
  • Image Processing (AREA)

Abstract

 マルチプロセッサ装置は、外部メモリ、複数のプロセッサ、メモリ集約装置、レジスタメモリ、マルチプレクサ、及び全体制御装置を備える。メモリ集約装置は、複数のプロセッサのメモリアクセスを集約する。レジスタメモリは、プロセッサが管理するレジスタ数とプロセッサの最大処理数の積の数が用意される。マルチプレクサは、プロセッサのレジスタアクセスに対し与えられた命令に従ってレジスタメモリのアクセスを行う。全体制御装置は、命令からパラメータを抽出しプロセッサとマルチプレクサに与え制御するとともに、与えられた処理数分を同一命令にてプロセッサでレジスタメモリのアドレッシングを変化させて順次処理させ、処理数分が終われば次の命令に切り替えて与えられた処理数分の処理を繰り返させる。

Description

マルチプロセッサ装置
 本発明は、複数のプロセッサで構成されるマルチプロセッサ装置に関する。
 デジタル信号処理において、プログラムによって動作するプロセッサ、例えばDSPなどは、さまざまなアルゴリズムを網羅するにあたって必要不可欠なものである。近年、画像処理など非常に処理量の多い処理が必要になってきた。このため、複数のプロセッサで構成した装置、例えばGPU(グラフィックスプロセッシングユニット)がDSPに代わるものとして出てきた。
 従来例をこのGPUを例にして述べる。図2は特開2009-37593号公報に記載されているGPUの構成である。このGPUは、外部メモリ装置(EMU)201、外部メモリ202、ベクトル処理エンジン(VPE)205、ベクトル制御装置(VCU)206、ベクトル処理装置(VPU)207を備える。
 ベクトル処理装置(VPU)207はマルチプロセッサの核となる演算器を有しかつ複数個からなる。この上位の制御装置としてベクトル制御装置(VCU)206があり、これらを含む1つのセットとしてベクトル処理エンジン(VPE)205がある。ベクトル処理エンジン(VPE)205はさらに複数個からなり、お互いのアクセスが相互にできるよう外部メモリ装置(EMU)201を中継しクロスバー接続されている。また、外部メモリ202とも接続しているので、メモリアクセスも可能である。
 データおよびプログラムの単位である命令は、ベクトル処理装置(VPU)207が持つL1キャッシュ(最下層となるレベル1のキャッシュもしくはテンポラリの記憶装置)、ベクトル処理エンジン(VPE)205が持つL2キャッシュ(上位となるレベル2のキャッシュもしくはテンポラリの記憶装置)に蓄えられる。それぞれ、階層的なメモリアクセスの流れとなる。
 ベクトル処理エンジン(VPE)205の実装数は、多ければ多いほど性能は上がる。しかしながら、ベクトル処理エンジン(VPE)205の動作は同時に同じ命令を実行するSIMD(単一命令複数データ)型を基本とするので、実装数が多くなると、メモリアクセスが同時刻に集中し、外部メモリ装置(EMU)206もしくは外部メモリ202の物理的なメモリ帯域の制限により性能劣化が生じる。このため、ベクトル処理装置(VPU)207の実装数を数個に限定し、逆にベクトル処理エンジン(VPE)205を増やす。ベクトル処理エンジン(VPE)205には、異なるプログラム、もしくは時間差を考慮した同じプログラムを与えれば、上記の同時刻のアクセスの集中を避けることができる。
 一方、各ベクトル処理エンジン(VPE)205は、外部メモリ装置(EMU)201を介しての疎結合となり、データ交換を効率的に行う仕組みが必要である。データ交換は、大きなプログラムを小さなプログラムに分解する(ベクトル処理装置(VPU)207へ処理を分散し性能を高める)場合に必要となる。プログラミングの複雑化を避けるため、これらのデータ交換はプログラムとは関係なく自動的に行われる。
 データ交換を自動的に行う方法を述べる。先ず、メモリアクセスの要求と転送先、転送元のメッセージを定義しておく。それらを各々の装置が発行および受け取り、処理を行う。複数のメッセージはそれぞれの装置で調停され順序を守りながら並行に処理される。メッセージの処理を行うのは主にベクトル処理エンジン(VPE)にあるDMA(Direct Memory Access)装置である。このような仕組みで、ベクトル処理エンジン(VPE)205のL2キャッシュやベクトル処理装置(VPU)207のL1キャッシュおよび外部メモリ202の間のデータ通信が自動的に行われる。これらの処理は突き放し制御になっており、プログラムで意識する必要はない。
 次に、ベクトル処理装置(VPU)207について述べる。
 SIMD型を考えた場合、1つのユニットは簡単化し回路規模を圧縮して数を揃えた方がよい。また、簡単化することで高い周波数で動作させることができる。このため、1つのユニットは単純なパイプライン構造となり、一般的なプロセッサのように高い機能を持たないことが多い。例えば、スーパースカラーなど回路コストの高い方式は採用しないことが多い。
 プロセッサの構造を簡単化すると、フロー依存が課題となる。例えば、レジスタAを読み出してパイプライン処理し、レジスタBに書き込む場合、次の命令でレジスタBを読み出すには、前の命令のレジスタBへの書き込みを待つ必要がある。大きなプログラムでは、命令の順序の入れ替えなどのスケジューリングである程度回避可能であるが、プログラムを分散化するとプログラムが小さくなりスケジューリングが難しくなる。
 結局、レジスタBへの書き込みが終了するまで次の命令のレジスタBの読み出しを止めることになる(ハザードの発生)。図3はパイプライン処理において、ハザードの有無を時間軸に沿って示したもので、命令1の書き込みと命令2の読み込みレジスタが同一の場合に生じたハザードを示している。
 従来のプロセッサではこれを解決するため、図4のように異なるプログラムを互い違いにして与え、フロー依存が生じない手法が考えられた。図4では、プログラムをABCDの4つを用意し、それぞれの命令を交互に与える。プログラムABCDで異なるレジスタを用意すれば、プログラムAが書き込むレジスタは、他のプログラムBCDの読み込みレジスタとは重ならない。また、プログラムAの命令A1と命令A2とは時間差が3つあるので、フロー依存が生じてもハザードが生じる心配はない。
 以上のように、簡単な構造のプロセッサを数個まとめ、それぞれの命令とデータをキューイング可能なクロスバーで接続し、さらにプログラムの与え方に工夫することで、プロセッサの稼働率の向上とメモリ使用帯域の分散を図ることができる。
特開2009-37593号公報
 しかしながら、従来のマルチプロセッサ装置にあっては、以下のような問題点があった。
 先ず、プログラムを適切にプロセッサに分配しておく必要がある。静的な手法としては、プログラム全体の分割と配分を予めコンパイラなどで決めておく方法がある。しかし、同時に処理したいプログラムが追加されたりすると、分割と配分を再度決めなおさなければならない。これはプログラム開発の効率を悪くする。
 動的な手法としては、それぞれのプロセッサの状態を監視する機構を装備する方法がある。監視は、プログラムの進捗具合を共有メモリ等に配置しておき、プロセッサ自体がそれを参照して実行可能なプログラムがあれば自ら実行する。もしくは、別のプロセッサを別途専用に用意しておき、それぞれのプロセッサの状態を逐次管理・起動する。いずれにせよ、全体のハードウェアの機構は複雑化しコスト増となる。
 次に、プロセッサ間の通信が頻繁に起きると、プロセッサ間のデータの通信が滞って、オーバヘッドになりうる場合がある。また、プロセッサ間の通信効率を上げようとすれば、クロスバーのようなバススイッチが必要となり、回路コストが増大する。
 最後に、1つのプロセッサに異なるプログラムを交互に実行させるには、異なるプログラムを用意しないといけない。例えば、従来例の複数のベクトル処理エンジン(VPE)205に複数のプログラムを用意し、さらにそれを複数のプログラムに分割することを考える。これは、静的および動的に関わらず、プログラムの生産性を低下させる要因となる。また、1つのプロセッサに与えるプログラムの数も、パイプラインの段数が多くなるとそれに比例した分が必要となる。このため、パイプラインの段数を上げて動作周波数を上げる、もしくは高度な演算をさせると、プログラム分割の問題がさらに大きくなる。
 上述の課題を解決するため、本発明は、以下の技術的手段を採用している。すなわち、本発明に係るマルチプロセッサ装置は、外部メモリ、複数のプロセッサ、メモリ集約装置、レジスタメモリ、マルチプレクサ、及び全体制御装置を備える。メモリ集約装置は、複数のプロセッサのメモリアクセスを集約する。レジスタメモリは、プロセッサが管理するレジスタ数とプロセッサの最大処理数の積の数が用意される。マルチプレクサは、プロセッサのレジスタアクセスに対し与えられた命令に従ってレジスタメモリのアクセスを行う。全体制御装置は、命令からパラメータを抽出しプロセッサとマルチプレクサに与え制御する。また、全体制御装置は、与えられた処理数分を同一命令にてプロセッサでレジスタメモリのアドレッシングを変化させて順次処理させ、処理数分が終われば次の命令に切り替えて与えられた処理数分の処理を繰り返させる。
 本発明では、物理的なプロセッサ数に対するレジスタだけを用意するのではなく、非常に大きい論理的なプロセッサ数分のレジスタを用意し、処理数を自動で調整する。その結果、プログラムの分割を考慮することなく、簡単に並列処理できるマルチプロセッサ装置を提供することができる。また、調整は処理数の加減算だけなので、プロセッサの並列度は簡単に増減できる。加えて、プログラムはプロセッサの数を意識することはない。
 また、本発明によれば、プロセッサのパイプラインの段数を格段に増やしても、またフロー依存になっても性能に影響しにくく、高度な演算および動作周波数の向上が容易に図れる。メモリレイテンシが増えても同様に影響が少なく、複雑なメモリアクセス構造を取らずとも自動的に突き放し制御になる。従って、プロセッサ個々に単純なメモリアクセスを行う機構を備えるだけである。
 比較的に大きいレジスタは必要になるが、パイプライン段数の許容度が増加するに伴い、アクセス速度に劣る低コストSRAMが使用可能なので、コスト増加は少ない。
 命令の更新頻度が低いため、命令キャッシュ等を装備して高速化する必要がなく、非常に長い語長を要する演算装置の並列化も容易である。
 以上のように、プログラム作成が容易になり、性能と機能がスケーラブルかつコストパフォーマンスに優れたマルチプロセッサ装置が本発明により提供できる。
図1は、本発明の一実施形態におけるマルチプロセッサ装置を説明する図である。 図2は、従来のマルチプロセッサ装置の構成を説明する図である。 図3は、従来のマルチプロセッサ装置のハザードが発生しない場合とする場合のパイプライン動作を説明する図である。 図4は、従来のマルチプロセッサ装置の異なるプログラムを交互に実行したパイプライン動作を説明する図である。 図5は、本発明の一実施形態におけるマルチプロセッサ装置のレジスタへのアクセスを説明する図である。 図6は、本発明の一実施形態におけるマルチプロセッサ装置のレジスタメモリに対する構造を説明する図である。 図7は、本発明の一実施形態におけるマルチプロセッサ装置において、ハザードが発生しない場合の処理サイクルとレジスタメモリに対するアドレッシングを説明する図である。 図8は、本発明の一実施形態におけるマルチプロセッサ装置において、ハザードが発生する場合の処理サイクルとレジスタメモリに対するアドレッシングを説明する図である。 図9は、本発明の一実施形態におけるマルチプロセッサ装置を複数の処理ユニットで構成することを説明する図である。 図10は、本発明の一実施形態におけるマルチプロセッサ装置において、異なる論理プロセッサへのレジスタアクセスを説明する図である。 図11は、本発明の一実施形態におけるマルチプロセッサ装置において、画像処理で横方向および縦方向のレジスタアクセスを説明する図である。 図12は、本発明の一実施形態におけるマルチプロセッサ装置の分岐条件の生成を説明する図である。 図13は、本発明の一実施形態におけるマルチプロセッサ装置において、分岐条件を使って生成した画像例を示す図である。
 以下、本発明の実施の形態について、図面を参照して詳細に説明する。
 本発明の第1の実施形態に係るマルチプロセッサ装置について説明する。本実施の形態は、図1と図5から図9を用いて説明する。
 複数のプロセッサはSIMD型とし、単一命令を複数実行するものとする。図1に示すように、このマルチプロセッサ装置100は、メモリ集約装置101、外部メモリ102、マルチプレクサ103、全体制御装置105、レジスタメモリ106、複数のプロセッサ107を備える。メモリ集約装置101は、複数のプロセッサ107のメモリアクセスを集約する。マルチプレクサ103は、プロセッサ107のレジスタアクセスに対し与えられた命令に従ってレジスタメモリ106のアクセスを行う。
 この例では、プロセッサ107は物理的に8個とし、SIMDとして処理できる論理的な個数(最大処理数)は1024個とする。レジスタメモリ106はプロセッサ107から読み書きするレジスタであり、論理的なプロセッサ数分のレジスタが用意される。例えば、プロセッサ1つあたり16個のレジスタを持つのであれば、16×1024で16384個のレジスタが用意される。つまり、論理的に保持するレジスタはプロセッサ1024個分(16384個のレジスタ)であり、単位時間(1サイクル)当たり物理的に処理できる数は最大8個となる。
 8個のプロセッサ107は処理数がN回の命令が与えられると、レジスタに対するアドレッシングを変化させて、与えられた処理数Nの命令を逐次処理する。ここで言うアドレッシングとは、レジスタメモリ106において、物理プロセッサごと(8×16個のレジスタ)に割り付けられた番地に対するアクセスである。例えば、処理数N=300の場合、38回のアドレッシングを行う。この場合、37回のアドレッシングにおいて8個のプロセッサ107が命令を処理し、1回のアドレッシングにおいて4個のプロセッサ107が命令を処理する。したがって、アドレッシングは0から37まで変化することになる。プロセッサはパイプライン構造を取り、1命令1サイクルのスループットがあるとすれば、38サイクルでN=300の処理が可能である。なお、これらの実行回数を制御するのは、全体制御装置105である。すなわち、全体制御装置105は、与えられた処理数分を同一命令にてプロセッサ107でレジスタメモリ106のアドレッシングを変化させて順次処理させる。また、全体制御装置105は、プロセッサ107による当該処理が完了すると、次の命令に切り替えて与えられた処理数分の処理を繰り返させる。特に限定されないが、ここでは、命令は、外部メモリ102に格納されている。また、全体制御装置105は、命令からパラメータを抽出しプロセッサ107とマルチプレクサ103に与え制御する。
 図5は上記の動作を示す図である。ここでは、便宜上、レジスタメモリ106を読み出しと書き込みの2つに分けて図示している。図5では、レジスタメモリ106間をプロセッサ107が1サイクルごとに昇順にアドレッシングして、合計N=300の処理を実行している。
 レジスタメモリ106では、上述したように読み出しと書き込みが発生する。例えば、2項演算では、1プロセッサ当たり16個用意されたレジスタのうち2個を読み出し、レジスタ1個に書き込む。どのレジスタをオペランドとして選ぶかは命令にオペランド番号として記述されており、マルチプレクサ103がオペランド番号を受け取ってスイッチする。
 ここで、レジスタメモリ106は、8個のプロセッサ107のアクセスを同時に受け付けるが、8個全て同じ命令なのでオペランド番号も同じである。従って、マルチプレクサ103は、各プロセッサ107に対して、同一のアドレッシング、かつ同一のスイッチを実現すればよい。ただし、16個のレジスタは同時に複数選択できるよう、最大16のレジスタ群に分けておく必要がある。なお、スループットを最大化させるには、読み出しと書き込みが同時にできるようにするべきである。これらは、16バンクの2ポートSRAMを用意することで実現できる。
 図6は上記の動作を示す図である。図6では、便宜上、マルチプレクサ103を、読み出し動作をするマルチプレクサ103と、書き込み動作をするマルチプレクサ103との2つに分割して示している。図6に示すように、上記の動作では、16バンクに分けたSRAMに共通のアドレッシングを行い、命令に記述してある読み出しオペランド番号2つをマルチプレクサ103(便宜上上下2つに分けた下方)に入れ、必要なオペランド2つを選択してプロセッサ107に入れる。同様に、命令に記述してある書き込みオペランド番号1つをマルチプレクサ103(便宜上上下2つに分けた上方)に入れ、プロセッサ107の演算結果を指定したバンクのSRAMに格納する。
 実際には、プロセッサ107はパイプライン処理を行うので、読み出しと書き込みのアドレッシングはこのパイプラインの段数分だけ遅延する。従って、FIFOメモリ等を用いて書き込みのアドレッシングに遅延を付ける。アドレッシングは絶えず変化し、さらに遅延がつくため、読み出しと書き込みの衝突(同一アドレスへのアドレッシング)は起こらない。
 命令が次に切り替わるのは、処理数N=300の処理が終わった後になる。この様子を図7に示す。図7において、横軸は時間に対応し、縦軸はアドレッシングに対応する。図7において、横棒はパイプライン処理中を示し、左端がオペランドの読み出し、右端がオペランドの書き込みに相当する。8個のプロセッサ107は同一命令を処理数N=300になるまで実施するため、命令0の開始から次に実行される命令1の開始までに、38サイクルの差が生じる。この差があるため、フロー依存になってもハザードは生じない。例えば、論理プロセッサnの命令0において「R0=R1+R2」(Rはレジスタ、添え字は番号)とし、命令1において「R3=R0*R0」を記述して、命令0で生成するR0を命令1で使用しても、フロー依存でありながら命令0のR0への書き込みはかなり前に完了しているので問題は生じない。
 これは、処理数N÷プロセッサ数>パイプライン段数の関係であれば、ハザードの問題は生じないことを示している。つまり、処理数Nが多いほどプロセッサ数を増やしても、もしくはパイプライン段数を増やしても性能劣化が生じにくいことを意味する。
 パイプライン段数が増加しても性能が劣化しにくい本構成は、各プロセッサ107がメモリ集約装置101を通して、外部メモリ102へアクセスする場合にも有効である。メモリ集約装置101は基本的にメモリへのランダムなアドレス要求に対して、近接するアドレスがある場合に複数の要求を連結したり、キャッシュを搭載して局所的なメモリアクセスの高速化を行ったりする。しかしながら、このような最適化をすればするほど、応答速度の指標であるレイテンシに揺らぎが生じる。しかし、パイプライン段数の上限が高くハザードが生じにくい状態であれば、これらレイテイシもある程度吸収できる。例えば、命令0において「R0=[R1]」([]内はメモリアドレス)、命令1において「R3=R0*R0」とフロー依存の記述をしても、メモリレイテンシが38サイクル以下であればペナルティは発生しない。
 また、パイプライン段数を簡単に増やすことができるので、高度な演算も取り入れることができる。例えば、CORDIC(Coordinate Rotation Digital Computer)と呼ばれる手法は、加減算を繰り返し三角関数や双曲線関数の算出、および割り算を行うことができるが、数十回の繰り返しを必要とするので従来は実装に制限があった。本構成では、このCORDICを実装しても、特別な機構や制約を設けずに使用できる。例えば、命令0において「R0=sin(R1)」、命令1において「R3=arctan(R0)」とフロー依存の記述をしても、パイプライン段数が38サイクル以下であればペナルティは発生しない。
 さらに、高い動作周波数で読み書きするレジスタは、一般的にフリップフロップで構成されるが、本構成では、パイプライン段数に余裕があるため、低コストなSRAMを使用しても問題にならない。例えば、パイプライン化されたSRAMを使用すれば、アクセスタイムに数サイクルが必要であっても、スループットは1サイクルなので問題にならない。
 一方、図7から分かるように、命令は38サイクルの期間不変である。逆に言うと、命令の更新頻度は低く、命令キャッシュ等のアクセスを高速化する手段をとる必要がない。この特徴は、命令の長さ(語長)の制限も解消し、VLIW(Very Long Instruction Word)と言われる水平型命令(演算器が並列し基本的にお互いを干渉しない)の実装にも有利である。
 図9は、マルチプロセッサ装置を複数の処理ユニットで構成することを説明する図である。図9に示すように、このマルチプロセッサ装置100は、整数ユニット801(乗算と加算)、浮動小数点ユニット802(乗算と加算)、上述したCORDICユニット803(三角関数と双曲線関数の算出および割り算)、メモリアクセスユニット804を備える。各プロセッサ107はこれらを含み、マルチプレクサ103はそれぞれのユニットの命令ごとに必要なレジスタを選択し供給するよう拡張されている。
 それぞれのユニット801から804はパイプライン化されており、図中の各ユニットのマス目を1サイクル消費して処理するが、それぞれのレイテンシは異なる。このため、この例では、FIFOメモリによりタイミングのずれを吸収し、同期化してマルチプレクサ103に結果を返す。図9によれば、基本的にレジスタ読み出しからレジスタ書き込みまでは一方通行で、相互に干渉もなく構造は簡単である。これは、高速化する場合に有利となる。
 以上の構成では、命令の語長を簡単に拡張できる。また、ユニットを簡単に着脱(有効化及び無効化)できることから回路の追加・削減を容易に実現できる。これらの結果、ユーザーが目的に合わせて処理回路を簡単にカスタマイズできるマルチプロセッサ装置の提供が容易になる。
 なお、レジスタメモリ106は基本的にプロセッサ個々にアクセスするものであるが、別途、共通にアクセス可能なレジスタを用意してもよい。このようなレジスタは、例えば、全体の処理に共通の変数を参照する場合に使用される。ただし、複数のプロセッサから書き込まれると、本来とは違った値になる可能性があるので、それを避けるために、論理プロセッサごとに書き込む値を合計してヒストグラムを作るなどの構成にすることが好ましい。
 本発明の第2の実施形態に係るマルチプロセッサ装置について説明する。本実施の形態は、図8を参照しながら説明する。
 上述のように、第1の実施形態で説明したマルチプロセッサ装置100は、処理数Nが大きいほど効果も大きくなる。しかしながら、論理プロセッサ数(最大処理数)は1024個と固定なので、処理数Nが論理プロセッサ数に満たない場合の対応と、処理数Nが論理プロセッサ数を越えた場合の対応が必要な場合がある。
 画像処理を考えた場合、プロセッサごとに画素処理を行うと仮定すれば、QVGAサイズで320×240=76,800なので、処理数は十分大きい。一方、当該処理数は最大論理プロセッサ数1024を越えるため、分割処理が必要になる。分割は構成上、従来のプロセッサのように命令ごとに切り替えるのではなく、一連のプログラムが終了してから切り替える。
 例えば、QVGA画像のAffine変換(画像の回転)を考える。C言語に近い書き方をすると、当該変換は、以下のようになる。ここで、変数x,yはQVGAの座標、C0からC5はAffine変換の回転を表す定数、mem[][]はQVGAのそれぞれの画素を格納するメモリ記述である。以下の記述では、R2とR3に、マトリクス計算(Affine変換)で得られる転送元の座標を代入し、R0を介して転送元のデータを読み出し、読み出した値を変数x,yが示す転送先の座標に書き込んでいる。
 for (y=0; y<240; y++)
     for (x=0; x<320; x++) {
         R2 = C0 * x + C1 * y + C2;
         R3 = C3 * x + C4 * y + C5;
         R0 = mem[R3][R2];
         mem[y][x] = R0;
     }
 変数x,yの2重ループになるが、マルチプロセッサ装置100によると上述のAffine変換は、以下のような実行手順で実行される。ここで、変数xは物理的なプロセッサ数である8個ごとに走査され、変数iはプロセッサ数8個分並列に処理される。すなわち、変数yが1つ変化するステップで、一連のプログラムを全て処理し、それをY座標が最大になるまで繰り返している。
 for (y=0; y<240; y++) {
     for (x=0; x<320; x+=8)
         for (i=0; i<8; i++)
             R2 = C0 * (x+i) + C1 * y + C2;
     for (x=0; x<320; x+=8)
         for (i=0; i<8; i++)
             R3 = C3 * (x+i) + C4 * y + C5;
     for (x=0; x<320; x+=8)
         for (i=0; i<8; i++)
             R0 = mem[R3][R2];
     for (x=0; x<320; x+=8)
         for (i=0; i<8; i++)
             mem[y][x] = R0;
     }
 一方、以上の処理において、論理プロセッサ数を無駄にせず、パイプライン段数に余裕を持たせたい場合は、例えば、以下のように、ループ数を変数yで1/3倍、変数xで3倍にして補正してやればよい(変数x,yを参照している部分の補正は省略)。これにより、変数yに沿う方向で3行分の画素を1行に結合した状態での処理が可能になる。ここでは、3つの処理を1つに結合する例を示しているが、結合対象となる処理数は特に限定されず、任意に設定することができる。なお、変数xは最大960になるので、1024-960=64は無駄になる(説明の簡単のため無駄をなくした最適化は省く)。
 for (y=0; y<240/3; y++)
     for (x=0; x<320*3; x+=8)
 同様に、HDサイズ1920×960の場合は、以下のように、ループ数を変数yで2倍、変数xで1/2倍にして補正してやればよい。これにより、変数yに沿う方向で1行分の画素を2行に分割した状態での処理が可能になる。ここでは、1つの処理を2つに分割する例を示しているが、分割数は特に限定されず、任意に設定することができる。
 for (y=0; y<960*2; y++)
     for (x=0; x<1920/2; x+=8)
 なお、与えるプログラムが意図してこのような変更をする必要はない。上記の補正は、論理プロセッサ数と画像のサイズが与えられていれば簡単に算出できるので、全体制御装置105が自動的に調整する。このような調整は、例えば、1024を越えない最大X座標の倍数を見つけるなどにより実現できる。つまり、本実施形態においても、論理プロセッサ数や物理プロセッサ数などを意識する必要はなく、従来通りのプログラムを与えればよい。
 しかしながら、画像処理と言っても二次元配列ではなく、曲線描画のベクター操作など短く補正できない処理もある。また、メモリアクセスで吸収しきれないレイテンシが発生することもある。図8は、パイプラインの段数が60の場合に生じるハザードの様子を表している。この例では、命令0で38回プロセッサ107を起動した直後、命令1でプロセッサ107を起動できない。命令0の処理が終了するサイクル60まで待機させる必要がある。すなわち、命令を切り替えて新たな命令を実行する際に、切替前の命令において、新たな命令の処理順番と同じ処理順番で実施された処理が終了していなければ当該処理が終了するまで新たな命令についての処理を待機させる必要がある。ここで、処理順番は、順番に処理される処理数Nの命令における処理の位置を意味する。例えば、処理順番が「10」である処理は、処理数Nの命令のうち、第10番目に実施された処理を意味する。
 ただし、命令が変わっても同一レジスタさえ参照しなければ、待機させる必要は無い。また、例えばメモリアクセスにおいて、事前にメモリアクセスをしておき、数命令後に読み込んだメモリの値を参照するようにすれば、処理数Nを仮想的に数倍にすることができ、レイテンシの揺らぎを大きく吸収できる。
 全体制御装置105が動的にこれらを制御するには、命令の前後もしくはいくつか離れた命令間でフロー依存を検知すればよい。ただし、当該制御ではオペランド番号の総当り検査が必要になる。一方、全体制御装置105に静的なフロー依存の情報を与え処理してもよい。プログラム中の前後のレジスタ番号の重なりの有無がフロー依存の情報になる。例えば、近接するn個前の命令の依存関係は無視するなどがコンパイラで変換される。すなわち、切替前の命令において、新たな命令の処理順番と同じ処理順番で実施されるとともに、予め指定された命令数以前に実施された処理が終了していなければ当該処理が終了するまで新たな命令についての処理を待機させる。この場合、予め指定された命令数よりも後に実施された処理については終了を確認することなく、新たな命令についての処理が実施される。
 以上の制御により、処理数Nやプロセッサの数、プログラムの大きさなどの条件に変更が生じても、構成を大きく変えることなく、ハザードの発生を抑制することができる。
 本発明の第3の実施形態に係るマルチプロセッサ装置について説明する。本実施の形態は、図6と図7と図10と図11を参照しながら説明する。
 先ず、第2の実施形態と同様、本実施形態のマルチプロセッサ装置100は、画像処理を扱うものとする。このマルチプロセッサ装置100は、図7に示すように、アドレッシングを変化させ逐次命令を実行する形式を取り、アドレッシングは画像処理のX座標に沿って行うものとする。また、プログラム中の命令を実行し終わった後、次のY座標について再度処理を行い、画像全体を処理し終わった時点で終了するものとする。
 各プロセッサ107間の通信は外部メモリ102上で行うと、データの往復分のサイクルがかかり非効率である。例えば画像処理の一つであるフィルタを行う場合、左右の画素の演算が必要であり、既に読み出したデータもしくは処理した結果を横方向に参照する必要性が生じる。
 この場合、横方向の異なる論理プロセッサのレジスタを参照する必要があるが、図6から分かるように、このような参照はレジスタメモリ106のバンクごとの読み出しをシフトすることで実現可能である。上述のように、各プロセッサ107において実行される命令は同一であるため、シフトするオペランド番号とシフト量は固定である。したがって、横方向の参照を実現するには、読み出し用のマルチプレクサ103にシフト量を命令から与えるだけでよい。この場合、命令には相対的に参照するシフト量が記載される。なお、シフト量にはシフト方向の情報(加算または減算の情報)が含まれる。
 また、レジスタファイル106へのアドレッシングも上記のシフト量に合わせて変更する。シフト量を指定したオペランドと指定しないオペランドの演算を同時に行うことがあるため、シフト量が指定されていないバンクは操作しない。
 図10は、正方向に12離れた論理プロセッサのレジスタを参照している。12離れているので、処理中のアドレッシングをnとすれば、相対的なアドレッシングはn+1およびn+2にまたがる。1回のアドレッシングで読み出せるのは8個の整えられた連続したデータ(物理プロセッサ数分)なので、これをまたぐ場合、アドレッシングの最初だけ2回行う。次以降のアドレッシングは、前回アクセスした値(データ)を憶えておけば、新たなアドレッシング1回で済む。
 例えば、最初の2回のアドレッシングにおいて、アドレッシングn+1の8個のデータと、アドレッシングn+2の8個のデータを取得する場合、使用しないアドレッシングn+2の局所位置番号(論理プロセッサ番号を8で割った余り)「4」から「7」のデータを記憶する。そして、次のアドレッシングでは、アドレッシングn+3の8個のデータを取得する。これにより、記憶していたアドレッシングn+2の局所位置番号「4」から「7」のデータと、新たに取得したアドレッシングn+3の局所位置番号「0」から「3」のデータを使用可能な状態になる。この場合、使用しないアドレッシングn+3の局所位置番号「4」から「7」のデータは記憶され、後続の処理に使用される。
 以上のように、全体制御装置105は命令に異なるプロセッサのレジスタ参照があれば、アドレッシングの開始だけ2回アクセスさせる。ただし、本事例の場合、異なるプロセッサのレジスタ参照であっても、8の倍数の相対的な参照であれば、アドレッシングが2つにまたがることはないため、2回アクセスさせる必要はない。
 マルチプレクサ103は、アドレッシングn+1とアドレッシングn+2のデータに対して、図10に示すように、物理プロセッサの番号0から3までにアドレッシングn+1のデータを配分し、物理プロセッサの番号4から7までにアドレッシングn+2のデータを配分する。前者は、論理プロセッサの局所位置番号4から7をシフトしてそれぞれに与える。同様に後者は、論理プロセッサの局所位置番号0から3をシフトしてそれぞれに与える。
 以上により、横方向の異なる論理プロセッサへのレジスタが参照可能となる。
 次に縦方向の異なる論理プロセッサへのレジスタ参照方法について述べる。ここで、縦方向の処理は画像処理の上下の画素の演算を行うこととする。
 図7にあるように、本実施形態のマルチプロセッサ装置100は、X座標に対して全ての命令の実行が終了するまで、異なるY座標の実行は行わない。従って、異なるY座標の処理中の値は参照できない。ただし、新たなY座標のプログラム開始時点で、前のY座標で処理し終わった結果がレジスタメモリ106に残っている。これを参照することで、Y座標の小さい方の論理プロセッサのレジスタ値が使用できる。
 ここで、レジスタR0からR3を窓として利用し、異なるY座標の処理結果を再利用させることを考える。すなわち、Rn(n=0から3)が現在のY座標-4+nの処理結果を格納しておくものとする。プログラムの開始時はこのままR0からR3を使用すればいいが、次のY座標の処理する場合、新たにR0からR3を更新する必要がある。
 Y座標を更新するたびにプログラムが変えるのは非効率なため、どのY座標の処理であっても、R0からR3は次のY座標の処理から見て同じ相対位置に見せなければならない。従って、X座標の処理を終えた時点で、R1からR0へ、R2からR1へ、R3からR2へ、さらにR3には現行のY座標の結果を転送しなければならない。これをプログラム上で行うと、数命令消費することになる。
 このため、レジスタを選択するマルチプレクサ103に対して、命令で指定されたオペランド番号にY座標の最下位の4bitを加えることにする。4bitはレジスタ数の最大(ここでは「16」)をカバーできるbit数である。例えば、Y=0では+0、Y=22(10110)では+6(0110)、Y=23(10111)では+7(0111)となる。Y=23を処理する時点で、R0はY=22の処理におけるR1に相当する。このように、R0からR3まで、古い順すなわちY座標の小さい順にしかるべきデータが並ぶことになる。
 なお、Y座標の大きい方の値は、処理していないので参照することができない。しかし、過去の結果のいくつかを参照できるので、Y座標の処理に対して、少し小さいY座標の処理を行うことにすれば、上下を参照して処理することに等しくなる。例えば、Y=100の時点において、Y=96,97,98,99で取得したデータが見えるとする。Y=100の処理ではあるが、Y=98を中心とした処理を行えば、前後のデータを参照することができる。
 以上から、図11のように、横方向を参照する場合は命令でシフト数(論理プロセッサ間の距離)を指定し、縦方向を参照する場合は意図的に設けたレジスタの窓を参照するプログラムを作成するだけでよくなる。なお、横方向および縦方向の開始・終了時点(すなわち、外周の画素)は、ミラーリングやコピーなどの端処理を含むものとする。ミラーは座標が-1であれば1、-2であれば2とみなして処理するものであり、コピーは座標が負であれば全て座標0とみなして処理するものである。負だけではなく、座標の最大数を超えた場合も同様である。
 本発明の第4の実施形態に係るマルチプロセッサ装置について説明する。本実施の形態は、図7と図9と図12と図13を参照しながら説明する。
 SIMD型プロセッサでは分岐があると、全ての論理プロセッサで同じ命令を実行しなければならないため、分岐不要時も分岐させる必要がある。分岐不要時は、レジスタへの書き込みを制限するなどして、分岐しても処理をさせないようにする。これにより、実質的に、プログラムの一部分の処理を飛ばして、後続の処理を実施するジャンプを実現することができる。これは、分岐の有無(分岐フラグ)を記録しておかないと、多重分岐に対応できないことを意味する。
 本実施形態のマルチプロセッサ装置100は、論理プロセッサごとに分岐条件を蓄えて、蓄えた情報から処理の有無を決定する。これにより、8個のプロセッサ107に同一の命令を入力している場合でも、プロセッサ107ごとに分岐を実現することができる。ここでレジスタメモリ106は、一般的に使用するレジスタの他に、キャリーやオーバーフローなどの演算結果と上記の分岐条件フラグを持つこととする。
 図9に示した4つのユニット構成を想定し、演算結果CC(コンディションコード)を定義しておく。図9の整数ユニット801とメモリアクセスユニット804のコンディションコードはまとめてCCint、浮動小数点ユニットはCCmad、CORDICユニットはCCcorとする。CCは、正負を表すN、ゼロを表すZ、オーバーフローを表すV、キャリーを表すCの4bitからなる。
 図12は、分岐フラグF0からF3を生成する過程を示している。レジスタメモリ106に含まれる分岐フラグ111は、4つのレベルF0からF3で構成される。分岐フラグ111を生成するため元情報の選択は、選択テーブル112に基づいて行われる。当該選択は、命令の中で指定される。
 生成テーブル113は、選択テーブル112に基づいて選択された元情報を構成する4bitの全ての組み合わせ(2の4乗の16パターン)を表しており、4bitの各桁の状態から更新用の分岐フラグを生成するテーブルである。当該生成テーブル113を用いた更新用の分岐フラグの生成も命令の中で指定される。
 指示テーブル114は分岐フラグ111と、生成テーブル113で生成した更新用の分岐フラグを組み合わせ新たな分岐フラグを生成(選択)するテーブルである。当該指示テーブル114を用いた新たな分岐フラグの生成も命令の中で指定される。
 判断テーブル115は、分岐フラグ111を構成する4bitの全ての組み合わせ(2の4乗の16パターン)を表しており、4bitの各桁状態から判断フラグを生成(選択)するテーブルである。当該判断テーブル115を用いた判断フラグの生成も命令の中で指定される。
 書込み指示テーブル116は、判断テーブル115で生成した判断フラグを元に、レジスタメモリ106への書き込みと、分岐フラグ111への書き込みの有無を決定するテーブルである。当該書込み指示テーブルを用いた書き込みの有無の決定も命令の中で指定される。
 図12に示すように、各ユニットの演算結果に付属するCC(CCint、CCmad、CCcor)か、分岐フラグ111のいずれかから、選択テーブル112に基づいて更新用の分岐フラグが生成される。例えば、CCintのNZVCのうちNとZのbitが1の場合に分岐フラグを立てたければ、選択テーブル112は「1」とし、生成テーブル113は2進数表現で「1111000000000000」(NZが両立するパターン)とする。
 次に、更新用の分岐フラグを、元の4つのレベルの分岐フラグにどう組み込むかを指示テーブル114に基づいて指示する。例えば、最も過去に生成したフラグを押し出し、空いた箇所に新たな分岐フラグを挿入する場合、指示テーブル114は「2」とする。この指示テーブル114に基づいて生成された結果が、次の分岐フラグ111になる。
 一方、図12の分岐フラグ111の状態によって、演算結果をレジスタメモリ106に書き込むか否か、および分岐フラグ111に書き込むか否かを決めておく。例えば、分岐フラグ111のF0とF1の2bitを変化させて4つの状態を作る場合、判断テーブル115で状態ごとの設定を行い、指示テーブル116を「1」にして処理を行う。これを、以下のC言語に近い書き方で説明する(マルチプロセッサに関わるfor文は省略)。
 switch (F0,F1) {
     case 00:
         R0 = R1 + R2;
         break;
     case 01:
         R0 = R1 + R2;
         break;
     case 10:
         R3 = R4 / R1;
         break;
     case 11:
         R0 = R1 + R2;
         R3 = R4 / R1;
         break;
 }
 プロセッサ107に与える命令は、R0=R1+R2と、R3=R4/R1の2つだけ用意すればよい。そして、R0=R1+R2はF0とF1が「10」の場合に不活性化する設定(判断テーブル115は2進数表現で0100010001000100=0x4444)を行えばよい。また、R3=R4/R1はF0とF1が「00」と「01」の場合に不活性化する設定(判断テーブル115は2進数表現で0011001100110011=0x3333)を行えばよい。この場合、プロセッサ107に与えるプログラムは以下のようになる。ここで、Judge[]は2進数のテーブル索引をするものとし、F3210は分岐フラグF3からF0をbit連結したものとする。
 Judge = 0x4444; if (!Judge[F3210]) R0 = R1 + R2;
 Judge = 0x3333; if (!Judge[F3210]) R3 = R4 / R1;
 以上説明したように、本構成では、同一命令でありながら、論理プロセッサごとの状態(コンディションコード)で異なる処理を効率的に行うことが可能になる。
 次に、命令にプログラム番号が付いており、条件により指定されたプログラム番号へ分岐する場合を述べる。
 プログラム番号の分岐は、全ての論理プロセッサの分岐になるため、どの条件で分岐するかを決定しなくてはならない。このような条件は、例えば、上述した判断テーブル115で索引した判断フラグが、論理プロセッサ全てで真になるか、もしくは1つでも真になるか、または真の反対になるかなどさまざまである。
 当該条件は命令に記載しておけばよいが、例えば分岐でループさせた場合、ループを抜け出す条件が真になりえない場合がある。これは、論理プロセッサ個々では抜け出す条件になるが、全ての論理プロセッサ(処理しない部分は除く)が揃って抜け出す条件にならない場合が出てくるからである。そこで、条件の記載のほかに、ループ回数の上限を記載する。
 ここで図7を見ると、命令0から命令1への切り替わりは、命令0の最後のアドレッシングが終了した時点になる。命令0が関わるパラメータ(オペランド指定など)は一度読み込んで蓄えておくだけでよく、命令1に関しては命令0が読み込まれた直後のサイクル以降に、予め読み込んでおいてもよい。この場合、FIFOメモリ等でパラメータをスタックしておく。
 しかしながら、分岐を行う場合、命令0のサイクル37の時点でないと論理プロセッサ全ての分岐フラグの判定ができていない。命令0のサイクル37の時点で分岐した先の命令を取得しようとすると、プロセッサ107の起動がその分遅延してしまう。これは性能劣化に繋がる。
 これを解決するため、遅延分岐を採用する。遅延分岐は、命令0が分岐命令であったとしても、無条件で命令1を実行し、命令1の終了時点で分岐を行うものである。この操作により、命令0実行中に命令1のパラメータを取得し、命令1実行中に命令0終了時点に決まる分岐先の命令のパラメータを取得すればよく、プロセッサ107は連続して起動することができる。
 以下は、図9の構成時に分岐命令を使用したプログラム例である。64×64のマンデルブロ集合(複素平面上のフラクタル図形)画像生成で、漸化式Xn+1=Xn*Xn-Yn*Yn+a,Yn+1=2XnYn+bの収束回数を記録し図形化するものである。for文以下の先頭番号は命令番号であり、5つの命令で実現する。このうち、命令2,3で最大64のループを行い、収束回数をカウント後、その値を画素値とする。
 for (y=0; y<64; y++)
  for (x=0; x<64; x++) {
    0: R4 = 1/16 * x - 2; R3 = F3210 = 0;
    1: R5 = 1/32 * y - 1; R0=R1=0;
    2: R2 = R0 * R0 - R1 * R1 + R4; R8 = sqrt(R1 * R1 - 4); R3 += 1;
       Judge = 0xaaaa; if (!&Judge[F3210] & (Loop < 64)) goto 2;
       Form = 0x3333; F0 |= Form[CCcor];
    3: R1 = (R0 * R1 + R5) * 2; R9 = sqrt(R2 * R2 - 4); R0 = R2;
       Form = 0x3333; F0 |= Form[CCcor];
    4: mem[x][y] = R3;
  }
 命令0と1では、操作するX,Y座標の正規化を行うとともに、分岐フラグ111の初期化と変数の初期化を行う。
 命令2では、浮動小数点ユニット802で漸化式の計算(R2)と、CORDICユニット803で収束判定の計算(R8)を行う。また、収束回数R3をインクリメントする。ここで、分岐フラグ111のF0を見て、全ての論理プロセッサ(処理しない部分は除く)が1でない場合、命令2をループさせる(命令中の記号「!&」は否定と全てと言う意味)。ループ回数は最大64に設定しており、遅延分岐なので命令3は必ず実行される。また、CORDICユニット803の結果がオーバーフローV(表現できない結果、すなわちR*R-2*2<0)でなければ、F0に上書きさせる。これは、R1が2以上で発散・終了したことを示す。
 命令3では、命令2同様、浮動小数点ユニット802で漸化式の計算(R1)と、CORDICユニット803で収束判定の計算(R9)を行う。分岐フラグF0も命令2同様の判定を行い、結果を上書きさせる。
 命令4では、収束度を外部メモリ102に書き出す。
 上記のプログラムを実行すると、図13に示すシミュレーション結果が得られる。プログラムは命令2と3をループするので平均2サイクル消費し、平均16回で収束する場合、プロセッサ数が8個であれば、1画素あたり2×16/8=4サイクルの性能が得られる。もし、従来のプロセッサで行うとすれば、条件分岐と演算を数サイクルかけて実行することになり、数倍の性能差が生じる。
 このように、分岐フラグを集約することで、少ない命令数でプログラムが実行できる。特に、演算器を並列に用いて命令数を少なくするシステムで効果を発揮する。
 以上説明したように、本明細書は、外部メモリ、複数のプロセッサ、外部メモリ、複数のプロセッサ、メモリ集約装置、レジスタメモリ、マルチプレクサ、及び全体制御装置を備えるマルチプロセッサ装置を開示している。この構成において、メモリ集約装置は、複数のプロセッサのメモリアクセスを集約する。レジスタメモリは、プロセッサが管理するレジスタ数とプロセッサの最大処理数の積の数が用意される。マルチプレクサは、プロセッサのレジスタアクセスに対し与えられた命令に従ってレジスタメモリのアクセスを行う。全体制御装置は、命令からパラメータを抽出しプロセッサとマルチプレクサに与え制御するとともに、与えられた処理数分を同一命令にてプロセッサでレジスタメモリのアドレッシングを変化させて順次処理させ、処理数分が終われば次の命令に切り替えて与えられた処理数分の処理を繰り返させる。
 以上の構成において、全体制御装置は、上述の与えられた処理数が最大処理数を越える処理数であればいくつかに分割して処理を実行し、上述の与えられた処理数が最大処理数に満たない処理数であればいくつかを結合して処理を実行する構成を採用することができる。
 また、以上の構成において、全体制御装置が、命令を切り替えて新たな命令を実行する際に、切替前の命令において、新たな命令の処理順番と同じ処理順番で実施された処理が終了していなければ当該処理が終了するまで新たな命令についての処理を待機させる構成を採用することができる。または、全体制御装置が、切替前の命令において同じ処理順番で実施された処理のレジスタ書き込み位置と新たな命令でのレジスタ読み込み位置が等しい場合は当該処理が終了するまで新たな命令についての処理を待機させる構成を採用することもできる。あるいは、全体制御装置が、切替前の命令において、新たな命令の処理順番と同じ処理順番で実施されるとともに、予め指定された命令数以前に実施された処理が終了していなければ当該処理が終了するまで新たな命令についての処理を待機させる構成を採用することもできる。この場合、全体制御装置は、予め指定された命令数よりも後に実施された処理については終了を確認することなく、新たな命令についての処理を実施する。
 さらに、以上の構成において、全体制御装置が、与えられた命令から各プロセッサによる処理順番に関する相対的なシフト量を抽出して、当該シフト量をマルチプレクサに与えるとともに、当該シフト量がプロセッサの数の整数倍以外であればレジスタメモリへのアドレッシングを最初だけ2回行うよう指示する構成を採用することもできる。この場合、マルチプレクサは、レジスタメモリのアドレッシングで得られるデータと、過去のアドレッシングで得られたデータから、上述のシフト量に従ってデータをシフトさせて抽出するとともに、当該抽出したデータを複数のプロセッサに与える構成にすることができる。この構成により、レジスタアクセス時にアドレッシングとデータのシフトだけで、プロセッサ間のデータ交換が可能であり、特に、画像処理など2D処理に有効である。
 加えて、以上の構成において、プロセッサは、与えられた命令と個々の演算結果から分岐条件を示すフラグを生成し、命令に従ってレジスタメモリに格納された複数の分岐フラグと組み合わせ新たな分岐フラグとしてレジスタメモリに格納する構成を採用することができる。この場合、プロセッサは与えられた命令と個々の前記レジスタメモリに格納された複数の分岐フラグから、レジスタメモリへの演算結果の書き込みの有無、もしくは指定された命令への移動の有無を決定する。この構成を採用することで、マルチプロセッサ装置の弱点である分岐に対し、複数の条件を凝縮することで、消費する命令数を少なくすることができる。
 本発明のマルチプロセッサ装置は、計算機システムの応用であるデジタルAV機器、携帯端末、携帯電話、コンピュータ機器、車載制御機器、医療機器などに応用できる。
 100 マルチプロセッサ装置
 101 メモリ集約装置
 102 外部メモリ
 103 マルチプレクサ
 105 全体制御装置
 106 レジスタメモリ
 107 プロセッサ
 

Claims (5)

  1.  外部メモリと、
     複数のプロセッサと、
     前記複数のプロセッサのメモリアクセスを集約するメモリ集約装置と、
     前記プロセッサが管理するレジスタ数と前記プロセッサの最大処理数の積の数のレジスタメモリと、
     前記プロセッサのレジスタアクセスに対し与えられた命令に従って前記レジスタメモリのアクセスを行うマルチプレクサと、
     命令からパラメータを抽出し前記プロセッサと前記マルチプレクサに与え制御するとともに、与えられた処理数分を同一命令にて前記プロセッサで前記レジスタメモリのアドレッシングを変化させて順次処理させ、処理数分が終われば次の命令に切り替えて与えられた処理数分の処理を繰り返させる全体制御装置と、
    を備えるマルチプロセッサ装置。
  2.  前記全体制御装置は、前記与えられた処理数が前記最大処理数を越える処理数であればいくつかに分割して処理を実行し、前記与えられた処理数が前記最大処理数に満たない処理数であればいくつかを結合して処理を実行する、請求項1記載のマルチプロセッサ装置。
  3.  前記全体制御装置は、命令を切り替えて新たな命令を実行する際に、切替前の命令において、新たな命令の処理順番と同じ処理順番で実施された処理が終了していなければ当該処理が終了するまで新たな命令についての処理を待機させる、または切替前の命令において同じ処理順番で実施された処理のレジスタ書き込み位置と新たな命令でのレジスタ読み込み位置が等しい場合は当該処理が終了するまで新たな命令についての処理を待機させる、あるいは切替前の命令において、新たな命令の処理順番と同じ処理順番で実施されるとともに、予め指定された命令数以前に実施された処理が終了していなければ当該処理が終了するまで新たな命令についての処理を待機させる、請求項1記載のマルチプロセッサ装置。
  4.  前記全体制御装置は、与えられた命令から前記各プロセッサによる処理順番に関する相対的なシフト量を抽出して、当該シフト量を前記マルチプレクサに与えるとともに、当該シフト量が前記プロセッサの数の整数倍以外であれば前記レジスタメモリへのアドレッシングを最初だけ2回行うよう指示し、
     前記マルチプレクサは、前記レジスタメモリのアドレッシングで得られるデータと、過去のアドレッシングで得られたデータから、前記シフト量に従ってデータをシフトさせて抽出するとともに、当該抽出したデータを前記複数のプロセッサに与える、請求項1記載のマルチプロセッサ装置。
  5.  前記プロセッサは、与えられた命令と個々の演算結果から分岐条件を示すフラグを生成し、命令に従って前記レジスタメモリに格納された複数の分岐フラグと組み合わせ新たな分岐フラグとして前記レジスタメモリに格納し、
     前記プロセッサは与えられた命令と個々の前記レジスタメモリに格納された複数の分岐フラグから、前記レジスタメモリへの演算結果の書き込みの有無、もしくは指定された命令への移動の有無を決定する、請求項1記載のマルチプロセッサ装置。
     
PCT/JP2015/072246 2014-08-12 2015-08-05 マルチプロセッサ装置 WO2016024508A1 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
US15/317,183 US10754818B2 (en) 2014-08-12 2015-08-05 Multiprocessor device for executing vector processing commands
JP2016542545A JP6551751B2 (ja) 2014-08-12 2015-08-05 マルチプロセッサ装置

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP2014-164137 2014-08-12
JP2014164137 2014-08-12

Publications (1)

Publication Number Publication Date
WO2016024508A1 true WO2016024508A1 (ja) 2016-02-18

Family

ID=55304138

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/JP2015/072246 WO2016024508A1 (ja) 2014-08-12 2015-08-05 マルチプロセッサ装置

Country Status (3)

Country Link
US (1) US10754818B2 (ja)
JP (1) JP6551751B2 (ja)
WO (1) WO2016024508A1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2019208566A1 (ja) * 2018-04-24 2019-10-31 ArchiTek株式会社 プロセッサ装置

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP7476676B2 (ja) * 2020-06-04 2024-05-01 富士通株式会社 演算処理装置
WO2022139646A1 (en) * 2020-12-23 2022-06-30 Imsys Ab A novel data processing architecture and related procedures and hardware improvements
US20220207148A1 (en) * 2020-12-26 2022-06-30 Intel Corporation Hardening branch hardware against speculation vulnerabilities
CN114553700B (zh) * 2022-02-24 2024-06-28 树根互联股份有限公司 设备分组方法、装置、计算机设备及存储介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030070059A1 (en) * 2001-05-30 2003-04-10 Dally William J. System and method for performing efficient conditional vector operations for data parallel architectures
JP2008217061A (ja) * 2007-02-28 2008-09-18 Ricoh Co Ltd Simd型マイクロプロセッサ

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH077385B2 (ja) * 1983-12-23 1995-01-30 株式会社日立製作所 データ処理装置
US5790879A (en) * 1994-06-15 1998-08-04 Wu; Chen-Mie Pipelined-systolic single-instruction stream multiple-data stream (SIMD) array processing with broadcasting control, and method of operating same
US5513366A (en) * 1994-09-28 1996-04-30 International Business Machines Corporation Method and system for dynamically reconfiguring a register file in a vector processor
JP3971535B2 (ja) * 1999-09-10 2007-09-05 株式会社リコー Simd型プロセッサ
US6892361B2 (en) * 2001-07-06 2005-05-10 International Business Machines Corporation Task composition method for computer applications
US8041929B2 (en) * 2006-06-16 2011-10-18 Cisco Technology, Inc. Techniques for hardware-assisted multi-threaded processing
US7627744B2 (en) 2007-05-10 2009-12-01 Nvidia Corporation External memory accessing DMA request scheduling in IC of parallel processing engines according to completion notification queue occupancy level
JP5049802B2 (ja) * 2008-01-22 2012-10-17 株式会社リコー 画像処理装置
US20100115233A1 (en) * 2008-10-31 2010-05-06 Convey Computer Dynamically-selectable vector register partitioning
US8542732B1 (en) * 2008-12-23 2013-09-24 Elemental Technologies, Inc. Video encoder using GPU
US8112551B2 (en) * 2009-05-07 2012-02-07 Cypress Semiconductor Corporation Addressing scheme to allow flexible mapping of functions in a programmable logic array
JP6081300B2 (ja) * 2013-06-18 2017-02-15 株式会社東芝 情報処理装置及びプログラム

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030070059A1 (en) * 2001-05-30 2003-04-10 Dally William J. System and method for performing efficient conditional vector operations for data parallel architectures
JP2008217061A (ja) * 2007-02-28 2008-09-18 Ricoh Co Ltd Simd型マイクロプロセッサ

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2019208566A1 (ja) * 2018-04-24 2019-10-31 ArchiTek株式会社 プロセッサ装置
JPWO2019208566A1 (ja) * 2018-04-24 2021-04-08 ArchiTek株式会社 プロセッサ装置
JP7061742B2 (ja) 2018-04-24 2022-05-02 ArchiTek株式会社 プロセッサ装置
US11500632B2 (en) 2018-04-24 2022-11-15 ArchiTek Corporation Processor device for executing SIMD instructions

Also Published As

Publication number Publication date
US20170116153A1 (en) 2017-04-27
US10754818B2 (en) 2020-08-25
JP6551751B2 (ja) 2019-07-31
JPWO2016024508A1 (ja) 2017-06-01

Similar Documents

Publication Publication Date Title
US9830156B2 (en) Temporal SIMT execution optimization through elimination of redundant operations
US8108659B1 (en) Controlling access to memory resources shared among parallel synchronizable threads
RU2427895C2 (ru) Оптимизированная для потоков многопроцессорная архитектура
US8086806B2 (en) Systems and methods for coalescing memory accesses of parallel threads
CN117724763A (zh) 用于矩阵操作加速器的指令的装置、方法和系统
JP2020518042A (ja) 処理装置と処理方法
WO2016024508A1 (ja) マルチプロセッサ装置
US20110231616A1 (en) Data processing method and system
US8438370B1 (en) Processing of loops with internal data dependencies using a parallel processor
JP6493088B2 (ja) 演算処理装置及び演算処理装置の制御方法
US8370845B1 (en) Method for synchronizing independent cooperative thread arrays running on a graphics processing unit
US20220043770A1 (en) Neural network processor, chip and electronic device
US20210166156A1 (en) Data processing system and data processing method
CN102012802B (zh) 面向向量处理器数据交换的方法及装置
US8473948B1 (en) Method for synchronizing independent cooperative thread arrays running on a graphics processing unit
Lin et al. swFLOW: A dataflow deep learning framework on sunway taihulight supercomputer
US9477628B2 (en) Collective communications apparatus and method for parallel systems
US8090762B2 (en) Efficient super cluster implementation for solving connected problems in a distributed environment
US11640302B2 (en) SMID processing unit performing concurrent load/store and ALU operations
US10997277B1 (en) Multinomial distribution on an integrated circuit
CN112506853A (zh) 零缓冲流水的可重构处理单元阵列及零缓冲流水方法
CN112463218A (zh) 指令发射控制方法及电路、数据处理方法及电路
CN110766150A (zh) 一种深度卷积神经网络硬件加速器中的区域并行数据载入装置及方法
Raju et al. Performance enhancement of CUDA applications by overlapping data transfer and Kernel execution
US11392667B2 (en) Systems and methods for an intelligent mapping of neural network weights and input data to an array of processing cores of an integrated circuit

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: 15832289

Country of ref document: EP

Kind code of ref document: A1

ENP Entry into the national phase

Ref document number: 2016542545

Country of ref document: JP

Kind code of ref document: A

WWE Wipo information: entry into national phase

Ref document number: 15317183

Country of ref document: US

NENP Non-entry into the national phase

Ref country code: DE

122 Ep: pct application non-entry in european phase

Ref document number: 15832289

Country of ref document: EP

Kind code of ref document: A1