1. A method of sampling instructions executing in a multi-threaded processor comprising: selecting an instruction for sampling; storing sampling information relating to the instruction; determining whether the instruction includes an event of interest to a particular thread within which the instruction is executing; and reporting the instruction to the particular thread when the sampling information includes an event of interest.