El cómputo paralelo, como hemos estado discutiendo a lo
largo del semestre, es una de las tendencias con mayor importancia en esta
década. Existen múltiples plataformas de hardware que soportan el cómputo
paralelo. Estas plataformas están en uso desde el año 2004. Sin embargo, el
software generado en años anteriores (incluso el actual) no está pensado para
trabajar de forma paralela.
El problema radica principalmente en que el paralelismo, a
pesar de que es posible enseñarlo en las escuelas con piezas de hardware
económicas (laptops, tarjetas multinúcleo, GPU’s, entre otros), no se le ha
dado la importancia que requiere para su desarrollo.
Una de los grandes campos de paralelismo a nivel mundial (y
comercial) es el mercado de los videojuegos. Cada día, vemos cómo empresas como
Microsoft, Sony, entre otros, compiten arduamente por ofrecer a los fans una
plataforma que les brinde mejor desempeño y videojuegos cada vez más
específicos para satisfacer las expectativas de los mismos jugadores. Este
mercado no sería tan fuerte, de no ser por la gran capacidad de cómputo
paralelo que se realiza a nivel de hardware y a nivel de software en las
consolas.
Los problemas crecen conforme las ambiciones son mayores.
Dado a que gran cantidad de segmentos de código han sido elaborados de forma secuencial,
pensando en que el desarrollo de procesadores más rápidos radicaba en la
frecuencia de reloj, la forma más “rápida”
de paralelizar el código es ver qué segmentos son candidatos a paralelizado.
Posteriormente, se deben hacer pruebas para verificar que no haya bugs. Esta
etapa, sin duda alguna, es la más difícil y tediosa de todo el proceso.
A veces, nos preguntamos a nosotros mismos por qué no
reescribir el código, tomando en cuenta la capacidad de paralelismo que se
tiene. Sin embargo, abrimos un archivo que tiene millones de líneas de código
(como el de un kernel, o un sistema operativo completo), y vemos que es muy
mala idea. Especialmente, en los códigos que corren en servidores bancarios, o
gubernamentales.
Para estos casos, lo mejor que se ha logrado es el
desarrollo de módulos que, con simples instrucciones, se paralelizan ciertas
partes del código. Un ejemplo de estos módulos es OpenMP, que con directivas a
compilador (pragmas), se pueden paralelizar segmentos de código, ciclos for,
entre otras cosas.
El paralelismo es un gran reto, tanto a nivel de desempeño
del hardware, como el desarrollo del software especializado. Y, dada la
importancia que esto tiene, es imperioso que se acepte el reto, y comencemos a
ser más eficientes a la hora de programar, tomando en cuenta el paralelismo
como herramienta fundamental.
No hay comentarios.:
Publicar un comentario