Buscadores, Mineros y 49 - Parte 2: Minería GPU-CPU Dual en el ODROID-XU4/MC1/HC1/HC2

GPU TUNING

En un artículo del mes pasado pusimos en práctica la doble minería GPU-CPU en el Odroid XU4/MC1/HC1/HC2. Este mes pondremos al corriente a la comunidad de cómo van las mejoras en este tema y discutiremos algunos ajustes básicos de la GPU. Se ha completado la eliminación de todas las dependencias AMD OpenCL y el ensamblador INTEL para los kernels OpenCL y algoritmos de criptografía para sgminer-arm. Genesis Mining también ha lanzado recientemente una nueva versión de sgminer-gm 5.5.6. Estos cambios han sido incorporados al sgminer 5.5.6-ARM-RC1 recientemente lanzado. Aquí tienes un breve resumen de los kernels y algoritmos de criptografía que han sido modificados para Odroid y los resultados de las pruebas.

ocl/build_kernel.c

algorithm/cryptonight.c

- Optimizaciones del ensamblador INTEL

algorithm/neoscrypt.c

- Optimizaciones de la arquitectura AMD

kernel/cryptonight.cl

- Extensiones AMD OpenCL

kernel/equihash.cl

- Extensiones AMD OpenCL y optimizaciones de la arquitectura AMD

kernel/ethash.cl

- Extensiones AMD OpenCL

kernel/ethash-genoil.cl

- Optimizaciones de la arquitectura AMD

kernel/ethash-new.cl

- Optimizaciones de la arquitectura AMD

kernel/lyra2re.cl

- Extensiones AMD OpenCL

kernel/lyra2rev2.cl

- Extensiones AMD OpenCL

kernel/whirlpoolx.cl

- Optimizaciones de la arquitectura AMD

kernel/wolf-aes.cl

- Extensiones AMD OpenCL

kernel/wolf-skein.cl

- Extensiones AMD OpenCL

Debían tomarse decisiones sobre algoritmos de monedas muy concretas y kernels OpenCL que tenían configuraciones específicas de arquitectura (no extensiones AMD) como se indica. El 70% de los núcleos OpenCL comparten una o más de las mismas extensiones AMD OpenCL, que fueron modificadas y probadas con el kernel cryptonight, que también usa 2 kernels auxiliares OpenCL (wolf-aes.cl y wolf-skein.cl). Parece que ethash-new.cl no se usa para ninguna moneda dejando 2 sin probar, en cualquier caso, whirlpoolx.cl y ethash-genoil.cl. El resto solo tenían optimizaciones de arquitectura AMD y/o Nvidia que se eliminaron. El planteamiento más conservador ha sido usado en determinadas modificaciones para que se ejecutaran en una amplia gama de GPU actuales y futuras, pero siempre hay espacio para errores técnicos y humanos. La implementación de sgminer-arm debe ser independiente de la CPU y GPU, lo que aumenta la posibilidad de añadir algunas optimizaciones de ARM-Mali basadas en arquitecturas específicas (ARMv7, ARMv8, Mali-T628, Mali-T860) en el futuro.

Afinando la GPU

Cuando intentas averiguar por primera vez cuáles son las configuraciones para una moneda que no has extraído, sueles empezar de un modo muy conservador con todas las configuraciones y vas aumentado usando el método de prueba y error hasta que comienzan a aparecer fallos o el rendimiento empieza a caer. Aquí tienes algunos ajustes que son un buen punto de partida para empezar:

./sgminer -k algorithm -o stratum+tcp://your.pool.com:3333 -u user -p password -I 3 -w 32 -d 0,1 --thread-concurrency 8192
Ten en cuenta que en todos los SOC de ARM-Mali, la GPU comparte la memoria principal con la CPU, de modo que también existe una dinámica entre las dos cuando realices minería dual. Es por eso que por lo general se pierde algo de rendimiento CPU/GPU dual en comparación con la minería únicamente sobre la CPU.

Cuando inicias sgminer-arm y la configuración es errónea o excesiva para la GPU, puede manifestarse de muchas y diferentes formas. El kernel OpenCL puede bloquearse, colgarse o indicar diversos mensajes de error. A continuación, se muestra el típico error de un problema de reajuste de la GPU. No es posible compilar el kernel OpenCL.

