WO2021245758A1 - 情報処理装置、情報処理方法およびプログラム - Google Patents

情報処理装置、情報処理方法およびプログラム Download PDF

Info

Publication number
WO2021245758A1
WO2021245758A1 PCT/JP2020/021632 JP2020021632W WO2021245758A1 WO 2021245758 A1 WO2021245758 A1 WO 2021245758A1 JP 2020021632 W JP2020021632 W JP 2020021632W WO 2021245758 A1 WO2021245758 A1 WO 2021245758A1
Authority
WO
WIPO (PCT)
Prior art keywords
input data
execution device
program
execution
data
Prior art date
Application number
PCT/JP2020/021632
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 PCT/JP2020/021632 priority Critical patent/WO2021245758A1/ja
Publication of WO2021245758A1 publication Critical patent/WO2021245758A1/ja

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]

Definitions

  • the present invention relates to an information processing device, an information processing method and a program.
  • Patent Document 1 describes a data processing system including a plurality of processing units, assigning tasks to a plurality of processing units, and distributing task assignments among the plurality of processing units.
  • assigning a task to a processing unit refers to allocating a processing resource, that is, a processing unit, an input and an output buffer, to an assigned task and data to be processed.
  • Patent Document 2 describes an information processing device including a computing device controlled by a host CPU.
  • a device memory is connected to a computing device
  • a main memory is connected to a host CPU
  • data is stored in the device memory and the main memory before and after processing is executed by the computing device. Copying is done.
  • the main program that uses the subprogram related to individual element processing will operate efficiently in various environments. For example, it was expected to reduce the load related to data transfer between a plurality of devices.
  • An object of the present invention is to provide an information processing method, an information processing method, and a program that solve the above problems.
  • the information processing apparatus includes a plurality of devices, and among the plurality of devices, an execution device that executes a predetermined process on the input data is based on the requirement of the input data.
  • an execution device that executes a predetermined process on the input data is based on the requirement of the input data.
  • the execution device determination unit and the descriptor indicating the location of the input data, and transfer the input data to the execution device depending on whether or not the location is a device other than the execution device. It is provided with a transfer control unit for determining the necessity of the above.
  • the information processing method is an information processing method in an information processing apparatus including a plurality of devices, and a predetermined process is executed for input data among the plurality of devices.
  • a predetermined process is executed for input data among the plurality of devices. Refer to the first step of determining the execution device based on the requirements of the input data and the descriptor indicating the location of the input data, depending on whether the location is the execution device or not. It has a second step of determining whether or not the input data needs to be transferred to the execution device.
  • a third aspect of the present invention is that the program uses a computer of an information processing apparatus including a plurality of devices, and an execution device among the plurality of devices that executes a predetermined process on the input data as a requirement for the input data.
  • the execution device determination unit determined based on the above and the descriptor indicating the location of the input data, and the input data to the execution device depending on whether or not the location is a device other than the execution device.
  • a program that functions as a transfer control unit that determines the necessity of transfer.
  • a main program that uses a subprogram related to individual element processing can efficiently operate in various environments.
  • FIG. 1 is a schematic block diagram showing a hardware configuration example of the information processing apparatus 10 according to the embodiment of the present invention.
  • the information processing device 10 includes a plurality of devices.
  • the device refers to hardware having a function of executing a process instructed by various instructions (commands), mainly a processor.
  • Processors typically include arithmetic units, registers and peripheral circuits.
  • Devices are classified into Host Devices and Accelerators.
  • a host device means a device that performs central processing in a computer system, and is sometimes simply called a host.
  • a central processing unit (CPU) is mainly used as a host.
  • Accelerator means a device that helps accelerate processing in a computer system.
  • the device used as an accelerator is not limited to the CPU, but may be any of an image processing unit (GPU: Graphic Processing Unit), a vector engine (VE: Vector Engine), a deep learning accelerator (DLA: Deep Learning Accelerator), a quantum processor, and the like. , Or a combination thereof.
  • GPU Graphic Processing Unit
  • VE Vector Engine
  • DLA Deep Learning Accelerator
  • quantum processor a quantum processor
  • the information processing apparatus 10 constitutes a computer system including a CPU 12, a GPU 14, and a VE 16.
  • the CPU 12, GPU 14, and VE 16 are connected to each other so that various data can be input / output according to a predetermined standard (for example, PCI (Peripheral Component interconnect) Express).
  • the CPU 12 is used as the host device HD02 (FIG. 2).
  • the GPU 14 and the VE 16 are used as accelerators, respectively, and their processing is controlled by the CPU 12.
  • the CPU 12, GPU 14, and VE 16 can be an execution device ED04 (FIG. 3), which is a device that executes a process indicated by an instruction described in each program.
  • executing the process indicated by the instruction described in various programs may be referred to as executing the program, executing the program, or the like. Further, executing the process indicated by the instruction may be referred to as executing the instruction, executing the instruction, or the like.
  • Memory 12m, 14m, 16m are connected to CPU 12, GPU 14, and VE 16, respectively.
  • the memories 12m, 14m, and 16m include, for example, a volatile memory such as a DRAM (Dynamic Random Access Memory), and are used as a work area for storing data used for processing in the CPU 12, GPU 14, and VE16 or generated data. Be done.
  • the memory 12m is used as the system memory of the CPU 12, and may store management data indicating the position and size (information amount) of the data stored in each of the memories 14m and 16m in addition to the memory 12m. ..
  • the data stored in each of the CPU 12, GPU 14, and VE 16 includes the data stored in the memory built in each of the CPU 12, GPU 14, and VE 16, as well as the memory of 12 m, 14 m, and 16 m.
  • the data stored in each may be included.
  • the number of devices included in the information processing apparatus 10 is not limited to three, and may be two or four or more.
  • the type of device used as an accelerator in the information processing apparatus 10 is arbitrary.
  • a dedicated memory may or may not be connected to each device as described above.
  • the information processing apparatus 10 may include an operation unit (not shown) that receives an operation input and generates an operation signal for instructing an operation according to the received operation input.
  • the information processing apparatus 10 is an input / output unit (not shown) for inputting or outputting various data with other devices according to a predetermined input / output standard (for example, PCI Express) or a communication standard (for example, IEEE802.3). ) May be provided.
  • a predetermined input / output standard for example, PCI Express
  • a communication standard for example, IEEE802.3
  • the host device HD02 includes an execution management unit 22 and an execution device determination unit 24.
  • the host device HD02 executes a predetermined control program to realize the functions of the execution management unit 22 and the execution device determination unit 24.
  • the execution management unit 22 identifies the main program (Main Program) to be executed, and manages the execution of one or more various instructions described in the main program.
  • the execution management unit 22 may specify either the main program stored in the memory 12 m in advance based on the operation signal input from the operation unit or the input / output unit, or the main program to be executed from the input / output unit. May be obtained.
  • the main program means a program including at least one preset call (reference) instruction of a subprogram, and is not necessarily limited to the highest-level program in a set of programs.
  • the main program in the present application may be, for example, a subprogram referred to in response to a call instruction from another program.
  • the main program is typically a user program developed by an individual user.
  • the example is a case where the subprogram mainly provides output data as a return value at the end of execution, that is, a function program that returns to the control of the main program, but it is a subroutine that does not return output data. May be good.
  • the function program may be called a kernel.
  • the function program may be a program instructing predetermined element processing that performs various data processing.
  • the element processing is not limited to the calculation of individual function values, but may be a series of calculation sets such as image recognition using a machine learning model and prediction of weather information using a physical model.
  • the execution management unit 22 sequentially executes the individual instructions described in the main program. That is, after the execution of a certain instruction is completed, the execution management unit 22 sequentially repeats the process of executing the next described instruction until there are no unexecuted instructions. When the repetition of one or more instructions is described in the main program, the execution management unit 22 repeats the execution of the instruction to be repeated according to the repetition condition. When the condition judgment is described in the main program, the execution management unit 22 determines whether or not the condition is satisfied, and if it is satisfied, executes the instruction to be executed in that case and is satisfied. If not, the instruction to be executed in that case is executed.
  • the execution management unit 22 determines whether or not each instruction is an instruction indicating a call to a predetermined function program (hereinafter referred to as a call instruction). When the execution management unit 22 determines that the call command is a call command, the execution management unit 22 outputs (notifies) the call command to the execution device determination unit 24.
  • the call instruction includes a descriptor of input data to be processed in the process indicated by the function program (hereinafter, input data descriptor).
  • the input data descriptor contains at least an address indicating the location of the input data.
  • the input data descriptor may include the amount of information of the input data, the transfer method, any one of the data types, or a combination thereof.
  • the execution device determination unit 24 inputs the execution device information indicating the execution device ED04 that executes the process indicated by the function program to the execution management unit 22.
  • the execution management unit 22 outputs the call instruction to the execution device specified by the input execution device information.
  • the execution device ED04 is notified of the input data descriptor together with its function program by a call instruction.
  • the execution end notification hereinafter referred to as the execution end notification
  • the execution management unit 22 changes the instruction to be executed to the next instruction.
  • the call instruction may include an output data descriptor by the process instructed by the function program. If the call instruction contains an output data descriptor, the execution completion notification input from the execution device includes the output data descriptor. Therefore, the execution management unit 22 can detect the end of the process by inputting the execution completion notification including the output data descriptor from the execution device.
  • the output data descriptor is a descriptor of the output data acquired by the process indicated by the function program.
  • the output data descriptor contains at least an address indicating the location of the output data.
  • the output data descriptor may include the amount of information of the output data, the transfer method, any one of the data types, or a combination thereof.
  • the execution device determination unit 24 specifies a function program instructed by a call instruction input from the execution management unit 22.
  • the execution device determination unit 24 determines an execution device for executing the function program among a plurality of devices included in the information processing apparatus 10 according to a predetermined determination condition set in the specified function program.
  • the execution device determination unit 24 refers to the input data descriptor provided with the call instruction, and executes one of the devices whose requirements for the input data described in the input data descriptor satisfy a predetermined determination condition. Defined as a device.
  • the execution device determination unit 24 outputs the execution device information indicating the determined execution device to the execution management unit 22.
  • the execution device determination unit 24 defines as an execution device a device capable of processing at least the input data as a requirement of the input data. For example, the execution device determination unit 24 can determine a device capable of processing data of the data type specified by the input data descriptor as an input data requirement as a candidate for the execution device. The execution device determination unit 24 may determine a device capable of data transfer with a host device or another device by using the data transfer method specified by the input data descriptor as a candidate for the execution device. Different determination conditions may be set for each device in the function program. The execution device determination unit 24 determines whether or not one or both of the characteristics of the input data and the data transfer method satisfy the determination condition as a requirement of the input data described in the input data descriptor for each device. However, a candidate for an execution device that satisfies the determination condition may be determined as the execution device.
  • the execution device determination unit 24 may determine the execution device most suitable for processing the input data as the execution device. For example, when the size described in the input data descriptor is larger than a predetermined size, the execution device determination unit 24 may select a device having a higher calculation speed. The execution device determination unit 24 may preferentially select a device having a shorter processing time as an execution device.
  • the processing time corresponds roughly to the calculation time proportional to the ratio of the size of the input data to the processing capacity (for example, the clock frequency). However, if the device to be evaluated is different from the device in which the input data exists, the execution device determination unit 24 will perform.
  • the processing time may be calculated by adding the calculation time and the data transfer time.
  • the data transfer time corresponds to the ratio of the size of the input data to the data transfer rate between predetermined devices.
  • the execution device ED04 includes a transfer control unit 32, a data transfer unit 34, a kernel execution unit 36, and an output data setting unit 38.
  • the execution device ED04 executes a predetermined control program separate from the host device HD02 to realize the functions of the transfer control unit 32, the data transfer unit 34, the kernel execution unit 36, and the output data setting unit 38.
  • the transfer control unit 32 functions as an input data location determination unit that extracts the input data descriptor included in the call command input from the host device HD02 and identifies the location of the input data described in the extracted input data descriptor. do.
  • the transfer control unit 32 determines whether or not the specified location is the own device, and if it is the own device, determines whether or not the transfer is possible. After that, the transfer control unit 32 outputs a call command to the kernel execution unit 36 and performs the processing. Let it start.
  • the transfer control unit 32 determines that transfer is necessary when the location of the specified input data is not its own device but another device, and then makes a data transfer request to the data transfer unit 34 with the input data descriptor. Output.
  • the data transfer unit 34 extracts an input data descriptor from the data transfer request input from the transfer control unit 32, and specifies the address of the input data described in the extracted input data descriptor.
  • the data transfer unit 34 reads out the input data stored at the position designated by the specified address, and transfers (outputs) the read input data to the execution device ED04. If a device is set in the input data descriptor as the location of the input data separately from the address, the data transfer request is output with that device as the request destination device.
  • the request destination device reads the input data located at the address described in the data transfer request input from the data transfer unit 34, and transfers (outputs) the read input data to the data transfer unit 34. After the transfer of the input data is completed, the processing of the kernel execution unit 36 is started.
  • the kernel execution unit 36 identifies a function program instructed by a call instruction input from the host device HD02, and performs a predetermined process indicated by the specified function program.
  • the kernel execution unit 36 outputs the output data acquired by the process to the output data setting unit 38.
  • the output data setting unit 38 stores the output data input from the kernel execution unit 36 at the address specified by the function program.
  • the output data setting unit 38 describes an address indicating the location of the output data in the output data descriptor, and outputs the output data descriptor including the described address to the host device HD02.
  • FIG. 4 is a diagram showing an example of a function program according to the present embodiment.
  • Kernl1 and “kernel2” shown in that order from the top to the bottom on the left side of FIG. 4 indicate that the execution of the function programs kernel1 and kernel2 is instructed in that order in the main program.
  • the function programs kernel1 and kernel2 are exemplified. What is "kernel1 (Desc * out, Desc * in)"? In kernel1, an output data descriptor Desk * out related to the output data out and an input data descriptor Desk * in related to the input data in are specified as arguments. Indicates that you are.
  • “In-> copy_to_cpu ()” determines whether or not the input data in exists in the CPU 12, and if it exists, the input data in is not processed, and if it does not exist, the input data in does not exist. Indicates that the data is duplicated (transferred) to the CPU 12 to the existing device.
  • "Func1 (out, in)” is a function program having output data out and input data in as arguments. That is, "func1 (out, in)” is a function program for instructing the CPU 12 to execute a predetermined process on the input data in and return the output data out acquired by the execution.
  • “Out-> set_cpu ()” is a function program indicating that the output data out exists in the CPU 12 in the output data descriptor Desk * out.
  • the CPU 12 determines whether or not the input data in exists in the own device, and if not, causes the device in which the input data in exists to transfer the input data in to the own device.
  • the CPU 12 executes a predetermined process on the input data in as an execution device, and holds the output data out to be acquired.
  • "in-> copy_to_gpu ()” determines whether or not the input data in exists in the GPU 14, does not process the input data in if it exists, and inputs it if it does not exist. Indicates that the data in is replicated (transferred) to the GPU 14 to the device where the data is present.
  • "Func1_gpu (out, in)” has an output data out and an input data in as arguments, and indicates a function program for causing the GPU 14 to execute a process. That is, "func1_gpu (out, in)” is a function program call instruction for instructing the GPU 14 to execute a predetermined process for the input data in and return the output data out acquired by the execution. be.
  • Out-> set_gpu () is a function program indicating that the output data out exists in the GPU 14 in the output data descriptor Desk * out. Therefore, if the determination condition ... is not satisfied, the GPU 14 determines whether or not the input data in exists in the own device, and if not, causes the device in which the input data in exists to transfer the input data in to the own device. The GPU 14 executes a predetermined process on the input data in as an execution device, and holds the output data out to be acquired.
  • function program kernel1 which device of the CPU 12 or the GPU 14 executes the process is variable depending on whether or not the determination condition ... Is satisfied, whereas in the function program kernel2, the GPU 14 always performs the process. Instructed to do.
  • the function program kernel2 determines whether or not the input data in exists in the GPU 14 and, if not, transfers the input data in to the device in which the input data in exists, and transfers the input data in to the device as an execution device. It is a program for executing other predetermined processing and holding the acquired output data out.
  • FIG. 5 is a diagram showing an example of a data descriptor according to the present embodiment.
  • Struct Desk indicates a descriptor whose data type is a structure and whose name is “Desc”, and is set in common for each of input data and output data.
  • Int place indicates a variable place whose data type is an integer type. The variable place is an integer value indicating the device in which the data exists.
  • the variables "1", “2", and “3" indicate that the devices in which the data exist are CPU12, GPU14, and VE16, respectively.
  • “Void * send_to_cpu” indicates a function pointer of the function program "send_to_cpu”.
  • “Void” indicates a function program that does not return a return value as output data.
  • “Void * address” indicates the address of the data on the device.
  • “Int size” indicates a variable size whose data type is an integer type.
  • the variable size is an integer value (unit: bytes) indicating the size (information amount) of the data.
  • “Int type” indicates a variable type whose data type is an integer type.
  • the variable type is an integer value indicating the data type of each numerical value constituting the data.
  • “1” and “2” indicate a floating-point type real number and a double-precision type real number, respectively.
  • the data descriptor may include information indicating a data transfer method for transferring the specified data.
  • an input / output method for example, PCI Express, SATA: Serial Advanced Technology Attachment, etc.
  • PCI Express Peripheral Component Interconnect Express
  • SATA Serial Advanced Technology Attachment
  • a distinction between synchronous and asynchronous may be instructed as described later.
  • a library for example, Open CV
  • Such a library includes a function program dedicated to each device and a function program showing a data transfer function between a plurality of devices.
  • the library LB112 exemplified in FIG. 11 separately from the function program kernel1_cpu for the CPU, the function program kernel1_gpu for the GPU showing substantially the same processing as the program and the copy (transfer) of data from the CPU to the GPU.
  • the function program copy_to_gpu indicating the above is provided.
  • the user needs to describe the proper use of the CPU and the GPU in the development of the user program using the library.
  • the program UP112 exemplified in FIG. 11 is a user program for causing the CPU 12 to execute the processing of the function program kernel1 and causing the GPU 14 to execute the processing of the kernel2 using the output data as the execution result.
  • the user needs to set a call instruction of the function program copy_to_gpu indicating the transfer of the output data of the function program kernel1 from the CPU 12 to the GPU 14 between the function programs kernel1_cpu and kernel2_cpu.
  • the output data of the function program kernel2 is used in the CPU 12, it is necessary to set a call instruction of the function program copy_to_cpu indicating the transfer of the output data from the GPU 14 to the CPU 12 after the function program kernel2_gpu. Therefore, the development of a program tends to be complicated, and it operates only in the instruction and order specified by the developed program.
  • a determination condition ... is provided in the function program kernel1, and a process of determining whether the function program func1 is executed by the CPU 12 or the function program func1_gpu is executed depending on whether or not the determination condition ... is satisfied.
  • the function program func1_gpu shows substantially the same processing as the function program func1. However, no data transfer is instructed between the CPU 12 and the GPU 14. Therefore, when the determination condition mandatory is satisfied and the input data in does not exist in the CPU 12, the determination condition needle is not satisfied, and the input data in does not exist in the GPU 14.
  • the function programs func1 and func1_gpu cannot be executed. Further, when the output data out of the function programs func1 and func1_gpu does not exist in the GPU 14, the function program kernel2 cannot be executed.
  • the function programs copy_to_gpu (in_g, in) and copy_from_gpu (out, out_g) are set immediately before and after the function program func1_gpu, respectively.
  • the function program copy_to_gpu (in_g, in) indicates that the input data in on the CPU 12 is transferred to the GPU 14 as the input data in_g.
  • the function program copy_from_gpu (out, out_g) indicates that the output data out_g on the GPU 14 is transferred to the CPU 12 as output data out.
  • the function programs copy_to_gpu (in_g, in) and copy_from_gpu (out, out_g) are set immediately before and after the function program func2_gpu, respectively.
  • the GPU 14 can acquire the input data in_g required when executing the function programs func1_gpu and func2_gpu, and the output data out as the processing result is provided to the CPU 12. Since the data required by the GPU 14 is provided by the CPU 12 and the processing result of the GPU 14 is provided to the CPU 12, the case where the data cannot be executed as in the example shown in FIG. 12 is solved. However, in the example shown in FIG. 13, data is passed between the function programs one by one via the main program, so that unnecessary transfer occurs. For example, when the GPU 14 executes both the processes of the function programs kernel1 and kernel2, unnecessary transfer occurs. In the example shown in FIG. 13, it is sufficient for the GPU 14 to keep the output data out_g, which is the processing result of the function program kernel1, held in the GPU14 without transferring it to the CPU 12, and use it as the input data in_g of the function program kernel2.
  • the processing speed has been increased by equipping the computer with a plurality of devices and distributing the element processing to each device.
  • the types of devices and their combinations are diversifying.
  • AI artificial intelligence
  • HA Hybrid Acceleration
  • the location of the data can be referred to from each device in the descriptor Desk.
  • the execution device determination unit 24 determines an execution device for executing a predetermined process shown in the function program according to the requirements of the input data. Then, the transfer control unit 32 determines the necessity of data transfer between the devices based on the existence or nonexistence of the input data in the execution device. Therefore, even when the execution device is variable, data transfer can be realized without excess or deficiency, and unnecessary data transfer can be avoided to improve processing efficiency.
  • the information processing apparatus 10 executes the main program in which the call instructions indicating the function programs kernel1 and kernel2 shown in FIG. 4 are described in that order.
  • the input data in for the function program kernel1 exists in the CPU 12 and the execution device determination unit 24 does not satisfy the determination condition.
  • the GPU 14 substantially performs the processing shown by the function programs copy_to_gpu (in_g, in) and func1_gpu (out_g, in_g) in the function program kernel1 (FIG. 4). Run. Then, the GPU 14 substantially executes the process indicated by the function program func2_gpu (out_g, in_g) in the function program kernel2.
  • the information processing apparatus 10 executes a main program in which call instructions indicating the function programs kernel1 and kernel2 exemplified in FIG. 13 are described in that order.
  • the GPU 14 is represented by the function program copy_to_gpu (in_g, in), func1_gpu (out_g, in_g), and the function program copy_from_gpu (out, out_g) constituting the function program kernel. Execute the process.
  • the CPU 12 executes the processes indicated by the function programs func2_gpu (out_g, in_g) of the function program kernel2, as well as the function programs copy_to_gpu (in_g, in) and copy_from_gpu (out, out_g) before and after the function program func2_gpu (out_g, in_g).
  • the execution time of the function programs func1 and func2 and the data transfer time between the CPU 12 and the GPU 14 are 100 ms, respectively. Under that assumption, the execution time of the series of processes shown in FIG. 9 is 300 ms, whereas the execution time of the series of processes shown in FIG. 13 is 600 ms.
  • the execution end of the preceding program and the execution start of the succeeding program are synchronized. More specifically, after the output data setting unit 38 outputs the output data descriptor indicating the location of the output data acquired by the execution of the preceding program to the host device, the execution device determination unit 24 determines the location of the succeeding program. The execution device to be executed is determined by the subsequent program based on a predetermined determination condition. Then, in the execution device, the transfer control unit 32 determines whether or not the input data needs to be transferred by referring to the input data descriptor whose input data is the output data of the preceding program. This avoids unnecessary data transfer, but may delay the start of execution of the process shown in the subsequent program. This is because when the execution device of the successor program is different from the execution device of the predecessor program, it is necessary to have the input data transferred from the execution device of the predecessor program before starting the process shown in the successor program.
  • the execution end of the predecessor program and the execution start of the successor program are made asynchronous, and at the end of the processing indicated by the predecessor program, the output data acquired by the execution is sent to the predetermined transfer destination device of the successor program. Starts transfer without waiting for execution to start (preload). More specifically, in the execution device of the preceding program, the output data setting unit 38 describes the transfer of the output data to the predetermined transfer destination device in the preceding program in addition to the execution device as the location of the output data. Output an execution end notification with children to the host device.
  • the output data setting unit 38 starts transferring the output data to a predetermined transfer destination device.
  • the transfer destination device may be set by either the predecessor program or the output data descriptor of the predecessor program.
  • As the transfer destination device a device that can process the output data as input data more efficiently than other devices may be set in advance.
  • the output data setting unit 38 does not transfer the output data.
  • the output data setting unit 38 transfers the output data of the preceding program. Cancel the transfer to the destination device.
  • the output data setting unit 38 may describe the location of the output data in the execution device of the preceding program and output a transfer cancellation notification with an output data descriptor in which the transfer of the output data is erased to the host device. good.
  • the output data setting unit 38 continues to transfer the output data of the preceding program to the transfer destination device.
  • the output data setting unit 38 When the transfer of the output data is completed, the output data setting unit 38 outputs a transfer output notification with an output data descriptor indicating the end of the transfer of the output data to the host device. As the information indicating the end of the transfer of the output data, one or both of the transfer destination device and the transfer destination address where the output data is located may be described.
  • the output data setting unit 38 transfers the output data of the preceding program to the transfer destination device. It may be stopped and the transfer of the succeeding program to the executing device may be started. In that case, the output data setting unit 38 describes the execution device of the preceding program as the device where the output data is located, erases the transfer of the output data to the transfer destination device, and transfers the output data to the execution device of the successor program. A transfer output notification with an output data descriptor describing the transfer of may be output to the host device.
  • the execution management unit 22 changes the command to indicate the execution of the succeeding program as the next instruction to be executed.
  • the execution device determination unit 24 refers to the input data descriptor as the input data of the successor program with the output data of the preceding program as necessary, and determines the execution device as described above. Therefore, based on the requirements of the output data of the preceding program, the execution device is determined using the determination conditions set in the succeeding program.
  • the execution device determination unit 24 outputs the execution device information indicating the specified execution device to the execution management unit 22 and the execution device specified for the preceding program.
  • the transfer control unit 32 may further perform the following processing.
  • the transfer control unit 32 succeeds the output data descriptor every time the output data descriptor of the output data of the preceding program is input to its own unit. Update as the input data descriptor of the input data of the program.
  • the output data descriptor may be input from the execution device of the preceding program along with the execution end notification, the transfer stop notification, and the transfer output notification.
  • devices other than the own device that is, the execution device of the succeeding program
  • the input data that is, the output data of the preceding program
  • the transfer control unit 32 can detect the completion of transfer of the input data to the own device when the input data descriptor in which the own device is described as the location of the input data is updated.
  • the execution device of the preceding program is described as the location of the input data as a device other than the own device (that is, the execution device of the succeeding program) in the input data descriptor, and the transfer of the input data to the device other than the own device.
  • the data transfer request may be output with the input data descriptor via the data transfer unit 34 as described above. As a result, input data is requested from the execution device of the preceding program.
  • the data transfer unit 34 extracts an input data descriptor from the data transfer request input from the transfer control unit 32, and specifies the address of the input data described in the extracted input data descriptor.
  • the data transfer unit 34 reads out the input data stored at the position designated by the specified address, and transfers (outputs) the read input data to the execution device ED04. After the transfer of the input data is completed, the processing of the kernel execution unit 36 is started.
  • FIG. 6 is a diagram showing an example of the main program according to this modification.
  • the main program illustrated in FIG. 6 is configured by describing the call instructions of each of the three function programs kernel1, kernel2, and kernel3 in that order.
  • the "kernel1,""kernel2,” and “kernel3" shown in that order from top to bottom on the left side of FIG. 6 indicate that the execution of the function programs kernel1, kernel2, and kernel3 is instructed in that order in the main program. ..
  • the function programs kernel1 and kernel2 are executed by the CPU 12, respectively, and that the function program kernel3 has a variable execution device and its determination conditions are set.
  • Data1 and data3 are used as input data of the function program kernel3, and GPU 14 is set as a transfer destination device, respectively.
  • GPU 14 is set as a transfer destination device, respectively.
  • the description of the data descriptor Desk * is omitted, but the data descriptor Desk * may be described.
  • kernel1 (data1, data0)
  • kernel2 is a function program for performing a predetermined process on the input data data0 and acquiring the output data data1.
  • the output data setting unit 38 outputs the output data data1 to the GPU 14 as a predetermined transfer destination device.
  • kernel2 (data3, data2)
  • kernel3 is a function program for performing a predetermined process on the input data data2 and acquiring the output data data3.
  • the output data setting unit 38 outputs the output data data3 to the GPU 14 as a predetermined transfer destination device.
  • Kernel3 (data4, data1, data3) is a function program for performing predetermined processing on the input data data1 and data3 and acquiring the output data data4.
  • the execution management unit 22 starts the execution of the function program kernel3 when the processing of the function program kernel2 is completed. At this point, there is a possibility that the transfer of the input data data1 and data2 from the CPU 12 to the GPU 14 is continuing.
  • the execution device determination unit 24 determines the execution device in the function program kernel3 based on a predetermined determination condition, and notifies the execution devices of the function programs kernel1 and kernel2 of the execution device information of the function program kernel3.
  • the output data setting unit 38 continues to transfer the input data data1 and data2 from the CPU 12 to the GPU 14.
  • the transfer control unit 32 waits for the end of the transfer of the input data data1 and data2 from the CPU 12 to the GPU 14.
  • the kernel execution unit 36 starts the process shown in the function program kernel3.
  • the output data setting unit 38 cancels the transfer of the input data data1 and data2 from the CPU 12 to the GPU 14.
  • the transfer control unit 32 determines that data transfer is unnecessary because the input data data1 and data2 are located in the CPU 12 which is the execution device.
  • the kernel execution unit 36 starts the process shown in the function program kernel3.
  • the transfer destination device becomes the execution device of the succeeding program
  • the transfer of the output data is started when the processing related to the function programs kernel1 and kernel2 which are the preceding programs is completed. Therefore, it is possible to accelerate the start of the processing related to the function program kernel3 which is the subsequent program in the execution device, so that the processing efficiency of the entire system can be improved. Even if it is determined that the transfer destination device is different from the execution device of the succeeding program, the transfer of the output data is stopped at the stage when the determination is made. Therefore, unnecessary data transfer is suppressed.
  • each of the output data of the immediately preceding two preceding programs is used as the entire input data of the succeeding program is used as an example, but the present invention is not limited to this.
  • the number of the preceding programs that provide the output data used as the input data of the succeeding program is not limited to two, and may be one or three or more.
  • the output data of the preceding program may be used as a part of the input data of the input data of the succeeding program, and the remaining input data may be independently instructed to the succeeding program. Further, not only when all the output data provided by each preceding program is used as the input data of the succeeding program, a part of the output data may be used as the input data of the succeeding program.
  • a part of the output data may be transferred to the transfer destination device, and the remaining output data may not be transferred.
  • the execution order of the successor program does not necessarily have to be the execution order immediately after the predecessor program, and if it is the execution order after the predecessor program, other programs exist in the order between the predecessor program and the successor program. You may.
  • FIG. 7 is a diagram showing an example of a descriptor according to this modification.
  • "Void * send_to_gpu” indicates a function pointer of the function program "send_to_gpu”.
  • the function program "send_to_gpu” is a program showing synchronous communication to the GPU 14, that is, data transfer in response to a data transfer request from the GPU 14 as an execution device of a subsequent program.
  • "Void * send_to_gpu_async” indicates a function pointer of the function program "send_to_gpu_async”.
  • the function program "send_to_gpu_async” is a program showing asynchronous communication to the GPU 14, that is, spontaneous transfer of data to the GPU 14 as a transfer destination device. “Void * check_gpu_async” indicates a function pointer of the function program “check_gpu_async”.
  • the function program "check_gpu_async” is a program showing a process for determining the end of asynchronous communication to the GPU 14, that is, determining whether or not the voluntary transfer of data to the GPU 14 has ended.
  • the function program "check_gpu_async” may also provide a value indicating whether or not transfer is in progress as a determination result as a return value.
  • FIG. 8 is a schematic block diagram illustrating the minimum configuration of the present embodiment.
  • the information processing apparatus 10 is an information processing apparatus including a plurality of devices.
  • the information processing device 10 includes an execution device determination unit 24 and a transfer control unit 32.
  • the execution device determination unit 24 determines, among a plurality of devices, an execution device that executes a predetermined process on the input data based on the requirements of the input data.
  • the transfer control unit 32 refers to the descriptor indicating the location of the input data, and determines whether or not the input data needs to be transferred to the execution device depending on whether the location of the input data is a device other than the execution device. judge.
  • the execution device is determined according to the requirements of the input data. Further, the location of the input data is notified by passing the descriptor (for example, the input data descriptor), and the necessity of transferring the input data is determined depending on whether or not the location of the input data is in another device.
  • the descriptor for example, the input data descriptor
  • the load related to data transfer can be reduced. Therefore, the main program that uses the subprogram related to the individual element processing can operate efficiently in various environments.
  • the execution device determination unit 24 is based on the amount of information of the input data, the transfer method and data type of the data from another device to the execution device, or any one of the data types, or a combination thereof, as the requirement of the input data.
  • the execution device may be defined. With this configuration, the execution device determination unit 24 selects an execution device suitable for the input data by determining an execution device whose input data requirements described in the descriptor satisfy a predetermined determination condition in the subprogram. be able to.
  • the information processing device 10 may further include an output data setting unit 38.
  • the output data setting unit 38 performs a predetermined process on the input data indicated by the descriptor (for example, the input data descriptor) provided from the host device among the plurality of devices, and the location of the output data acquired.
  • a second descriptor indicating the above may be provided to the host device.
  • the user is the execution subject.
  • the main program can be developed without being aware of the device.
  • the output data setting unit 38 transfers the output data to the predetermined transfer destination device before starting the second predetermined process (for example, the process related to the succeeding program) for the output data (for example, the output data of the preceding program). May start.
  • the execution device determination unit 24 may determine a second execution device that executes a second predetermined process among the plurality of devices based on the requirements of the output data.
  • the output data setting unit 38 stops the transfer of the output data and the second execution device.
  • the second execution device starts the second predetermined process when the transfer of the output data is completed.
  • the transfer of the output data of the preceding program to the transfer destination device is started before the start of the second process related to the succeeding program, so that the transfer destination device executes the second process.
  • the second process can be started early. Further, when the execution device that executes the process related to the preceding program becomes the second execution device that executes the second process, the transfer of the output data is stopped. Therefore, it is possible to improve the processing efficiency of the program as a whole while suppressing the load related to data transfer.
  • the information processing apparatus 10 may further include an execution management unit 22.
  • the execution management unit 22 is accompanied by a descriptor (for example, an input data descriptor) and a second descriptor (output data descriptor), and is sent to the execution device in response to an instruction (for example, a call instruction) indicating a predetermined process.
  • a descriptor may be provided and a second descriptor may be obtained from the execution device.
  • the user should be aware of the device to be executed by defining the subprogram indicating the processing to be executed in the main program, the descriptor indicating the location of the input data, and the descriptor indicating the location of the output data. You can develop the main program without.
  • the information processing apparatus 10 described above may include a computer system inside the information processing apparatus 10. Then, each process of the above-mentioned processing is stored in a computer-readable storage medium in the form of a program, and the processing is performed by reading and executing this program by a computer.
  • the computer system shall include software such as an OS (Operation System), device driver, utility program, and hardware such as peripheral devices.
  • OS Operating System
  • the “computer-readable recording medium” refers to a portable medium such as a magnetic disk, a magneto-optical disk, a ROM (ReadOnlyMemory), a semiconductor memory, and a storage device such as a hard disk built in a computer system.
  • a computer-readable recording medium is a medium that dynamically holds a program for a short time, such as a communication line used when transmitting a program using a network such as the Internet or a communication line such as a telephone line. It may also include a program that holds a program for a certain period of time, such as a volatile memory inside a computer system that serves as a server or a client. Further, the above program may be for realizing a part of the above-mentioned functions, and further, a so-called difference file (difference) which can realize the above-mentioned functions in combination with a program already recorded in the computer system. It may be a program).
  • a part or all of the information processing apparatus 10 in the above-described embodiment may be realized as an integrated circuit such as an LSI (Large Scale Integration).
  • LSI Large Scale Integration
  • Each functional block of the information processing apparatus 10 may be individually made into a processor, or a part or all of them may be integrated into a processor.
  • the method of making an integrated circuit is not limited to the LSI, and may be realized by a dedicated circuit or a general-purpose processor. Further, when an integrated circuit technology that replaces an LSI appears due to advances in semiconductor technology, an integrated circuit based on this technology may be used.
  • the execution device according to the requirements of the input data is determined.
  • the location of the input data is notified by passing the descriptor, and the necessity of transferring the input data is determined depending on whether or not the location of the input data is in another device.
  • 10 Information processing device, 12 ... CPU, 12m ... Memory, 14 ... GPU, 14m ... Memory, 16 ... VE, 16m ... Memory, 22 ... Execution management unit, 24 ... Execution device determination unit, 32 ... Transfer control unit, 34 ... Data transfer unit, 36 ... Kernel execution unit, 38 ... Output data setting unit, HD02 ... Host device, ED04 ... Execution device

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

