Linux
Kinich Pakal está diseñado para ejecutarse en sistemas operativos de tipo Linux. Si cuentas con este sistema, tendrás que verificar que tenga los siguientes paquetes:
- wget
- curl
- gcc
- make
- openmpi
Si no cuentas con estos paquetes te recomendamos instalarlos de la siguiente manera
Instalando los paquetes
El primer paso será instalar MPI en nuestra máquina. Si ya lo tienes instalado, puedes ir a #ref Escriberemos en nuestra terminal
Tecleamos
Ctrl+Alt+T
Y dentro de la terminal escribimos
sudo apt-get update
sudo apt-get install -y build-essential curl wget git gcc gfortran make emacs25 openmpi-bin
Ahora instalamos Julia
cd ~
wget https://julialang-s3.julialang.org/bin/linux/x64/0.6/julia-0.6.4-linux-x86_64.tar.gz\
tar zxvf julia-0.6.4-linux-x86_64.tar.gz\
ln -s ~/julia-9d11f62bcb/bin/julia /bin/
sudo yum -y install wget\
curl\
yum-utils\
rpm-build\
gcc\
gcc-c++\
gcc-gfortran\
make\
openssh\
openssh-server\
openssh-clients\
bind-utils\
git\
emacs
wget https://download.open-mpi.org/release/open-mpi/v4.0/openmpi-4.0.5-1.src.rpm\
&& rpm -ivh ./openmpi-4.0.5-1.src.rpm\
&& cd /root/rpmbuild/SPECS/\
&& rpmbuild -ba --define 'configure_options --prefix=/opt/openmpi --enable-openib-rdmacm' openmpi-4.0.5.spec
cd /root/rpmbuild/RPMS/x86_64/\
&& sudo yum -y install openmpi-4.0.5-1.el8.x86_64.rpm
cd ~\
&& wget https://julialang-s3.julialang.org/bin/linux/x64/0.6/julia-0.6.4-linux-x86_64.tar.gz\
&& tar zxvf julia-0.6.4-linux-x86_64.tar.gz\
&& ln -s ~/julia-9d11f62bcb/bin/julia /bin/
Utilizando Docker
Si prefieres, puedes instalar Docker en tu distribución Linux preferida. Te recomendamos utilizar esta opción, ya que la imagen Docker contiene todas las configuraciones necesarias para poder correr el código sin ningún problema.
Instrucciones de instalación en Debian
Instrucciones de instalación en Ubuntu
Instrucciones de instalación en CentOS
Instrucciones de instalación en Fedora
Instrucciones de instalación en otras distribuciones
Para configurar nuestro Docker, tecleamos en nuestra terminal:
docker pull ftapia/kinichpakal
docker run -t -d --name kinichpakal ftapia/kinichpakal
docker exec -it kinichpakal sh
Comprobando la instalación
Ahora comprobamos que MPI funciona. Para eso haremos un test. Descargamos el código mediante github
cd /home
git clone https://github.com/fratava/mpi_code.git
cd mpi_code
mpicc hello_world.c -o hello_world
mpiexec --allow-run-as-root --use-hwthread-cpus -n 4 ./hello_world
Warning
Si se está utilizando Docker, se recomienda no utilizar todos los hilos de procesamiento para la tarea, ya que puede provocar algunos fallos o congelamiento temporal de la computadora. En este caso se recomienda ejecutar el código con un número par o \(2^n\) para \(n=1,2,...\) de núcleos como en el ejemplo de abajo.
Example
Supogamos que el procesador de nuestra computadora es un i7-1185G7 con 4 núcleos físicos y que cuenta con HyperThreading por lo que el sistema operativo puede ejecutar hasta 8 procesos en paralelo. Lo recomendable en este caso sería ejecutar el código con 6 o 7 procesos para no ocupar todo el procesamiento de nuestro computador. Entonces ejecutaríamos el siguiente código:
mpiexec --allow-run-as-root --use-hwthread-cpus -n 6 ./hello_world
mpiexec --allow-run-as-root --use-hwthread-cpus -n 4 ./hello_world
como salida tendremos algo similar a
sh-4.4# mpiexec --allow-run-as-root --use-hwthread-cpus -n 4 ./hello_world
Hello world from processor xxx, rank 0 out of 4 processors
Hello world from processor xxx, rank 1 out of 4 processors
Hello world from processor xxx, rank 2 out of 4 processors
Hello world from processor xxx, rank 3 out of 4 processors
Warning
Los procesos no siempre se ejecutan en orden, en general es de manera aleatoria.
Configurando Julia
Primero comprobamos que tenemos la versión de julia correcta
julia --version
sh-4.4# julia --version
julia version 0.6.4
julia
sh-4.4# julia
_
_ _ _(_)_ | A fresh approach to technical computing
(_) | (_) (_) | Documentation: https://docs.julialang.org
_ _ _| |_ __ _ | Type "?help" for help.
| | | | | | |/ _` | |
| | |_| | | | (_| | | Version 0.6.4 (2018-07-09 19:09 UTC)
_/ |\__'_|_|_|\__'_| | Official http://julialang.org/ release
|__/ | x86_64-pc-linux-gnu
julia>
Pkg.add("LsqFit")
Después precompilamos la paquetería de esta manera
using LsqFit
Y tenemos nuestro entorno listo.