Me encuentro escribiendo grandes e interesantes noticias para este blog, luego de un tiempo de profunda meditación :-)
En los próximos días se publicarán varias.
¡ Salud !
Programación en Revolución
martes, 10 de mayo de 2016
miércoles, 18 de julio de 2012
Nota Corta: El mejor IDE para C/C++
Después de mirar muchas de las alternativas libres para programar en C/C++ creo que sin duda alguna el mejor es Emacs. A menos que el proyecto sea inmensamente grande, no creo que pueda encontrarse una mejor opción. Es altamente personalizable, y tiene varios plugins para otros lenguajes, aunque ya esa es otra historia.
Los invito a instalarlo en caso de que no lo tengan, y a usarlo. Al principio será incomodo, pero al poco tiempo se acostumbrarán.
Adicional, les dejo la referencia rápida a Emacs, un triptico que los sacará de problemas cuando olviden algún hotkey.
Enlace de descarga: http://refcards.com/docs/gildeas/gnu-emacs/emacs-refcard-a4.pdf
domingo, 20 de mayo de 2012
Top lenguajes de programación
Buscando información sobre la popularidad de los lenguajes de programación en las comunidad de programadores y científicos me encontré con la siguiente página web:
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
La cual utiliza sofisticados algoritmos de exploración y explotación de datos extraídos de los principales motores de búsquedas, y por ende, de páginas, foros y blogs en la red para hacer un bosquejo estadístico de que lenguaje de programación es más popular que cual.
A continuación extraigo una imagen en donde se muestran series temporales en donde se destacan el top 10 de los lenguajes de programación mas populares:
Si ... pero ¿que significa que un lenguaje de programación se haga popular o deje de ser-lo? ¿afecta esto al programador estándar?
Pues bien, la popularidad se traduce a larga escala en comunidades crecientes, y las comunidades se traducen en soporte y desarrollo. Si un lenguaje decae, puede significar que programadores noveles migran a otros lenguajes, o que hay poca actividad en la comunidad. En general esto no afecta al programador experto, pero si al novato, que necesitará de una comunidad sólida para soportarse y aprender más.
sábado, 26 de noviembre de 2011
CUDA: Un lenguaje de programación para cálculo científico.
1. ¿Que es CUDA?
CUDA proviene de las siglas de Compute Unified Device Architecture (Arquitectura de Dispositivos de Cómputo Unificado), y podemos pensar en este como una variante de los lenguajes de programación C/C++, desarrollado con el propósito de aprovechar las capacidades de cálculo de los procesadores en tarjetas gráficas (GPU's) nVidea, aprovechándose de los multiplicidad de núcleos en estos para utilizar el paradigma de la programación en paralelo.
2. ¿Solo una variante de C/C++?
Aunque el compilador de CUDA (nvcc) como hemos mencionado anteriormente, es muy parecido a C (gcc en linux), actualmente existen usa serie de wrappers (adaptadores de código) para utilizar CUDA desde python (PyCUDA), Fortran y Java, lo que abre ampliamente su capacidad de difusión en las comunidades de programadores.
3. ¿Cuales son las ventajas de programar en CUDA?
Puesto que la filosofía de CUDA radica en la explotación del paralelismo que ofrecen los múltiplos nucleos en las GPU's (nVidea), lo que se traduce en el lanzamiento de un gran número de hilos simultaneamente, tenemos que CUDA es realmente eficiente en el análisis y simulación de sistemas de muchas partículas, y en general, en sistemas complejos, donde el número de agentes interactuando junto con la complejidad de sus interacciones hacen que el paralelismo como paradigma de programación sea el mas adecuado. Un ejemplo de esto puede verse en el siguiente video, en donde se muestra la simulación de multiples agentes interactuando (entes biológicos), lo que sería imposible realizar con un computador estándar sin GPU's.
Más aún, en algoritmos que requieren múltiples repeticiones para conseguir el resultado buscado, p.e., algoritmos de optimización combinatoria como el algoritmo de recosido simulado, puede ser de mucha ayuda, colocando en lugar de varias repeticiones, muchas simulaciones en paralelo con condiciones iniciales aleatorias.
4. ¿Como funciona CUDA y en general los lenguajes orientados al aprovechamiento de los procesadores en las GPU's?
De manera simple, puede resumirse su funcionalidad en los siguientes 4 pasos:
a. Se copian los datos de la memoria principal a la memoria de la GPU
b. La CPU encarga el proceso a la GPU
c. La GPU lo ejecuta en paralelo en cada núcleo.
d. Se copia el resultado de la memoria de la GPU a la memoria principal
5. ¿Es este tipo de sistemas rentable?
Los costos de un servidor de cálculo científicos son exorbitantes, superan generalmente los 50.000 $ sumando a ello, el coste de refrigerantes, y las estaciones desde la que se podrá acceder a este tipo de servidor. Mas costoso aún es construir un cluster descente, pues el número de equipos necesarios para obtener resultados descentes es alto, además que dichos equipos deben ser suficientemente buenos para que el rendimiento del cluster en general sea alto.
Con una GPU básicamente podemos convertir cualquier equipo, en una estación de cálculo científico. El costo de una tarjeta nVidea para dicha tarea oscila entre 1000 – 4000 $.
6. Limitaciones
Uno de los problemas que puede aparecer al programar en CUDA es la aparición de un “cuello de botella” entre la CPU y la GPU por el ancho de banda de los buses y sus latencias, i.e., puede que el CPU del equipo, no envíe la información a procesar al GPU con sufiente rapidez, desaprovechando considerablemente la capacidad de cálculo de este último.
7. ¿Que tarjetas soportan CUDA?
Funciona en todas las GPU nVidia desde la serie G8X en adelante, incluyendo GeForce, Quadro y la serie Tesla.
8. Libros sobre CUDA
CUDA proviene de las siglas de Compute Unified Device Architecture (Arquitectura de Dispositivos de Cómputo Unificado), y podemos pensar en este como una variante de los lenguajes de programación C/C++, desarrollado con el propósito de aprovechar las capacidades de cálculo de los procesadores en tarjetas gráficas (GPU's) nVidea, aprovechándose de los multiplicidad de núcleos en estos para utilizar el paradigma de la programación en paralelo.
2. ¿Solo una variante de C/C++?
Aunque el compilador de CUDA (nvcc) como hemos mencionado anteriormente, es muy parecido a C (gcc en linux), actualmente existen usa serie de wrappers (adaptadores de código) para utilizar CUDA desde python (PyCUDA), Fortran y Java, lo que abre ampliamente su capacidad de difusión en las comunidades de programadores.
3. ¿Cuales son las ventajas de programar en CUDA?
Puesto que la filosofía de CUDA radica en la explotación del paralelismo que ofrecen los múltiplos nucleos en las GPU's (nVidea), lo que se traduce en el lanzamiento de un gran número de hilos simultaneamente, tenemos que CUDA es realmente eficiente en el análisis y simulación de sistemas de muchas partículas, y en general, en sistemas complejos, donde el número de agentes interactuando junto con la complejidad de sus interacciones hacen que el paralelismo como paradigma de programación sea el mas adecuado. Un ejemplo de esto puede verse en el siguiente video, en donde se muestra la simulación de multiples agentes interactuando (entes biológicos), lo que sería imposible realizar con un computador estándar sin GPU's.
Más aún, en algoritmos que requieren múltiples repeticiones para conseguir el resultado buscado, p.e., algoritmos de optimización combinatoria como el algoritmo de recosido simulado, puede ser de mucha ayuda, colocando en lugar de varias repeticiones, muchas simulaciones en paralelo con condiciones iniciales aleatorias.
4. ¿Como funciona CUDA y en general los lenguajes orientados al aprovechamiento de los procesadores en las GPU's?
De manera simple, puede resumirse su funcionalidad en los siguientes 4 pasos:
a. Se copian los datos de la memoria principal a la memoria de la GPU
b. La CPU encarga el proceso a la GPU
c. La GPU lo ejecuta en paralelo en cada núcleo.
d. Se copia el resultado de la memoria de la GPU a la memoria principal
5. ¿Es este tipo de sistemas rentable?
Los costos de un servidor de cálculo científicos son exorbitantes, superan generalmente los 50.000 $ sumando a ello, el coste de refrigerantes, y las estaciones desde la que se podrá acceder a este tipo de servidor. Mas costoso aún es construir un cluster descente, pues el número de equipos necesarios para obtener resultados descentes es alto, además que dichos equipos deben ser suficientemente buenos para que el rendimiento del cluster en general sea alto.
Con una GPU básicamente podemos convertir cualquier equipo, en una estación de cálculo científico. El costo de una tarjeta nVidea para dicha tarea oscila entre 1000 – 4000 $.
6. Limitaciones
Uno de los problemas que puede aparecer al programar en CUDA es la aparición de un “cuello de botella” entre la CPU y la GPU por el ancho de banda de los buses y sus latencias, i.e., puede que el CPU del equipo, no envíe la información a procesar al GPU con sufiente rapidez, desaprovechando considerablemente la capacidad de cálculo de este último.
7. ¿Que tarjetas soportan CUDA?
Funciona en todas las GPU nVidia desde la serie G8X en adelante, incluyendo GeForce, Quadro y la serie Tesla.
8. Libros sobre CUDA
[1] Janson Sanders and Edward Kandrot, CUDA by Example: An Introduction to General-Purpose GPU Programming, Addison-Wesley, 2010.
http://www.amazon.com/CUDA-Example-Introduction-General-Purpose-Programming/dp/0131387685/ref=sr_1_1?ie=UTF8&qid=1322370279&sr=8-1
[2] Rob Farber, CUDA Application Design and Development, Morgan Kauffman Ed., 2011.
http://www.amazon.com/CUDA-Application-Design-Development-Farber/dp/0123884268/ref=sr_1_2?ie=UTF8&qid=1322370279&sr=8-2
[3] David B. Kirk and Wen-mei W. Hwu, Programming Massively Parallel Processors: A Hands-on Approach (Applications of GPU Computing Series), Morgan Kauffman Ed., 2010.
http://www.amazon.com/Programming-Massively-Parallel-Processors-Hands-/dp/0123814723/ref=sr_1_3?ie=UTF8&qid=1322370279&sr=8-3
viernes, 16 de septiembre de 2011
Un curso de Algoritmos (en inglés)
Aprovecho para escribir este post porque me he dado a la tarea de revisar un poco la literatura sobre algoritmos en ciencias de la computación, encontrando un par de notas muy bien escritas, por lo que quise compartirla con mis amigos y seguidores.
1. Algorithms Course Materials (by Jeff Erickson)
Contenido (Lecture Notes)0. Introduction, history, and course goals
Recursion
1. Simplify and delegate
2. Fast Fourier transforms
3. Backtracking
4. Fast exponential-time algorithms
5. Dynamic programming
6. Advanced dynamic programming tricks
7. Greedy algorithms
8. Matroids
Randomization
9. Nuts and bolts (randomized quicksort)
10. Treaps and skip lists
11. Tail inequalities
12. Uniform and universal hashing
13. Randomized minimum cut
Amortized analysis
14. Aggregation, taxation, potential
15. Scapegoat trees and splay trees
16. Maintaining disjoint sets ("union-find") — includes O(α(n)) amortized analysis
Basic graph algorithms
17. Representations, traversal
18. Minimum spanning trees
19. Single-source shortest paths
20. All-pairs shortest paths
Flows and cuts
21. Maximum flows and minimum cuts
22. Maximum flow algorithms
23. Applications of maximum flow
24. Extensions of maximum flow
Linear programming
25. Definitions and duality
26. The simplex algorithm
Lower bounds
27. Decision trees, leaf counting
28. Adversary arguments ("n-card monte")
29. NP-hardness
30. Approximation algorithms
Appendix
II. Solving recurrences
I. Induction proofs
Nota: El curso tiene una gran cantidad de problemas propuestos (homeworks), te recomiendo que si te interesan los tópicos que en este de desarrollan visites: http://www.cs.uiuc.edu/~jeffe/teaching/algorithms/ para terminar de descargar toda la información correspondiente al curso.
2. Fundamental Algorithms Lecture Notes (by Chee Yap)
Nota: Muy parecido al anterior.
3. Lecture Notes for Algorithm Analysis and Design (Sandeep Sen)
Nota: Bastante completo, lo recomiendo ampliamente.
4. Introduction to Computer Algorithms: Lecture Notes (Grzegorz Malewicz)
Nota: Interesante, aunque pienso que le faltaron un par de temas importantes.
Si te ha gustado este artículo, compártelo en facebook, twitter, google+, coméntalo, envíalo por correo, y si quieres mas información, pídela. Si no te gusta, critícalo. Tu tienes completo control sobre los contenidos de este blog.
martes, 30 de agosto de 2011
Video Tutoriales de C++
Investigando sobre la existencia de cursos y video-tutoriales de C++ en la web, encontré una colección de videos particularmente buenos. Recomiendo altamente a todos los interesados en aprender C++ desde cero el siguiente curso:
Primer Capítulo:
Podrás encontrar todos los demás capítulos en:
Recomendación:
Te recomiendo que veas al menos los primeros 4 capítulos, pues aunque al principio puede parecer un poco aburrido, va mejorando con el pasar de los capítulos.
Si te ha gustado este artículo, compártelo en facebook, twitter, coméntalo, si quieres mas información, pídela. Si no te gusta, critícalo. Tu tienes completo control sobre los contenidos de este blog.
Fuente: http://progrevo.blogspot.com
domingo, 28 de agosto de 2011
Un problema de teoría de números
En estos días propuse un problema de teoría de números elemental a un par de amigos (especialistas en el área). La cuestión fue muy cómica pues, aunque todos me decían que el problema era muy fácil nadie me daba la respuesta. Pues bien, yo sabía que lo podía resolver en cuestión de dos minutos a lo más. Pasaron los días y se cumplió una semana, y nada que me daban la respuesta. Pues bien, me animé a resolverlo.
El problema en cuestión era:
Una terna Pitagórica es un conjunto de tres números naturales a<b<c, para la cual:
Hay solo una terna Pitagórica para la cual a+b+c=1000. Encuentre el producto a*b*c.
He aquí mi elegante solución, llevada a cabo con ayuda de Python
El problema en cuestión era:
Una terna Pitagórica es un conjunto de tres números naturales a<b<c, para la cual:
a2 + b2 = c2
Hay solo una terna Pitagórica para la cual a+b+c=1000. Encuentre el producto a*b*c.
He aquí mi elegante solución, llevada a cabo con ayuda de Python
(dale click a la imagen para obtener una mejor resolución)
Hasta el día de hoy espero sus respuestas.
Consejo: No hacer esto en casa ... pueden ganarse enemigos xD
Salud.
Fuente: http://progrevo.blogspot.com/
Si te gustó esta noticia compártela con tus amigos en google+, facebook, twitter, e-mail, o la red social de tu preferencia.
Suscribirse a:
Entradas (Atom)