複数のデバイスのうち、入力データに対して所定の処理を実行する実行デバイスを当該入力データの要件に基づいて定める実行デバイス判定部と、前記入力データの所在を示す記述子を参照し、前記所在が前記実行デバイスとは他のデバイスであるか否かに応じて前記実行デバイスへの前記入力データの転送の要否を判定する転送制御部と、を備える。本実施形態は、情報処理装置、情報処理方法およびプログラムのいずれによっても実現することができる。

Description

情報処理装置、情報処理方法およびプログラム
 本発明は、情報処理装置、情報処理方法およびプログラムに関する。
 特許文献1には、複数の処理ユニットを備え、タスクを複数の処理ユニットに割り当て、複数の処理ユニット間でタスク割り当てを分散配置するデータ処理システムについて記載されている。特許文献1では、タスクを処理ユニットに割り当てることは、処理資源、すなわち処理ユニット、入力ならびに出力バッファを割当タスクおよび処理されるデータに割り振ることを指す。
 特許文献2には、ホストCPUにより制御される計算デバイスを備える情報処理装置について記載されている。特許文献2に記載の情報処理装置では、計算デバイスにはデバイスメモリが接続され、ホストCPUにはメインメモリが接続され、計算デバイスで処理を実行する前後で、デバイスメモリとメインメモリとでデータのコピーが行われる。
