Distribución de los procesos

Hola, tengo un ordenador que tiene un procesador de doble núcleo. Estoy aprendiendo a usar matlab y el otro día me hice un programita que era básicamente un bucle muy largo. Al ejecutar el programilla, además del propio matlab y el editor tenía el google chrome ejecutándose en paralelo y el administrador de tareas para ver el rendimiento, que todavía no sé hacer eso con matlab. La CPU estaba al 50%, esto es un núcleo a tope y otro casi sin usarlo. Tengo entendido que a mayor frecuencia y mayor número de bits menor tiempo de ejecución de los programas, pero todo lo que nos venden es que con 2 núcleos mucho más todavía.
Para ese programilla no me importa mucho que use sólo un núcleo porque sólo me costaba 4-5 minutos, pero en breves tendré que hacer cosas de más peso, del estilo de elementos finitos y cálculo numérico y me gustaría saber si con el matlab o de alguna forma puedo usar los 2 núcleos para que trabajen a la vez en lo mismo, y aunque no recorte el tiempo de proceso a la mitad por lo menos reducirlo bastante.
También me gustaría saber si eso se puede extender a n núcleos de la misma manera
Gracias por su tiempo
Respuesta
1
Tu pregunta está relacionada al tema de computación paralela, por si es de tu interés conocer más, para investigarlo posteriormente.
Para empezar ¿qué sistema operativo estás utilizando?
La pregunta se debe a que el sistema operativo tiene mucho que ver con tu duda, en este caso, si el sistema sabe aprovechar los 2 núcleos de tu computadora, entonces este será el encargado de dristribuir las aplicaciones en los precesadores existentes.
Pero el sistema operativo no es el único encargado de esto, porque lo único que puede hacer es mandar un proceso a un núcleo y otro proceso a otro núcleo. También influye la aplicación que utilizas, esta deberá estar preparada para funcionar con varios núcleos, desconozco si matlab cuenta con este soporte.
Y finalmente, depende de ti como programador y del tipo de programa que estas realizando. Puedes hacer programación paralela siempre y cuando los operaciones que realizas sean independientes y no dependan unas de otras, ya que si tu programa forzosamente lleva una secuencia, no importa que tengas n núcleos, sólo podrás utilizar 1 núcleo.
¿Cuáles son tus conocimientos sobre computación paralela?
¿Es obligatorio que realices tu programa en matlab?
¿Qué tipo de programa estas realizando?
Al aclarar algunas de estas dudas, se te podría proporcionar más información.
Hola, gracias por responder tan pronto.
Estoy usando windows 7, de 64 bits. El matlab es de 64 también, y no sé si puede hacer eso que comentas de computación paralela. El matlab estoy aprendiendo a usarlo porque todo el mundo usa matlab en mi entorno y es necesario que todos acabemos usando archivos de los demás, incluso de diferentes proyectos, y por eso usamos todos la misma plataforma.
El programa en cuestión es muy sencillote, de hecho matlab tiene una función que es específica para lo que quería hacer, pero no me vale saber hacer cosas concretas, necesito cosas generales y reutilizables para trabajar menos. De momento estaba aprendiendo a hacer bucles, que me imagino que por eso sólo usa uno de los 2 núcleos. Como este bucle le llevaba mucho tiempo, y repito que lo hice para aprender a hacer un bucle, ya que es el método menos eficiente con diferencia para mi problema me entró la curiosidad de saber cómo se reparten los procesos y si yo puedo hacer algo para repartirlos como a mí me interese. No sé nada de computación en paralelo, pero fijo que en el futuro me interesa ver si puedo hacer algo de eso, porque voy a tener que hacerme programillas del tipo de Newton- Raphson, Gauss- Seidel, Runge- Kutta de 4º orden y todos esos métodos que usamos los ingenieros, y los de clase me valía con los de la calculadora o casi a mano, porque no usábamos matrices más que de 3x3 o 4x4, pero ahora que tengo redes de cientos o miles de nudos tengo que optimizar y exprimir todo al máximo.
No sé si sabes de este tema, pero si no es el caso, ¿podrías decirme algún libro o página web?
Muchas gracias por tu tiempo
Como te había comentado anteriormente, el sistema operativo es el encargado de distribuir los procesos en los diferentes núcleos o procesadores, por lo que el sistema operativo no te ayuda a lo que tu deseas, ya que tu programa en matlab siempre estará ejecutándose en un núcleo.
Lo que necesitas es hacer tus programas de forma paralela, para realizar programación paralela, cumunmente se utiliza MPI, desconozco sobre algún libro o sitio web que hable sobre esto, pero buscando en google por "matlab con mpi" supongo que encontraras teoría y ejemplos.
La programación paralela es similar a la programación concurrente, no se si ya hayas visto algo sobre esto o resuelto problemas similares tales como el problema de los comensales, también debes de tener el entendimiento o conocimiento sobre sincronización, semáforos y monitores. Si no cuentas con estos conocimientos previos, pudiera resultarte un poco difícil la programación paralela, si ya sabes de esto, te resultará muy fácil.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas