Hablar de multiprocesamiento en pocas líneas es algo francamente difícil. Pero vamos a intentar explicarlo. Y vamos a tratar de aplicarlo a los Macs. Habitualmente se habla de paralelismo, o multiprocesamiento, al hecho de colocar varias CPUS en una (o varias) máquinas, con el objetivo de que las aplicaciones, ejecuten su código mucho mas rápido. Nos centraremos en el caso de máquinas individuales con una o varias CPUs. También se puede hacer paralelismo usando varias máquinas a la vez, que tengan una o varias CPUs, y unidas todas ellas, mediante una red de interconexión, mas o menos sofisticada. El caso mas conocido en el mundo Mac, es la famosa maquina de la Universidad Virginia Tech que tiene 2200 procesadores (1100 maquinas duales, unidas mediante una red InfiniBand). En nuestro caso, nos restringiremos a las máquinas uniprocesador con doble núcleo, biprocesadores con un solo núcleo, o biprocesadores con doble núcleo.

Aplicando esto al mundo Mac, estaríamos hablando de las máquinas Duales, y más recientemente las máquinas Dual Core. Las máquinas Duales de Apple tienen dos cpus. Y las recientemente presentadas Dual Core, tienen una CPU o dos, pero cada una de ellas a su vez, contiene lo que se conoce como doble núcleo (Dual Core en Ingles), que es (para entendernos) como si hubiera dos CPUs en un solo chip. De tal forma que si en este momento Apple tiene máquinas de este tipo con una y dos CPUs, es como si tuviera máquinas (de las antiguas) con dos y cuatro (de ahí lo de Quad) procesadores, respectivamente.

A partir de aquí uno se puede plantear varias cuestiones. La mas obvia es, bueno, pues me compro una máquina de este tipo (si puedo, claro), y a partir de ahora, mis programas irán mucho mas rápido.

¿Es esto cierto siempre? Lamentablemente, no.

Otra cuestión que podría surgir es algo así como ¿Que es mejor?, tener una CPU muy rápida, o tener dos CPUs mas lentas, pero claro, dos CPUs son siempre dos CPUs. Bueno pues en líneas generales, es (casi) siempre mejor tener una CPU mas rápida, aunque claro, tambien puedo tener dos CPUs muy rápidas. Habitualmente Apple (y otros fabricantes) han usado el tema del Multiprocesamiento, cuando, con una sola CPU, no tenían potencia suficiente, o no tenían nada nuevo que ofrecer a los potenciales compradores de ordenadores. Esto, es algo que esta pasando en este momento, ya que como muchos de vosotros sabéis, la ganancia en frecuencia que se esta dando en las CPUs es muy pequeña. Es muy difícil y muy caro, obtener chips que vayan mas (rápido), a nivel de frecuencia. Por otra parte, con algunos diseños concretos (no es el caso del PowerPC G5, por ejemplo), el subir la frecuencia no da un incremento de prestaciones. Bueno, pero eso daría para otro articulo.

Pues sí que estamos bien. Resulta que se me pide que hable de paralelismo, y no lo estoy dejando muy bien. Entonces, un usuario se pregunta ¿Me sirve para algo o no esto del paralelismo? Bueno, la respuesta es: depende. Depende de muchos factores. Vamos a ver algunos de ellos. Para hacernos una idea, vamos a ver, como se puede obtener mas velocidad, por el hecho de tener varias CPUs.

Básicamente (pero muy básicamente, eh!!), existen dos formas de hacer paralelismo. O bien consigo (si puedo, claro), dividir mi tarea o aplicación en trozos mas pequeños, que se puedan ejecutar todos a la vez, todos haciendo lo mismo. O bien, consigo que mi máquina, ejecute varias tareas (o aplicaciones), independientes entre si, todas ellas a la vez (y si puede ser), en distintas CPUs. En estos casos, el paralelismo es muy interesante.

En el primer caso, estaríamos hablando de Multiprocesamiento Simétrico. Ya os habréis dado cuenta, que el que tiene que dividir las tareas aquí, es el programador (también a veces lo hace el compilador, pero esto es otra historia). Lo que traducido, quiere decir que la aplicación tiene que estar pensada, para funcionar en paralelo. Y claro, muchas aplicaciones no lo están. Apple (supongo que os habéis dado cuenta), siempre utiliza los test sobre este tipo de máquinas, en aplicaciones muy, muy optimizadas. Si, todos estamos pensando en Photoshop, Final Cut, o aplicaciones de este tipo. Existen incluso test, para ver, si la máquina funciona bien, o no, en paralelo. En el caso del Mac, el mas conocido es CineBench.