特表2014-525619号公報 特表2014-149765号公報
 他方、個々の要素処理に係る副プログラムを利用する主プログラムが様々な環境で効率的に動作することが期待されている。例えば、複数のデバイス間におけるデータ転送に係る負荷を低減することが期待されていた。
 本発明は、上記の課題を解決する情報処理方法、情報処理方法、およびプログラムを提供することを目的とする。
 本発明の第1の態様によれば、情報処理装置は、複数のデバイスを備え、前記複数のデバイスのうち、入力データに対して所定の処理を実行する実行デバイスを当該入力データの要件に基づいて定める実行デバイス判定部と、前記入力データの所在を示す記述子を参照し、前記所在が前記実行デバイスとは他のデバイスであるか否かに応じて前記実行デバイスへの前記入力データの転送の要否を判定する転送制御部と、を備える。
 本発明の第2の態様によれば、情報処理方法は、複数のデバイスを備える情報処理装置における情報処理方法であって、前記複数のデバイスのうち、入力データに対して所定の処理を実行する実行デバイスを当該入力データの要件に基づいて定める第1のステップと、前記入力データの所在を示す記述子を参照し、前記所在が前記実行デバイスとは他のデバイスであるか否かに応じて前記実行デバイスへの前記入力データの転送の要否を判定する第2のステップと、を有する。
 本発明の第3の態様は、プログラムは、複数のデバイスを備える情報処理装置のコンピュータを、前記複数のデバイスのうち、入力データに対して所定の処理を実行する実行デバイスを当該入力データの要件に基づいて定める実行デバイス判定部と、前記入力データの所在を示す記述子を参照し、前記所在が前記実行デバイスとは他のデバイスであるか否かに応じて前記実行デバイスへの前記入力データの転送の要否を判定する転送制御部として機能させるプログラム。
 本発明によれば、個々の要素処理に係る副プログラムを利用する主プログラムが様々な環境で効率的に動作することができる。