[19:28:21] Error -6: Creating Kernel from program.  (clCreateKernel)
[19:28:21] Failed to init GPU thread 1, disabling device 1
Otro mensaje de error muy común es que el kernel OpenCL esté intentando asignar más memoria de la que tiene disponible. Ambos indican que tiene que reducirse una o más configuraciones de la GPU (Intensidad, Tamaño de trabajo, Número de subprocesos o Coherencia de los subprocesos).
[19:28:16] Maximum buffer memory device 0 supports says 522586112
[19:28:16] Your settings come to 536870912
En Mineria Dual, se reajusta la GPU y se ejecuta por sí sola y luego se reajusta la CPU y se ejecuta por si sola. Después se intenta ejecutar ambas al mismo tiempo, aunque esperando a que se reajusten de nuevo en consecuencia (generalmente la CPU). La mayoría del software de minería de CPU intentará usar todos los recursos del sistema que pueda. Puede que tengas que configurar manualmente los parámetros del minado por CPU en lugar de dejar que se seleccionen automáticamente. Del mismo modo, hay situaciones en las que existe un uso tan intensivo de la memoria que cualquier otro proceso normal que intente iniciarse puede llegar a causar un problema en el sistema (bloqueo, errores, etc.). En la minería por CPU, ninguna de las versiones de la Imagen HK usa memoria de intercambio por defecto para que así Hugh Pages no pueda activarse. De modo que, por lo general, debería existir un rendimiento similar independientemente del software de minería por CPU que se utilice.

Refrigeración, consumo de energía y monitorización del sistema

Tienes que controlar las temperaturas de la CPU mientras estés reajustando hasta que sepas qué configuración de minería es capaz de utilizar los algoritmos criptográficos que sueles usas. ¡El sistema puede dañase y es probable que ocurra sin una refrigeración adecuada durante la minería! En términos generales, la refrigeración OEM no es suficiente sin reducir significativamente la frecuencia de la CPU. Es una de las muchas razones por las que un sistema puede bloquearse o reiniciarse durante un minado simple o dual. Incluso los pequeños cambios de temperatura del ambiente pueden afectar significativamente a tu sistema y causar daños. Controla las temperaturas del ambiente y del sistema de forma regular durante el minado. Use watchtemp.sh si no cuentas con otros medios.

watchtemp.sh
#!/bin/bash
z=0
echo "T, Freq4,   Freq5,   Freq6,   Freq7,   T4, T5, T6, T7, TGPU"

while true :
do
     fa=`cat /sys/devices/system/cpu/cpu4/cpufreq/scaling_cur_freq`
     fb=`cat /sys/devices/system/cpu/cpu5/cpufreq/scaling_cur_freq`
     fc=`cat /sys/devices/system/cpu/cpu6/cpufreq/scaling_cur_freq`
     fd=`cat /sys/devices/system/cpu/cpu7/cpufreq/scaling_cur_freq`
     s1=`cat /sys/devices/virtual/thermal/thermal_zone0/temp`
     s1t=$(($s1/1000))
     s2=`cat /sys/devices/virtual/thermal/thermal_zone1/temp`
     s2t=$(($s2/1000))
     s3=`cat /sys/devices/virtual/thermal/thermal_zone2/temp`
     s3t=$(($s3/1000))
     s4=`cat /sys/devices/virtual/thermal/thermal_zone3/temp`
     s4t=$(($s4/1000))
         g1=`cat /sys/devices/virtual/thermal/thermal_zone4/temp`
     g1t=$(($g1/1000))

     echo $z, $fa, $fb, $fc, $fd, $s1t, $s2t, $s3t, $s4t, $g1t
     sleep 2
     (( z += 2 ))
done
No se han llegado a realizar pruebas de uso de energía, solo pruebas térmicas. Echa un vistazo a un artículo de los últimos meses en el que se detalla una prueba térmica preliminar. Se usan muchos recursos simultáneamente durante la minería dual y algunos algoritmos criptográficos usan mucha más energía que otros. Por ejemplo, el minado scrypt2 (VRM) utiliza aproximadamente un 20-25% más de energía que el algoritmo cryptonight (Monero). Monitoriza o realiza un estudio de consumo de energía para comprender mejor el uso de energía de la ARM-Mali antes o durante la minería dual para los diferentes algoritmos criptográficos.

Cuando la minería dual sea conservadora, permitirá que el resto del sistema operativo funcione, controle la temperatura y tenga en cuenta el uso de energía hasta que pruebes bien las configuraciones de la CPU y la GPU, y entonces será cuando podrás apoyarte más en ella. La minería dual lleva a estos sistemas al límite. Esta es una nueva frontera para los SBCs ARM, así que ten en cuenta que estás al borde de la utilización extrema del sistema.

