Improving Hardware Multithreading In General Purpose Graphics Processing Units