本実施形態に係る情報処理装置のハードウェア構成例を示す概略ブロック図である。 本実施形態に係る情報処理装置のホストデバイスの機能構成例を示す概略ブロック図である。 本実施形態に係る情報処理装置の実行デバイスの機能構成例を示す概略ブロック図である。 本実施形態に係る関数プログラムの一例を示す図である。 本実施形態に係るデータ記述子の例を示す図である。 本実施形態の変形例に係る主プログラムの例を示す図である。 本実施形態の変形例に係るデータ記述子の例を示す図である。 本実施形態に係る最小構成の情報処理装置の機能構成例を示す概略ブロック図である。 本実施形態に係る関数プログラムのうち実行に係る命令の例を示す図である。 従来の関数プログラムのうち実行に係る命令の例を示す図である。 従来の主プログラムとライブラリの例を示す図である。 従来の関数プログラムの例を示す図である。 従来の関数プログラムの他の例を示す図である。
 以下、図面を参照して本発明の実施形態について説明する。
 図1は、本発明の一実施形態に係る情報処理装置10のハードウェア構成例を示す概略ブロック図である。
 情報処理装置10は、複数のデバイスを含んで構成される。本実施形態では、デバイスとは、各種の命令(コマンド)で指示される処理を実行する機能を有するハードウェア、主にプロセッサを指す。プロセッサは、典型的には、演算装置、レジスタおよび周辺回路を備える。デバイスは、ホストデバイス(Host Device)とアクセラレータ(Accelerator)に分類される。ホストデバイスは、コンピュータシステムにおいて中心的な処理を行うデバイスを意味し、単にホストと呼ばれることがある。ホストとして、主に中央処理装置(CPU:Central Processing Unit)が用いられる。アクセラレータは、コンピュータシステムにおける処理の加速を支援するデバイスを意味する。アクセラレータとして用いられるデバイスは、CPUに限らず、画像処理装置(GPU:Graphic Processing Unit)、ベクトルエンジン(VE:Vector Engine)、深層学習アクセラレータ(DLA:Deep Learning Accelerator)、量子プロセッサ、などのいずれか、またはそれらの組み合わせが用いられる。
 図1に示す例では、情報処理装置10は、CPU12、GPU14およびVE16を含んで構成されるコンピュータシステムをなす。CPU12、GPU14およびVE16は、所定の規格(例えば、PCI(Peripheral Component interconnect) Express)に従って相互に各種のデータを入出力可能に接続される。CPU12は、ホストデバイスHD02(図2)として用いられる。GPU14とVE16は、それぞれアクセラレータとして用いられ、CPU12により、それらの処理が制御される。CPU12、GPU14、VE16は、それぞれ各種のプログラムに記述されている命令で示される処理を実行するデバイスである実行デバイスED04(図3)となりうる。なお、本願では各種のプログラムに記述された命令で示される処理を実行することを、プログラムを実行する、プログラムの実行、などと呼ぶことがある。また、その命令で示される処理を実行することを、命令を実行する、命令の実行、などと呼ぶことがある。
 CPU12、GPU14およびVE16には、それぞれメモリ12m、14m、16mが接続されている。メモリ12m、14m、16mは、例えば、DRAM(Dynamic Random Access Memory)などの揮発性メモリを備え、CPU12、GPU14およびVE16における処理に用いられるデータまたは生成されたデータを格納するための作業領域として用いられる。なお、メモリ12mは、CPU12のシステムメモリとして用いられ、メモリ12mの他、メモリ14m、16mのそれぞれに格納されているデータの位置とサイズ(情報量)を示す管理データを記憶していてもよい。以下の説明では、CPU12、GPU14、VE16のそれぞれに記憶されているデータには、CPU12、GPU14、VE16のそれぞれに内蔵されているメモリに記憶されているデータの他、メモリ12m、14m、16mのそれぞれに記憶されているデータが含まれてもよい。
 なお、情報処理装置10が備えるデバイスの数は、3個に限られず、2個または4個以上であってもよい。情報処理装置10においてアクセラレータとして用いられるデバイスの種別は、任意である。個々のデバイスには、内蔵のメモリの他、上記のように専用のメモリが接続されてもよいし、接続されていなくてもよい。また、情報処理装置10は、操作入力を受け付け、受け付けた操作入力に応じて動作を指示するための操作信号を生成する操作部(図示せず)を備えてもよい。情報処理装置10は、他の機器との各種のデータを所定の入出力規格(例えば、PCI Express)または通信規格(例えば、IEEE802.3)に従って入力または出力するための入出力部(図示せず)を備えてもよい。
 次に、本実施形態に係る情報処理装置10の機能構成例について説明する。図2、図3は、本実施形態に係る情報処理装置10のホストデバイスHD02、実行デバイスED04の機能構成例をそれぞれ示す概略ブロック図である。
 ホストデバイスHD02は、実行管理部22と、実行デバイス判定部24と、を備える。ホストデバイスHD02は、所定の制御プログラムを実行して実行管理部22と実行デバイス判定部24の機能を実現する。
 実行管理部22は、実行対象の主プログラム(Main Program)を特定し、主プログラムに記述された1以上の各種の命令の実行を管理する。実行管理部22は、操作部または入出力部から入力される操作信号に基づいて予めメモリ12mに記憶された主プログラムのいずれかを特定してもよいし、入出力部から実行対象の主プログラムを取得してもよい。本願では、主プログラムとは、少なくとも1個の予め設定された副プログラムの呼び出し(参照)命令を含むプログラムを意味し、必ずしも一連のプログラムのセットのうち最上位のプログラムに限らない。本願での主プログラムは、例えば、他のプログラムからの呼出命令に応じて参照される副プログラムであってもよい。主プログラムは、典型的には個々のユーザが開発したユーザプログラムである。以下の説明では、副プログラムが主に実行終了時に出力データを返り値として提供、つまり、主プログラムの制御下に戻す関数プログラムである場合を例とするが、出力データを返さないサブルーチンであってもよい。ここで、関数プログラムをカーネル(Kernel)と呼ぶことがある。関数プログラムは、各種のデータ処理をなす所定の要素処理を指示するプログラムであってもよい。要素処理は、例えば、個々の関数値の演算に限らず、機械学習モデルを用いた画像認識、物理モデルを用いた気象情報の予測、など一連の演算セットであってもよい。
 実行管理部22は、主プログラムに記述された個々の命令を順次実行する。即ち、実行管理部22は、ある命令の実行が終了した後、次に記述された命令を実行する処理を、未実行の命令がなくなるまで順次繰り返す。主プログラムに1以上の命令の繰り返しが記述されている場合には、実行管理部22は、その繰り返し条件に従って、繰り返し対象の命令の実行を繰り返す。主プログラムに条件判断が記述されている場合には、実行管理部22は、その条件を満足するか否かを判定し、満足する場合には、その場合に実行すべき命令を実行し、満足しない場合には、その場合に実行すべき命令を実行する。但し、実行管理部22は、個々の命令が所定の関数プログラムの呼び出しを示す命令(以下、呼出命令)であるか否かを判定する。実行管理部22は、呼出命令であると判定するとき、その呼出命令を実行デバイス判定部24に出力(通知)する。呼出命令には、その関数プログラムで示される処理において処理対象となる入力データの記述子(以下、入力データ記述子)が含まれる。入力データ記述子には、少なくとも入力データの所在を示すアドレスが含まれる。入力データ記述子には、その入力データの情報量、転送方式、データ型式のいずれか、またはその組み合わせが含まれてもよい。
 その後、実行管理部22には、実行デバイス判定部24からは、その関数プログラムで示される処理を実行する実行デバイスED04を示す実行デバイス情報が入力される。実行管理部22は、入力される実行デバイス情報で指示される実行デバイスに、その呼出命令を出力する。実行デバイスED04には、呼出命令をもって、その関数プログラムとともに入力データ記述子が通知される。実行管理部22は、その関数プログラムを実行した実行デバイスED04から実行終了の通知(以下、実行終了通知)が入力されるとき、実行対象の命令を次の命令に変更する。
 なお、呼出命令には、その関数プログラムで指示される処理により出力データ記述子が含まれてもよい。呼出命令に出力データ記述子が含まれる場合には、実行デバイスから入力される実行完了通知に出力データ記述子が含まれる。従って、実行管理部22は、実行デバイスから出力データ記述子を含む実行完了通知が入力されることで、その処理の終了を検出することができる。出力データ記述子は、その関数プログラムで示される処理により取得された出力データの記述子である。出力データ記述子には、少なくとも出力データの所在を示すアドレスが含まれる。出力データ記述子には、その出力データの情報量、転送方式、データ型式のいずれか、またはその組み合わせが含まれてもよい。
 実行デバイス判定部24は、実行管理部22から入力される呼出命令で指示される関数プログラムを特定する。実行デバイス判定部24は、特定した関数プログラムに設定された所定の判定条件に従って、情報処理装置10が備える複数のデバイスのうち、その関数プログラムを実行するための実行デバイスを定める。実行デバイス判定部24は、呼出命令に伴って提供される入力データ記述子を参照し、その入力データ記述子に記述された入力データの要件が所定の判定条件を満足するデバイスのいずれかを実行デバイスとして定める。実行デバイス判定部24は、定めた実行デバイスを示す実行デバイス情報を実行管理部22に出力する。
 実行デバイス判定部24は、入力データの要件として少なくとも入力データを処理することを可能とするデバイスを実行デバイスとして定める。例えば、実行デバイス判定部24は、入力データの要件として入力データ記述子で指示されたデータ型のデータを処理することができるデバイスを実行デバイスの候補と定めることができる。実行デバイス判定部24は、入力データ記述子で指示されたデータ転送方式を用いてホストデバイスもしくは他のデバイスとデータ転送を可能とするデバイスを実行デバイスの候補と定めてもよい。
 関数プログラムには、個々のデバイスごとに異なる判定条件が設定されていてもよい。実行デバイス判定部24は、デバイスごとに入力データ記述子に記述された入力データの要件として、その入力データの特性とデータ転送方式の一方または双方が、その判定条件を満足するか否かを判定し、判定条件を満足する実行デバイスの候補を実行デバイスとして定めてもよい。
 入力データを処理可能なデバイスとして実行デバイスの候補が複数個存在する場合には、実行デバイス判定部24は、その入力データの処理に最も適した実行デバイスを実行デバイスとして定めてもよい。実行デバイス判定部24は、例えば、入力データ記述子に記述されたサイズが所定のサイズよりも大きい場合には、より演算速度が高速なデバイスを選択してもよい。実行デバイス判定部24は、処理時間が短いデバイスほど優先して実行デバイスとして選択してもよい。処理時間は、概ね処理能力(例えば、クロック周波数)に対する入力データのサイズの比に比例する演算時間に相当する。但し、評価対象のデバイスが、入力データが存在するデバイスが異なる場合には、実行デバイス判定部24は。演算時間とデータ転送時間を加えて処理時間を算出してもよい。データ転送時間は、所定のデバイス間のデータ転送速度に対する入力データのサイズの比に相当する。
 実行デバイスED04は、転送制御部32と、データ転送部34と、カーネル実行部36と、出力データ設定部38と、を備える。実行デバイスED04は、ホストデバイスHD02とは別個の所定の制御プログラムを実行して転送制御部32、データ転送部34、カーネル実行部36および出力データ設定部38の機能を実現する。
 転送制御部32は、ホストデバイスHD02から入力される呼出命令に含まれる入力データ記述子を抽出し、抽出した入力データ記述子に記述された入力データの所在を特定する入力データ所在判定部として機能する。転送制御部32は、特定した所在が自器であるか否かを判定し、自器である場合には転送否と判定し、その後、カーネル実行部36に呼出命令を出力し、その処理を開始させる。転送制御部32は、特定した入力データの所在が自器ではなく、他のデバイスである場合には転送要と判定し、その後、データ転送部34に入力データ記述子を伴ってデータ転送要求を出力する。
 データ転送部34は、転送制御部32から入力されるデータ転送要求から入力データ記述子を抽出し、抽出した入力データ記述子に記述される入力データのアドレスを特定する。データ転送部34は、特定したアドレスで指示される位置に記憶された入力データを読み出し、読み出した入力データの実行デバイスED04へ転送(出力)する。入力データ記述子に入力データの所在としてアドレスとは別個にデバイスが設定されている場合には、そのデバイスを要求先デバイスとしてデータ転送要求を出力する。要求先デバイスは、データ転送部34から入力されるデータ転送要求に記述されたアドレスに所在する入力データを読み出し、読み出した入力データをデータ転送部34に転送(出力)する。入力データの転送が終わった後、カーネル実行部36の処理が開始される。
 カーネル実行部36は、ホストデバイスHD02から入力される呼出命令で指示される関数プログラムを特定し、特定した関数プログラムで示される所定の処理を行う。カーネル実行部36は、処理により取得される出力データを出力データ設定部38に出力する。
 出力データ設定部38は、カーネル実行部36から入力される出力データを当該関数プログラムで指示されるアドレスに出力データを格納する。出力データ設定部38は、出力データ記述子に、出力データの所在を示すアドレスを記述し、記述したアドレスを含む出力データ記述子をホストデバイスHD02に出力する。
(関数プログラムの例)
 次に、本実施形態に係る関数プログラムの例について説明する。図4は、本実施形態に係る関数プログラムの例を示す図である。図4の左方の上から下にその順序で示される「kernel1」、「kernel2」は、主プログラムにおいて関数プログラムkernel1、kernel2の実行がその順序で指示されることを示す。図4の右方には、関数プログラムkernel1、kernel2をそれぞれ例示する。「kernel1(Desc* out,Desc* in)」とは、kernel1には、出力データoutに係る出力データ記述子Desc* outと入力データinに係る入力データ記述子Desc* inが引数として指定されていることを示す。
 「if(…){A}else{B}」とは、判定条件…を満足する場合、命令セットAで示される処理をCPU12に実行デバイスとして実行させることを示し、判定条件…を満足しない場合、命令セットBで示される処理をGPU14に実行デバイスとして実行させることを示す。
 「in->copy_to_cpu()」とは、入力データinがCPU12に存在するか否かを判定し、存在する場合には入力データinに対して処理を行わず、存在しない場合には入力データinが存在するデバイスにCPU12に対して複製(転送)することを示す。
 「func1(out,in)」は、出力データout、入力データinを引数として有する関数プログラムである。即ち、「func1(out,in)」は、入力データinに対して所定の処理を実行し、その実行により取得される出力データoutを返す処理をCPU12に指示するための関数プログラムである。
 「out->set_cpu()」は、出力データoutがCPU12に存在することを出力データ記述子Desc* outに記述することを示す関数プログラムである。従って、判定条件…を満たす場合には、CPU12は自器に入力データinが存在するか否かを判定し、存在しない場合に入力データinが存在するデバイスに自器に転送させる。CPU12は、実行デバイスとして入力データinに対して所定の処理を実行し、取得される出力データoutを保持する。
 他方、「in->copy_to_gpu()」とは、入力データinがGPU14に存在するか否かを判定し、存在する場合には入力データinに対して処理を行わず、存在しない場合には入力データinが存在するデバイスにGPU14に対して複製(転送)することを示す。
 「func1_gpu(out,in)」は、出力データout、入力データinを引数として有し、GPU14に対して処理を実行させるための関数プログラムを示す。即ち、「func1_gpu(out,in)」は、入力データinに対して所定の処理を実行させ、その実行により取得される出力データoutを返す処理をGPU14に指示するための関数プログラムの呼出命令である。
 「out->set_gpu()」は、出力データoutがGPU14に存在することを出力データ記述子Desc* outに記述することを示す関数プログラムである。従って、判定条件…を満たさない場合には、GPU14は自器に入力データinが存在するか否かを判定し、存在しない場合に入力データinが存在するデバイスに自器に転送させる。GPU14は、実行デバイスとして入力データinに対して所定の処理を実行し、取得される出力データoutを保持する。
 上記の関数プログラムkernel1は、判定条件…を満足するか否かに応じてCPU12とGPU14のいずれのデバイスが処理を実行するかが可変であるのに対し、関数プログラムkernel2では、常にGPU14が処理を実行することが指示される。関数プログラムkernel2は、GPU14に自器に入力データinが存在するか否かを判定し、存在しない場合に入力データinが存在するデバイスに自器に転送させるとともに、実行デバイスとして入力データinに対して所定の他の処理を実行し、取得される出力データoutを保持させるためのプログラムである。
