OpenCL et GPU Intel UHD Graphics 620

Je souhaite utiliser un NUC10i7FNK qui tourne sur Red Hat Entreprise Linux 8.1 pour éxécuter hashcat. Avec son processeur Intel Core i7-10710U et son GPU Intel UHD Graphics 620, il n'est pas fait pour ça. Pour assurer le travail, je compte sur un Razer Core X équipé d'une Radeon RX 470.

A des fins de test, je souhaite que les 3 périphériques soit pris en chargent par OpenCL mais à terme, je pense que seul le GPU externe sera utilisé.

Intel propose un portail dédiée (OpenCL™ Runtimes for Intel® Processors) à OpenCL.

Intel CPU Runtime

L'Intel CPU Runtime est accessible au téléchargement après s'être enregistré auprès d'Intel qui ne communique aucune information au sujet des prérequis logiciel, c'est lors de l'exécution du script install_GUI.sh que je découvre:

Prerequisites > Missing Prerequisite
--------------------------------------------------------------------------------
Detected operating system is not supported. Supported operating systems for this
release are: 
    - CentOS* 7 (Intel(R) 64);
    - Red Hat Enterprise Linux* 7 (Intel(R) 64);
    - SUSE Linux Enterprise Server* 12 (Intel(R) 64);
    - Ubuntu* 16.04 (Intel(R) 64);

Prerequisites > Missing Prerequisite
--------------------------------------------------------------------------------
The following libraries required for installation are missing:
    - libstdc++.so.6
    - libnuma.so.1
    - ld-linux-x86-64.so.2
    - lsb-core >= 4.0

Pour le moment, je décide de faire sans le CPU >_<

Intel Graphics Compute

Intel Graphics Compute est accessible librement et l'installation se fait simplement en ajoutant un nouveau dépôt. J'ajoute le package clinfo qui permet d'obtenir toutes les informations sur la plateforme OpenCL:

$ sudo yum copr enable jdanecki/intel-opencl
$ sudo yum install intel-opencl clinfo

Vérification avec clinfo:

$ clinfo --list
Platform #0: Intel(R) OpenCL HD Graphics
 `-- Device #0: Intel(R) Gen9 HD Graphics NEO

AMDGPU

C'est après l'installation du driver AMDGPU fourni par AMD que la carte Radeon RX 470 sera utilisable par les composants OpenCL.

$ wget --referer=http://support.amd.com https://drivers.amd.com/drivers/linux/19.50/amdgpu-pro-19.50-967956-rhel-8.1.tar.xz
$ tar xf amdgpu-pro-19.50-967956-rhel-8.1.tar.xz
$ cd amdgpu-pro-19.50-967956-rhel-8.1
$ sudo ./amdgpu-install -y --opencl=legacy

Vérification avec clinfo:

$ clinfo --list
Platform #0: Intel(R) OpenCL HD Graphics
 `-- Device #0: Intel(R) Gen9 HD Graphics NEO
Platform #1: AMD Accelerated Parallel Processing
 `-- Device #0: Ellesmere

hashcat

Je récupère et je compile les sources de l'application hashcat:

git clone https://github.com/hashcat/hashcat.git
cd hashcat/
make -j2

.

$ ./hashcat --backend-info
hashcat (v5.1.0-1755-gddb641b8) starting...

OpenCL Info:
============

OpenCL Platform ID #1
  Vendor..: Intel(R) Corporation
  Name....: Intel(R) OpenCL HD Graphics
  Version.: OpenCL 2.1 

  Backend Device ID #1
    Type...........: GPU
    Vendor.ID......: 8
    Vendor.........: Intel(R) Corporation
    Name...........: Intel(R) Gen9 HD Graphics NEO
    Version........: OpenCL 2.1 NEO 
    Processor(s)...: 24
    Clock..........: 1150
    Memory.Total...: 25424 MB (limited to 4095 MB allocatable in one block)
    Memory.Free....: 25360 MB
    OpenCL.Version.: OpenCL C 2.0 
    Driver.Version.: 20.10.16087

OpenCL Platform ID #2
  Vendor..: Advanced Micro Devices, Inc.
  Name....: AMD Accelerated Parallel Processing
  Version.: OpenCL 2.1 AMD-APP (3004.6)

  Backend Device ID #2
    Type...........: GPU
    Vendor.ID......: 1
    Vendor.........: Advanced Micro Devices, Inc.
    Name...........: Ellesmere
    Version........: OpenCL 1.2 AMD-APP (3004.6)
    Processor(s)...: 32
    Clock..........: 1206
    Memory.Total...: 4090 MB (limited to 3476 MB allocatable in one block)
    Memory.Free....: 3968 MB
    OpenCL.Version.: OpenCL C 1.2 
    Driver.Version.: 3004.6

Quelques benchmark sur du MD5:

$ ./hashcat --benchmark --hash-type 0
hashcat (v5.1.0-1755-gddb641b8) starting in benchmark mode...

Benchmarking uses hand-optimized kernel code by default.
You can use it in your cracking session by setting the -O option.
Note: Using optimized kernel code limits the maximum supported password length.
To disable the optimized kernel code in benchmark mode, use the -w option.

OpenCL API (OpenCL 2.1 ) - Platform #1 [Intel(R) Corporation]
=============================================================
* Device #1: Intel(R) Gen9 HD Graphics NEO, 25360/25424 MB (4095 MB allocatable), 24MCU

OpenCL API (OpenCL 2.1 AMD-APP (3004.6)) - Platform #2 [Advanced Micro Devices, Inc.]
=====================================================================================
* Device #2: Ellesmere, 3968/4090 MB (3476 MB allocatable), 32MCU

Benchmark relevant options:
===========================
* --optimized-kernel-enable

Hashmode: 0 - MD5

Speed.#1.........:   464.4 MH/s (53.46ms) @ Accel:256 Loops:512 Thr:8 Vec:4
Speed.#2.........: 10467.1 MH/s (49.94ms) @ Accel:256 Loops:1024 Thr:64 Vec:1
Speed.#*.........: 10931.5 MH/s

Started: Fri Mar 20 17:17:29 2020
Stopped: Fri Mar 20 17:17:40 2020