Utilizar eficientemente un sistema SMP puede llegar a ser un tema *muy*
complejo. Pero a grandes rasgos efectivamente lo que tienes que hacer es
dividir tu programa en varios procesos o hilos (Que no son lo mismo y en
esta diferencia es en donde comienza la complejidad del asunto) y el
kernel se encarga de asignar cada uno a un procesador diferente. Hay que
tomar en cuenta desde luego que los procesos o hilos de tu programa no van
a ser los unicos ejecutandose en el sistema asi que es posible que
terminen (Al menos en un momento dado) ejecutandose de cualquier forma en
el mismo procesador.
Es aqui en donde entran las bibliotecas especializadas de SMP tanto para
SMP local como en red. Ahi puedes especificar prioridades, afinidades de
procesador, etc
Un buen punto para comenzar, si bien algo viejo ya:
http://www.faqs.org/docs/Linux-HOWTO/SMP-HOWTO.html
Otro buen doc:
http://www.ibm.com/developerworks/library/l-linux-smp/
Finalmente, busca en Google "linux smp programming" para encontrar muchas
referencias utiles.