(データ記述子の例)
 次に、本実施形態に係るデータ記述子の例について説明する。図5は、本実施形態に係るデータ記述子の例を示す図である。「Struct Desc」とは、データ型が構造体で名称が「Desc」である記述子を示し、入力データ、出力データのそれぞれに対して共通に設定される。
 「int place」とは、データ型を整数型とする変数placeを示す。変数placeは、データが存在するデバイスを示す整数値である。変数placeが「1」、「2」、「3」は、データが存在するデバイスがそれぞれCPU12、GPU14、VE16であることを示す。
 「void *send_to_cpu」は、関数プログラム「send_to_cpu」の関数ポインタを示す。「void」は、返り値を出力データとして返さない関数プログラムを示す。
 「void *address」は、デバイス上でのデータのアドレスを示す。
 「int size」は、データ型を整数型とする変数sizeを示す。変数sizeは、データのサイズ(情報量)を示す整数値(単位:バイト)である。
 「int type」は、データ型を整数型とする変数typeを示す。変数typeは、データを構成する個々の数値のデータ型式を示す整数値である。「1」、「2」は、それぞれ浮動小数点型実数、倍精度型実数を示す。
 なお、データ記述子には、指定されるデータを転送するためのデータ転送方式を示す情報が含まれてもよい。データ転送方式として、そのデータが格納されているデバイスと他のデバイスとの間での入出力方式(例えば、PCI Express、SATA:Serial Advanced Technology Attachment、等)が指示されてもよい。また、データ転送方式として、後述するように同期または非同期の区別が指示されてもよい。
(従来の関数プログラムの例)
 従来から複数のデバイスを備えた情報処理装置に対応したライブラリ(例えば、Open CV)が存在する。かかるライブラリには、個々のデバイス専用の関数プログラムと、複数のデバイス間におけるデータ転送機能を示す関数プログラムが含まれる。図11に例示されるライブラリLB112では、CPU用の関数プログラムkernel1_cpuとは別個に、そのプログラムと実質的に同じ処理を示すGPU用の関数プログラムkernel1_gpuと、CPUからGPUへのデータのコピー(転送)を示す関数プログラムcopy_to_gpuが提供される。但し、ユーザは、当該ライブラリを用いたユーザプログラムの開発において、CPUとGPUの使い分けを記述する必要があった。
 図11に例示されるプログラムUP112は、関数プログラムkernel1の処理をCPU12に実行させ、その実行結果となる出力データを用いたkernel2の処理をGPU14に実行させるためのユーザプログラムである。このユーザプログラムの開発のためには、ユーザは関数プログラムkernel1の出力データのCPU12からGPU14への転送を示す関数プログラムcopy_to_gpuの呼出命令を関数プログラムkernel1_cpuとkernel2_cpuの間に設定する必要がある。また、関数プログラムkernel2の出力データをCPU12で利用する場合には、その出力データのGPU14からCPU12への転送を示す関数プログラムcopy_to_cpuの呼出命令が、関数プログラムkernel2_gpuの後に設定する必要がある。そのため、プログラムの開発が煩雑になりがちであり、開発されたプログラムで定められた命令および順序でしか動作しない。
 図12に示すプログラムの例では、関数プログラムkernel1に判定条件…を設け、判定条件…を満足するか否かにより関数プログラムfunc1をCPU12に実行させるか、関数プログラムfunc1_gpuを実行させるかを判定する処理が指示されている。関数プログラムfunc1_gpuは、関数プログラムfunc1と実質的に同様な処理を示す。しかしながら、CPU12とGPU14間でデータ転送が指示されていない。そのため、判定条件(…)を満たす場合であって、CPU12に入力データinが存在しない場合、判定条件(…)を満たさない場合であって、GPU14に入力データinが存在しない場合には、それぞれ関数プログラムfunc1、func1_gpuを実行することができない。また、関数プログラムfunc1、func1_gpuの出力データoutがGPU14に存在しない場合には、関数プログラムkernel2を実行することができない。
 図13に示すプログラムの例では、関数プログラムkernel1において、関数プログラムfunc1_gpuの直前、直後に、それぞれ関数プログラムcopy_to_gpu(in_g,in)、copy_from_gpu(out,out_g)が設定されている。関数プログラムcopy_to_gpu(in_g,in)は、CPU12上の入力データinをGPU14に入力データin_gとして転送することを示す。関数プログラムcopy_from_gpu(out,out_g)は、GPU14上の出力データout_gをCPU12に出力データoutとして転送することを示す。また、関数プログラムkernel2において、関数プログラムfunc2_gpuの直前、直後に、関数プログラムcopy_to_gpu(in_g,in)、copy_from_gpu(out,out_g)がそれぞれ設定されている。
 よって、GPU14は、関数プログラムfunc1_gpu、func2_gpuを実行する場合に必要とする入力データin_gを取得することができ、その処理結果としての出力データoutがCPU12に提供される。GPU14で必要とするデータがCPU12から提供され、GPU14での処理結果がCPU12に提供されるため、図12に示す例のように実行できない場合が解消される。
 しかし、図13に示す例では、主プログラムを介してデータが関数プログラム間で逐一受け渡されるため無用な転送が発生してしまう。例えば、関数プログラムkernel1、kernel2の処理を、ともにGPU14が実行する場合には、無用な転送が発生してしまう。図13に示す例では、GPU14は関数プログラムkernel1の処理結果となる出力データout_gをCPU12に転送せずにGPU14に保持したままとし、関数プログラムkernel2の入力データin_gとして利用すれば十分である。
 なお、従来から、コンピュータに複数のデバイスを備え、個々のデバイスに要素処理を分散させることで処理速度の高速化が図られている。また、デバイスの種別やその組み合わせが多様化している。多種のアクセラレータの登場、人工知能(AI:Artificial Intelligence)技術の普及により、複数種類のアクセラレータを備えたヘテロシステムを活用するハイブリッドアクセラレーション(HA:Hybrid Acceleration)の発展ないし普及が進展している。
 複数デバイスの機能を発揮させるために、従来から個々の要素処理を所定のデバイスに実行させるためのカーネルを有するカーネルライブラリを予めシステムに設定しておくことが試みられていた。ユーザは、必要とする処理を実現するためのカーネルを呼び出すための関数を組み込んでユーザプログラムを開発することが想定される。そのため、ユーザプログラムの開発段階では、カーネルで指示される処理を実行するためのデバイスは、意識されず、様々な環境で効率的に実行されることが期待される。ここで、複数のデバイス間におけるデータ転送に係る負荷をオーバーヘッドの低減が期待されていた。
 これに対し、本実施形態では、図4に例示したようにデータの所在を記述子Descに各デバイスから参照可能としている。実行デバイス判定部24により入力データの要件に応じて関数プログラムに示す所定の処理を実行するための実行デバイスが判定される。そして、転送制御部32により実行デバイスにおける入力データの存否に基づいてデバイス間におけるデータ転送の要否判定がなされる。そのため、実行デバイスを可変とする場合でも過不足なくデータ転送を実現することで、無用なデータ転送を回避することで処理の効率化を図ることができる。
 ここで、図4に示す関数プログラムkernel1、kernel2をそれぞれ示す呼出命令がその順序で記述された主プログラムを情報処理装置10が実行する場合を仮定する。但し、関数プログラムkernel1に対する入力データinがCPU12に存在し、実行デバイス判定部24が判定条件…を満足しないものとする。その場合、図9に例示されるように、GPU14は、実質的には、関数プログラムkernel1(図4)のうち、関数プログラムcopy_to_gpu(in_g,in)、func1_gpu(out_g,in_g)で示される処理を実行する。そして、GPU14は、実質的には、関数プログラムkernel2のうち、関数プログラムfunc2_gpu(out_g,in_g)で示される処理を実行する。
 これに対し、従来の手法として図13に例示される関数プログラムkernel1、kernel2をそれぞれ示す呼出命令がその順序で記述された主プログラムを情報処理装置10が実行する場合を仮定する。その場合、図10に例示されるように、GPU14は、関数プログラムkernelを構成する関数プログラムcopy_to_gpu(in_g,in)、func1_gpu(out_g,in_g)の他、関数プログラムcopy_from_gpu(out,out_g)で示される処理を実行する。そして、CPU12は、関数プログラムkernel2の関数プログラムfunc2_gpu(out_g,in_g)の他、その前後の関数プログラムcopy_to_gpu(in_g,in)、copy_from_gpu(out,out_g)で示される処理を実行する。
 ここで、関数プログラムfunc1、func2の実行時間、CPU12とGPU14との間のデータ転送時間をそれぞれ100msと仮定する。その仮定のもとでは、図9に示す一連の処理の実行時間は、300msであるのに対し、図13に示す一連の処理の実行時間は600msとなる。
(変形例)
 次に、本実施形態の変形例について説明する。但し、特に断らない限り、上記の実施形態と同様の構成を備えるものとし、その説明を援用する。ここで、本変形例では、主プログラムに記述された複数の呼出命令のそれぞれにより示される関数プログラムが逐次に実行され、ある関数プログラム(以下、先行プログラム)で示される処理の実行により取得された出力データを、より後の関数プログラム(以下、後続プログラム)で示される処理に入力データとして用い、後続プログラムには実行デバイスを判定するための判定条件が設定されている場合を前提とする。
 このような場合、上記の実施形態では、先行プログラムの実行終了と後続プログラムの実行開始を同期させていた。より具体的には、出力データ設定部38が、先行プログラムの実行により取得された出力データの所在を示す出力データ記述子をホストデバイスに出力した後で、実行デバイス判定部24は、後続プログラムの実行に係る実行デバイスを後続プログラムに所定の判定条件に基づいて判定する。そして、実行デバイスにおいて転送制御部32は先行プログラムの出力データを入力データとする入力データ記述子を参照して入力データの転送の要否を判定する。これにより無用なデータ転送が回避される反面、後続プログラムに示す処理の実行開始が遅くなることがある。後続プログラムの実行デバイスが先行プログラムの実行デバイスとは異なる場合には、後続プログラムに示す処理を開始する前に、先行プログラムの実行デバイスから入力データを転送してもらう必要があるためである。
 そこで、本変形例では、先行プログラムの実行終了と後続プログラムの実行開始を非同期とし、先行プログラムで示される処理の終了時に、その実行により取得された出力データを所定の転送先デバイスに後続プログラムの実行開始を待機せずに転送を開始する(プリロード)。より具体的には、先行プログラムの実行デバイスにおいて、出力データ設定部38は、出力データの所在として実行デバイスの他、先行プログラムに所定の転送先デバイスへの出力データの転送を記述した出力データ記述子を伴う実行終了通知をホストデバイスに出力する。
 その後、後続プログラムで示される処理の実行開始前に、出力データ設定部38は、出力データの所定の転送先デバイスへの転送を開始する。転送先デバイスは、先行プログラム、またはその先行プログラムの出力データ記述子のいずれで設定されてもよい。転送先デバイスとして、出力データを入力データとして処理対象として他のデバイスよりも効率的に処理することができるデバイスが予め設定されてもよい。転送先デバイスが、先行プログラムの実行デバイスである場合には、出力データ設定部38は、出力データの転送を行わない。
 なお、ホストデバイスから、自デバイス(つまり、先行デバイスの実行デバイス)を後続プログラムの実行デバイスとして示す実行デバイス情報が入力される場合には、出力データ設定部38は、先行プログラムの出力データの転送先デバイスへの転送を中止する。その場合には、出力データ設定部38は、出力データの所在を先行プログラムの実行デバイスを記述し、出力データの転送を消去した出力データ記述子を伴う転送中止通知をホストデバイスに出力してもよい。
 ホストデバイスから、自デバイス以外のデバイスを実行デバイスとして示す実行デバイス情報が入力される場合には、出力データ設定部38は、先行プログラムの出力データの転送先デバイスへの転送を継続する。出力データ設定部38は、出力データの転送が完了するとき、出力データの転送の終了を示す出力データ記述子を伴う転送出力通知をホストデバイスに出力する。出力データの転送の終了を示す情報として、出力データが所在する転送先デバイス、転送先アドレスの一方または双方が記述されてもよい。
 ホストデバイスから入力される実行デバイス情報が示す後続プログラムの実行デバイスが、転送先デバイス以外のデバイスである場合には、出力データ設定部38は、先行プログラムの出力データの転送先デバイスへの転送を中止し、後続プログラムの実行デバイスへの転送を開始してもよい。その場合には、出力データ設定部38は、出力データの所在するデバイスとして先行プログラムの実行デバイスを記述し、出力データの転送先デバイスへの転送を消去し、出力データの後続プログラムの実行デバイスへの転送を記述した出力データ記述子を伴う転送出力通知をホストデバイスに出力してもよい。
 他方、ホストデバイスにおいて、実行管理部22は、先行プログラムの実行デバイスから実行終了通知が入力されるとき、実行対象とする次の命令として後続プログラムの実行を示す呼出命令に変更する。
 実行デバイス判定部24は、先行プログラムの出力データを後続プログラムの入力データとして入力データ記述子を必要に応じて参照し、上記のように実行デバイスを定める。従って、先行プログラムの出力データの要件に基づいて、後続プログラムに設定された判定条件を用いて実行デバイスが定められる。実行デバイス判定部24は、定めた実行デバイスを示す実行デバイス情報を実行管理部22の他、先行プログラムについて定めた実行デバイスに対して出力する。
 後続プログラムの実行デバイスにおいて、転送制御部32は、さらに次の処理を行ってもよい。転送制御部32は、先行プログラムの出力データが、後続プログラムの入力データとして用いられる場合、自部に先行プログラムの出力データの出力データ記述子が入力されるごとに、その出力データ記述子を後続プログラムの入力データの入力データ記述子として更新する。出力データ記述子は、上記のように、実行終了通知、転送中止通知、転送出力通知に伴って先行プログラムの実行デバイスから入力されうる。転送制御部32は、入力データ記述子に自デバイス(つまり、後続プログラムの実行デバイス)以外のデバイスが入力データの所在として記述されておらず、入力データ(つまり、先行プログラムの出力データ)の自デバイスへの転送が記述されている場合、入力データの転送が完了するまで待機する。
 転送制御部32は、入力データの所在として自デバイスが記述された入力データ記述子に更新されるとき、自デバイスへの入力データの転送の完了を検出することができる。転送制御部32は、入力データ記述子に自デバイス(つまり、後続プログラムの実行デバイス)以外のデバイスとして先行プログラムの実行デバイスが入力データの所在として記述され、入力データの自デバイス以外のデバイスの転送が記述されている場合には、上記のようにデータ転送部34を経由して入力データ記述子を伴ってデータ転送要求を出力してもよい。これにより、先行プログラムの実行デバイスに入力データが要求される。
 データ転送部34は、転送制御部32から入力されるデータ転送要求から入力データ記述子を抽出し、抽出した入力データ記述子に記述される入力データのアドレスを特定する。データ転送部34は、特定したアドレスで指示される位置に記憶された入力データを読み出し、読み出した入力データの実行デバイスED04へ転送(出力)する。入力データの転送が終了した後、カーネル実行部36の処理を開始する。
(関数プログラムの例)
 次に、本変形例に係る関数プログラムの例について説明する。図6は、本変形例に係る主プログラムの例を示す図である。図6に例示される主プログラムは、3個の関数プログラムkernel1、kernel2、kernel3それぞれの呼出命令をその順序に記述して構成される。図6の左方の上から下にその順序で示される「kernel1」、「kernel2」、「kernel3」は、主プログラムにおいて関数プログラムkernel1、kernel2、kernel3の実行がその順序で指示されることを示す。但し、関数プログラムkernel1、kernel2は、それぞれCPU12で実行され、関数プログラムkernel3には実行デバイスが可変であり、その判定条件が設定されていることが仮定されている。関数プログラムkernel3の入力データとして、data1、data3が用いられ、それぞれ転送先デバイスとしてGPU14が設定されている。
 なお、図6の右方に示す例では、データ記述子Desc*の記述が省略されているが、データ記述子Desc*が記述されていてもよい。
 「kernel1(data1,data0)」は、入力データdata0に対して所定の処理を行い、出力データdata1を取得するための関数プログラムである。関数プログラムkernel1に示す処理が終了した後、関数プログラムkernel2に示す処理が開始される前に、出力データ設定部38は、出力データdata1を所定の転送先デバイスとしてGPU14に出力する。
 「kernel2(data3,data2)」は、入力データdata2に対して所定の処理を行い、出力データdata3を取得するための関数プログラムである。関数プログラムkernel2に示す処理が終了した後、関数プログラムkernel3に示す処理が開始される前に、出力データ設定部38は、出力データdata3を所定の転送先デバイスとしてGPU14に出力する。
 「kernel3(data4,data1,data3)」は、入力データdata1,data3に対して所定の処理を行い、出力データdata4を取得するための関数プログラムである。実行管理部22は、関数プログラムkernel2の処理が終了するとき、関数プログラムkernel3の実行を開始する。この時点では、CPU12からGPU14への入力データdata1、data2の転送が継続している可能性がある。
 その後、実行デバイス判定部24は、関数プログラムkernel3に所定の判定条件に基づいて実行デバイスを定め、関数プログラムkernel1、kernel2の実行デバイスに、関数プログラムkernel3の実行デバイス情報を通知する。
 GPU14を実行デバイスとして定めた場合、出力データ設定部38は、CPU12からGPU14への入力データdata1、data2の転送を継続する。転送制御部32は、CPU12からGPU14への入力データdata1、data2の転送の終了を待機する。入力データdata1、data2の転送が終了したとき、カーネル実行部36は、関数プログラムkernel3に示す処理を開始する。
 CPU12を実行デバイスとして定めた場合、出力データ設定部38は、CPU12からGPU14への入力データdata1、data2の転送を中止する。
 転送制御部32は、入力データdata1、data2が実行デバイスであるCPU12に所在するためデータ転送不要と判定する。その後、カーネル実行部36は、関数プログラムkernel3に示す処理を開始する。
 従って、本変形例によれば転送先デバイスが後続プログラムの実行デバイスとなる場合には、先行プログラムである関数プログラムkernel1、kernel2に係る処理が終了した時点で、出力データの転送が開始される。そのため、実行デバイスにおける後続プログラムである関数プログラムkernel3に係る処理の開始を早めることができるので、システム全体としての処理効率を向上させることができる。また、仮に転送先デバイスが後続プログラムの実行デバイスと異なることが判定される場合であっても、その判定がなされた段階で出力データの転送が中止される。そのため、無用なデータ転送が抑制される。
 なお、上記の説明では後続プログラムの入力データの全体として、直前の2つの先行プログラムの出力データのそれぞれを用いる場合を例にしたが、これには限られない。後続プログラムの入力データとして用いる出力データを提供する先行プログラムの数は、2個に限らず、1個でも、3個以上であってもよい。後続プログラムの入力データの一部の入力データとして、先行プログラムの出力データを用い、残りの入力データが、その後続プログラムに独自に指示されてもよい。また、個々の先行プログラムから提供される出力データの全部が、後続プログラムの入力データとして用いられる場合に限らず、その出力データの一部が後続プログラムの入力データとして用いられてもよい。その出力データの一部が、転送先デバイスへの転送対象となり、残りの出力データは転送対処とならなくてもよい。
 後続プログラムの実行順序は、必ずしも先行プログラムの直後の実行順序でなくてもよく、先行プログラムの後の実行順序であれば、先行プログラムと後続プログラムの間の順序に、他のプログラムが存在していてもよい。
(記述子の例)
 次に、本変形例に係る記述子の例について上記の記述子との差異点を主として説明する。図7は、本変形例に係る記述子の例を示す図である。
 「void *send_to_gpu」は、関数プログラム「send_to_gpu」の関数ポインタを示す。関数プログラム「send_to_gpu」は、GPU14への同期通信、つまり、後続プログラムの実行デバイスとしてのGPU14からのデータ転送要求に応じたデータの転送を示すプログラムである。
 「void *send_to_gpu_async」は、関数プログラム「send_to_gpu_async」の関数ポインタを示す。関数プログラム「send_to_gpu_async」は、GPU14への非同期通信、つまり、転送先デバイスとしてのGPU14へのデータの自発的な転送を示すプログラムである。
 「void *check_gpu_async」は、関数プログラム「check_gpu_async」の関数ポインタを示す。関数プログラム「check_gpu_async」は、GPU14への非同期通信の終了判定、つまり、GPU14へのデータの自発的な転送の終了の有無を判定するための処理を示すプログラムである。なお、関数プログラム「check_gpu_async」は、判定結果として転送中であるか否かを示す値を返り値としても提供してもよい。
