Mostrando entradas con la etiqueta nvidia. Mostrar todas las entradas
Mostrando entradas con la etiqueta nvidia. Mostrar todas las entradas
Tips Slackware 13.1

Por qué elegí Slackware?

Luego de haber utilizado Ubuntu por 4 años finalmente me decidí por instalar una distribución GNU/Linux más estable y "espartana" (como diría un profe de la Universidad Nacional del Sur), aunque tuviera que resignar facilidad de uso y mantenimiento. No tengo nada en contra de Ubuntu, creo que es una distribución formidable, muy pero muy fácil de utilizar. Es más, creo firmemente que es mucho más fácil de utilizar que cualquier Windows. A cualquier persona que utiliza una computadora por primera vez le daría una distro basada en Ubuntu por su simplicidad. Pero esta facilidad de uso es lo que me "aburrió", todo es muy fácil y se pierde mucho control sobre lo que el sistema operativo hace (y se pierden muchas oportunidades para comprender y aprender como funciona el sistema operativo). Siempre me divertí más poniéndome el overol que haciendo un "apt-get install ...".
Respecto a la estabilidad, investigando durante mucho tiempo en foros y páginas de Internet descubrí que Slackware es considerada "la distribución de GNU/Linux más estable" y supuse que el mundo no debe estar equivocado por ser la distribución de GNU/Linux más antigua aún con vida.

Un poco de historia...

Mis primeras armas con GNU/Linux las hice utilizando una distro más que "espartana": DSL (abreviatura de Damn Small Linux). Por esa época utilizaba DSL versión 3.4 con un kernel Linux 2.4.26 y corría en un procesador AMD K6 II de 450 MHz (un sólo núcleo obviamente jeje) con unos increíbles 64 MB de memoria RAM. Esta distro ultra liviana, basada en Knoppix, no tenía manejador de paquetes, utilizaba el manejador de ventanas fluxbox, y tanto su "instalación" (estaba pensada para funcionar como live CD, no se recomendaba la instalación) como uso era para usuarios intrépidos. Aunque... si tienen un cacharro viejo tirado en la pieza pónganle un DSL y devuélvanlo a sus años dorados.
Abandoné DSL el día que compré mi máquina de escritorio actual y decidí pasarme a una distribución más moderna, en ese momento Ubuntu 6.04.

Instalando Slackware 13.1

Recuerdo cuando le comenté a demasiadovivo:
- Voy a instalar Slackware en mi PC.
A lo que él respondió:
- ¿Tenés ganas de meterte en problemas?
Durante un momento me acobardé un poco pero me mantuve firme en mi decisión y un sábado a las 2 de la mañana, luego de cumplir con mis obligaciones, instalé Slackware 13.1. Esta versión viene con el kernel de Linux 2.6.33.4, Xfce 4.6.1, KDE 4.4.3, muchas herramientas de desarrollo (Perl, Python, Ruby, Subversion, KDeveloper, etc.), una variedad de Web browsers (Konqueror, SeaMonkey, Firefox) y una colección de aplicaciones basadas en GTK+ (Pidgin, GIMP, GXine, XChat, etc.) entre lo más destacado. Información más detallada en http://www.slackware.org/announce/13.1.php.
La instalación es muy sencilla, la parte más complicada para un usuario inexperto es el particionamiento de los discos utilizando 'cfdisk', pero para aquellos dinosaurios como yo que instalaron Windows 98 una gran cantidad de veces y particionaban sus discos con 'fdisk'... es pan comido. Si tuvieron la oportunidad de instalar FreeBSD se darán cuenta que el instalador es muy similar, también el manejador de paquetes 'pkgtool' el cual utiliza archivos comprimidos tar. Una limitación que tiene el manejador de paquetes es que no resuelve dependencias, como lo hacen otros manejadores de paquetes (por ejemplo aptitude). Pueden encontrar ayuda oficial para instalar Slackware 13.1 en http://www.slackware.org/install/.

Veamos la instalación paso por paso:

