A host computer for virtualizing a target multicore processor, the host computer comprising: a host memory including a first section of memory storing a virtual time object , and a second section storing a virtual machine, VM, , wherein the VM includes target code comprising a plurality of threads, wherein each thread includes a plurality of instructions configured to execute on the target multicore processor; and a host central processing unit, CPU, configured to execute the VM to virtualize the target multicore processor, the VM being configured to: execute the plurality of threads in parallel on corresponding virtual cores , including a first thread having a first plurality of instructions executing on a first virtual core and a second thread having a second plurality of instructions executing on a second virtual core; assign a designation to the first virtual core to increment the virtual time object by a first count of the first plurality of instructions executed in the first thread over a first duration; move the designation to the second virtual core in response to detecting an event that defines an end of the first duration; and increment, by the second virtual core, the virtual time object by a second count of the second plurality of instructions executed in the second thread over a second duration; wherein the event includes a halting of execution by the first virtual core ; wherein the first section of the host memory is mapped to a shared cache level for storing the virtual time object . a host memory including a first section of memory storing a virtual time object , and a second section storing a virtual machine, VM, , wherein the VM includes target code comprising a plurality of threads, wherein each thread includes a plurality of instructions configured to execute on the target multicore processor; and a host central processing unit, CPU, configured to execute the VM to virtualize the target multicore processor, the VM being configured to: execute the plurality of threads in parallel on corresponding virtual cores , including a first thread having a first plurality of instructions executing on a first virtual core and a second thread having a second plurality of instructions executing on a second virtual core; assign a designation to the first virtual core to increment the virtual time object by a first count of the first plurality of instructions executed in the first thread over a first duration; move the designation to the second virtual core in response to detecting an event that defines an end of the first duration; and increment, by the second virtual core, the virtual time object by a second count of the second plurality of instructions executed in the second thread over a second duration; execute the plurality of threads in parallel on corresponding virtual cores , including a first thread having a first plurality of instructions executing on a first virtual core and a second thread having a second plurality of instructions executing on a second virtual core; assign a designation to the first virtual core to increment the virtual time object by a first count of the first plurality of instructions executed in the first thread over a first duration; move the designation to the second virtual core in response to detecting an event that defines an end of the first duration; and increment, by the second virtual core, the virtual time object by a second count of the second plurality of instructions executed in the second thread over a second duration; <EOS>