WARP life cycle

Hi. Can a warp be suspended for some reasons and replaced by another warp and after some time resumed?

In other words this situation is possible?

Elegible - Active - Suspended (Resident) - Elegible - Active

So the warp’s state is saved ?

Or the only possible scenario is:

Elegible - Active - End

Thx a lot.

txbob can probably provide a more detailed, all-encompassing, technically-solid answer,

“Can a warp be suspended for some reasons and replaced by another warp and after some time resumed?”

if by “suspended” you mean ‘simply not scheduled by the warp schedulers’, then yes

“So the warp’s state is saved ?”

warps are ‘loyal’ - new/ different warps are not assigned to the blocks of kernels already executing; other/ new warps do not enter the blocks of a kernel already executing; warps do not prematurely exit the blocks of kernels already executing; the same warps assigned to the blocks of a kernel, remain with that kernel block until its termination
from such a perspective, state saving is superfluous

“suspended” lika a thread in a CPU, Ready - Running - Ready - Running. You answer anyway is good for me ;)

Thx

a warp will be placed in a suspended (i.e. waiting and not currently able to be scheduled) state any time it hits a stall. stalls frequently occur due to latency associated with various operations, such as a memory read or a latency associated with an arithmetic operation. Once the stall is relieved, the warp will move from the “suspended” state to a “ready/able to be scheduled” state.

yes, the warp’s state is “saved” but this involves little or no effort by the GPU. For a further description of this, try here:

https://devtalk.nvidia.com/default/topic/838562/cuda-programming-and-performance/why-in-thread-context-switching-there-is-no-need-to-store-state-/

Thanks txbob. i’ve read the post that you have linked, but I have a new questions. The warp “suspended” doesn’t release its resources. right?

Correct. A suspended warp still has a register footprint that utilizes register space. This is the main resource I can think of.

Given that all functional units are pipelined, a “suspended” (i.e. stalled) warp may still have (previously issued) instructions, that are still executing at various stages of various pipelines, as well as still having outstanding memory transactions that may be in-flight.

So we have to be careful what we mean by “suspended”. I think it’s better to say either “stalled” or “ready to be scheduled”, i.e. available to the warp scheduler.

OK Thx a lot. We want create and synthetize an architecture GPU-Like on a FPGA and we want know if a warp can be subject to switch context. So a warp that is Active pass to a “Scheduled” - state, it’s state and resources are saved somewhere and its resources cen be assigned to another warp. Then, when the warp become Active, it restore its state and continue. But i’ve understand that its resources can be assigned to another warp…right?