Bueno, ¿Y que pasa si mi aplicación no esta optimizada?. ¿Ya no me sirve para nada una de estas máquinas?. Afortunadamente hay otro tipo de paralelismo, del que podemos extraer alguna que otra ventaja.

Existe la posibilidad, de tener varias tareas independientes ejecutándose a la vez. Y uno piensa, si las tareas son independientes, ¿Por que no ejecutarlas en diferentes CPUs? Esto a veces, se conoce como Multiprocesamiento Asimétrico. Pero claro, aquí tenemos un problema. ¿Quien se encarga de lanzar cada tarea a una CPU diferente? ¿Que criterios se siguen para poner la tarea en una CPU, u otra? Generalmente es el Sistema Operativo (S.O.) quien se encarga de hacer esto. En el caso del MacOSX, el operativo hace algo de esto, aunque ignoro hasta que punto lo hace bien (aunque sospecho, que no es demasiado eficiente) Ciertamente hay muy poca información sobre este tema. En el Mac, y de cara al usuario, la única información que hay es el "Monitor de Actividad". Si lo arrancáis y en el menú de "Visualización", seleccionáis la opción "Mostrar Monitores de CPU sobre las demás ventanas", y además tenéis una máquina Dual, pues veréis dos barras verticales que suben y bajan, en color azul, y que se supone que muestran la ocupación de cada uno de los procesadores del sistema. Ciertamente, siempre suben y bajan a la vez, pero por algunas pruebas que he hecho (que se salen de los objetivos de este articulo), pues no creo que funcione demasiado bien). ¿Y que mas? ¿Que mas mecanismos a nivel de usuario tiene el S.O. X para tratar con este tipo de paralelismo? Por ejemplo ¿Es posible lanzar una tarea a un procesador concreto? La realidad (nos guste o no), es que el OS X no tiene (al menos a nivel de usuario) prácticamente ninguno de los mecanismos de este tipo. Existen otro tipo de máquinas que si los tienen. Por ejemplo, las SGI, si tienen a nivel de Sistema Operativo llamadas de usuario (como el top, o el runon) que permiten ver que trabajos ejecuta cada procesador o lanzarle una tarea concreta a un determinado procesador. Pero claro, este tipo de máquinas, tanto por sus características como por su precio (a veces exagerado), juegan en otra liga. Por tanto, en el S.O., Apple se tiene que poner un poco las pilas si quiere seguir usando el tema de los procesadores con varios núcleos (o MultiCore). Yo creo que es algo que hará, poco a poco segun vayán apareciendo nuevas versiones del X.

Bueno, hasta ahora hemos hablado de software especial u optimizado, bien a nivel de aplicación, o bien a nivel de S.O. Pero que pasa con el hardware. ¿Es necesario a nivel de hardware usar mecanismos especiales para este tipo de máquinas? ¿Que mecanismos especiales? ¿Llevan los Macs algún tipo de mecanismo especial para ello? Vayamos por partes: fijémonos en lo siguiente. Si estamos diciendo que las CPUs funcionan a la vez, resulta que el acceso a los datos (o mas concretamente a memoria), también se va a efectuar a la vez. Sobre todo si lo que queremos es acceder a memoria principal o en general, a los buses. Existen muchos y diversos mecanismos para aliviar este problema. El mas sencillo de ellos es usar memorias cache especificas para cada procesador (o para cada núcleo). El Mac lleva este mecanismo, porque lo llevan las CPUs que incorpora. Lleva también algún mecanismo de arbitraje de acceso a los buses, pero poco mas. Existen mecanismos sofisticadísimos (y carísimos), que permiten obviar este problema hasta un número considerable de procesadores. Pero si Apple los diseñara y usara en sus placas, un Quad no valdría 3000€ sino mucho mas. Nuevamente, pongo el caso de nuevo de SGI, que si incorpora alguno de estos mecanismos, pero claro, los cobra, bien cobrados. Mi impresión particular, es que no creo que Apple sea capaz de dotar a sus máquinas con mas de 4 CPUs duales (o sea, 8 cores). Pero bueno, algo es algo. Y por lo que vale un Quad, pues no se puede pedir mas.

Bueno, y cual es la conclusión de todo esto. La conclusión sería que de cara a un usuario profesional (o no tan profesional) no se adquiriera un Dual, salvo que se supiera que las aplicaciones que use, dieran un buen rendimiento en paralelo. Pero la realidad, es que aparejado a las máquinas PowerMac de Apple, hay otra serie de alicientes, que pueden hacer que el usuario las compre, sobre por ejemplo un iMac, aunque no use la capacidad Dual. Ejemplos: son mucho mas expandibles, ya que por ejemplo es mucho mas fácil poner diversas placas PCI, o es posible poner mas discos duros, o los procesadores son mas potentes, o…un largo etcétera.

Puedes discutir este artículo en los foros