A hypervisor system, comprising at least one hardware finite state machine, for virtualizing application-specific supercomputers, the hypervisor system comprising:
- (a) a software-virtual hardware pair consisting of a software application, and an application-specific virtual supercomputer for accelerating the software application, where:
- i. the application-specific virtual supercomputer comprises a plurality of virtual tiles;
- and
- ii. communication messages are sent and received between both the software application and the plurality of virtual tiles;
- (b) a plurality of reconfigurable physical tiles, where each virtual tile of the plurality of virtual tiles of the application-specific virtual supercomputer can be implemented on a reconfigurable physical tile among the plurality of reconfigurable physical tiles, by configuring the reconfigurable physical tile to perform a function of the virtual tile;
- and
- (c) a scheduler implemented in hardware, for parallel pre-emptive scheduling of the plurality of virtual tiles on the reconfigurable physical tiles;
- where the scheduler is separate from the reconfigurable physical tiles;
- and
- where the scheduler simultaneously performs a plurality of pre-emptive scheduling actions, where a pre-emptive scheduling action of the plurality of pre-emptive scheduling actions comprises pre-empting a virtual tile operating on a reconfigurable physical tile, letting the pre-empted virtual tile remain pre-empted for a period of time, and then resuming operation of the pre-empted virtual tile on a possibly different reconfigurable physical tile;
- and
- where the pre-empted virtual tile retains ability to receive a message while pre-empted;
- and
- where at least one software-virtual hardware pair of (a), consisting of a software application and an application-specific virtual supercomputer for accelerating the software application is automatically created by a compiler from a single-threaded program;
- where for a function f in the single-threaded program, the compiler automatically creates a corresponding function called speculative_f, which is invoked instead of f during hardware execution, and which is identical to f except that speculative_f writes only into new register and memory state, which, at the beginning of the hardware execution of speculative_f, is set to be equal to register and memory state of the single-threaded program before executing f;
- where hardware execution of speculative_f proceeds as follows:
- if a soft error is detected during hardware execution of speculative_f, speculative_f is retried from beginning after discarding modifications to new register and memory state;
- otherwise, if a soft error is not detected during hardware execution of speculative_f, and speculative_f completes hardware execution, the new register and memory state is copied back to register and memory state of the single-threaded program;
- for allowing hardware execution to continue despite soft errors and for improving hardware reliability.