Probando con Crypotnight (Monero Coin) con sólo una GPU Odroid-XU4:

sgminer 5.5.6-ARM-RC1 - Started: [2018-03-13 03:06:15] - [0 days 12:38:48]
--------------------------------------------------------------------------------
(5s):22.52 (avg):23.85h/s | A:700000  R:10000  HW:48  WU:0.187/m
ST: 1  SS: 0  NB: 421  LW: 48993  GF: 21  RF: 0
Connected to pool.supportxmr.com (stratum) diff 5K as user 49cbPdjG8RUFjWau2aR9gR1bU6fsP7eGBfaXVsQuFtLrPrZkGpC4AuCEJsuKX
Block: e368fdd9...  Diff:905.5  Started: [15:44:30]  Best share: 325K
--------------------------------------------------------------------------------
[P]ool management [G]PU management [S]ettings [D]isplay options [Q]uit
GPU 0:                |  13.41/ 13.40h/s | R:  2.6% HW:24 WU:0.103/m I: 7
GPU 1:                |  10.45/ 10.45h/s | R:  0.0% HW:24 WU:0.084/m I: 7
--------------------------------------------------------------------------------
[13:41:07] Accepted 035e18c0 Diff 19.5K/5K GPU 0
[13:54:00] Accepted 058d63f3 Diff 11.8K/5K GPU 0
[13:55:45] Accepted 0b3c0178 Diff 5.83K/5K GPU 0
[14:04:37] Accepted 054a51d3 Diff 12.4K/5K GPU 1
[14:15:02] Accepted 014287d0 Diff 52K/5K GPU 1
[14:19:56] Accepted 018036d4 Diff 43.7K/5K GPU 1
[14:20:16] pool.supportxmr.com stale share detected, submitting (user)
[14:20:16] Accepted 052596c8 Diff 12.7K/5K GPU 0
[14:36:38] Stratum connection to pool.supportxmr.com interrupted
[14:40:09] Stratum connection to pool.supportxmr.com interrupted
[14:42:19] Accepted 0b9ad8d2 Diff 5.65K/5K GPU 0
[14:44:23] Accepted 04b3a1c8 Diff 13.9K/5K GPU 0
[14:44:43] Accepted 011e41a0 Diff 58.6K/5K GPU 0
[14:54:26] pool.supportxmr.com stale share detected, submitting (user)
[14:54:26] Accepted 060914e6 Diff 10.9K/5K GPU 0
[14:57:14] pool.supportxmr.com stale share detected, submitting (user)
[14:57:14] Accepted 0a2b9f80 Diff 6.44K/5K GPU 1
[15:04:20] pool.supportxmr.com stale share detected, submitting (user)
[15:04:20] Accepted 076a4aeb Diff 8.84K/5K GPU 0
[15:05:37] Accepted 09d5465e Diff 6.66K/5K GPU 0
[15:10:32] Accepted 0a066760 Diff 6.54K/5K GPU 1
[15:16:15] pool.supportxmr.com stale share detected, submitting (user)
[15:16:16] Accepted 06082f75 Diff 10.9K/5K GPU 1
[15:18:06] pool.supportxmr.com stale share detected, submitting (user)
[15:18:06] Accepted 0ce5243a Diff 5.08K/5K GPU 1
[15:18:30] Accepted ccf47695 Diff 81.9K/5K GPU 1
[15:30:46] Accepted 0857db6a Diff 7.86K/5K GPU 0
[15:30:57] Accepted 090f5ea6 Diff 7.23K/5K GPU 1
[15:31:34] Accepted 071e4b0f Diff 9.21K/5K GPU 1
[15:38:34] Accepted 0a0c5007 Diff 6.52K/5K GPU 0
[15:44:56] Accepted 88acc80f Diff 123K/5K GPU 0
La prueba se ejecutó durante más de 12 horas y todo transcurrió sin problemas. El resumen muestra 2 shares reales rechazados. Tengo una conexión a Internet relativamente lenta, de modo que algún servidor Stratum se desconectaría, lo cual significa que los shares obsoletos no son tan inusuales.
Summary of runtime statistics:

