Configuración de Visual Studio Code y WSL para el desarrollo MPI


Muchos planes de estudios requieren que se realicen pequeños programas con  MPI como parte del curso de Computación paralela, por lo que en este post   intentaremos ver como hacer la configuración de WSL (Subsistema de Windows para Linux) y Visual Studio Code para el desarrollo de MPI, que se ejecuta en Ubuntu WSL Distro de Microsoft Store

Configuración de WSL

En las versiones recientes de Windows, WSL está habilitado de forma predeterminada y todo lo que necesita hacer es instalar una distribución debajo de él.

Comenzaremos descargando la distribución de Ubuntu de Microsoft Store. Abra la tienda desde el menú de inicio y busque Ubuntu 18.04 o haga clic aquí

Imagen para publicación
Toca “Obtener” para instalar la distribución de Ubuntu de WSL

después de  instalarlo, ábralo y siga todas las instrucciones para ingresar su nombre de usuario y contraseña predeterminados, etcétera.

Instalación de OpenMPI y herramientas de compilación para OpenMPI

Ahora debería estar mirando una ventana de línea de comandos, ejecutando bash, con el logotipo de ubuntu como el icono de la aplicación en la barra de tareas. Si ve esto, significa que ha instalado con éxito la distribución de Ubuntu en WSL

Ahora escriba el siguiente comando para instalar OpenMPI. En el caso de la siguiente captura de pantalla, ya se ha instalado.

sudo apt update && sudo apt install openmpi-bin libopenmpi-dev

Después de esto, inmediatamente podrá usar mpicc y mpirun para ejecutar y compilar programas que usen MPI, pero pronto verá este mensaje.

WARNING: Linux kernel CMA support was requested via thebtl_vader_single_copy_mechanism MCA variable, but CMA support isnot available due to restrictive ptrace settings.

Esto se debe a uno de los parámetros con los que WSL está configurado de forma predeterminada. Para resolver esto, necesitamos ejecutar este comando

  echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope

Después de esto, la advertencia simplemente desaparecerá.

Para compilar con MPI  simplemente debemos usr el compilador mpicc  , como por ejemplo:

>mpicc -o ejemplo ejemplo.c

Y para ejecutarlo usaremos mpirun  pasándole con el argumento -n el numero de procesadores:

mpirun -n 2 ./ejemplo

Ahora veamos un ejemplo sencillo para probar mpi :

 

#include<stdio.h>

#include<mpi.h>

int main( int argc, char* argv[] ) {

    int rank, size;

  

    // Paralelismo

    MPI_Init( &argc, &argv );

    // Indice del proceso

    MPI_Comm_size( MPI_COMM_WORLD, &size );

    // Tamano del comunicador seleccionado

    MPI_Comm_rank( MPI_COMM_WORLD, &rank );

    printf( "Hola mundo! Soy el proceso numero %d. En total somos %d procesos.\n", rank, size );




    MPI_Finalize();

}

 

 Para poder ejecutar con más procesadores  de los que físicamente tiene el equipo al usar  mpirun  pasándole con el argumento -n (el numero de procesadores) , nos dará un error :
>mpirun -n 4 ./ejemplo
There are not enough slots available in the system to satisfy the 3slots that were requested by the application:
  ./Step6-SendReceive
Either request fewer slots for your application, or make more slotsavailable for use.
A "slot" is the Open MPI term for an allocatable unit where we canlaunch a process.  The number of slots available are defined by theenvironment in which Open MPI processes are run:
  1. Hostfile, via "slots=N" clauses (N defaults to number of     processor cores if not provided)  2. The --host command line parameter, via a ":N" suffix on the     hostname (N defaults to 1 if not provided)  3. Resource manager (e.g., SLURM, PBS/Torque, LSF, etc.)  4. If none of a hostfile, the --host command line parameter, or an     RM is present, Open MPI defaults to the number of processor cores
In all the above cases, if you want Open MPI to default to the numberof hardware threads instead of the number of processor cores, use the--use-hwthread-cpus option.
Alternatively, you can use the --oversubscribe option to ignore thenumber of available slots when deciding the number of processes tolaunch.