1. Primero tenemos que conseguir un DVD de Slackware, bueno esto es fácil, ingresamos en http://www.slackware.org/getslack/torrents.php y descargamos el torrent de la imagen del DVD (es más practico que 6 CDs) y lo descargamos con nuestro cliente bit-torrent favorito (en mi caso fue transmission). Luego de quemar el DVD booteamos desde la unidad lectora de discos. Ingresamos al sistema como usuario 'root' (sin contraseña).

2. Esta es la parte más compleja de la instalación: crear las particiones. Para hacerlo de la forma más sencilla posible vamos a crear dos particiones: una partición para memoria swap (aproximadamente el doble del tamaño de la memoria RAM para la mayoría de los sistemas) y otra partición para el resto del sistema. Lo ideal es crear particiones separadas para los directorios /boot y /var (y posiblemente también una para /etc). No voy a explicar cómo utilizar 'cfdisk' porque sería muy extenso, pero pueden encontrar una guía en español en http://manual.sidux.com/es/part-cfdisk-es.htm.

3. Teniendo nuestras particiones, ejecutamos el comando 'setup'. Esto inicia el proceso de instalación interactivo que contiene las siguientes etapas: HELP, KEYMAP, ADDSWAP, TARGET, SOURCE, SELECT, INSTALL, CONFIGURE, PKGTOOL, EXIT.

  • KEYMAP: Nos permite elegir el mapa de teclado adecuado (en mi caso qwerty/es).

  • ADDSWAP: Indicamos que partición se utiliza como memoria de intercambio (el proceso es automático).

  • TARGET: Seleccionamos la partición donde instalar el sistema y formateamos con ext4.

  • SOURCE: Detecta el origen de la instalación (en este caso el DVD).

  • SELECT: Seleccionamos el software para instalar, debemos seleccionar todos (KDEI para instalar otros idiomas en KDE, lo que incluye el idioma español).

  • INSTALL: Instalamos seleccionando 'full'. Seleccionamos la instalación de lilo automática, el framebuffer de lilo 'auto' y el destino 'MBR'.

  • Se puede encontrar una guía detallada de la instalación en http://troesma.wordpress.com/2010/05/28/como-se-debe-instalar-slackware/.
Una vez finalizada la instalación reiniciamos la PC y nos topamos con lilo, el cual detectó automáticamente durante la instalación otros sistemas operativos instalados, e iniciamos Slackware. Nos logueamos como 'root' e iniciamos KDE mediante el comando 'startx'. Ya tenemos el sistema funcionando!
Lo que sigue a continuación es una lista de tips post-instalación que fui realizando para "tunear" el sistema de acuerdo a mis necesidades. Son configuraciones simples pero que, una vez hechas, me es imposible recordar cómo las hice, por eso decidí anotarlas y eso me motivó a escribir este artículo.

Agregar un nuevo usuario

Por razones de seguridad, no es conveniente correr el sistema como usuario 'root', por lo tanto lo primero que deberíamos hacer es crear un nuevo usuario. La forma más sencilla es utilizar el manejador de usuarios de KDE (también se puede utilizar el comando 'useradd', ver manual). Iniciamos KUser desde "K > Applications > System > User Manager". Luego utilizamos el botón 'Add', el resto es fácil. Una vez creado el nuevo usuario debemos agregarlo al archivo 'sudoers' para que pueda utilizar el comando 'sudo' y realice tareas de administración. Si no se desea que el usuario pueda utilizar 'sudo' se debe omitir este paso.
Otorgar 'sudo' al nuevo usuario 'emi':
    # visudo

    [Insert]
    emi ALL=(ALL) ALL

    [Esc]
    :wq
Si otorgamos 'sudo' es conveniente agregar las rutas '/usr/local/sbin', '/usr/sbin' y '/sbin' a la variable de entorno $PATH, para que bash encuentre los ejecutables de administración del sistema (por ejemplo 'cfdisk', 'dhclient', 'fsck', 'halt', 'ifconfig', 'ip', 'lilo', 'mkfs', 'mount', 'poweroff', 'reboot', 'umount', etc.):

1- Crear el archivo '.profile' en el directorio $HOME
2- Agregar los directorios a la variable $PATH:
    PATH=/usr/local/sbin:/usr/sbin:/sbin:$PATH

Cambiar locale

Para que se visualicen correctamente los acentos y 'ñ' en los nombres de archivo debemos cambiar el 'locale' que es el conjunto de reglas de lenguaje y culturales que se aplica en el sistema. Esto incluye el conjunto de caracteres. Para esto editamos el archivo '/etc/profile.d/lang.sh' de la siguiente forma:

Comentar la línea:
#export LANG=en_US

Descomentar la línea:
export LANG=en_US.UTF-8

Deshabilitar servidor Akonadi:

Akonadi es un servicio de manejo de información personal (PIM) incluido en KDE 4. Administra información como contactos de correo electrónico, notas, alarmas, etc. de forma centralizada en una base de datos MySQL. Este servicio puede consumir recursos como memoria, espacio en disco y CPU. Para mejorar el desempeño de KDE en general decidí deshabilitarlo. Si desinstalamos este paquete, aplicaciones como Kontact, KOrganizer, KMail, etc. dejan de funcionar. Por lo tanto no se debe desinstalar, para resolver esto debemos seleccionar nuevos recursos de almacenamiento de datos de KDE desde "K > System Settings > Advanced > KDE Resources". Por ejemplo se pueden utilizar archivos locales para almacenar datos de contactos. Para más información sobre Akonadi leer http://techbase.kde.org/Projects/PIM/Akonadi#Akonadi_FAQ.

Instalar paquetes

Slackbuilds.org es un repositorio de paquetes que no vienen incluidos en la versión oficial de Slackware. A pesar de no ser oficiales, son referenciados en el sitio oficial de Slackware ya que varios desarrolladores de Slackware también desarrollan scripts para slackbuilds.org. Cabe recordar que Slackware trabaja con paquetes tar comprimidos, por lo tanto en el sitio slackbuilds.org proveen scripts que crean los paquetes tar comprimidos a partir del código fuente del paquete que se desea instalar. Por lo tanto, si deseamos instalar un paquete que no está incluido en la versión oficial de Slackware debemos seguir los siguientes pasos (voy a utilizar OpenOffice.org como ejemplo):
    1. Buscar el script en slackbuilds.org, en este caso "openoffice".
    2. Descargar código fuente del paquete desde el sitio oficial del mismo (en la misma página de slackbuilds.org donde descargamos el script hay un link al fuente del paquete).
    3. Extraer el tarball descargado desde slackbuilds.org y editar el archivo .info si no coincide la versión del fuente descargado.
    4. Colocar el fuente (generalmente un .tar.gz) en la carpeta donde se encuentra el script .Slackbuild. Luego ejecutar el script, el mismo crea el paquete a partir del código fuente.
    5. Instalar el paquete creado en el directorio /tmp utilizando el comando 'installpkg'.
    6. Disfrutar! No es tan complicado como parece.

Personalizar lilo (bootloader)

Si deseamos personalizar lilo, por ejemplo cambiar el timeout, el orden de aparición de los OS o el bitmap, debemos:

1- Editar el archivo /etc/lilo.conf
2- Luego ejecutar lilo para que tome la nueva configuración:
    lilo -C /etc/lilo.conf

Instalar NVIDIA video driver

Para aquellos dueños de placas de video NVIDIA, los pasos son idénticos que para otra distro:
    1- Descargar driver desde www.nvidia.com
    2- Cerrar X (Logout desde KDE)
    3- chmod u+x NVIDIA.run
    4- sh NVIDIA.run
    5- startx
    6- K > Applications > Settings > NVIDIA X Server Settings
    7- Disfrutar!

Instalar mod_perl

Esto tuve que hacerlo para ejecutar Perl en modo cgi (o sea, servir páginas Web escritas en Perl):
    1- Instalar mod_perl utilizando el script de slackbuilds.org.
    2- Editar /etc/httpd/mod_perl.conf si es necesario.
    3- Agregar la siguiente línea en el archivo /etc/httpd/httpd.conf:
      Include /etc/httpd/mod_perl.conf

Iniciar firewall automáticamente

Slackware no utiliza "/etc/init.d/" sino que utiliza "/etc/rc.d/" para cargar demonios automáticamente. En mi caso necesito levantar mi firewall escrito con 'iptables' automáticamente cada vez que inicia el sistema. Para esto:

1- Crear bash script con las reglas de iptables
2- Crear un link simbólico al script en la carpeta /etc/rc.d/:
    ln -s /home/emi/firewall.sh /etc/rc.d/rc.firewall
Ojo con los permisos del archivo firewall.sh! El dueño debe ser 'root' y ni el grupo ni los otros deben tener permisos de lectura/escritura

Agregar etiqueta a una partición (sin formatear)

Acá fue cuando hice macanas, quería asignarle una etiqueta a una partición ext4 y (por no leer el manual completo) utilicé el comando 'mke2fs' con la opción -L lo cual borró la tabla de inodos perdiendo el contenido completo de la partición (como si hubiera formateado una partición NTFS). Afortunadamente, pude recuperar la información utilizando 'e2fsck' y aprendí a asignar una etiqueta sin formatear la partición utilizando el comando:
e2label /dev/sdb4 etiqueta

Personalizar atajos de teclado (multimedia)

Si tenemos un teclado con botones adicionales y queremos cambiar su comportamiento, podemos hacerlo desde:

K > Computer > System Settings > Keyboard & Mouse > Standard Keyboard Shortcuts

Instalar corrección ortográfica (aspell-es)

Para poder corregir la ortografía en idioma español es necesario instalar el diccionario español de GNU Aspell:

1- Descargamos el diccionario español desde: ftp://ftp.gnu.org/gnu/aspell/dict/0index.html.
2- Extraemos el contenido del tarball.
3- Instalamos el diccionario:
    ./configure
    make
    make install

Links

www.damnsmalllinux.org
www.slackbuilds.org
www.slackware.org
www.ubuntu.com
Nuevo uso para las tarjetas gráficas de la mano de CUDA
Hoy pude dedicarme a leer la tesis de un par de compañeros de la universidad la cual trata de CUDA (Compute Unified Device Architecture - Arquitectura de cómputo paralelo de propósito general). Esta nueva forma de ver a las placas de video como arquitecturas de procesamiento paralelo para cualquier aplicación (no sólo las gráficas) me llamó mucho la atención y me parece una excelente idea para aprovechar semejante poder de cómputo para algo que no sea exclusivamente el ocio =P

En éste artículo haré un resumen de lo presentado por estos muchachos en su tesis, la cual denominaron "COMPUTACIÓN DE PROPÓSITO GENERAL SOBRE GPUS UTILIZANDO CUDA", con mi visión sobre esta tecnología.

Para el que no tenga idea (yo no tenía mucha antes de leer la tesis), CUDA es parte de la evolución de las placas de video desde una arquitectura de pipeline de funciones fijas (Entrada del pipeline, Transformaciones del modelo, Iluminación, Simulación de cámara, Rasterización, Texturizado y Superficies ocultas) dedicada exclusivamente al procesamiento de píxels y vértices a una nueva era de GPUs (Graphics Processing Unit) de Propósito General (GPGPU) que permiten la ejecución de cualquier aplicación que pueda ser paralelizada.
Esta evolución no fue pensando directamente en aplicaciones de propósito general, sino que ésta arquitectura permite una significativa mejora en el balance de carga, aprovechándose mejor la potencia de los GPUs. Además provee una mayor flexibilidad para el desarrollador en conjunto con la reducción en la dificultad de programación para el desarrollador, dado que ahora se cuenta con un solo set de instrucciones mientras que antes se necesitaban dos sets, uno para procesar píxeles y otro para procesar vértices (en síntesis, un dolor de huevos).
Las GPUs que fueron diseñadas para realizar grandes cantidades de cómputo, contienen múltiples procesadores que aprovechan la naturaleza paralela de las aplicaciones gráficas, y por lo tanto, gracias a CUDA, se pueden adaptar para realizar cualquier tarea que tome ventaja de la paralelización para lograr mayores velocidades de cómputo.