[15:46:02] Started at [2018-03-13 03:06:15]
[15:46:02] Pool: stratum+tcp://pool.supportxmr.com:3333
[15:46:02] Runtime: 12 hrs : 39 mins : 47 secs
[15:46:02] Average hashrate: 0.0 Kilohash/s
[15:46:02] Solved blocks: 0
[15:46:02] Best share difficulty: 325K
[15:46:02] Share submissions: 142
[15:46:02] Accepted shares: 140
[15:46:02] Rejected shares: 2
[15:46:02] Accepted difficulty shares: 700000
[15:46:02] Rejected difficulty shares: 10000
[15:46:02] Reject ratio: 1.4%
[15:46:02] Hardware errors: 48
[15:46:02] Utility (accepted shares / min): 0.18/min
[15:46:02] Work Utility (diff1 shares solved / min): 0.19/min

[15:46:02] Stale submissions discarded due to new blocks: 0
[15:46:02] Unable to get work from server occasions: 21
[15:46:02] Work items generated locally: 49055
[15:46:02] Submitting work remotely delay occasions: 0
[15:46:02] New blocks detected on network: 421

[15:46:02] Summary of per device statistics:

[15:46:02] GPU0                | (5s):13.48 (avg):13.40h/s | A:380000 R:10000 HW:24 WU:0.103/m
[15:46:02] GPU1                | (5s):10.45 (avg):10.45h/s | A:320000 R:0 HW:24 WU:0.084/m
[15:46:02]
Figura 1 - Los resultados de la “pool” confirman los resultados del resumen

Con la modificación de sgminer se ha configurado un git para facilitar su uso y futuras modificaciones. Asimismo, el proceso de instalación ha cambiado y ya no requiere AMD_SDK, solamente la librería ARM Computer Vision and Machine Learning. A continuación, se muestra el nuevo procedimiento.

Descarga e instala la última Librería ARM Computer Vision and Machine Learning desde https://github.com/ARM-software/ComputeLibrary/releases. Ten en cuenta que han separado las librerías de Linux y Android para que ahora quepan en una tarjeta SD de 8GB. Usa el siguiente comando para extraer los archivos:

$ tar -xvzf `filename to extract`
A continuación, instala las dependencias y copie las cabeceras OpenCL:
$ apt-get install automake autoconf pkg-config libcurl4-openssl-dev libjansson-dev libssl-dev libgmp-dev make g++ git libgmp-dev libncurses5-dev libtool opencl-headers mali-fbdev
$ cp ./arm_compute-v18.03-bin-linux/include/CL/* /usr/include/CL/
Descarga sgminer-5.5.6-ARM-RC1 con el siguiente comando:
$ git clone https://github.com/hominoids/sgminer-arm
Luego, compila el código fuente:
$ cd sgminer-arm
$ git submodule init
$ git submodule update
$ autoreconf -fi
$ CFLAGS="-Os -Wall -march=native -std=gnu99 -mfpu=neon" ./configure --disable-git-version --disable-adl --disable-adl-checks
Opcionalmente, puedes utilizar el siguiente comando para que sea más explícito en cuanto a concer dónde se ubica la librería y las cabeceras:
$ CFLAGS="-Os -Wall -march=native -std=gnu99 -mfpu=neon -I/opt/arm_compute-v18.03-bin-linux/include/CL" LDFLAGS="-L/opt/arm_compute-v18.03-bin-linux/lib/linux-armv7a-neon-cl" ./configure --disable-git-version --disable-adl --disable-adl-checks

$ make -j5
Aquí tienes el script y la configuración utilizada para las pruebas de la moneda XMR-Monero utilizando el algoritmo cryptonight:
#!/bin/bash

export GPU_FORCE_64BIT_PTR=1
export GPU_USE_SYNC_OBJECTS=1
export GPU_MAX_ALLOC_PERCENT=100
export GPU_SINGLE_ALLOC_PERCENT=100
export GPU_MAX_HEAP_SIZE=100

./sgminer -k cryptonight -o stratum+tcp://pool.supportxmr.com:3333 -u username -p password -I 7 -w 32 -d 0,1 --thread-concurrency 8192 --monero --pool-no-keepalive
¡La Comunidad ODROID ahora cuenta con el único sistema de minado GPU OpenCL ARM-Mali Linux multi-algoritmo del que tengo constancia de la comunidad crypto! Recuerda consultar el foro para obtener más información y actualizaciones en https://forum.odroid.com/viewtopic.php?f=98&t=29571.

Be the first to comment

Leave a Reply