(最小構成)
 次に、本実施形態の最小構成について説明する。図8は、本実施形態の最小構成を例示する概略ブロック図である。
 図8に示すように本実施形態に係る情報処理装置10は、複数のデバイスを備える情報処理装置である。情報処理装置10は、実行デバイス判定部24と、転送制御部32と、を備える。
 実行デバイス判定部24は、複数のデバイスのうち、入力データに対して所定の処理を実行する実行デバイスを当該入力データの要件に基づいて定める。
 転送制御部32は、入力データの所在を示す記述子を参照し、入力データの所在が実行デバイスとは他のデバイスであるか否かに応じて実行デバイスへの入力データの転送の要否を判定する。
 この構成によれば、入力データの要件に応じた実行デバイスが定まる。また、記述子(例えば、入力データ記述子)の受け渡しにより入力データの所在が通知され、入力データの所在が他デバイスにあるか否かにより入力データの転送の要否が判定される。副プログラムで示される処理の効率を確保しながら不要なデータ転送を回避することでデータ転送に係る負荷を低減することができる。従って、個々の要素処理に係る副プログラムを利用する主プログラムが様々な環境で効率的に動作することができる。
 実行デバイス判定部24は、入力データの要件として、入力データの情報量、他のデバイスから実行デバイスまでのデータの転送方式およびデータ型のいずれか1つ、またはそれらのいずれかの組み合わせに基づいて実行デバイスを定めてもよい。
 この構成により、実行デバイス判定部24は、記述子に記述された入力データの要件が、副プログラムに所定の判定条件を満たす実行デバイスを判定することで、入力データに適合した実行デバイスを選択することができる。
 情報処理装置10は、さらに出力データ設定部38を備えてもよい。出力データ設定部38は、複数のデバイスのうちホストデバイスから提供される記述子(例えば、入力データ記述子)で示される入力データに対して所定の処理を実行して取得された出力データの所在を示す第2の記述子をホストデバイスに提供してもよい。
 この構成により、ホストデバイスから提供される記述子により処理対象とする入力データが通知され、副プログラムで示される所定の処理を行って得られた出力データの所在を第2の記述子によりホストデバイスに通知することができる。そのため、ホストデバイスに提供する主プログラムに実行対象の処理を示す副プログラムと、その入力データの所在を示す記述子、その出力データの所在を示す記述子を定めることで、ユーザは実行主体とするデバイスを意識することなく主プログラムを開発することができる。
 出力データ設定部38は、出力データ(例えば、先行プログラムの出力データ)に対する第2の所定の処理(例えば、後続プログラムに係る処理)の開始前に、所定の転送先デバイスへの出力データの転送を開始してもよい。
 実行デバイス判定部24は、複数のデバイスのうち、第2の所定の処理を実行する第2の実行デバイスを出力データの要件に基づいて定めてもよい。
 第2の実行デバイス(例えば、後続プログラムの実行デバイス)が実行デバイス(例えば、先行プログラムの実行デバイス)と同一であるとき、出力データ設定部38は、出力データの転送を中止し、第2の実行デバイスが転送先デバイスと同一であるとき、第2の実行デバイスは、出力データの転送が終了するとき、第2の所定の処理を開始する。
 この構成により、後続プログラムに係る第2の処理の開始前に、先行プログラムの出力データの転送先デバイスへの転送が開始されるので、転送先デバイスが第2の処理を実行する第2の実行デバイスである場合には、第2の処理を早期に開始することができる。また、先行プログラムに係る処理を実行する実行デバイスが第2の処理を実行する第2の実行デバイスとなる場合には、出力データの転送が中止される。そのため、データの転送に係る負荷を抑制しながらプログラム全体としての処理効率を向上させることができる。
 情報処理装置10は、さらに実行管理部22を備えてもよい。
 実行管理部22は、記述子(例えば、入力データ記述子)と第2の記述子(出力データ記述子)を伴い、所定の処理を示す命令(例えば、呼出命令)に応じて、実行デバイスに記述子を提供し、実行デバイスから第2の記述子を取得してもよい。
 この構成により、主プログラムに命令に伴って記述される記述子により処理対象とする入力データの所在を実行デバイスに通知することができ、命令で指示される副プログラムで示される所定の処理を行って得られた出力データの所在を実行デバイスより第2の記述子により知得することができる。そのため、主プログラムに実行対象の処理を示す副プログラムと、その入力データの所在を示す記述子、その出力データの所在を示す記述子を定めることで、ユーザは実行主体とするデバイスを意識することなく主プログラムを開発することができる。
 なお、上記の情報処理装置10は、その内部にコンピュータシステムを備えてもよい。そして、上述した各処理の過程は、プログラムの形式でコンピュータ読み取り可能な記憶媒体に記憶され、このプログラムをコンピュータが読み出して実行することによって、それらの処理が行われる。コンピュータシステムは、OS(Operation System)、デバイスドライバ、ユーティリティプログラムなどのソフトウェアや周辺機器等のハードウェアを含むものとする。また、コンピュータ読み取り可能な記録媒体」とは、磁気ディスク、光磁気ディスク、ROM(Read Only Memory)、半導体メモリ等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。さらに、コンピュータ読み取り可能な記録媒体、とは、インターネット等のネットワークや電話回線等の通信回線を用いてプログラムを送信する場合に用いる通信線など、短時間、動的にプログラムを保持するもの、その場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリなど、一定時間プログラムを保持しているものも含んでもよい。また上記プログラムは、前述した機能の一部を実現するためのものであってもよく、さらに前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるもの、いわゆる差分ファイル(差分プログラム)であってもよい。
 また、上述した実施形態における情報処理装置10の一部、または全部を、LSI(Large Scale Integration)等の集積回路として実現してもよい。情報処理装置10の各機能ブロックは個別にプロセッサ化してもよいし、一部、または全部を集積してプロセッサ化してもよい。また、集積回路化の手法はLSIに限らず専用回路、または汎用プロセッサで実現してもよい。また、半導体技術の進歩によりLSIに代替する集積回路化の技術が出現した場合、当該技術による集積回路を用いてもよい。
 以上、本発明の好ましい実施形態を説明したが、本発明はこれら実施形態及びその変形例に限定されることはない。本発明の主旨を逸脱しない範囲で、構成の付加、省略、置換、およびその他の変更が可能である。
 また、本発明は前述した説明によって限定されることはなく、添付の特許請求の範囲によってのみ限定される。
 上記各態様の情報処理装置、情報処理方法およびプログラムによれば、入力データの要件に応じた実行デバイスが定まる。また、記述子の受け渡しにより入力データの所在が通知され、入力データの所在が他デバイスにあるか否かにより入力データの転送の要否が判定される。副プログラムで示される処理の効率を確保しながら不要なデータ転送を回避することでデータ転送に係る負荷を低減することができる。従って、個々の要素処理に係る副プログラムを利用する主プログラムが様々な環境で効率的に動作することができる。
10…情報処理装置、12…CPU、12m…メモリ、14…GPU、14m…メモリ、16…VE、16m…メモリ、22…実行管理部、24…実行デバイス判定部、32…転送制御部、34…データ転送部、36…カーネル実行部、38…出力データ設定部、HD02…ホストデバイス、ED04…実行デバイス

Claims (7)

  1.  複数のデバイスを備える情報処理装置であって、
     前記複数のデバイスのうち、入力データに対して所定の処理を実行する実行デバイスを当該入力データの要件に基づいて定める実行デバイス判定部と、
     前記入力データの所在を示す記述子を参照し、前記所在が前記実行デバイスとは他のデバイスであるか否かに応じて前記実行デバイスへの前記入力データの転送の要否を判定する転送制御部と、
     を備える情報処理装置。
  2.  前記実行デバイス判定部は、
     前記入力データの情報量、前記他のデバイスから前記実行デバイスまでのデータの転送方式およびデータ型、の少なくとも1つに基づいて前記実行デバイスを定める
     請求項1に記載の情報処理装置。
  3.  前記複数のデバイスのうちホストデバイスから提供される前記記述子で示される入力データに対して前記所定の処理を実行して取得された出力データの所在を示す第2の記述子をホストデバイスに提供する出力データ設定部
     を備える請求項2に記載の情報処理装置。
  4.  前記出力データ設定部は、
     前記出力データに対する第2の所定の処理の開始前に、所定の転送先デバイスへの前記出力データの転送を開始し、
     前記実行デバイス判定部は、
     前記複数のデバイスのうち、前記第2の所定の処理を実行する第2の実行デバイスを前記出力データの要件に基づいて定め、
     前記第2の実行デバイスが前記実行デバイスと同一であるとき、前記出力データ設定部は、前記出力データの転送を中止し、
     前記第2の実行デバイスが前記転送先デバイスと同一であるとき、前記第2の実行デバイスは、前記出力データの転送が終了するとき、前記第2の所定の処理を開始する
     請求項3に記載の情報処理装置。
  5.  前記記述子と前記第2の記述子を伴い、前記所定の処理を示す命令に応じて、前記実行デバイスに前記記述子を提供し、
     前記実行デバイスから前記第2の記述子を取得する実行管理部
     を備える請求項3または請求項4に記載の情報処理装置。
  6.  複数のデバイスを備える情報処理装置における情報処理方法であって、
     前記複数のデバイスのうち、入力データに対して所定の処理を実行する実行デバイスを当該入力データの要件に基づいて定める第1のステップと、
     前記入力データの所在を示す記述子を参照し、前記所在が前記実行デバイスとは他のデバイスであるか否かに応じて前記実行デバイスへの前記入力データの転送の要否を判定する第2のステップと、
     を有する情報処理方法。
  7.  複数のデバイスを備える情報処理装置のコンピュータを、
     前記複数のデバイスのうち、入力データに対して所定の処理を実行する実行デバイスを当該入力データの要件に基づいて定める実行デバイス判定部と、
     前記入力データの所在を示す記述子を参照し、前記所在が前記実行デバイスとは他のデバイスであるか否かに応じて前記実行デバイスへの前記入力データの転送の要否を判定する転送制御部と、
     として機能させるためのプログラム。
PCT/JP2020/021632 2020-06-01 2020-06-01 情報処理装置、情報処理方法およびプログラム WO2021245758A1 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
PCT/JP2020/021632 WO2021245758A1 (ja) 2020-06-01 2020-06-01 情報処理装置、情報処理方法およびプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2020/021632 WO2021245758A1 (ja) 2020-06-01 2020-06-01 情報処理装置、情報処理方法およびプログラム

Publications (1)

Publication Number Publication Date
WO2021245758A1 true WO2021245758A1 (ja) 2021-12-09

Family

ID=78830176

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/JP2020/021632 WO2021245758A1 (ja) 2020-06-01 2020-06-01 情報処理装置、情報処理方法およびプログラム

Country Status (1)

Country Link
WO (1) WO2021245758A1 (ja)

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2016181648A1 (ja) * 2015-05-12 2016-11-17 日本電気株式会社 アクセラレータ制御装置、アクセラレータ制御方法および記録媒体
WO2018179873A1 (ja) * 2017-03-28 2018-10-04 日本電気株式会社 アクセラレータを有する計算機のためのライブラリ、およびアクセラレータ

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2016181648A1 (ja) * 2015-05-12 2016-11-17 日本電気株式会社 アクセラレータ制御装置、アクセラレータ制御方法および記録媒体
WO2018179873A1 (ja) * 2017-03-28 2018-10-04 日本電気株式会社 アクセラレータを有する計算機のためのライブラリ、およびアクセラレータ

Similar Documents

Publication Publication Date Title
EP3889774A1 (en) Heterogeneous computing-based task processing method and software-hardware framework system
US9135060B2 (en) Method and apparatus for migrating task in multicore platform
CN109669772B (zh) 计算图的并行执行方法和设备
US20200201763A1 (en) Memory hierarchy-aware processing
US10853128B2 (en) Virtual machine management device and virtual machine management method
JP2014504416A (ja) 組み合わせたcpu/gpuアーキテクチャシステムにおけるデバイスの発見およびトポロジーのレポーティング
US20060136878A1 (en) Method and apparatus for enabling compiler and run-time optimizations for data flow applications in multi-core architectures
US20150046684A1 (en) Technique for grouping instructions into independent strands
US20210158131A1 (en) Hierarchical partitioning of operators
US11321090B2 (en) Serializing and/or deserializing programs with serializable state
CN114528090A (zh) 基于Vulkan实现图形渲染的方法及相关装置
CN116382880B (zh) 任务执行方法、装置、处理器、电子设备及存储介质
KR102315102B1 (ko) 가상 머신을 부팅하기 위한 방법, 장치, 기기 및 매체
US20180033115A1 (en) Capturing Commands in a Multi-Engine Graphics Processing Unit
JP2023527770A (ja) メモリにおける推論
WO2021245758A1 (ja) 情報処理装置、情報処理方法およびプログラム
WO2020158347A1 (ja) 情報処理装置、方法およびプログラム
US20130312002A1 (en) Scheduling method and scheduling system
US20130007765A1 (en) Software control device, software control method, and computer product
US11954534B2 (en) Scheduling in a container orchestration system utilizing hardware topology hints
CN114371920A (zh) 一种基于图形处理器加速优化的网络功能虚拟化系统
US11392406B1 (en) Alternative interrupt reporting channels for microcontroller access devices
CN114138484A (zh) 资源分配方法、装置以及介质
CN110960858B (zh) 一种游戏资源的处理方法、装置、设备及存储介质
US11003488B2 (en) Memory-fabric-based processor context switching system

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

Country of ref document: EP

Kind code of ref document: A1

NENP Non-entry into the national phase

Ref country code: DE

122 Ep: pct application non-entry in european phase

Ref document number: 20938976

Country of ref document: EP

Kind code of ref document: A1

NENP Non-entry into the national phase

Ref country code: JP