Squid is not smart enough for this. As the squid documentation says:
Squid treats all round-robin parents
equally. It is not currently possible
to, e.g., forward 25% of the requests
to one parent and 75% to another.
IPVS and haproxy have several algorithms available like weighted round-robin, least connections, and so on. But they don't have a built in mechanism to do this by CPU load on the real servers.
On one IPVS installation that I manage, we have a cronjob that SSHes into each server and grabs the load from /proc/loadavg. Based on the load, it calculates an appropriate weight. Using the ipvsadm command, the weight for that real server is then tweaked. Works great and causes almost equal loads on each server.
Keep in mind that load isn't the only thing to look at. Average response time may be more accurate representation of user experience.