diff --git a/README.md b/README.md index 61a5fb7028817f4a4bdb972712f50ac20799ffaf..47f6e64502492d21ab706dae091d867cd868dcca 100644 --- a/README.md +++ b/README.md @@ -6,4 +6,5 @@ Funções e bibliotecas de uso genérico para a disciplina CI1164 (DINF/UFPR) * **sislin:** funções básicas de manipulação de matrizes e Sistemas Lineares * **utils:** funções utilitárias diversas: timestamp, geradores de números pseudo-aleatórios, etc. +* **likwid:** documentação e modelos de teste de instalação do LIKWID. diff --git a/likwid/LIKWID-DINF.txt b/likwid/LIKWID-DINF.txt new file mode 100644 index 0000000000000000000000000000000000000000..c62c7e579b4f01b40dec7a37be1ca6b5ee506f75 --- /dev/null +++ b/likwid/LIKWID-DINF.txt @@ -0,0 +1,79 @@ +===== GUIA DE CONFIGURAÇÃO DO LINUX PARA USO DO LIKWID NO DINF =============== + +1. Em uma janela shell, editar o arquivo '${HOME}/.bashrc' e acrescentar + linhas abaixo: + + export LIKWID_HOME="/home/soft/likwid" + + if [ -d "${LIKWID_HOME}" ] ; then + PATH="$PATH:${LIKWID_HOME}/bin:${LIKWID_HOME}/sbin" + export LIKWID_LIB="${LIKWID_HOME}/lib" + export LIKWID_INCLUDE="${LIKWID_HOME}/include" + export LIKWID_MAN="${LIKWID_HOME}/man" + export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:${LIKWID_LIB}" + export MANPATH="$MANPATH:${LIKWID_MAN}" + fi + +2. Na mesma janela shell, após a edição acima, executar o comando abaixo: + + source ${HOME}/.bashrc + +3. Fazer download dos arquivos abaixo: + + https://www.inf.ufpr.br/nicolui/grad/ci164/Docs/exemplos/teste.c + https://www.inf.ufpr.br/nicolui/grad/ci164/Docs/exemplos/teste.sh + +4. Executar o comando abaixo: + + bash ./teste.sh + + Caso a configuração esteja correta, serão criados dois arquivos: + (FLOPS_DP_Otimiz.log e FLOPS_DP_SemOtimiz.log) contendo os resultados + gerados pelo LIKWID. + +5. Opções para compilação de programas: + + gcc -DLIKWID_PERFMON -I${LIKWID_INCLUDE} -c <prog.c> + gcc -o <prog> <prog.o> -L${LIKWID_LIB} -llikwid + + + * Nos códigos-fonte deve-se colocar + + #include <likwid.h> + + +===== GUIA DE CONFIGURAÇÃO DE FREQUENCIA DE RELÓGIO EM LINUX =============== + +1. Execute a seguinte linha de comando para aumentar a frequência de relógio: + + echo "performance" > /sys/devices/system/cpu/cpufreq/policy3/scaling_governor + +2. Para retornar à frequencia original + + echo "powersave" > /sys/devices/system/cpu/cpufreq/policy3/scaling_governor + + + +===== GUIA DE ACESSO REMOTO ÀS MÁQUINAS DOS LABORATÓRIOS DINF =============== + +Nos acessos abaixo, sempre use seu login/senha nas máquinas do DINF + +1. Copiar seus arquivos locais para a máquina 'macalan': + + scp -rp <sua_pasta_com_exercicio> <user_dinf>@macalan.c3sl.ufpr.br:. + +2. Acessar 'macalan' com + + ssh <user_dinf>@macalan.c3sl.ufpr.br + +3. Uma vez na 'macalan' + + ssh <maq_LAB_DINF> + + onde <maq_LAB_DINF> = máquinas indicadas pelo professor no enunciado + de um trabalho. + +4. ATENÇÃO: Lembre-se de RECOMPILAR SEUS PROGRAMAS em <maq_LAB_DINF> + + + diff --git a/likwid/LIKWID-INSTALL.txt b/likwid/LIKWID-INSTALL.txt new file mode 100644 index 0000000000000000000000000000000000000000..a56adf7385e63cd57f23357b38ea56e6d647db6a --- /dev/null +++ b/likwid/LIKWID-INSTALL.txt @@ -0,0 +1,137 @@ +===== PRÉ-REQUISITOS PARA INSTALAÇÃO DE LIKWID EM LINUX =============== + +1. Deve ser usado um Linux standalone: + + * Instalado sozinho em um disco interno ou externo (e.g., pendrive) + * Instalado em modo de boot dual, se o disco interno tiver um Windows. + +2. LIKWID não funciona em Linux instalado via WSL (Windows Subsystem for + Linux), pois neste não é possível instalar módulos de kernel, + necessários ao LIKWID + +3. Os resultados gerados pelo LIKWID NÃO SÃO CONFIÁVEIS em Linux + instalado em Maquinas virtuais (como VM Oracle). + + +===== GUIA DE INSTALAÇÃO E CONFIGURAÇÃO DO LINUX PARA USO DO LIKWID =============== + +0. Deve-se compilar e instalar o LIKWID. Use um dos links abaixo para + fazer o download do código-fonte: + + http://ftp.fau.de/pub/likwid/likwid-stable.tar.gz + + https://github.com/RRZE-HPC/likwid + + --> Para isto, pode-se executar os comandos abaixo: + + $VERSION=stable + wget http://ftp.fau.de/pub/likwid/likwid-$VERSION.tar.gz + tar -xaf likwid-$VERSION.tar.gz + cd likwid-$VERSION + + # configura compilação. Default é instalar os executáveis e bibliotecas em '/usr/local' + vi config.mk + make + + # 'sudo' necessário para instalar o daemon de acesso com permissões apropriadas + sudo make install + + +1. Garantir que módulo do kernel 'msr' esteja carregado: + * 'lsmod | grep msr': se não aparecer nada, 'msr' não está carregado + + * Carregar manualmente 'msr' (após boot): + + sudo modprobe msr + + * Carregar 'msr' automaticamente após boot: + --> Editar '/etc/modules' ('sudo vi /etc/modules') e acrescentar uma + linha contendo apenas 'msr' + +2. Alterar permissões de '/dev/cpu/*/msr': + * Manualmente (após boot): + + sudo chmod o+rw /dev/cpu/*/msr + + * Automaticamente após boot: + - Editar '/etc/rc.local' ('sudo vi /etc/rc.local') ou equivalente. + Acrescentar a linha abaixo em alguma linha ANTES da última linha que contém 'exit 0': + + chmod o+rw /dev/cpu/*/msr + + - Se sua instalação Linux não tiver o arquivo '/etc/rc.local' ou equivalente, crie o arquivo com o conteúdo abaixo: + + #!/bin/sh -e + chmod o+rw /dev/cpu/*/msr + exit 0 + + - Executar + + sudo chmod +x /etc/rc.local + + +3. Definir 'capability' em alguns comandos do Likwid (administrador) + + sudo setcap cap_sys_rawio+ep /usr/local/bin/likwid-lua + sudo setcap cap_sys_rawio+ep /usr/local/sbin/likwid-accessD + +4. Acrescentar linhas abaixo em '/etc/profile': + + export LIKWID_HOME="/usr/local" + + if [ -d "${LIKWID_HOME}" ] ; then + PATH="$PATH:${LIKWID_HOME}/bin:${LIKWID_HOME}/sbin" + export LIKWID_LIB="${LIKWID_HOME}/lib" + export LIKWID_INCLUDE="${LIKWID_HOME}/include" + export LIKWID_MAN="${LIKWID_HOME}/man" + export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:${LIKWID_LIB}" + export MANPATH="$MANPATH:${LIKWID_MAN}" + fi + +5. Efetuar reboot e conferir permissões de acesso de '/dev/cpu/*/msr'. + + Para verificar se LIKWID está corretamente instalado e configurado, + executar: + + likwid-topology -c -g + likwid-perfctr -a + + + +===== GUIA DE CONFIGURAÇÃO DE FREQUENCIA DE RELÓGIO EM LINUX =============== + + +No item de (1) a (3), será necessário que se tenha permissão de administrador. + +1. Execute a seguinte linha de comando: + + sudo echo "performance" > /sys/devices/system/cpu/cpufreq/policy3/scaling_governor + +2. Para retornar à frequencia original + + sudo echo "powersave" > /sys/devices/system/cpu/cpufreq/policy3/scaling_governor + +OBS.: Para permitir que qualquer usuário possa executar os comandos dos + itens (1) e (2), mudar permissão do arquivo: + + sudo chmod a+rw /sys/devices/system/cpu/cpufreq/policy3/scaling_governor + + E acrescentar o comando acima (sem 'sudo') em '/etc/rc.local', em + alguma linha ANTES da última linha que contém 'exit 0'. + +3. Alternativamente, instale o pacote 'cpufrequtils' (via 'apt-get install cpufreputils') + e execute os passos abaixo: + + (a) Para aumentar a frequência: + + sudo cpufreq-set -g performance + + (b) Para retornar à frequência original: + + sudo cpufreq-set -g powersave + + (c) Para verificar a frequência: + + cpufreq-info + + diff --git a/likwid/README.md b/likwid/README.md new file mode 100644 index 0000000000000000000000000000000000000000..8773f93298731f4b85f1bb5538d33d5ecc71c8f8 --- /dev/null +++ b/likwid/README.md @@ -0,0 +1,4 @@ +Após configurar o LIKWID conforme os documentos **.txt**, faça download dos +arquivos **teste.c** e **teste.sh** e execute **bash ./teste.sh** . + + diff --git a/likwid/teste.c b/likwid/teste.c new file mode 100644 index 0000000000000000000000000000000000000000..a22def749a75392b72724c2e6d28fb5c87d10db7 --- /dev/null +++ b/likwid/teste.c @@ -0,0 +1,28 @@ +#include <stdio.h> +#include <stdlib.h> /* exit, malloc, calloc, etc. */ + +#include "likwid.h" + +#define N 10000 + +/** + * Programa principal para testar configuraçãp do LIKWID + */ + +int main (int argc, char *argv[]) +{ + double A[N], B[N], C[N]; + + LIKWID_MARKER_INIT; + + LIKWID_MARKER_START ("Teste_LIKWID"); + for(int i=0; i < N; ++i) { + C[i] = A[i] + B[i]; + } + LIKWID_MARKER_STOP ("Teste_LIKWID"); + + LIKWID_MARKER_CLOSE; + + return 0; +} + diff --git a/likwid/teste.sh b/likwid/teste.sh new file mode 100755 index 0000000000000000000000000000000000000000..7d4c2aedcba46c51df79e46b6b43cbda405cc1b5 --- /dev/null +++ b/likwid/teste.sh @@ -0,0 +1,44 @@ +#!/bin/bash + +METRICA="FLOPS_DP" +CPU=3 + +LIKWID_HOME=/home/soft/likwid +CFLAGS="-I${LIKWID_HOME}/include -DLIKWID_PERFMON" +LFLAGS="-L${LIKWID_HOME}/lib -llikwid" +SCALING_FREQ="/sys/devices/system/cpu/cpufreq/policy${CPU}/scaling_governor" + +if [ -w ${SCALING_FREQ} ]; then + echo "performance" > ${SCALING_FREQ} +fi + +gcc ${CFLAGS} -O0 teste.c -o teste ${LFLAGS} +for k in $METRICA +do + likwid-perfctr -C ${CPU} -g ${k} -m ./teste >${k}_SemOtimiz.log +done + +rm -f teste +gcc ${CFLAGS} -O3 teste.c -o teste ${LFLAGS} +for k in $METRICA +do + likwid-perfctr -C ${CPU} -g ${k} -m ./teste >${k}_Otimiz.log +done + +if [ -w ${SCALING_FREQ} ]; then + echo "powersave" > ${SCALING_FREQ} +fi + +echo '' +echo '-----------------------------------' +if [ -f FLOPS_DP_Otimiz.log ]; then + echo 'Configuração LIKWID: SUCESSO' + echo '' + ls FLOPS_*.log + echo '' +else + echo 'Configuração LIKWID: FALHA' +fi +echo '-----------------------------------' +echo '' +