1. A method comprising: managing, in the scoreboard, threads for execution of threads by a plurality of execution units; keeping track of threads received by the scoreboard that have not yet finished executing; clearing threads that have been executed by the execution units from the scoreboard; enabling the order of thread execution to be changed to any order so long as each thread that depends on completion of other threads arrives at a scoreboard after the other threads; receiving thread identifiers for executed threads, retiring the thread identifiers of executed threads and enabling threads awaiting execution of a dependency to snoop thread identifiers of executed threads; and enabling each of said threads to manage its own dependencies.