Como no es difícil de adivinar el error advierte de que intentamos ejecutar  en mas procesadores los que realmente se tienen en nuestra máquina .Para simular los procesadores que no se tiene podemos utilizar el flag –oversubscribe

 
Sería así:
mpirun -np 4 –oversubscribe ./programa

 

 

Si solo desea ejecutar programas en el terminal y no necesitar configurar Visual Studio Code, ahora puede hacerlo usando mpicc y mpirun desde la consola .De lo contrario, siga leyendo para descubrir cómo configurar VSCode para la tarea.

Configuración de VSCode

Suponemos que ya tiene VSCode instalado, si no, descárguelos de su sitio web .

Necesitaremos instalar WSL Remote desde su página de Extensiones de Visual Studio , después de eso, haga clic en el nuevo ícono en la parte inferior izquierda para iniciar una nueva sesión de WSL.

Imagen para publicación

Después de eso, le pedirá que elija un directorio que desea abrir. Continúe y abra el directorio en el que planea realizar su desarrollo.

Para habilitar el resaltado de sintaxis, intellisense y otras características conscientes del lenguaje, también necesitamos configurar el soporte C / C ++ en VSCode. Para eso, vaya al panel de extensiones e instálelo

Imagen para publicación

Ahora, por defecto, VSCode no va a poder encontrar mpi.h, lo cual es fundamental para poder brindar sugerencias para Interfaces MPI, para eso necesitaremos configurar el includePath y la ruta ejecutable en el C / C ++ Ajustes.

 

Probablemente tenga  un archivo llamado c_ccp_properties.json en la carpeta .vscode en su directorio del programa 
    "configurations": [

        {

            "name": "Win32",

            "includePath": [

                "${workspaceFolder}/**", "C:\\Program Files (x86)\\Microsoft SDKs\\MPI\\Lib\\"

            ],

            "defines": [

                "_DEBUG",

                "UNICODE",

                "_UNICODE"

            ],

            "compilerPath": "C:\\MinGW\\bin\\gcc.exe",

            "cStandard": "gnu11",

            "cppStandard": "gnu++14",

            "intelliSenseMode": "windows-gcc-x86"

        }

    ],

    "version": 4

}

 Modifique ese archivo llamado c_ccp_properties.json en la carpeta .vscode en su directorio del programa MPI para poderlo  ejecutar desde Linux :

{

    "configurations": [

        {

            "name": "Linux",

            "includePath": [

                "${workspaceFolder}/**",

                "/usr/lib/x86_64-linux-gnu/openmpi/include"

            ],

            "defines": [],

            "compilerPath": "/usr/bin/mpicc",

            "cStandard": "c11",

            "cppStandard": "c++17",

            "intelliSenseMode": "clang-x64"

        }

    ],

    "version": 4

}
 
Se puede conseguir auto construcción y ejecución  por lo que además  de lo anteriror, si desea poder compilar y ejecutar directamente desde VSCode, debemos agregar las siguientes tareas de compilación y lanzamiento
 
fichero=launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "(mpirun) Launch",
"type": "cppdbg",
"request": "launch",
"program": "/usr/bin/mpirun",
"args": ["-np", "4", "${fileDirname}/${fileBasenameNoExtension}.out"],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,

}
]
}

fichero task.json

 
{

    "version": "2.0.0",

    "tasks": [

        {

            "type": "shell",

            "label": "gcc build active file",

            "command": "/usr/bin/gcc",

            "args": [

                "-g",

                "${file}",

                "-o",

                "${fileDirname}/${fileBasenameNoExtension}"

            ],

            "options": {

                "cwd": "/usr/bin"

            },

            "problemMatcher": [

                "$gcc"

            ],

            "group": "build"

        },

        {

            "type": "shell",

            "label": "mpicc build active file",

            "command": "/usr/bin/mpicc",

            "args": [

                "-g",

                "${file}",

                "-o",

                "${fileDirname}/${fileBasenameNoExtension}.out"

            ],

            "options": {

                "cwd": "/usr/bin"

            },

            "problemMatcher": [

                "$gcc"

            ],

            "group": {

                "kind": "build",

                "isDefault": true

            }

        },

    ]

}

Con esa configuración, debería poder usar sus atajos de teclado predeterminados para Ejecutar sin depurar (Ctrl + F5) y Generar (Ctrl + Shift + B) para construir y ejecutar sus programas MPI.

