Methods and apparatus for multi-threading on a simultaneous
multi-threading processor are provided. The methods and apparatus
described herein increase computational throughput by launching two or
more computational threads to perform the same algorithm using two
different software segments. One of the software segments is coded to
perform the algorithm using primarily a first processor resource (e.g., a
floating point unit). Another software segment is coded to perform the
same algorithm using a primarily a second processor resource (e.g., an
integer execution unit). A workload requiring execution of the algorithm
is allocated to the threads in a balanced manner (e.g., faster code
segments are given more of the workload). The threads use different
processor resources, therefore the threads are able to execute in
parallel in an efficient manner. When each of the threads completes
execution, the results may be synchronized.