sábado, 29 de agosto de 2015

El paralelismo y su discreción en nuestra vida


A pesar de que el artículo es un tanto viejo, tiene una buena redacción acerca de la tendencia que tuvo el paralelismo computacional. Y no se equivocaba el autor al respecto. El paralelismo hoy en día es importante para el desarrollo de infinidad de aplicaciones de software.
Los usuarios no se percatan de ellos, pero el paralelismo está vigente en muchos de los servicios web que utilizamos, como youtube, facebook, outlook, entre muchos otros. Otro ejemplo de paralelismo importante es la industria del videojuego. ¿Cómo es posible que puedas jugar Halo con tantos bots, escuchar la música de ambientación, e incluso jugar contra jugadores humanos? La respuesta es sencilla: paralelismo.
Como menciona el autor, parte fundamental del paralelismo actual se debe a la fabricación de procesadores de multinúcleo, ya que sin ellos, la gente no tendría acceso a muchas de las aplicaciones mencionadas, y tendría que estarse capacitando para poder utilizar los clusters, cuyo acceso sólo lo tienen (y lo seguirán teniendo) las grandes empresas y los gobiernos más fuertes, económicamente hablando.
Es bien cierto que mucha gente se basa en algunas cosas para decir “yo compro esta máquina”. Y una de ellas es el procesador que tienen. No saben qué significa que tengan 4 núcleos a ciencia cierta, pero eso les indica que la computadora es capaz de realizar más tareas en un periodo de tiempo. Sin embargo, de nada sirve tener una computadora super buena, con 16 núcleos, si las aplicaciones no soportan esta arquitectura, y si no son diseñadas adecuadamente para ella.
Por esto, como programadores, sin importar tendencia, objetivo, preferencia en cuanto a lenguaje, ambiente de programación, entre otros; debemos siempre tener en cuenta que ya es posible realizar paralelismo, y que esto nos dará la ventaja sobre los programadores que están aferrados a seguir programando de manera secuencial para un solo núcleo. El paralelismo le dará un grado más de escalabilidad a nuestro trabajo, y con algo de suerte, nuestros clientes no nos estarán pidiendo que volvamos a desarrollar el mismo programa (que nos costó 3 años de arduo trabajo) para una computadora con mayor capacidad, simplemente porque el hardware ya no es compatible con el software.
Y, a decir verdad, no es necesario que estemos casados con una tecnología de paralelismo. Podemos seguir solteros o ser polígames, y probar con muchas y diferentes tecnologías, como MPI para C, OpenMP, Pthreads, Java threads, Kuda, entre muchas otras opciones, que siempre tendrán ventajas respecto al enfoque que les demos, y que nunca está por demás ir a la vanguardia, sin la necesidad de tirar a la basura lo que hemos programado hace unos años.

domingo, 23 de agosto de 2015

The free lunch is over... but dinner has been ordered.

Multicore processors sound like the hit of the moment. However, these technologies are quite old. The first multicore processors had been designed on 2004 approximately. Over 10 years! That’s significant for a “modern” technology. By this, most people believe that computers can run much more programs in lower time. And their intuition could be right unless the fact that they don’t. Why this happens? The answer is simple: programs are not designed to be run on more than 1 processor at once.

This problem has created users’ disappointment because we, as users, want speed, effectiveness, reliability, and so many other characteristics from a computer. And this expectations increase on quantity and quality every year, due to marketing, and some other techniques sellers use to convince us to buy a brand-new computer every year (at least). 

As we can read on Suttler’s article, multicore processors have substituted the “Moore’s law”. Hardware engineers are not spending more time on researching how to increase clock speed because, no matter how simple or complex the processor architecture is, the processor dissipates more energy on heat proportionally to the clock speed. In other words, the faster the clock is, the more heat the processor dissipates. And, of course, heat can damage performance, even destroy the processor. This is one of the main reasons that clock speed is not a task to improve.

Nowadays, we use computers that have multicore processors. And this fact works hand-to-hand with hyperthreading and cache-size-increasing trends. As Suttler says: if we increase the size of cache blocks, we can avoid more “miss” events and change them for “hit” events. Then, the second technique in order to use all functionality given by multicore processors is: parallelism.

However, parallelism is not a common way to program, and this is due to its complexity. But, this is not an excuse to keep programing on single-core based way, because, when it comes to performance, the only way to speed up programs nowadays is by learning to parallelize our programs, and allow the multicore processors to use they physical advantages, where and when possible.

Programmers can keep programming under single-core layouts. But, if they want to have a better performance of their own codes, they must learn how to split processes, and exploit most of the resources of the new systems.

If we can manage 2 cores, there is a change that we can handle more cores, and give our users the possibility to do much more things at a time.

Notes:

A “hit” event occurs when the piece of data that the processor is waiting for is already loaded on cache.

A “miss” event occurs when the piece of data that the processor is waiting for is not located on cache, and the system must search for it on the principal memory or the hard drive, and then fetch it from that location.

Suttler, H (Aug, 2009). The Free Lunch is Over. Retrieved on August 23, 2015, from http://www.gotw.ca/publications/concurrency-ddj.htm

viernes, 14 de agosto de 2015

Entrada 1: comienza la instancia

  • Mi nombre es Pedro Cámara Martínez. Soy alumno de la carrera de Ingeniería en Sistemas Digitales y Robótica, de noveno semestre. Soy candidato a graduar. En este semestre cursaré únicamente 4 materias, ya que cursé diferentes materias en los 4 veranos de mi carrera.

  • Mis expectativas de la materia Programación multinúcleo son:
    • Aprender a manejar eficientemente los recursos del procesador.
    • Complementar mis temas de este rubro con mi materia de multiprocesadores (hardware).
    • Divertirme aprendiendo nuevos lenguajes de programación.
    • Tener una experiencia más con la programación concurrente.
    • Aprender a separar la programación secuencial y convertirla eficientemente en programación paralela. 
  • Mis pasatiempos e intereses personales son:
    • Escultismo
    • Campismo
    • Natación
    • Música
    • Tango
  • Libros, música, películas, programas de televisión, etc. que he recientemente disfrutado:
    • Libros:
      • Las crónicas de Narnia: el caballo y el niño.
      • Las crónicas de Narnia: el príncipe Caspian.
      • Las crónicas de Narnia: el viajero del Alba.
      • Fable: The Barlverine Order.
      • Assassin's Creed: Brotherhood (hay libro del juego XD). 
    • Música:
      • Los pericos.
      • Los cadillacs.
      • Nightwish.
      • Sonata Artica.
      • Il Divo.
      • Carlos Di Sarli.
      • Juan Carlos Caceres.
    • Programas de televisión:
      • Breaking bad.
      • Attack on Titan.
    • Películas:
      • Los minions.
      • No se metan con el Zohan.
      • Star Wars
      • El Señor de los Anillos.