Como crear un USB de arranque desde linux


A veces nuestro equipo Windows o Linux puede tener ciertos problemas en funcionalidades que no sabemos achacar si es al propio sistema operativo, a alguna aplicacion que hayamos instalado qeu entre en conflicto con otra o quizas algun componente hardware. Pensando en estos casos una solucion muy interesante es arrancar con una unidad USB que contenga la maxima cantidad de drivers y sw basico para probar si es achacable al propio sistema operativo o algun aspecto del hardware que nos este fallando

En este post , pues vamos a ver como generar una unidad USB con la que salir de dudas y que seguro mas una vez nos podra sacar de algun apuro ¿le interesa el tema pues no nos demoremos mas y veamos los pasos a seguir?

1. Información general

Con una memoria USB de arranque de Ubuntu, puede:

  • Instalar o actualizar Ubuntu
  • Pruebe la experiencia de escritorio de Ubuntu sin tocar la configuración de su PC
  • Inicie Ubuntu en una máquina prestada o desde un cibercafé
  • Utilice las herramientas instaladas de forma predeterminada en la memoria USB para reparar o arreglar una configuración rota

Crear una memoria USB de arranque de Ubuntu es muy simple, especialmente desde Ubuntu mismo, y cubriremos el proceso en los siguientes pasos.

Alternativamente, también tenemos tutoriales para ayudarlo a crear una memoria USB de arranque desde Microsoft Windows y Apple macOS .

 

2. Requisitos

Necesitará:

  • Una memoria USB / unidad flash de 4 GB o más
  • Ubuntu Desktop 14.04 o posterior instalado
  • Un archivo ISO de Ubuntu. Consulte Obtener Ubuntu para obtener enlaces de descarga.
  • Xubuntu es un sistema operativo Linux elegante y fácil de usar basado en Ubuntu y desarrollado por la comunidad.. Xubuntu incluye Xfce, que es un entorno de escritorio estable, ligero y configurable.Es ideal para quien quiera lo mejor de sus PCs, portátiles y netbooks dándoles un aspecto moderno y obteniendo funcionalidades suficientes y eficientes para el día a día. Además, funciona bien en máquinas antiguas.Para más información, visite el sitio web de Xubuntu. Puede probar tambien la version Xubuntu 20.01 desde here.
Descarga una ISO de Ubuntu

Por cierto ,la «X» en Xubuntu proviene de Xfce, el ambiente de escritorio de Xubuntu. Así también la palabra «ubuntu» muestra la dependencia y el uso del núcleo de Ubuntu, que a su vez representa el núcleo filosófico del sistema operativo. Un significado aproximado de la palabra ubuntu es «humanidad hacia los demás». Para conocer más sobre la filosofía e ideales detrás de Ubuntu y Xubuntu puede ir a la página Filosofía de Ubuntu [En inglés].

Además de utilizar el núcleo de Ubuntu, Xubuntu también utiliza la infraestructura proporcionada y patrocinada por Canonical Ltd., una compañía fundada por Mark Shuttleworth.

3. Inicie Startup Disk Creator

Vamos a utilizar una aplicación llamada ‘Startup Disk Creator’ para escribir la imagen ISO en su memoria USB. Esto se instala de forma predeterminada en Ubuntu y se puede iniciar de la siguiente manera:

  1. Inserte su memoria USB (seleccione ‘No hacer nada’ si se lo solicita Ubuntu)
  2. En Ubuntu 18.04 y versiones posteriores, use el icono de la parte inferior izquierda para abrir ‘Mostrar aplicaciones’
  3. En versiones anteriores de Ubuntu, use el ícono superior izquierdo para abrir el tablero
  4. Utilice el campo de búsqueda para buscar Startup Disk Creator
  5. Seleccione Startup Disk Creator de los resultados para iniciar la aplicación
Buscar Startup Disk Creator

 

Si no lo tiene instalado ,para instalar la aplicación desde consola , ejecute los siguientes comandos:

sudo apt update
sudo apt install usb-creator-gtk

Además, si está ejecutando KDE o Kubuntu en lugar de Ubuntu o Ubuntu Gnome, probablemente debería usar en usb-creator-kdelugar de usb-creator-gtk:

sudo apt update
sudo apt install usb-creator-kde

Además, si está utilizando LXQT en Lubuntu, probablemente desee utilizar usb-creator-kde.

4. Selección de ISO y USB

Cuando se inicie, Startup Disk Creator buscará los archivos ISO en su carpeta de Descargas , así como cualquier almacenamiento USB adjunto en el que pueda escribir.

Es probable que tanto su ISO de Ubuntu como el dispositivo USB correcto se hayan detectado y configurado como ‘Imagen de disco de origen’ y ‘Disco para usar’ en la ventana de la aplicación. De lo contrario, use el botón ‘Otro’ para ubicar su archivo ISO y seleccione el dispositivo USB exacto que desea usar de la lista de dispositivos.

Haga clic en Crear disco de inicio para iniciar el proceso.

Hacer dispositivo USB

5. Confirme el dispositivo USB

Antes de realizar cambios permanentes, se le pedirá que confirme que el dispositivo USB que ha elegido es correcto. Esto es importante porque todos los datos almacenados actualmente en este dispositivo se destruirán.

Después de confirmar, se iniciará el proceso de escritura y aparecerá una barra de progreso.

Progreso de escritura USB

6. Instalación completa

¡Eso es todo! Ahora tiene Ubuntu en una memoria USB, de arranque y listo para funcionar.

Si desea instalar Ubuntu, eche un vistazo a nuestro tutorial de instalación de escritorio de Ubuntu .

Escritura USB completa

Buscando mas  ayuda

Si se queda atascado, la ayuda siempre está a mano. He  aquí algunas referencias que nos pueden ayudar:

 

Instalación de python en Linux


Muchos proyectos que manejan elementos multimedia están escritos actualmente en Python como por ejemplo el proyecto PRMC, que es una colección de módulos de Python escritos en Python [ 3 ] ), por lo lo tanto, necesitará un intérprete y saber cómo desarrollar / ejecutar programas Python ( módulos y paquetes ). .

La mayoría de los sistemas operativos actuales basados ​​en Unix (Linux, FreeBSD y OSX) utilizan Python para ejecutar algunas de sus “tareas diarias”, lo que significa que ya hay disponible un intérprete de Python. Sin embargo, normalmente es mejor utilizar nuestro propio intérprete porque:

  1. Podemos elegir la versión de Python y los paquetes.
  2. Podemos optimizar la compilación del intérprete en función de nuestras necesidades (por ejemplo, incluyendo soporte Tk o no).
  3. Por defecto, todos los paquetes de Python se instalarán en un repositorio diferente de los paquetes del sistema, lo que facilita el aislamiento de Python del sistema / usuario y la eliminación del intérprete.

En Windows, debe instalar Python, sí o sí, desde el sitio web oficial . Sin embargo, tenga en cuenta que esta “guía” solo contempla la instalación de Python en máquinas con sistema operativo basado en Unix.

Instalación de Python.

         sudo apt-get install -y build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev python-openssl git
         cd
         curl https://pyenv.run | bash
         cat << EOF >> ~/.bashrh
         export PATH="$HOME/.pyenv/bin:$PATH"
         eval "$(pyenv init -)"
         EOF
         source ~/.bashrc
         pyenv install -v 3.8.5
         pyenv virtualenv 3.8.5 tm

 

  • Recuerde que necesitará activarlo cuando quiera trabajar en este proyecto:   
        pyenv activate tm

 Es una buena idea agregar esto al archivo ~ / .bashrc .

  • Instale un IDE para programar con Python. Recomiendo a Thonny si no está acostumbrado a ningún otro.
     pip instalar thonny  

Recursos de programación Python.

Si ni domina Python para seguir este curso puede  seguir algún tutorial de programación de Python, como The Python Tutorial 1 ] sobre todo si se da cuenta de que el lenguaje es un revés para ti.

Si necesita comenzar con Python desde cero, una introducción a Python como este taller de YAPT 2 ] también podría ser útil. 

También puede consultar también el tutorial de Python de ZetCode .

Aquí otros enlaces interesantes sobre Python:

[1]   El tutorial de Python .

[2]   YAPT .

[3]   Sitio web de Python .