Conveyor belt handling systems, apparatus and methods
The conveyor belt architecture addresses inefficiencies in von Neumann computers by using a reconfigurable hardware platform with interconnected operator blocks, enhancing processing speed and security, and overcoming bottlenecks in data handling.
Patent Information
- Application Number
- JP2022515521
- Authority / Receiving Office
- JP · JP
- Patent Type
- Patents
- Current Assignee / Owner
- Priority Date
- 2019-09-06
- Filing Date
- 2020-09-04
- Publication Date
- 2025-10-10
- Estimated Expiration
- 2040-09-04
AI Technical Summary
Traditional von Neumann architecture computers face inefficiencies due to program instructions and data being contained in the same RAM, leading to bottlenecks and performance limitations, particularly in handling large data processing tasks.
A conveyor belt architecture using a reconfigurable hardware platform with interconnected operator blocks that manipulate data as it moves through the chain, eliminating the need for a common bus and allowing simultaneous reading and writing, and enabling asynchronous or synchronous operations.
This architecture achieves higher throughput and processing power, reducing execution times by up to 2,000% compared to standard architectures, and provides enhanced security against hacking by storing programs as hardware.
Smart Images

Figure 0007752422000001 
Figure 0007752422000002 
Figure 0007752422000003
Abstract
Description
CROSS-REFERENCE TO RELATED APPLICATIONS
[0001] This application claims the benefit of priority to U.S. Provisional Patent Application No. 62 / 896,682, filed September 6, 2019, which is incorporated herein by reference in its entirety. [Technical Field]
[0002] The present disclosure relates to computers, and more particularly to computer processors. [Background technology]
[0003] Digital computers designed for universal computing can use standard architectures such as the von Neumann architecture. The von Neumann architecture machine, designed around 1945 by physicist and mathematician John von Neumann, may be a theoretical design for a stored-program digital computer. Summary of the Invention [Means for solving the problem]
[0004] A detailed description of systems and methods according to embodiments of the present disclosure is provided below. While several embodiments are described, it should be understood that the present disclosure is not limited to any one embodiment, but instead encompasses many alternatives, modifications, and equivalents. In addition, to provide a thorough understanding of the embodiments disclosed herein, numerous specific details are set forth in the following description, although some embodiments can be practiced without some or all of these details. Furthermore, for the purpose of clarity, certain technical material known in the relevant art has not been described in detail to avoid unnecessarily obscuring the present disclosure.
[0005] Techniques, apparatus, and methods are disclosed that use a reconfigurable hardware platform to interconnect a chain of reconfigurable hardware operator blocks and manipulate data as it moves down the chain. This conveyor belt architecture, or chain of operator blocks, moves data from operator block to operator block. Instead of a piece of software, the chain of reconfigurable hardware operator blocks can manipulate data as it moves down the chain. [Brief explanation of the drawings]
[0006] [Figure 1] A diagram showing an example of a computing system. [Figure 2] Diagram showing a conveyor belt architecture computing system [Figure 3] Program source code to print Fibonacci numbers [Figure 4] Program machine code to run on a standard architecture system for printing Fibonacci numbers [Figure 5] Flowchart of operator blocks executing on a conveyor belt architecture system for printing Fibonacci numbers [Figure 6] Source code to calculate and print the sum of numbers [Figure 7] First quarter of machine code that runs on a standard architecture system to calculate and print out numeric sums [Figure 8] Second quarter of machine code that runs on a standard architecture system to calculate and print out numeric sums [Figure 9] Third quarter of machine code that runs on a standard architecture system to calculate and print out numeric sums [Figure 10] The fourth quarter of machine code that runs on a standard architecture system to calculate and print out numeric sums. [Figure 11]A flowchart of an operator block implemented on a conveyor belt architecture system that calculates and prints out numeric sums. [Figure 12] A block diagram illustrating a conveyor belt architecture computing system used in conjunction with a standard architecture computing system. [Figure 13] A block diagram illustrating how programs execute across a conveyor belt architecture computing system and a standard architecture computing system. [Figure 14] Flowchart of a method for preparing a conveyor belt architecture [Figure 15] Block diagram showing computing systems and components DETAILED DESCRIPTION OF THE INVENTION
[0007] In some embodiments, a conveyor belt architecture computing system may be used alone to perform computing tasks.
[0008] For example, multiple conveyor belt architecture computing systems may be used in series or in parallel to share the workload among the computing systems.
[0009] Conveyor belt architecture computing systems may be used in combination with standard architecture computing systems, eg, workloads may be shared between the computing systems.
[0010] For example, multiple conveyor belt architecture computing systems may be used in series or parallel, or in combination with standard architecture computing systems, to share the workload between the computing systems.
[0011] A conveyor belt architecture computing system may be used in combination with multiple standard architecture computing systems, eg, workloads may be shared between the computing systems.
[0012] 1 shows a diagram illustrating an example of a computing system similar to or comprising a von Newman architecture computing system. The computing system comprises an input 102, a computing system 104, and an output 106. The input 102 is received by the computing system 104 (e.g., via a bus, etc.), where it is processed before being transmitted from the computing system 104 (e.g., via a bus, etc.) as the output 106. Included within the computing system 104 is a random access memory (RAM) 108 coupled to a central processing unit (CPU) 112 via a common bus 110. Additionally, the CPU 112 comprises an arithmetic logic unit (ALU) 116, a control unit 114, and registers 118 and a stack 120.
[0013] A program that executes on a standard architecture computing system may include a set of instructions that are executed in a particular sequence to manipulate data.
[0014] Once a program is loaded into RAM 108, CPU 112 can perform a series of "fetch-decode-execute" cycles, whereby the contents of locations in RAM 108 are read, decoded, and then executed in a particular sequence as directed by the program. As locations in RAM 108 contain instructions and data, CPU 112 reads and decodes the instructions to determine what to do with the information and then acts on the results. Some instructions instruct CPU 112 to write the results of an operation back to a location in RAM 108, while other instructions instruct CPU 112 to jump to a particular location in RAM 108 depending on the result of the previous instruction.
[0015] A problem with this architecture can be that program instructions and data are contained in the same RAM 108. Information in RAM 108 is read and decoded one at a time, which can lead to inefficiencies and performance limitations in the architecture. Additionally, the common bus 110 may prevent the CPU 112 from reading and writing information simultaneously. This is called a bottleneck and can further limit the performance of the system.
[0016] 2 shows a diagram illustrating a conveyor belt architecture computing system with input 202, computing system 204, and output 206. Input 202 is received by computing system 204 (e.g., via a bus, etc.), where it is processed before being transmitted from computing system 204 (e.g., via a bus, etc.) as output 206. Included within computing system 204 is a reconfigurable hardware platform 208 (e.g., a field programmable gate array (FPGA)) that includes a number of reconfigurable operator blocks 210, 212, 214, 216, and 218 interconnected by data paths 220, 222, 224, and 226 in one direction, and by data path 228 in the opposite direction.
[0017] Instead of a CPU coupled to RAM via a bus, a conveyor belt architecture may use a reconfigurable hardware platform such as FPGA 208 to interconnect a chain of reconfigurable operator blocks 210, 212, 214, 216, and 218 and manipulate data as it moves down the chain from operator block to operator block across data paths 220, 222, 224, and 226 in one direction, and data path 228 in the other direction.
[0018] In an embodiment, at each operator block 210, 212, 214, 216 and 218, an operation or group of operations is performed to manipulate the data before the data is conveyed to the next operator block in the chain across data paths 220, 222, 224 and 226 in one direction and data path 228 in the other direction.
[0019] The program is translated and then copied to a reconfigurable hardware platform 208 (e.g., an FPGA, etc.). Each instruction or group of instructions is assigned to an operator block 210, 212, 214, 216, and 218, and the program flow is determined by the interconnection of these operator blocks.
[0020] Data is manipulated in each operator block 210, 212, 214, 216 and 218 and travels down the chain from operator block to operator block over data paths 220, 222, 224 and 226.
[0021] In the case of a "jump" instruction, the data flow may be changed / redirected by the operator block in the reverse direction or to some other operator block via a separate data path 228. In this example, a jump based on a condition being met is shown in operator block 4 (216) back to operator block 2 (212).
[0022] Additionally, operator blocks 210, 212, 214, 216 and 218 may be autonomous and may process data asynchronously or synchronously when receiving data from the previous operator block in the chain.
[0023] In one embodiment of autonomous operation, a conveyor belt architecture allows multiple instructions to be executed in a single processor cycle.
[0024] The conveyor belt architecture can be more efficient than the standard architecture because it does not require reading and decoding programs from RAM.
[0025] The conveyor belt architecture avoids bottlenecks associated with traditional computer architectures because it does not rely on a common bus path, and each set of operator blocks has its own data path.
[0026] A conveyor belt architecture may enable higher throughput and processing power. A further advantage of this architecture is that when operated in a synchronous mode, the conveyor belt architecture can pack data more tightly into the reconfigurable hardware platform by queuing data at each operator block input, ready to be loaded into subsequent operator blocks as it becomes available.
[0027] Program instructions may be contained within operator blocks in the form of hardware logic gates rather than software, making instruction execution much faster than its software counterpart.
[0028] Another advantage of the conveyor belt architecture is that the program may be more difficult to hack. The program may be stored as hardware, and any modification of the program by a hacker may break the conveyor belt chain and result in a system reset. A system reset may cause the original (unmodified) program to be automatically reloaded by the system into the reconfigurable hardware platform.
[0029] Figures 3-11 illustrate the differences between the two architectures. C source code and compiled output from both the more traditional computing system and the conveyor belt computing system are examined for two different programs.
[0030] Figure 3 shows the source code for printing Fibonacci numbers. C source code is shown for a program used to print out Fibonacci numbers in the range 0-255.
[0031] Figure 4 shows machine code for printing Fibonacci numbers. The C source code from Figure 3 can be compiled to run on a conventional computing system. The resulting machine language can be similar to the listing shown in Figure 4. A conventional computing system can use at least 85 cycles of the CPU clock to complete the first iteration of the calculation and print loop. Thereafter, a conventional computing system can use at least 56 cycles of the CPU to complete subsequent iterations of the calculation and print loop.
[0032] Figure 5 shows a flowchart of the operator blocks for printing Fibonacci numbers. In comparison with Figure 4, the C source code shown in Figure 3 can be compiled to run on a conveyor belt computing system. The resulting operator blocks used to run the program can be similar to those shown in Figure 5.
[0033] Operator Block 1 (OB#1) 502 assigns the values "x=0" and "y=1". Operator Block 2 (OB#2) 504 performs a "printf" function. Operator Block 3 (OB#3) 506 adds the contents of x and y and assigns it to variable z. It also assigns y to x and z to y. Operator Block 4 (OB#4) 508 performs a conditional jump back to the start of Operator Block 2 504 if the result of "x<255" is true, and a conditional jump back to the start of Operator Block 1 502 if the result of "x<255" is false.
[0034] In this embodiment, many instructions can be grouped together within a single operator block 502, 504, 506, and 508, allowing multiple operations to be performed on data before the data is passed to the next operator block. When operating in synchronous mode, the conveyor belt architecture can complete the first and subsequent iterations of the calculation and printing loop using four processor clock cycles. This allows the conveyor belt architecture machine in this example to operate 14 times faster than a conventional machine with a similar clock cycle (i.e., 56 cycles vs. 4 cycles).
[0035] Figure 6 shows the source code for finding the numeric sum. Figure 6 shows the C source code for a program for finding the numeric sum of numbers using recursion.
[0036] 7-10 show machine code for finding a numeric sum. The C source code from FIG. 6 can be compiled to run on a von Neumann computing system. The resulting machine language can be similar to the listings shown in FIGS. 7-10. The "main" loop invokes a separate "sum" loop 802 to calculate and return a result 1002. Within the sum loop is an "if" statement 902. Depending on the outcome of the if statement, the digital computer can use either 113 CPU clock cycles or 191 clock cycles to process one iteration.
[0037] Figure 9 shows a flowchart of the operator blocks for finding a numeric sum. In comparison with Figures 7-10, the C source code shown in Figure 6 can be compiled to run on a conveyor belt architecture computing system. The resulting operator blocks used to run the program can be similar to those shown in Figure 11.
[0038] Operator block 1 (OB#1) 1102 executes the "printf" function to print to the output device "Enter the number." Operator block 2 (OB#2) 1104 executes the "scanf" function to input a number from an input device. Operator block 3 (OB#3) 1106 executes an "if" statement to compare the input number to 0, then redirects the program to operator block 4 (OB#4) 1108 if the result is positive, or to operator block 5 (OB#5) 1110 if the result is negative. Operator block 4 (OB#4) 1108 executes the calculation. Operator block 5 (OB#5) 1110 returns 0. Operator block 6 (OB#6) 1112 assigns the number returned by either OB#4 (1108) or OB#5 (1110) to the variable "sum." Operator block 7 (OB#7) 1114 executes the "printf" function to print sum on the output device. Additionally, the output of this operator block 1114 is coupled to the input of OB#1 (1102), allowing the program to loop indefinitely.
[0039] In this embodiment, the operator block can redirect the program chain depending on the outcome of the condition. When operating in synchronous mode, the conveyor belt architecture computing system can complete a program iteration using six processor clock cycles, regardless of the outcome of the "if" instruction. The conveyor belt architecture computing system in this example can be a factor of 18 times faster than a standard architecture computing system for a similar clock cycle (i.e., 113 cycles vs. 6 cycles).
[0040] Conveyor belt architecture computing systems can be significantly faster than standard architecture computing systems, depending on the application. For example, conveyor belt architecture computing systems can be faster in applications where large amounts of data are processed. The performance advantage of conveyor belt architecture computing systems over standard architecture computing systems can depend on the programs being executed. Through testing, advantages of 100% to 2,000% have been found to be possible in some applications.
[0041] 12 is a block diagram illustrating a conveyor belt architecture computing system used in combination with a standard architecture computing system. In this embodiment, a standard architecture computing system front end 1202 couples to a conveyor belt architecture computing system back end 1204 via a common bus 1206.
[0042] The standard architecture computing system front end comprises the following components: a central processing unit (CPU) 1208, a dynamic random access memory (DRAM) 1210, a local area network (LAN) adapter 1212, a basic input / output system (BIOS) 1214, and a hard disk drive (HDD) 1216, coupled together via a common bus configuration 1206. In the case of the HDD 1216, this is via an interface (I / F) 1218.
[0043] Also shown in this embodiment is a graphics processor unit (GPU) 1220 and a further extension processor 1222.
[0044] The conveyor belt architecture computing system belt backend incorporates an FPGA 1224 that couples to the rest of the components of the overall system via a common bus 1206 .
[0045] Because some programs may be idle for a significant portion of their operating time, it makes little sense to execute this idle code on a conveyor-belt architecture computing system. Instead, only specific sections of the program (e.g., critical loops, critical paths) may be converted and executed on a conveyor-belt architecture computing system to perform the "heavy lifting." The remaining program without the specific sections may still execute on a front-end standard architecture computing system. By using the two architectures together, the need for the entire program to be converted to run on a conveyor-belt architecture computing system can be avoided. This can avoid the use of valuable conveyor-belt architecture computing system area (e.g., program space) that does not provide any tangible advantage. Furthermore, the use of the two architectures ensures compatibility with existing programs designed to run on standard architecture computing systems.
[0046] In some embodiments, a conveyor belt architecture computing system may be used in conjunction with a standard architecture computing system. Figure 13 is a block diagram illustrating a conveyor belt architecture computing system and how programs execute across the standard architecture computing system. A standard architecture computing system front end 1302 couples to a conveyor belt architecture computing system back end 1304 via a bus 1306. The body of program 1308 then invokes the conveyor belt architecture computing system routines A 1312 and B 1314 via call functions 1316 and 1320, returning results at 1318 and 1322, respectively.
[0047] FIG. 14 shows a flowchart of a method for preparing a conveyor belt architecture. This method may be performed by systems and / or components described herein, including 204 from FIG. 2. At block 1402, the conveyor belt system may receive a program configured to execute as software. At block 1404, the conveyor belt system may determine to execute a first portion of the program as hardware and a second portion of the program as software. At block 1406, the conveyor belt system may determine, based on the first portion, a plurality of interconnected reprogrammable operator blocks including one or more transformation functions that take in input data from a pre-data bus, perform one or more transformations on the input data, and output the transformed input data via an output data bus. At block 1408, the conveyor belt system may configure the plurality of interconnected reprogrammable operator blocks to execute on one or more reprogrammable processors. At block 1410, the conveyor belt system may execute the second portion via one or more front-end processors. In block 1412, the conveyor belt system may send first data from the one or more front-end processors to the one or more reprogrammable processors. In block 1414, the conveyor belt system may execute the first portion via the one or more reprogrammable processors. In block 1416, the conveyor belt system may send second data from the one or more reprogrammable processors to the one or more front-end processors. In block 1418, the conveyor belt system may determine result data based on the first data and the second data.
[0048] The conveyor belt system may determine a first portion of the program to be executed in hardware based on computational complexity. The result data may be a result of the execution of the program. The second data may be derived from the first data based on one or more transformations. The result data may be derived from the second data, and the second data may be derived from the first data. The one or more reprogrammable processors may be field programmable gate arrays. Sending the first data from the one or more front-end processors to the one or more reprogrammable processors may further include sending the first data from the one or more front-end processors to the one or more reprogrammable processors via an expansion bus. Receiving the program configured to be executed as software may further include compiling the program into executable software code, a hardware configuration, and communication code for transferring data between the executable software code and the hardware configuration.
[0049] The conveyor belt processor may comprise an input data bus, a plurality of interconnected reprogrammable operator blocks, and an output data bus. The plurality of interconnected reprogrammable operator blocks may include: an input data bus of a first reprogrammable operator block coupled to an output data bus of a second reprogrammable operator block or the input data bus; an input data bus of a third reprogrammable operator block or the output data bus of the first reprogrammable operator block; and one or more transform functions that take in input data from the pre-data bus, perform one or more transforms on the input data, and output the transformed input data via the output data bus.
[0050] The bus widths of the multiple interconnected reprogrammable operator blocks may not be the same. The output of a subsequent block may be the input of a previous block. The second reprogrammable operator block and the third reprogrammable operator block may be the same. The third reprogrammable operator block may precede the first reprogrammable operator block in execution order. The conveyor belt processor may further comprise a programming interface configured to receive instructions for creating the multiple interconnected reprogrammable operator blocks.
[0051] A system for processing data may include a plurality of processors and a management function configured to allocate data to each processor. Each processor may include an input data bus, a plurality of interconnected reprogrammable operator blocks, and an output data bus. The interconnected reprogrammable operator blocks may include: an input data bus of a first reprogrammable operator block coupled to an output data bus of a second reprogrammable operator block or the input data bus; an output data bus of the first reprogrammable operator block coupled to an input data bus of a third reprogrammable operator block or the output data bus; and one or more transformation functions that take in input data from the pre-data bus, perform one or more transformations on the input data, and output the transformed input data via an output data bus.
[0052] The management function may be further configured to reconfigure the plurality of interconnected reprogrammable operator blocks. The management function may comprise a memory that stores instructions for creating the plurality of interconnected reprogrammable operator blocks of the plurality of processors. The claimed system may further comprise at least one front-end processor having a different architecture than the plurality of processors. The at least one front-end processor may comprise a general-purpose processor. The management function may include: a secure interface configured to receive configuration changes; and a non-secure interface configured to assign data to one or more processors of the plurality of processors.
[0053] 15 is a block diagram illustrating components that can read instructions from a machine-readable or computer-readable medium (e.g., a machine-readable storage medium) and perform any one or more of the methods described herein, according to some exemplary embodiments. Specifically, FIG. 15 illustrates a schematic diagram of hardware resources 1500, including one or more processors (or processor cores) 1510, one or more memory / storage devices 1520, and one or more communication resources 1530, each of which is communicatively coupled via a bus 1540.
[0054] The processor 1510 (e.g., a central processing unit (CPU), a reduced instruction set computing (RISC) processor, a complex instruction set computing (CISC) processor, a graphics processing unit (GPU), a digital signal processor (DSP) such as a baseband processor, an application specific integrated circuit (ASIC), a radio frequency integrated circuit (RFIC), another processor, or any suitable combination thereof) may include, for example, processor 1512 and processor 1514. The memory / storage device 1520 may include main memory, disk storage, or any suitable combination thereof.
[0055] Communications resources 1530 may include interconnect and / or network interface components or other suitable devices for communicating with one or more peripheral devices 1504 and / or one or more databases 1506 over network 1508. For example, communications resources 1530 may include wired communications components (e.g., for coupling via a Universal Serial Bus (USB)), cellular communications components, near field communication (NFC) components, Bluetooth® components (e.g., Bluetooth® Low Energy), Wi-Fi® components, and other communications components.
[0056] The instructions 1550 may comprise software, programs, applications, applets, apps, or other executable code for causing at least some of the processors 1510 to perform any one or more of the methods described herein. The instructions 1550 may reside, completely or partially, within at least one of the processors 1510 (e.g., in the processor's cache memory), the memory / storage devices 1520, or any suitable combination thereof. Furthermore, any portion of the instructions 1550 may be transferred to the hardware resources 1500 from any combination of the peripheral devices 1504 and / or the database 1506. Thus, the memory of the processors 1510, the memory / storage devices 1520, the peripheral devices 1504, and the database 1506 are examples of computer-readable and machine-readable media.
[0057] As used herein, the term "circuitry" may refer to, be a part of, or include an application-specific integrated circuit (ASIC), electronic circuitry, processor (shared, dedicated, or group), and / or memory (shared, dedicated, or group) that executes one or more software or firmware programs, combinational logic circuits, and / or other suitable hardware components that provide the described functionality. In some embodiments, a circuit may be implemented in, or function in association with, one or more software or firmware modules. In some embodiments, a circuit may include logic at least partially operable in hardware.
[0058] Embodiments and implementations of the systems and methods described herein may include various operations that may be embodied in machine-executable instructions executed by a computer system. The computer system may include one or more general-purpose or special-purpose computers (or other electronic devices). The computer system may include hardware components that contain specific logic for performing the operations, or may include a combination of hardware, software, and / or firmware.
[0059] Computer systems and computers within computer systems may be connected via a network. Suitable networks for configuration and / or use as described herein include one or more local area networks, wide area networks, metropolitan area networks, and / or Internet or IP networks, such as the World Wide Web, private internets, secure internets, value-added networks, virtual private networks, extranets, intranets, or standalone machines that communicate with other machines through the physical transport of a medium. In particular, suitable networks may be formed in part or in whole from two or more other networks, including networks using different hardware and network communication technologies.
[0060] One suitable network includes a server and one or more clients; other suitable networks may include other combinations of servers, clients, and / or peer-to-peer nodes; a given computer system may function as both a client and a server. Each network includes at least two computers or computer systems, such as a server and / or a client. The computer systems may include workstations, laptop computers, disconnectable mobile computers, servers, mainframes, clusters, so-called "network computers" or "thin clients," tablets, smartphones, personal digital assistants or other portable computing devices, "smart" consumer electronics devices or appliances, medical devices, or combinations thereof.
[0061] Suitable networks may include communications or networking software such as software available from Novell®, Microsoft®, and other vendors, and may operate using TCP / IP, SPX, IPX, and other protocols over twisted pair, coaxial, or fiber optic cable, telephone lines, radio waves, satellites, microwave repeaters, modulated AC power lines, physical media transport, and / or other data transmission "wires" known to those skilled in the art. The network may include smaller networks and / or may be connectable to other networks through gateways or similar mechanisms.
[0062] The various techniques, or particular aspects or portions thereof, may take the form of program code (i.e., instructions) embodied in a tangible medium, such as a floppy disk, a CD-ROM, a hard drive, a magnetic or optical card, a solid-state memory device, a non-transitory computer-readable storage medium, or any other machine-readable storage medium; when the program code is loaded into and executed by a machine, such as a computer, the machine becomes an apparatus for performing the various techniques. In the case of program code execution on a programmable computer, the computing device may include a processor, a processor-readable storage medium (including volatile and non-volatile memory and / or storage elements), at least one input device, and at least one output device. The volatile and non-volatile memory and / or storage elements may be RAM, EPROM, flash drives, optical drives, magnetic hard drives, or other media for storing electronic data. One or more programs that may implement or utilize the various techniques described herein may use application programming interfaces (APIs), reusable controls, etc. Such programs may be implemented in a high-level procedural or object-oriented programming language to communicate with a computer system. However, the programs may be implemented in assembly or machine language, if desired. In either case, the language may be a compiled or interpreted language, and combined with hardware implementations.
[0063] Each computer system includes one or more processors and / or memory; computer systems may also include various input and / or output devices. Processors may include general-purpose devices such as Intel®, AMD®, or other "off-the-shelf" microprocessors. Processors may include special-purpose processing devices such as ASICs, SoCs, SiPs, FPGAs, PALs, PLAs, FPLAs, PLDs, or other customized or programmable devices. Memory may include static RAM, dynamic RAM, flash memory, one or more flip-flops, ROMs, CD-ROMs, DVDs, disks, tapes, or magnetic, optical, or other computer storage media. Input devices may include keyboards, mice, touchscreens, light pens, tablets, microphones, sensors, or other hardware with associated firmware and / or software. Output devices may include monitors or other displays, printers, speech or text synthesizers, switches, signal lines, or other hardware with associated firmware and / or software.
[0064] It should be understood that many of the functional units described herein may be implemented as one or more components, a term used to more specifically emphasize their implementation independence. For example, a component may be implemented as a hardware circuit comprising custom very large scale integrated (VLSI) circuits or gate arrays, or off-the-shelf semiconductors such as logic chips, transistors, or other discrete components. A component may also be implemented in a programmable hardware device such as a field programmable gate array, programmable array logic, programmable logic device, or the like.
[0065] Components may also be implemented in software for execution by various types of processors. An identified component of executable code may comprise one or more physical or logical blocks of computer instructions, which may be organized as, for example, an object, action, or function. Nevertheless, the executable files of an identified component need not be physically located together, but may include different instructions stored in different locations that, when logically combined together, make up the component and achieve the component's intended purpose.
[0066] Indeed, a component of executable code may be a single instruction or many instructions, and may be distributed across several different code segments, among different programs, and across several memory devices. Similarly, operational data may be identified and illustrated herein within components and may be embodied in any suitable form and organized within any suitable type of data structure. Operational data may be collected as a single data set or distributed across different locations, including different storage devices, or may exist, at least in part, simply as electronic signals on a system or network. Components may be passive or active, and include agents operable to perform a desired function.
[0067] Some aspects of the described embodiments are shown as software modules or components. As used herein, a software module or component may include any type of computer instructions or computer-executable code located in a memory device. A software module may include one or more physical or logical blocks of computer instructions, which may be organized as, for example, routines, programs, objects, components, data structures, etc. that perform one or more tasks or implement particular data types. It should be understood that a software module may be implemented in hardware and / or firmware instead of or in addition to software. One or more functional modules described herein may be separated into sub-modules and / or combined into a single or fewer modules.
[0068] In some embodiments, a particular software module may include different instructions stored in different locations of a memory device, different memory devices, or different computers, which together implement the module's described functionality. Indeed, a module may include a single instruction or many instructions, and may be distributed across several different code segments, among different programs, and across several memory devices. Some embodiments may be practiced in a distributed computing environment, where tasks are performed by remote processing devices linked through a communications network. In a distributed computing environment, software modules may be located in local and / or remote memory storage devices. Additionally, data that is linked or rendered together in a database record may reside in the same memory device or across several memory devices and may be linked together in fields of the record in the database over a network.
[0069] References throughout this specification to an "embodiment" mean that the particular feature, structure, or characteristic described in connection with the embodiment is included in at least one embodiment of the invention. Thus, the appearances of the phrase "in an embodiment" in various places throughout this specification are not necessarily all referring to the same embodiment.
[0070] As used herein, a plurality of items, structural elements, compositional elements, and / or materials may be presented in a common list for convenience. However, these lists should be construed as though each member of the list is individually identified as a separate and unique member. Accordingly, individual members of such lists should not be construed as de facto equivalents of any other members of the same list solely based on their presentation in a common group, unless indicated to the contrary. Furthermore, various embodiments and examples of the present invention may be referred to herein along with alternatives for its various components. It should be understood that such embodiments, examples, and alternatives should not be construed as de facto equivalents of each other, but should be considered as separate and autonomous representations of the present invention.
[0071] Furthermore, the described features, structures, or characteristics may be combined in any suitable manner in one or more embodiments. In the following description, numerous specific details are provided, such as examples of materials, frequencies, sizes, lengths, widths, shapes, etc., to provide a thorough understanding of embodiments of the invention. However, one skilled in the art will recognize that the invention may be practiced without one or more of the specific details, or with other methods, components, materials, etc. In other instances, well-known structures, materials, or operations are not shown or described in detail to avoid obscuring aspects of the invention.
[0072] It should be appreciated that the systems described herein include descriptions of specific embodiments. These embodiments may be combined into a single system, partially combined into other systems, divided into multiple systems, or otherwise divided or combined. Additionally, it is contemplated that parameters / attributes / aspects / etc. of one embodiment may be used in another embodiment. It should be appreciated that parameters / attributes / aspects / etc. are described in one or more embodiments for clarity only, and that parameters / attributes / aspects / etc. may be combined or substituted with parameters / attributes / aspects / etc. of another embodiment unless specifically disclaimed herein.
[0073] Although the foregoing has been described in some detail for purposes of clarity, it will be apparent that certain changes and modifications may be made without departing from the principles thereof. It should be noted that there are many alternative ways of implementing the processes and apparatus described herein. Accordingly, the embodiments of the present invention should be considered illustrative rather than restrictive, and the present invention is not limited to the details given herein, but may be modified within the scope of the appended claims and their equivalents.
[0074] Those skilled in the art will understand that many changes may be made to the details of the above-described embodiments without departing from the underlying principles of the invention, and the scope of the invention should therefore be determined solely by the claims which follow.
Claims
1. 1. A method of configuring a processor, comprising: receiving a program configured to run as software; determining that a first portion of the program is to be executed in hardware and a second portion of the program is to be executed as software; determining, based on the first portion, a plurality of interconnected reprogrammable operator blocks including one or more transformation functions that accept input data via an input data bus, perform one or more transformations on the input data, and output transformed input data via an output data bus; configuring the plurality of interconnected reprogrammable operator blocks to execute on one or more reprogrammable processors; executing the second portion via one or more front-end processors; transmitting first data from the one or more front-end processors to the one or more reprogrammable processors; executing the first portion via the one or more reprogrammable processors; transmitting second data from the one or more reprogrammable processors to the one or more front-end processors; and determining result data based on the first data and the second data. A method comprising:
2. 2. The method of claim 1, wherein determining the first portion further comprises determining to execute the first portion of the program in hardware based on computational complexity.
3. 2. The method of claim 1, wherein the result data is a result of the execution of the program.
4. 2. The method of claim 1, wherein the second data is derived from the first data based on the one or more transformations.
5. 2. The method of claim 1, wherein the result data is derived from the second data, which is derived from the first data.
6. 2. The method of claim 1, wherein the one or more reprogrammable processors are field programmable gate arrays.
7. 2. The method of claim 1, wherein transmitting the first data from the one or more front-end processors to the one or more reprogrammable processors further comprises transmitting the first data from the one or more front-end processors to the one or more reprogrammable processors via an expansion bus.
8. 10. The method of claim 1, wherein receiving a program configured to execute as software further comprises compiling the program into executable software code, a hardware configuration, and communication code for transferring data between the executable software code and the hardware configuration.
9. A system for processing data, comprising: a plurality of processors; and Management functions configured to allocate data to each processor Equipped with Each processor: Input data bus; a plurality of interconnected reprogrammable operator blocks; and Output Data Bus wherein the plurality of interconnected reprogrammable operator blocks are an input data bus of the first reprogrammable operator block coupled to an output data bus of the second reprogrammable operator block or to said input data bus; an output data bus of the first reprogrammable operator block coupled to an input data bus or an output data bus of a third reprogrammable operator block; and one or more transformation functions performed by one or more of the first, second, and third reprogrammable operator blocks that take in input data via the input data bus, perform one or more transformations on the input data, and output the transformed input data via an output data bus. Including, The management function: a secure interface configured to receive configuration changes; and an insecure interface configured to allocate data to one or more processors of the plurality of processors; A system comprising:
Citation Information
Patent Citations
FPGA platform as a service (PAAS)
CN110121709A
Electronic data processing system
JP2000091435A
Image processor, control method thereof and program
JP2016009339A
Parallel processing method for arithmetic logic, and parallel processing execution device
JP2017059084A
Control device, information processing system, program, and information processing method
JP2018025905A