CUDA, la cual es desarrollada por NVIDIA, no es la única en su campo dado que ATI lanzo al poco tiempo su Stream Computing, el cual ahora se llama AMD FireStream, pero aunque no llega a ser igual de famosa, no deja de ser prometedora.

La arquitectura de CUDA se basa en un arreglo escalable de Streaming Multiprocessors (SMs) multihilados (la paralelización se logra creando hilos, no procesos, debido a que estos presentan menor costo en los cambios de contexto y accesos a memoria). Cada SM es capaz de manejar 768 contextos de hilos activos simultáneamente. Un multiprocesor consiste de ocho núcleos Scalar Processor (SP), dos unidades de funciones especiales básicas, una unidad de instrucción multihilada, y una memoria compartida on-chip. Dos o tres SMs se agrupan en Texture Processor Clusters (TPCs).
Las mayores ventajas de utilizar GPUs en lugar de CPUs se deben a la relación costo por GFlop, dado que las GPUs superan con creces la cantidad de GFlops que puede entregar una CPU. Pero la diferencia está marcada en las tareas para las cuales fueron diseñadas cada una. Los GPUs fueron pensados para operaciones con alto nivel de procesamiento y paralelismo, con baja cantidad de accesos a memoria. Por otro lado las CPUs se dedican al procesamiento secuencial y optimizan al máximo los accesos a memoria.

Si bien todo suena hermoso para las GPUs, uno tranquilamente podría pensar "por qué no reemplazamos los CPUs por GPUs?". El problema está en que sólo un rango limitado de aplicaciones es altamente paralelizable y pueden aprovechar las facilidades de las GPUs, el resto es muy dependiente de los accesos a memoria y dependen de los datos que se van generando secuencialmente en las distintas instrucciones. Por otro lado, la programación de programas paralelos no es sencilla. Hacer programas que aprovechen la ejecución paralela es bastante complejo, requiere de un buen análisis de los problemas, de la partición de los datos, son más complicados de depurar y mantener, y, aunque intenten lo contrario, son muy dependientes de la arquitectura sobre la que se ejecutan. Un programa que se abstrae de la arquitectura subyacente no logra aprovechar el verdadero poder de cómputo, e incluso puede llegar a generar peores tiempos de ejecución que un programa secuencial.

A pesar de las contraindicaciones, hay casos particulares donde la ejecución paralela es excelentemente aprovechada y es ahí donde las GPUs toman realmente ventaja con respecto a sus "primas", las CPUs. Claros ejemplos son las clásicas multiplicación de matrices, el algoritmo gravitacional N-body, simulaciones de clima y cracking por fuerza bruta >=)
En los resultados de la tesis, los problemas altamente paralelizables logran unos speedups increíbles. Realmente vale la pena esta tecnología si la aplicamos correctamente.

CUDA provee un modelo de programación que utiliza librerías de funciones escritas en C. Las librerías proveen un conjunto de funciones que facilitan la creación de los hilos (definidos en conjunto a través de las funciones denominadas kernels), herramienta de sincronización mediante barreras y facilidades para acceder a las distintas memorias (local del hilo, compartida con otros hilos, espacios constantes, de texturas y la memoria global). Los programas se pueden ejecutar parte en el CPU y el resto en el GPU.

Por lo que pude observar, la programación lleva su tiempo de aprendizaje debido a los conceptos nuevos, las herramientas a utilizar y la mezcla que se puede hacer entre lo que se ejecuta en la CPU y lo que va a la GPU. Igualmente no parece excesivamente complejo y es cuestión de acostumbrarse.

Por suerte el Driver, Toolkit, SDK y debugger de CUDA están disponibles tanto para Windows, como para Linux y Mac, algo que es de agradecer, ya que abren la posibilidad de aprovechar la arquitectura sin importar la elección del sistema operativo. Todo se puede descargar desde http://www.nvidia.com/object/cuda_get.html

Para saber qué placas cuentan con la arquitectura CUDA, pueden visitar http://www.nvidia.com/object/cuda_learn_products.html

Desde éste humilde espacio les mando mis felicitaciones a los creadores de la tesis por su gran trabajo, la verdad que me encantó.