Copyright
Copyright © José Luis Lara Carrascal 2023-2024
Sumario
Introducción
Libdrm (32/64 bits)
Libglvnd (32/64 bits)
Libvdpau
Libva
OpenCL Headers
OpenCL ICD Loader (32/64 bits)
Mesa (32/64 bits)
Xf86-video-amdgpu
GLU
FreeGLUT
Mesa demos
Clinfo (32/64 bits)
Configurar el inicio de AMDGPU
Iniciamos AMDGPU
Aceleración 3D por software con LLVMpipe
Configurar la aceleración 3D con Adriconf
Uso de OpenCL con AMDGPU
Crear un firmware personalizado para tener RGB completo en el puerto HDMI
Aplicaciones auxiliares de AMDGPU
Enlaces
Introducción
AMDGPU es un controlador de gráficos de código
abierto, alternativo al controlador original de las tarjetas
gráficas de AMD. Tiene soporte de modelos de tarjeta gráfica, desde AMD Radeon HD 7750
hasta los últimos modelos lanzados a fecha de publicación
de este manual. Las similitudes de este manual con el de Nouveau,
son bastante obvias, ya que el mismo se ha creado a partir de este
último, adaptándolo a las características propias
de utilizar un controlador de gráficos, en lugar de otro.
El cambio de tarjeta gráfica por mi parte, convierte a este
manual en el predefinido a la hora de actualizar contenidos, respecto
al otro manual. El cansancio de ver el poco o nulo progreso del
desarrollo de nouveau, lo que me obliga a tener que utilizar el
controlador de gráficos original de NVIDIA (que más tarde
o más temprano dejará de dar soporte a mi tarjeta
gráfica), me ha llevado a probar el mundo de las Radeon de AMD,
el cómo sea dicha experiencia será plasmada como siempre,
en este documento.
Toda la configuración del manual se centra en el uso del modelo
AMD Radeon RX 580 2048SP, lo que viene a reducir archivos, en lo que respecta
al uso del firmware requerido para poder cargar un determinado modelo
de tarjeta.
Libdrm (32/64 bits)
Librería encargada de gestionar el acceso de los controladores
gráficos en sus diversas variantes (Mesa, DRI, X, etc) al
hardware de la tarjeta gráfica a traves del DRM del kernel.
Instalación
Dependencias
Herramientas de Compilación
Entre paréntesis la versión con la que se ha compilado Libdrm para la elaboración de este documento.
* GCC - (14.2.0) o Clang - (18.1.8)
* Meson - (1.5.1)
* Ninja - (1.12.1)
* Pkg-config - (0.29.2)
Librerías de Desarrollo
* Libatomic_ops - (7.8.2)
* Valgrind - (3.23)
Descarga
libdrm-2.4.123.tar.xz
Optimizaciones
$ export {C,CXX}FLAGS='-O3 -march=znver3 -mtune=znver3'
|
Donde pone znver3 se indica el procesador respectivo de cada sistema seleccionándolo de la siguiente tabla: |
Nota informativa sobre las optimizaciones para GCC
|
* La opción '-march=' establece el procesador mínimo con el que funcionará el programa compilado, la opción '-mtune=' el procesador específico para el que será optimizado.
* Los valores separados por comas, son equivalentes, es decir, que lo mismo da poner '-march=k8' que '-march=athlon64'.
* En versiones de GCC 3.2 e inferiores se utiliza la opción '-mcpu=' en lugar de '-mtune='.
|
Nota informativa sobre las optimizaciones para Clang
|
* La opción '-mtune=' está soportada a partir de la versión 3.4 de Clang.
* Los valores de color azul no son compatibles con Clang.
* Las filas con el fondo de color amarillo son valores exclusivos de Clang y, por lo tanto, no son aplicables con GCC.
|
Valores |
CPU |
Genéricos |
generic |
Produce un código binario optimizado para la mayor parte de procesadores existentes. Utilizar este valor si no sabemos el nombre del procesador que tenemos en nuestro equipo. Este valor sólo es aplicable en la opción '-mtune=', si utilizamos GCC. Esta opción está disponible a partir de GCC 4.2. |
native |
Produce un código binario optimizado para el procesador que tengamos en nuestro sistema, siendo éste detectado utilizando la instrucción cpuid. Procesadores antiguos pueden no ser detectados utilizando este valor. Esta opción está disponible a partir de GCC 4.2. |
x86-64 |
Procesador genérico con extensiones 64-bit. Esta opción está disponible a partir de GCC 8 y Clang 1.9. |
x86-64-v2 |
Procesador genérico con con soporte de instrucciones X86-64 (MMX, SSE, SSE2, LAHFSAHF, POPCNT, SSE3, SSE4.1, SSE4.2, SSSE3) y extensiones 64-bit. Esta opción está disponible a partir de GCC 11 y Clang 12. |
x86-64-v3 |
Procesador genérico con con soporte de instrucciones X86-64 (MMX, SSE, SSE2, LAHFSAHF, POPCNT, SSE3, SSE4.1, SSE4.2, SSSE3, AVX, AVX2, F16C, FMA, LZCNT, MOVBE, XSAVE, XSAVEC, FMA4) y extensiones 64-bit. Esta opción está disponible a partir de GCC 11 y Clang 12. |
x86-64-v4 |
Procesador genérico con con soporte de instrucciones X86-64 (MMX, SSE, SSE2, LAHFSAHF, POPCNT, SSE3, SSE4.1, SSE4.2, SSSE3, AVX, AVX2, F16C, FMA, LZCNT, MOVBE, XSAVE, XSAVEC, AVX512*, FMA4) y extensiones 64-bit. Esta opción está disponible a partir de GCC 11 y Clang 12. |
Intel |
alderlake |
Intel Alderlake con soporte de instrucciones x86-64 (MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, CLWB, AVX512VL, AVX512BW, AVX512DQ, AVX512CD, AVX512VNNI, AVX512BF16, MOVDIRI, MOVDIR64B, AVX512VP2INTERSECT, ENQCMD, CLDEMOTE, PTWRITE, WAITPKG, SERIALIZE, TSXLDTRK, UINTR, AMX-BF16, AMX-TILE, AMX-INT8, AVX-VNNI) y extensiones 64-bit. Esta opción está disponible a partir de GCC 11 y Clang 12. |
arrowlake |
Intel Arrow Lake con soporte de instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC, XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX, GFNI-SSE, CLWB, MOVDIRI, MOVDIR64B, CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA, LZCNT, PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL, AVX-VNNI, UINTR, AVXIFMA, AVXVNNIINT8, AVXNECONVERT, CMPCCXADD y extensiones 64-bit. Esta opción está disponible a partir de GCC 14. |
arrowlake-s |
Intel Arrow Lake S con soporte de instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC, XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX, GFNI-SSE, CLWB, MOVDIRI, MOVDIR64B, CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA, LZCNT, PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL, AVX-VNNI, UINTR, AVXIFMA, AVXVNNIINT8, AVXNECONVERT, CMPCCXADD, AVXVNNIINT16, SHA512, SM3, SM4 y extensiones 64-bit. Esta opción está disponible a partir de GCC 14. |
atom |
Intel Atom con soporte de
instrucciones MMX, SSE, SSE2, SSE3, SSSE3 y extensiones
64-bit. Esta opción está disponible desde GCC 4.6, hasta GCC 4.8. A partir de GCC 4.9 se utiliza la definición bonnell. |
bonnell |
Intel Bonnell con soporte de instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3 y extensiones 64-bit. Esta opción está disponible a partir de GCC 4.9. |
broadwell |
Intel Broadwell con soporte de instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW y extensiones 64-bit. Esta opción está disponible a partir de GCC 4.9 y Clang 3.6. |
cannonlake |
Intel Cannonlake Server con soporte de instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD, AVX512VBMI, AVX512IFMA, SHA, UMIP y extensiones 64-bit. Esta opción está disponible a partir de GCC 8 y Clang 3.9. |
cascadelake |
Intel Cascadelake con soporte de instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, CLWB, AVX512VL, AVX512BW, AVX512DQ, AVX512CD, AVX512VNNI y extensiones 64-bit. Esta opción está disponible a partir de GCC 9 y Clang 8. |
clearwaterforest |
Intel Clearwater Forest con soporte de instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC, XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX, GFNI-SSE, CLWB, MOVDIRI, MOVDIR64B, CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA, LZCNT, PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL, AVX-VNNI, ENQCMD, UINTR, AVXIFMA, AVXVNNIINT8, AVXNECONVERT, CMPCCXADD, AVXVNNIINT16, SHA512, SM3, SM4, USER_MSR, PREFETCHI y extensiones 64-bit. Esta opción está disponible a partir de GCC 14 y Clang 18. |
cooperlake |
Intel Cooper Lake con soporte de instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, CLWB, AVX512VL, AVX512BW, AVX512DQ, AVX512CD, AVX512VNNI, AVX512BF16 y extensiones 64-bit. Esta opción está disponible a partir de GCC 10 y Clang 9. |
core2 |
Intel Core2 con soporte de instrucciones MMX, SSE, SSE2, SSE3, SSSE3 y extensiones 64-bit. Esta opción está disponible a partir de GCC 4.3. |
core-avx2 |
Intel Core (Haswell). Esta opción está disponible desde GCC 4.6, hasta GCC 4.8. A partir de GCC 4.9 se utiliza la definición haswell. |
core-avx-i |
Intel Core (ivyBridge) con soporte de instrucciones MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AES, PCLMUL, FSGSBASE, RDRND, F16C y extensiones 64-bit. Esta opción está disponible desde GCC 4.6, hasta GCC 4.8. A partir de GCC 4.9 se utiliza la definición ivybridge. |
corei7 |
Intel Core i7 con soporte de instrucciones MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1 y SSE4.2 y extensiones 64-bit. Soporta también los procesadores Intel Core i3 e i5. Esta opción está disponible desde GCC 4.6, hasta GCC 4.8. A partir de GCC 4.9 se utiliza la definición nehalem. |
corei7-avx |
Intel Core i7 con soporte de instrucciones MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AES y PCLMUL y extensiones 64-bit. Soporta también los procesadores Intel Core i3 e i5. Esta opción está disponible desde GCC 4.6, hasta GCC 4.8. A partir de GCC 4.9 se utiliza la definición sandybridge. |
emeraldrapids |
Intel Emerald Rapids. Esta opción está disponible a partir de GCC 13 y Clang 16. |
goldmont |
Intel Goldmont con soporte de instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PCLMUL, RDRND, XSAVE, XSAVEOPT, FSGSBASE y extensiones 64-bit. Esta opción está disponible a partir de GCC 9 y Clang 5. |
goldmont-plus |
Intel Goldmont Plus con soporte de instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PCLMUL, RDRND, XSAVE, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX, UMIP y extensiones 64-bit. Esta opción está disponible a partir de GCC 9 y Clang 7. |
grandridge |
Intel Grand Ridge con soporte de instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC, XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX, GFNI-SSE, CLWB, MOVDIRI, MOVDIR64B, CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA, LZCNT, PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL, AVX-VNNI, AVXIFMA, AVXVNNIINT8, AVXNECONVERT, CMPCCXADD, RAOINT y extensiones 64-bit. Esta opción está disponible a partir de GCC 13 y Clang 16. |
graniterapids |
Intel Grand Ridge con soporte de instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2, VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ, PCONFIG, WBNOINVD, CLWB, MOVDIRI, MOVDIR64B, AVX512VP2INTERSECT, ENQCMD, CLDEMOTE, PTWRITE, WAITPKG, SERIALIZE, TSXLDTRK, UINTR, AMX-BF16, AMX-TILE, AMX-INT8, AVX-VNNI, AVX512-FP16, AVX512BF16, AMX-FP16, PREFETCHI y extensiones 64-bit. Esta opción está disponible a partir de GCC 13 y Clang 16. |
graniterapids-d |
Intel Granite Rapids D con soporte de instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, CX16, SAHF, FXSR, AVX, XSAVE, PCLMUL, FSGSBASE, RDRND, F16C, AVX2, BMI, BMI2, LZCNT, FMA, MOVBE, HLE, RDSEED, ADCX, PREFETCHW, AES, CLFLUSHOPT, XSAVEC, XSAVES, SGX, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD, PKU, AVX512VBMI, AVX512IFMA, SHA, AVX512VNNI, GFNI, VAES, AVX512VBMI2, VPCLMULQDQ, AVX512BITALG, RDPID, AVX512VPOPCNTDQ, PCONFIG, WBNOINVD, CLWB, MOVDIRI, MOVDIR64B, ENQCMD, CLDEMOTE, PTWRITE, WAITPKG, SERIALIZE, TSXLDTRK, UINTR, AMX-BF16, AMX-TILE, AMX-INT8, AVX-VNNI, AVX512FP16, AVX512BF16, AMX-FP16, PREFETCHI, AMX-COMPLEX y extensiones 64-bit. Esta opción está disponible a partir de GCC 14 y Clang 17. |
haswell |
Intel Haswell con soporte de instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C y extensiones 64-bit. Esta opción está disponible a partir de GCC 4.9. |
i386 |
Intel i386.
|
i486 |
Intel i486. |
i586, pentium |
Intel Pentium sin soporte de instrucciones MMX. |
i686 |
Produce un código binario optimizado para la mayor parte de procesadores compatibles con la serie 80686 de Intel. Todos los actuales lo son. |
icelake-client |
Intel Icelake Client con soporte de instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD, AVX512VBMI, AVX512IFMA, SHA, CLWB, UMIP, RDPID, GFNI, AVX512VBMI2, AVX512VPOPCNTDQ, AVX512BITALG, AVX512VNNI, VPCLMULQDQ, VAES y extensiones 64-bit. Esta opción está disponible a partir de GCC 8 y Clang 7. |
icelake-server |
Intel Icelake Server con soporte de instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD, AVX512VBMI, AVX512IFMA, SHA, CLWB, UMIP, RDPID, GFNI, AVX512VBMI2, AVX512VPOPCNTDQ, AVX512BITALG, AVX512VNNI, VPCLMULQDQ, VAES, PCONFIG, WBNOINVD y extensiones 64-bit. Esta opción está disponible a partir de GCC 8 y Clang 7. |
intel |
Intel Haswell y Silvermont. Este valor sólo es aplicable en la opción '-mtune='. Esta opción está disponible a partir de GCC 4.9. |
ivybridge |
Intel Ivy Bridge con soporte de instrucciones MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AES, PCLMUL, FSGSBASE, RDRND, F16C y extensiones 64-bit. Esta opción está disponible a partir de GCC 4.9. |
knl |
Intel Knights Landing con soporte de instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, AVX512F, AVX512PF, AVX512ER y extensiones 64-bit. Esta opción está disponible a partir de GCC 5 y Clang 3.4. |
knm |
Intel Knights Mill con soporte de instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, AVX512F, AVX512PF, AVX512ER, AVX512CD, AVX5124VNNIW, AVX5124FMAPS, AVX512VPOPCNTDQ y extensiones 64-bit. Esta opción está disponible a partir de GCC 8 y Clang 6. |
lakemont |
Intel Quark Lakemont MCU, basado en el procesador Intel Pentium. Esta opción está disponible a partir de GCC 6 y Clang 3.9. |
lunarlake |
Intel Lunar Lake. Esta opción está disponible a partir de GCC 14 y es equivalente a la opción arrowlake-s. |
meteorlake |
Intel Meteor Lake. Esta opción está disponible a partir de GCC 13 y Clang 16. |
nehalem |
Intel Nehalem con soporte de instrucciones MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT y extensiones 64-bit. Esta opción está disponible a partir de GCC 4.9. |
nocona |
Versión mejorada de Intel Pentium4 con soporte de instrucciones MMX, SSE, SSE2, SSE3 y extensiones 64-bit. |
pantherlake |
Intel Panther Lake con soporte de instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC, XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX, GFNI-SSE, CLWB, MOVDIRI, MOVDIR64B, CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA, LZCNT, PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL, AVX-VNNI, UINTR, AVXIFMA, AVXVNNIINT8, AVXNECONVERT, CMPCCXADD, AVXVNNIINT16, SHA512, SM3, SM4, PREFETCHI y extensiones 64-bit. Esta opción está disponible a partir de GCC 14 y Clang 18. |
penryn |
Intel Penryn con soporte de instrucciones MMX, SSE, SSE2, SSE3, SSSE3 y SSE4.1. |
pentiumpro |
Intel PentiumPro. |
pentium2 |
Intel Pentium2 basado en PentiumPro con soporte de instrucciones MMX. |
pentium3, pentium3m |
Intel Pentium3 basado en PentiumPro con soporte de instrucciones MMX y SSE. |
pentium4, pentium4m |
Intel Pentium4 con soporte de instrucciones MMX, SSE y SSE2. |
pentium-m |
Versión de bajo consumo de Intel Pentium3 con soporte de instrucciones MMX, SSE y SSE2. Utilizado por los portátiles Centrino. |
pentium-mmx |
Intel PentiumMMX basado en Pentium con soporte de instrucciones MMX. |
prescott |
Versión mejorada de Intel Pentium4 con soporte de instrucciones MMX, SSE, SSE2 y SSE3. |
raptorlake |
Intel Raptor Lake. Esta opción está disponible a partir de GCC 13 y Clang 16. |
rocketlake |
Intel Rocket Lake con soporte de instrucciones x86-64 (MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD, AVX512VBMI, AVX512IFMA, SHA, CLWB, UMIP, RDPID, GFNI, AVX512VBMI2, AVX512VPOPCNTDQ, AVX512BITALG, AVX512VNNI, VPCLMULQDQ, VAES) y extensiones 64-bit. Esta opción está disponible a partir de GCC 11 y Clang 13. |
sandybridge |
Intel Sandy Bridge con soporte de instrucciones MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AES, PCLMUL y extensiones 64-bit. Esta opción está disponible a partir de GCC 4.9 y Clang 3.6. |
sapphirerapids |
Intel Sapphire Rapids con soporte de instrucciones x86-64 (MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, CLWB, AVX512VL, AVX512BW, AVX512DQ, AVX512CD, AVX512VNNI, AVX512BF16, MOVDIRI, MOVDIR64B, AVX512VP2INTERSECT, ENQCMD, CLDEMOTE, PTWRITE, WAITPKG, SERIALIZE, TSXLDTRK, UINTR, AMX-BF16, AMX-TILE, AMX-INT8, AVX-VNNI) y extensiones 64-bit. Esta opción está disponible a partir de GCC 11 y Clang 12. |
silvermont |
Intel Silvermont con soporte de instrucciones MOVBE, MMX, SSE, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PCLMU, RDRND y extensiones 64-bit. Esta opción está disponible a partir de GCC 4.9 y Clang 3.6. |
sierraforest |
Intel Sierra Forest con soporte de instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PREFETCHW, PCLMUL, RDRND, XSAVE, XSAVEC, XSAVES, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX, GFNI-SSE, CLWB, MOVDIRI, MOVDIR64B, CLDEMOTE, WAITPKG, ADCX, AVX, AVX2, BMI, BMI2, F16C, FMA, LZCNT, PCONFIG, PKU, VAES, VPCLMULQDQ, SERIALIZE, HRESET, KL, WIDEKL, AVX-VNNI, AVXIFMA, AVXVNNIINT8, AVXNECONVERT, CMPCCXADD y extensiones 64-bit. Esta opción está disponible a partir de GCC 13 y Clang 16. |
skylake |
Intel Skylake con soporte de instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES y extensiones 64-bit. Esta opción está disponible a partir de GCC 6 y Clang 3.6. |
skylake-avx512 |
Intel Skylake Server con soporte de instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD y extensiones 64-bit. Esta opción está disponible a partir de GCC 6 y Clang 3.9. |
tigerlake |
Intel Tiger Lake con soporte de instrucciones OVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD, AVX512VBMI, AVX512IFMA, SHA, CLWB, UMIP, RDPID, GFNI, AVX512VBMI2, AVX512VPOPCNTDQ, AVX512BITALG, AVX512VNNI, VPCLMULQDQ, VAES, PCONFIG, WBNOINVD, MOVDIRI, MOVDIR64B, AVX512VP2INTERSECT y extensiones 64-bit. Esta opción está disponible a partir de GCC 10 y Clang 10. |
tremont |
Intel Tremont con soporte de instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PCLMUL, RDRND, XSAVE, XSAVEOPT, FSGSBASE, PTWRITE, RDPID, SGX, UMIP, GFNI-SSE, CLWB, ENCLV y extensiones 64-bit. Esta opción está disponible a partir de GCC 9 y Clang 7. |
westmere |
Intel Westmere con soporte de instrucciones MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PCLMUL y extensiones 64-bit. Esta opción está disponible a partir de GCC 4.9. |
yonah |
Procesadores basados en la microarquitectura de Pentium M, con soporte de instrucciones MMX, SSE, SSE2 y SSE3. |
AMD |
amdfam10, barcelona |
Procesadores basados en AMD Family 10h core con soporte de instrucciones x86-64 (MMX, SSE, SSE2, SSE3, SSE4A, 3DNow!, enhanced 3DNow!, ABM y extensiones 64-bit). Esta opción está disponible a partir de GCC 4.3. La definición barcelona está disponible a partir de Clang 3.6. |
athlon, athlon-tbird |
AMD Athlon con soporte de instrucciones MMX, 3DNow!, enhanced 3DNow! y SSE prefetch. |
athlon4, athlon-xp, athlon-mp |
Versiones mejoradas de AMD Athlon con soporte de instrucciones MMX, 3DNow!, enhanced 3DNow! y full SSE. |
bdver1 |
Procesadores basados en AMD Family 15h core con soporte de instrucciones x86-64 (FMA4, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM y extensiones 64-bit). Esta opción está disponible a partir de GCC 4.7. |
bdver2 |
Procesadores basados en AMD Family 15h core con soporte de instrucciones x86-64 (BMI, TBM, F16C, FMA, LWP, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM y extensiones 64-bit). Esta opción está disponible a partir de GCC 4.7. |
bdver3 |
Procesadores basados en AMD Family 15h core con soporte de instrucciones x86-64 (FMA4, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM y extensiones 64-bit). Esta opción está disponible a partir de GCC 4.8 y Clang 3.4. |
bdver4 |
Procesadores basados en AMD Family 15h core con soporte de instrucciones x86-64 (BMI, BMI2, TBM, F16C, FMA, FMA4, FSGSBASE, AVX, AVX2, XOP, LWP, AES, PCL_MUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM y extensiones 64-bit). Esta opción está disponible a partir de GCC 4.9 y Clang 3.5. |
btver1 |
Procesadores basados en AMD Family 14h core con soporte de instrucciones x86-64 (MMX, SSE, SSE2, SSE3, SSE4A, CX16, ABM y extensiones 64-bit). Esta opción está disponible a partir de GCC 4.6. |
btver2 |
Procesadores basados en AMD Family 16h core con soporte de instrucciones x86-64 (MOVBE, F16C, BMI, AVX, PCL_MUL, AES, SSE4.2, SSE4.1, CX16, ABM, SSE4A, SSSE3, SSE3, SSE2, SSE, MMX y extensiones 64-bit). Esta opción está disponible a partir de GCC 4.8. |
geode |
AMD integrado con soporte de instrucciones MMX y 3DNow!. Esta opción está disponible a partir de GCC 4.3. |
k6 |
AMD K6 con soporte de instrucciones MMX. |
k6-2, k6-3 |
Versiones mejoradas de AMD K6 con soporte de instrucciones MMX y 3DNow!. |
k8, opteron, athlon64, athlon-fx |
Procesadores basados en AMD K8 core con soporte de instrucciones x86-64 (MMX, SSE, SSE2, 3DNow!, enhanced 3DNow! y extensiones 64-bit). |
k8-sse3, opteron-sse3, athlon64-sse3 |
Versiones mejoradas de AMD K8 core con soporte de instrucciones SSE3. Esta opción está disponible a partir de GCC 4.3. |
znver1 |
Procesadores basados en AMD Family 17h core con soporte de instrucciones x86-64 (BMI, BMI2, F16C, FMA, FSGSBASE, AVX, AVX2, ADCX, RDSEED, MWAITX, SHA, CLZERO, AES, PCL_MUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT y extensiones 64-bit). Esta opción está disponible a partir de GCC 6 y Clang 4. |
znver2 |
Procesadores basados en AMD Family 17h core con soporte de instrucciones x86-64 (BMI, BMI2, ,CLWB, F16C, FMA, FSGSBASE, AVX, AVX2, ADCX, RDSEED, MWAITX, SHA, CLZERO, AES, PCL_MUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT y extensiones 64-bit). Esta opción está disponible a partir de GCC 9 y Clang 9. |
znver3 |
Procesadores basados en AMD Family 19h core con soporte de instrucciones x86-64 (BMI, BMI2, CLWB, F16C, FMA, FSGSBASE, AVX, AVX2, ADCX, RDSEED, MWAITX, SHA, CLZERO, AES, PCLMUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT, RDPID, WBNOINVD, PKU, VPCLMULQDQ, VAES) y extensiones 64-bit. Esta opción está disponible a partir de GCC 11 y Clang 12. |
znver4 |
Procesadores basados en AMD Family 19h core con soporte de instrucciones x86-64 (BMI, BMI2, CLWB, F16C, FMA, FSGSBASE, AVX, AVX2, ADCX, RDSEED, MWAITX, SHA, CLZERO, AES, PCLMUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT, RDPID, WBNOINVD, PKU, VPCLMULQDQ, VAES, AVX512F, AVX512DQ, AVX512IFMA, AVX512CD, AVX512BW, AVX512VL, AVX512BF16, AVX512VBMI, AVX512VBMI2, AVX512VNNI, AVX512BITALG, AVX512VPOPCNTDQ, GFNI) y extensiones 64-bit. Esta opción está disponible a partir de GCC 12.3 y Clang 16. |
znver5 |
Procesadores basados en AMD Family 1ah core con soporte de instrucciones x86-64 (BMI, BMI2, CLWB, F16C, FMA, FSGSBASE, AVX, AVX2, ADCX, RDSEED, MWAITX, SHA, CLZERO, AES, PCLMUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT, RDPID, WBNOINVD, PKU, VPCLMULQDQ, VAES, AVX512F, AVX512DQ, AVX512IFMA, AVX512CD, AVX512BW, AVX512VL, AVX512BF16, AVX512VBMI, AVX512VBMI2, AVX512VNNI, AVX512BITALG, AVX512VPOPCNTDQ, GFNI, AVXVNNI, MOVDIRI, MOVDIR64B, AVX512VP2INTERSECT, PREFETCHI) y extensiones 64-bit. Esta opción está disponible a partir de GCC 14. |
Optimizaciones adicionales
Optimizaciones adicionales |
GCC |
Graphite
|
$ export {C,CXX}FLAGS+=' -ftree-loop-linear -floop-strip-mine -floop-block'
|
IPA
|
$ export {C,CXX}FLAGS+=' -fipa-pta'
|
LTO |
$ export {C,CXX}FLAGS+=' -fuse-linker-plugin -flto=auto' |
En versiones inferiores a GCC 10, sustituir auto
por el número de núcleos que tenga nuestro procesador. Si
sólo tiene uno, utilizar el parámetro -flto |
Clang |
Polly |
$ export {C,CXX}FLAGS+=' -O3 -mllvm -polly -mllvm -polly-vectorizer=stripmine'
|
LTO |
$ export AR=llvm-ar RANLIB=llvm-ranlib NM=llvm-nm
$ export {C,CXX}FLAGS+=' -flto'
|
ThinLTO |
$ export AR=llvm-ar RANLIB=llvm-ranlib NM=llvm-nm
$ export {C,CXX}FLAGS+=' -flto=thin'
|
La aplicación de esta optimización es alternativa a la tradicional LTO, a partir de Clang 3.9 y, por lo tanto, no es combinable con la misma. |
Unified LTO |
LTO >> ThinLTO |
$ export AR=llvm-ar RANLIB=llvm-ranlib NM=llvm-nm
$ export {C,CXX}FLAGS+=' -flto -funified-lto'
$ export LDFLAGS+=' -Wl,--lto=thin' |
ThinLTO >> LTO |
$ export AR=llvm-ar RANLIB=llvm-ranlib NM=llvm-nm
$ export {C,CXX}FLAGS+=' -flto=thin -funified-lto'
$ export LDFLAGS+=' -Wl,--lto=full' |
La aplicación de esta optimización es aplicable, a partir de Clang 17, y sólo es combinable con LLD. |
Parámetros adicionales para la versión de 32 bits
Optimizaciones de CPU para Intel en sistemas de 64 bits multiarquitectura |
$ export {C,CXX}FLAGS='-O3 -march=i686 -mtune=pentium4' |
Optimizaciones de CPU para AMD en sistemas de 64 bits multiarquitectura |
$ export {C,CXX}FLAGS='-O3 -march=i686 -mtune=athlon-xp' |
Establecer la variable de entorno adecuada para pkg-config en sistemas de 64 bits multiarquitectura |
$ export PKG_CONFIG_PATH=/usr/lib/pkgconfig:/usr/local/lib/pkgconfig:/usr/share/pkgconfig:$PKG_CONFIG_PATH |
Establecer la ruta de búsqueda de directorios de librerías en sistemas de 64 bits multiarquitectura |
$ export LDFLAGS+=' -L/usr/lib -L/usr/local/lib -L/opt/gcc14/lib' |
Cada usuario tendrá
que establecer la ruta de búsqueda de directorios, en
función de la distribución que utilice. |
Establecer la variable de entorno de uso de compilador en modo de 32 bits, en sistemas de 64 bits multiarquitectura |
GCC |
$ export CC="gcc -m32" CXX="g++ -m32"
|
Clang |
$ export CC="clang -m32" CXX="clang++ -m32"
|
Parámetros adicionales para la versión de 64 bits
Establecer la ruta de búsqueda de directorios de librerías en sistemas de 64 bits multiarquitectura |
$ export
LDFLAGS+=" -L/usr/lib64 -L/usr/local/lib64 -L/opt/gcc14/lib64" |
Cada usuario tendrá
que establecer la ruta de búsqueda de directorios, en
función de la distribución que utilice. |
Establecer la variable de entorno de uso de compilador para Clang |
$ export CC=clang CXX=clang++ |
Parámetros adicionales globales
Parámetros adicionales de eliminación de avisos en el proceso de compilación |
$ export {C,CXX}FLAGS+=' -w' |
Establecer el uso de enlazador dinámico para Mold |
$ export LDFLAGS+=' -fuse-ld=mold' |
Establecer el uso de enlazador dinámico para LLD |
Clang |
$ export LDFLAGS+=' -fuse-ld=lld' |
Optimizaciones complementarias LTO/ThinLTO de LLD |
$ export LDFLAGS+=' -Wl,--lto-aa-pipeline=globals-aa -Wl,--lto-newpm-passes=memcpyopt' |
Optimizaciones complementarias LTO de LLD |
$ export LDFLAGS+=" -Wl,--lto-partitions=$(expr $(nproc) / 2)" |
Optimizaciones complementarias ThinLTO de LLD |
$ export LDFLAGS+=" -Wl,--thinlto-jobs=$(expr $(nproc) / 2)" |
Extracción
$ tar Jxvf libdrm-2.4.123.tar.xz
$ cd libdrm-2.4.123
|
Configuración de la versión de 32 bits
$ meson build32 --prefix=/usr --buildtype=release --strip \
-D{nouveau,intel}=disabled -Dcairo-tests=disabled -Dtests=false \
--libdir=/usr/lib |
Explicación de los comandos
--prefix=/usr : Instala la librería en el directorio principal /usr.
--buildtype=release
: Compila la versión optimizada del paquete, ya que Meson
compila por defecto los paquetes con los parámetros -O2 -g.
--strip : Elimina los símbolos no necesarios para su ejecución de los binarios ejecutables correspondientes.
-D{nouveau,intel}=disabled
: Desactiva el soporte de otros controladores gráficos.
-Dcairo-tests=disabled : Desactiva la generación de los tests dependientes de la librería Cairo, innecesarios para la construcción de los binarios del paquete.
-Dtests=false : Lo mismo que arriba, tests innecesarios para la construcción de los binarios del paquete.
--libdir=/usr/lib : Instala las librerías de 32 bits en /usr/lib. La ubicación y el nombre de este
directorio, puede variar en función de la distribución que
cada usuario use.
Compilación
Parámetros de compilación opcionales
-v : Muestra más información en el proceso de compilación.
-j$(nproc)
: Establece el número de procesos de compilación en
paralelo, en función del número de núcleos e hilos
que tenga nuestro procesador, tomando como referencia la
información mostrada por el sistema con el comando
correspondiente. Si nuestro procesador es mononúcleo de un solo
hilo, no añadir esta opción.
Instalación como root
$ su
# ninja -C build32 install
# ldconfig -v |
Configuración de la versión de 64 bits
$ meson build64 --prefix=/usr --buildtype=release --strip \
-D{nouveau,intel}=disabled -Dcairo-tests=disabled -Dtests=false |
Compilación
Instalación como root
$ su
# ninja -C build64 install
# ldconfig -v |
Estadísticas de Compilación e Instalación de Libdrm
Estadísticas de Compilación e Instalación de Libdrm |
CPU |
AMD Ryzen 5 5500 |
MHz |
3600 (BoostMax=4457) |
RAM |
32 GB |
Sistema de archivos |
XFS |
Versión del Kernel |
6.10.6-ml SMP PREEMPT_DYNAMIC x86_64 |
Modo de frecuencia de la CPU |
powersave (balance performance) |
Planificador de CPU |
BMQ |
Versión de Glibc |
2.40 |
Enlazador dinámico |
LLD 18.1.8 |
Compilador |
Clang 18.1.8 |
Parámetros de optimización de la versión de 32 bits |
-03 -march=i686 -mtune=athlon-xp
-mllvm -polly -mllvm -polly-vectorizer=stripmine -flto -funified-lto -Wl,--lto=thin -Wl,--thinlto-jobs=6
-Wl,--lto-aa-pipeline=globals-aa -Wl,--lto-newpm-passes=memcpyopt |
Parámetros de optimización de la versión de 64 bits |
-03 -march=znver3 -mtune=znver3
-mllvm -polly -mllvm -polly-vectorizer=stripmine -flto -funified-lto -Wl,--lto=thin -Wl,--thinlto-jobs=6
-Wl,--lto-aa-pipeline=globals-aa -Wl,--lto-newpm-passes=memcpyopt |
Parámetros de compilación |
-v -j12 |
Tiempo de compilación |
1" |
Archivos instalados |
55 |
|
Enlaces simbólicos creados |
12 |
|
Ocupación de espacio en disco |
1,2 MB |
Desinstalación como root
1) MODO TRADICIONAL
$ su -c "ninja -C build{32,64} uninstall" |
2) MODO MANUALINUX
El principal inconveniente del comando anterior es que tenemos que
tener el directorio de compilación en nuestro sistema para poder
desinstalar el programa. En algunos casos esto supone muchos megas de
espacio en disco. Con el paquete de scripts que pongo a
continuación logramos evitar el único inconveniente que
tiene la compilación de programas, y es el tema de la
desinstalación de los mismos sin la necesidad de tener
obligatoriamente una copia de las fuentes compiladas.
libdrm-2.4.123-scripts.tar.gz
$ su
# tar zxvf libdrm-2.4.123-scripts.tar.gz
# cd libdrm-2.4.123-scripts
# ./Desinstalar_libdrm-2.4.123 |
Copia de Seguridad como root
Con este otro script creamos una copia de seguridad de los binarios
compilados, recreando la estructura de directorios de los mismos en un
directorio de copias de seguridad (copibin) que se crea en el directorio /var. Cuando se haya creado el paquete comprimido de los binarios podemos copiarlo como usuario a nuestro home
y borrar el que ha creado el script de respaldo, teniendo en cuenta que
si queremos volver a restaurar la copia, tendremos que volver a
copiarlo al lugar donde se ha creado.
$ su
# tar zxvf libdrm-2.4.123-scripts.tar.gz
# cd libdrm-2.4.123-scripts
# ./Respaldar_libdrm-2.4.123 |
Restaurar la Copia de Seguridad como root
Y con este otro script (que se copia de forma automática cuando
creamos la copia de respaldo del programa) restauramos la copia de
seguridad como root cuando resulte necesario.
$ su
# cd /var/copibin/restaurar_copias
# ./Restaurar_libdrm-2.4.123
|
Libglvnd (32/64 bits)
Librerías OpenGL proporcionadas por NVIDIA, que permiten
coexistir, diferentes controladores de gráficos en un mismo
sistema y facilita la alternancia de uso entre los controladores de
código abierto y el controlador de gráficos original de
NVIDIA, sin tener que hacer malabares ni eliminar archivos.
Instalación
Dependencias
Herramientas de Compilación
Entre paréntesis la versión con la que se ha compilado Libglvnd para la elaboración de este documento.
* GCC - (14.1.0) o Clang - (18.1.0)
* Meson - (1.3.2)
* Ninja - (1.11.1)
* Pkg-config - (0.29.2)
Librerías de Desarrollo
* Xorg - (7.7 / xorg-server 21.1.11)
LibX11 - (1.8.7)
LibXext - (1.3.6)
Xorgproto - (2023.2)
Descarga
libglvnd-1.7.0.tar.gz
Optimizaciones
Optimizaciones adicionales
Optimizaciones adicionales |
GCC |
Graphite
|
$ export {C,CXX}FLAGS+=' -ftree-loop-linear -floop-strip-mine -floop-block' |
IPA
|
$ export {C,CXX}FLAGS+=' -fipa-pta'
|
LTO |
$ export {C,CXX}FLAGS+=' -fuse-linker-plugin -flto=auto' |
En versiones inferiores a GCC 10, sustituir auto
por el número de núcleos que tenga nuestro procesador. Si
sólo tiene uno, utilizar el parámetro -flto |
Clang |
Polly |
$ export {C,CXX}FLAGS+=' -O3 -mllvm -polly -mllvm -polly-vectorizer=stripmine' |
LTO |
$ export {C,CXX}FLAGS+=' -flto'
|
ThinLTO |
$ export {C,CXX}FLAGS+=' -flto=thin'
|
La aplicación de esta optimización es alternativa a la tradicional LTO, a partir de Clang 3.9 y, por lo tanto, no es combinable con la misma. |
Unified LTO |
LTO >> ThinLTO |
$ export {C,CXX}FLAGS+=' -flto -funified-lto'
$ export LDFLAGS+=' -Wl,--lto=thin' |
ThinLTO >> LTO |
$ export {C,CXX}FLAGS+=' -flto=thin -funified-lto'
$ export LDFLAGS+=' -Wl,--lto=full' |
La aplicación de esta optimización es aplicable, a partir de Clang 17, y sólo es combinable con LLD. |
Parámetros adicionales para la versión de 32 bits
Optimizaciones de CPU para Intel en sistemas de 64 bits multiarquitectura |
$ export {C,CXX}FLAGS='-O3 -march=i686 -mtune=pentium4' |
Optimizaciones de CPU para AMD en sistemas de 64 bits multiarquitectura |
$ export {C,CXX}FLAGS='-O3 -march=i686 -mtune=athlon-xp' |
Establecer la variable de entorno adecuada para pkg-config en sistemas de 64 bits multiarquitectura |
$ export PKG_CONFIG_PATH=/usr/lib/pkgconfig:/usr/local/lib/pkgconfig:/usr/share/pkgconfig:$PKG_CONFIG_PATH |
Establecer la ruta de búsqueda de directorios de librerías en sistemas de 64 bits multiarquitectura |
$ export LDFLAGS+=' -L/usr/lib -L/usr/local/lib -L/opt/gcc14/lib' |
Cada usuario tendrá
que establecer la ruta de búsqueda de directorios, en
función de la distribución que utilice. |
Establecer la variable de entorno de uso de compilador en modo de 32 bits, en sistemas de 64 bits multiarquitectura |
GCC |
$ export CC="gcc -m32" CXX="g++ -m32"
|
Clang |
$ export CC="clang -m32" CXX="clang++ -m32"
|
Parámetros adicionales para la versión de 64 bits
Establecer la ruta de búsqueda de directorios de librerías en sistemas de 64 bits multiarquitectura |
$ export
LDFLAGS+=" -L/usr/lib64 -L/usr/local/lib64 -L/opt/gcc14/lib64" |
Cada usuario tendrá
que establecer la ruta de búsqueda de directorios, en
función de la distribución que utilice. |
Establecer la variable de entorno de uso de compilador para Clang |
$ export CC=clang CXX=clang++ |
Parámetros adicionales globales
Parámetros adicionales de eliminación de avisos en el proceso de compilación |
$ export {C,CXX}FLAGS+=' -w' |
Establecer el uso de enlazador dinámico para Mold |
$ export LDFLAGS+=' -fuse-ld=mold' |
Establecer el uso de enlazador dinámico para LLD |
Clang |
$ export LDFLAGS+=' -fuse-ld=lld' |
Optimizaciones complementarias LTO/ThinLTO de LLD |
$ export LDFLAGS+=' -Wl,--lto-aa-pipeline=globals-aa -Wl,--lto-newpm-passes=memcpyopt' |
Optimizaciones complementarias LTO de LLD |
$ export LDFLAGS+=" -Wl,--lto-partitions=$(expr $(nproc) / 2)" |
Optimizaciones complementarias ThinLTO de LLD |
$ export LDFLAGS+=" -Wl,--thinlto-jobs=$(expr $(nproc) / 2)" |
Extracción
$ tar zxvf libglvnd-1.7.0.tar.gz
$ cd libglvnd-1.7.0
|
Configuración de la versión de 32 bits
$ meson build32 --prefix=/usr --buildtype=release --strip --libdir=/usr/lib
|
Explicación de los comandos
--prefix=/usr : Instala la librería en el directorio principal /usr.
--buildtype=release
: Compila la versión optimizada del paquete, ya que Meson
compila por defecto los paquetes con los parámetros -O2 -g.
--strip : Elimina los símbolos no necesarios para su ejecución de los binarios ejecutables correspondientes.
--libdir=/usr/lib : Instala las librerías de 32 bits en /usr/lib. La ubicación y el nombre de este
directorio, puede variar en función de la distribución que
cada usuario use.
Compilación
Parámetros de compilación opcionales
Instalación como root
$ su
# ninja -C build32 install
# ldconfig -v |
Configuración de la versión de 64 bits
$ meson build64 --prefix=/usr --buildtype=release --strip
|
Compilación
Instalación como root
$ su
# ninja -C build64 install
# ldconfig -v |
Estadísticas de Compilación e Instalación de Libglvnd
Estadísticas de Compilación e Instalación de Libglnvd |
CPU |
AMD Ryzen 5 5500 |
MHz |
3600 (BoostMax=4457) |
RAM
|
32 GB |
Sistema de archivos |
XFS |
Versión del Kernel |
6.7.8-ml SMP PREEMPT_DYNAMIC x86_64 |
Modo de frecuencia de la CPU |
powersave (balance performance) |
Planificador de CPU |
BORE |
Versión de Glibc |
2.39 |
Enlazador dinámico |
LLD 18.1.0 |
Compilador |
Clang 18.1.0 |
Parámetros de optimización de la versión de 32 bits |
-03 -march=i686 -mtune=athlon-xp
-mllvm -polly -mllvm -polly-vectorizer=stripmine -flto -funified-lto -Wl,--lto=thin -Wl,--thinlto-jobs=6
-Wl,--lto-aa-pipeline=globals-aa -Wl,--lto-newpm-passes=memcpyopt |
Parámetros de optimización de la versión de 64 bits |
-03 -march=znver3 -mtune=znver3
-mllvm -polly -mllvm -polly-vectorizer=stripmine -flto -funified-lto -Wl,--lto=thin -Wl,--thinlto-jobs=6
-Wl,--lto-aa-pipeline=globals-aa -Wl,--lto-newpm-passes=memcpyopt |
Parámetros de compilación |
-v -j12 |
Tiempo de compilación |
4" |
Archivos instalados |
52 |
|
Enlaces simbólicos creados |
28 |
|
Ocupación de espacio en disco |
5,2 MB |
Desinstalación como root
1) MODO TRADICIONAL
$ su -c "ninja -C build{32,64} uninstall" |
2) MODO MANUALINUX
libglvnd-1.7.0-scripts.tar.gz
$ su
# tar zxvf libglvnd-1.7.0-scripts.tar.gz
# cd libglvnd-1.7.0-scripts
# ./Desinstalar_libglvnd-1.7.0 |
Copia de Seguridad como root
$ su
# tar zxvf libglvnd-1.7.0-scripts.tar.gz
# cd libglvnd-1.7.0-scripts
# ./Respaldar_libglvnd-1.7.0 |
Restaurar la Copia de Seguridad como root
$ su
# cd /var/copibin/restaurar_copias
# ./Restaurar_libglvnd-1.7.0
|
Libvdpau
Librería utilizada por las aplicaciones para acceder a la interfaz de programación de aplicaciones, VDPAU, y así poder tener aceleración por hardware a través de la GPU en la decodificación de vídeo. En el caso de AMDGPU es necesario compilar el soporte del controlador gallium, radeonsi, en las librerías Mesa, para poder hacer uso de esta característica.
Instalación
Dependencias
Herramientas de Compilación
Entre paréntesis la versión con la que se ha compilado Libvdpau para la elaboración de este documento.
* GCC - (14.1.0) o Clang - (18.1.0)
* Meson - (1.3.2)
* Ninja - (1.11.1)
* CMake - (3.28.3)
* Gawk - (5.3.0)
* M4 - (1.4.19)
* Libtool - (2.4.7)
* Make - (4.4.1)
* Automake - (1.16.5)
* Autoconf - (2.72)
* Pkg-config - (0.29.2)
Librerías de Desarrollo
* Xorg - (7.7 / xorg-server 21.1.11)
LibX11 - (1.8.7)
LibXext - (1.3.6)
Xorgproto - (2023.2)
Descarga
libvdpau-1.5.tar.bz2 | vdpauinfo-1.5.tar.bz2
Optimizaciones
Optimizaciones adicionales
Optimizaciones adicionales |
GCC |
Graphite
|
$ export {C,CXX}FLAGS+=' -ftree-loop-linear -floop-strip-mine -floop-block' |
IPA
|
$ export {C,CXX}FLAGS+=' -fipa-pta'
|
LTO |
$ export {C,CXX}FLAGS+=' -fuse-linker-plugin -flto=auto' |
En versiones inferiores a GCC 10, sustituir auto
por el número de núcleos que tenga nuestro procesador. Si
sólo tiene uno, utilizar el parámetro -flto |
Clang |
Polly |
$ export {C,CXX}FLAGS+=' -O3 -mllvm -polly -mllvm -polly-vectorizer=stripmine' |
LTO |
$ export AR=llvm-ar RANLIB=llvm-ranlib NM=llvm-nm
$ export {C,CXX}FLAGS+=' -flto'
|
ThinLTO |
$ export AR=llvm-ar RANLIB=llvm-ranlib NM=llvm-nm
$ export {C,CXX}FLAGS+=' -flto=thin'
|
La aplicación de esta optimización es alternativa a la tradicional LTO, a partir de Clang 3.9 y, por lo tanto, no es combinable con la misma. |
Unified LTO |
LTO >> ThinLTO |
$ export AR=llvm-ar RANLIB=llvm-ranlib NM=llvm-nm
$ export {C,CXX}FLAGS+=' -flto -funified-lto'
$ export LDFLAGS+=' -Wl,--lto=thin' |
ThinLTO >> LTO |
$ export AR=llvm-ar RANLIB=llvm-ranlib NM=llvm-nm
$ export {C,CXX}FLAGS+=' -flto=thin -funified-lto'
$ export LDFLAGS+=' -Wl,--lto=full' |
La aplicación de esta optimización es aplicable, a partir de Clang 17, y sólo es combinable con LLD. |
Parámetros adicionales
Parámetros adicionales de eliminación de avisos en el proceso de compilación |
$ export {C,CXX}FLAGS+=' -w' |
Establecer la ruta de búsqueda de directorios de librerías en sistemas de 64 bits multiarquitectura |
$ export LDFLAGS+=" -L/usr/lib64 -L/usr/local/lib64 -L/opt/gcc14/lib64" |
Cada usuario tendrá que
establecer la ruta de búsqueda de directorios, en función
de la distribución que utilice. |
Establecer el uso de enlazador dinámico para Mold |
$ export LDFLAGS+=' -fuse-ld=mold' |
Establecer el uso de enlazador dinámico para LLD |
Clang |
$ export LDFLAGS+=' -fuse-ld=lld' |
Optimizaciones complementarias LTO/ThinLTO de LLD |
$ export LDFLAGS+=' -Wl,--lto-aa-pipeline=globals-aa -Wl,--lto-newpm-passes=memcpyopt' |
Optimizaciones complementarias LTO de LLD |
$ export LDFLAGS+=" -Wl,--lto-partitions=$(expr $(nproc) / 2)" |
Optimizaciones complementarias ThinLTO de LLD |
$ export LDFLAGS+=" -Wl,--thinlto-jobs=$(expr $(nproc) / 2)" |
Establecer la variable de entorno de uso de compilador para Clang |
$ export CC=clang CXX=clang++ |
Extracción y Configuración de Libvdpau
$ tar jxvf libvdpau-1.5.tar.bz2
$ cd libvdpau-1.5
$ meson build --prefix=/usr --buildtype=release --strip -Ddocumentation=false
|
Explicación de los comandos
--prefix=/usr : Instala la librería en el directorio principal /usr.
--buildtype=release
: Compila la versión optimizada del paquete, ya que Meson
compila por defecto los paquetes con los parámetros -O2 -g.
--strip : Elimina los símbolos no necesarios para su ejecución de los binarios ejecutables correspondientes.
-Ddocumentation=false : No instala la documentación del paquete.
Compilación
Parámetros de compilación opcionales
Instalación como root
$ su
# ninja -C build install
# ldconfig -v |
Estadísticas de Compilación e Instalación de Libvdpau
Estadísticas de Compilación e Instalación de Libvdpau |
CPU |
AMD Ryzen 5 5500 |
MHz |
3600 (BoostMax=4457) |
RAM |
32 GB |
Sistema de archivos |
XFS |
Versión del Kernel |
6.7.8-ml SMP PREEMPT_DYNAMIC x86_64 |
Modo de frecuencia de la CPU |
powersave (balance performance) |
Planificador de CPU |
BORE |
Versión de Glibc |
2.39 |
Enlazador dinámico |
LLD 18.1.0 |
Compilador |
Clang 18.1.0 |
Parámetros de optimización |
-03 -march=znver3 -mtune=znver3
-mllvm -polly -mllvm -polly-vectorizer=stripmine -flto -funified-lto -Wl,--lto=thin -Wl,--thinlto-jobs=6
-Wl,--lto-aa-pipeline=globals-aa -Wl,--lto-newpm-passes=memcpyopt |
Parámetros de compilación |
-j12 |
Tiempo de compilación |
1" |
Archivos instalados |
6 |
|
Enlaces simbólicos creados |
4 |
|
Ocupación de espacio en disco |
304 KB |
Desinstalación como root
1) MODO TRADICIONAL
$ su -c "ninja -C build uninstall" |
2) MODO MANUALINUX
libvdpau-1.5-scripts.tar.gz
$ su
# tar zxvf libvdpau-1.5-scripts.tar.gz
# cd libvdpau-1.5-scripts
# ./Desinstalar_libvdpau-1.5 |
Copia de Seguridad como root
$ su
# tar zxvf libvdpau-1.5-scripts.tar.gz
# cd libvdpau-1.5-scripts
# ./Respaldar_libvdpau-1.5 |
Restaurar la Copia de Seguridad como root
$ su
# cd /var/copibin/restaurar_copias
# ./Restaurar_libvdpau-1.5
|
Extracción y Configuración de Vdpauinfo
$ tar jxvf vdpauinfo-1.5.tar.bz2
$ cd vdpauinfo-1.5
$ ./autogen.sh --prefix=/usr |
Explicación de los comandos
--prefix=/usr : Instala el programa en el directorio principal /usr.
Compilación
Instalación como root
$ su -c "make install-strip"
|
Estadísticas de Compilación e Instalación de Vdpauinfo
Estadísticas de Compilación e Instalación de Vdpauinfo |
CPU |
AMD Ryzen 5 5500 |
MHz |
3600 (BoostMax=4457) |
RAM |
32 GB |
Sistema de archivos |
XFS |
Versión del Kernel |
6.7.8-ml SMP PREEMPT_DYNAMIC x86_64 |
Modo de frecuencia de la CPU |
powersave (balance performance) |
Planificador de CPU |
BORE |
Versión de Glibc |
2.39 |
Enlazador dinámico |
LLD 18.1.0 |
Compilador |
Clang 18.1.0 |
Parámetros de optimización |
-03 -march=znver3 -mtune=znver3
-mllvm -polly -mllvm -polly-vectorizer=stripmine -flto -funified-lto -Wl,--lto=thin -Wl,--thinlto-jobs=6
-Wl,--lto-aa-pipeline=globals-aa -Wl,--lto-newpm-passes=memcpyopt |
Tiempo de compilación |
1" |
Archivos instalados |
1 |
/usr/bin/vdpauinfo |
Ocupación de espacio en disco |
28 KB |
Desinstalación como root
1) MODO TRADICIONAL
2) MODO MANUALINUX
vdpauinfo-1.5-scripts.tar.gz
$ su
# tar zxvf vdpauinfo-1.5-scripts.tar.gz
# cd vdpainfo-1.5-scripts
# ./Desinstalar_vdpainfo-1.5 |
Copia de Seguridad como root
$ su
# tar zxvf vdpauinfo-1.5-scripts.tar.gz
# cd vdpauinfo-1.5-scripts
# ./Respaldar_vdpauinfo-1.5 |
Restaurar la Copia de Seguridad como root
$ su
# cd /var/copibin/restaurar_copias
# ./Restaurar_vdpauinfo-1.5
|
Libva
Librería utilizada por las aplicaciones para acceder a la interfaz de programación de aplicaciones, VA-API,
y así poder tener aceleración por hardware a
través de la GPU, en la decodificación y
codificación de vídeo.
Instalación
Dependencias
Herramientas de Compilación
Entre paréntesis la versión con la que se ha compilado Libva para la elaboración de este documento.
* GCC - (14.1.0) o Clang - (18.1.8)
* Meson - (1.4.1)
* Ninja - (1.12.1)
* Pkg-config - (0.29.2)
Librerías de Desarrollo
* Xorg - (7.7 / xorg-server 21.1.13)
LibX11 - (1.8.9)
LibXext - (1.3.6)
LibXfixes - (6.0.1)
Libdrm - (2.4.122)
* Libglvnd - (1.7.0)
* Wayland - (1.23.0)
Descarga
libva-2.22.0.tar.gz | libva-utils-2.22.0.tar.gz
Optimizaciones
Optimizaciones adicionales
Optimizaciones adicionales |
GCC |
Graphite
|
$ export {C,CXX}FLAGS+=' -ftree-loop-linear -floop-strip-mine -floop-block'
|
IPA
|
$ export {C,CXX}FLAGS+=' -fipa-pta'
|
LTO |
$ export {C,CXX}FLAGS+=' -fuse-linker-plugin -flto=auto' |
En versiones inferiores a GCC 10, sustituir auto
por el número de núcleos que tenga nuestro procesador. Si
sólo tiene uno, utilizar el parámetro -flto |
Clang |
Polly |
$ export {C,CXX}FLAGS+=' -O3 -mllvm -polly -mllvm -polly-vectorizer=stripmine'
|
LTO |
$ export {C,CXX}FLAGS+=' -flto'
|
ThinLTO |
$ export {C,CXX}FLAGS+=' -flto=thin' |
La aplicación de esta optimización es alternativa a la tradicional LTO, a partir de Clang 3.9 y, por lo tanto, no es combinable con la misma. |
Unified LTO |
LTO >> ThinLTO |
$ export {C,CXX}FLAGS+=' -flto -funified-lto'
$ export LDFLAGS+=' -Wl,--lto=thin' |
ThinLTO >> LTO |
$ export {C,CXX}FLAGS+=' -flto=thin -funified-lto'
$ export LDFLAGS+=' -Wl,--lto=full' |
La aplicación de esta optimización es aplicable, a partir de Clang 17, y sólo es combinable con LLD. |
Parámetros adicionales
Parámetros adicionales de eliminación de avisos en el proceso de compilación |
$ export {C,CXX}FLAGS+=' -w' |
Establecer la ruta de búsqueda de directorios de librerías en sistemas de 64 bits multiarquitectura |
$ export LDFLAGS+=" -L/usr/lib64 -L/usr/local/lib64 -L/opt/gcc14/lib64" |
Cada usuario tendrá que
establecer la ruta de búsqueda de directorios, en función
de la distribución que utilice. |
Establecer el uso de enlazador dinámico para Mold |
$ export LDFLAGS+=' -fuse-ld=mold' |
Establecer el uso de enlazador dinámico para LLD |
Clang |
$ export LDFLAGS+=' -fuse-ld=lld' |
Optimizaciones complementarias LTO/ThinLTO de LLD |
$ export LDFLAGS+=' -Wl,--lto-aa-pipeline=globals-aa -Wl,--lto-newpm-passes=memcpyopt' |
Optimizaciones complementarias LTO de LLD |
$ export LDFLAGS+=" -Wl,--lto-partitions=$(expr $(nproc) / 2)" |
Optimizaciones complementarias ThinLTO de LLD |
$ export LDFLAGS+=" -Wl,--thinlto-jobs=$(expr $(nproc) / 2)" |
Establecer la variable de entorno de uso de compilador para Clang |
$ export CC=clang CXX=clang++ |
Extracción y Configuración de Libva
$ tar zxvf libva-2.22.0.tar.gz
$ cd libva-2.22.0
$ meson build --prefix=/usr --buildtype=release --strip
|
Explicación de los comandos
--prefix=/usr : Instala la librería en el directorio principal /usr.
--buildtype=release
: Compila la versión optimizada del paquete, ya que Meson
compila por defecto los paquetes con los parámetros -O2 -g.
--strip : Elimina los símbolos no necesarios para su ejecución de los binarios ejecutables correspondientes.
Compilación
Parámetros de compilación opcionales
Instalación como root
$ su
# ninja -C build install
# ldconfig -v |
Estadísticas de Compilación e Instalación de Libva
Estadísticas de Compilación e Instalación de Libva |
CPU |
AMD Ryzen 5 5500 |
MHz |
3600 (BoostMax=4457) |
RAM |
32 GB |
Sistema de archivos |
XFS |
Versión del Kernel |
6.9.7-ml SMP PREEMPT_DYNAMIC x86_64 |
Modo de frecuencia de la CPU |
powersave (balance performance) |
Planificador de CPU |
BMQ |
Versión de Glibc |
2.39 |
Enlazador dinámico |
LLD 18.1.8 |
Compilador |
Clang 18.1.8 |
Parámetros de optimización |
-03 -march=znver3 -mtune=znver3
-mllvm -polly -mllvm -polly-vectorizer=stripmine flto -funified-lto -Wl,--lto=thin -Wl,--thinlto-jobs=6
-Wl,--lto-aa-pipeline=globals-aa -Wl,--lto-newpm-passes=memcpyopt |
Parámetros de compilación |
-v -j12 |
Tiempo de compilación |
1" |
Archivos instalados |
48 |
|
Enlaces simbólicos creados |
10 |
|
Ocupación de espacio en disco |
1,1 MB |
Desinstalación como root
1) MODO TRADICIONAL
$ su -c "ninja -C build uninstall" |
2) MODO MANUALINUX
libva-2.22.0-scripts.tar.gz
$ su
# tar zxvf libva-2.22.0-scripts.tar.gz
# cd libva-2.22.0-scripts
# ./Desinstalar_libva-2.22.0 |
Copia de Seguridad como root
$ su
# tar zxvf libva-2.22.0-scripts.tar.gz
# cd libva-2.22.0-scripts
# ./Respaldar_libva-2.22.0 |
Restaurar la Copia de Seguridad como root
$ su
# cd /var/copibin/restaurar_copias
# ./Restaurar_libva-2.22.0
|
Extracción y Configuración de Libva-utils
$ tar zxvf libva-utils-2.22.0.tar.gz
$ cd libva-utils-2.22.0
$ meson build --prefix=/usr --buildtype=release --strip
|
Explicación de los comandos
--prefix=/usr : Instala el programa en el directorio principal /usr.
--buildtype=release
: Compila la versión optimizada del paquete, ya que Meson
compila por defecto los paquetes con los parámetros -O2 -g.
--strip : Elimina los símbolos no necesarios para su ejecución de los binarios ejecutables correspondientes.
Compilación
Parámetros de compilación opcionales
Instalación como root
$ su -c "ninja -C build install"
|
Estadísticas de Compilación e Instalación de Libva-utils
Estadísticas de Compilación e Instalación de Libva-utils |
CPU |
AMD Ryzen 5 5500 |
MHz |
3600 (BoostMax=4457) |
RAM |
32 GB |
Sistema de archivos |
XFS |
Versión del Kernel |
6.9.7-ml SMP PREEMPT_DYNAMIC x86_64 |
Modo de frecuencia de la CPU |
powersave (balance performance) |
Planificador de CPU |
BMQ |
Versión de Glibc |
2.39 |
Enlazador dinámico |
LLD 18.1.8 |
Compilador |
Clang 18.1.8 |
Parámetros de optimización |
-03 -march=znver3 -mtune=znver3
-mllvm -polly -mllvm -polly-vectorizer=stripmine -flto -funified-lto -Wl,--lto=thin -Wl,--thinlto-jobs=6
-Wl,--lto-aa-pipeline=globals-aa -Wl,--lto-newpm-passes=memcpyopt |
Parámetros de compilación |
-v -j12 |
Tiempo de compilación |
2" |
Archivos instalados |
25 |
|
Ocupación de espacio en disco |
3,1 MB |
Desinstalación como root
1) MODO TRADICIONAL
$ su -c "ninja -C build uninstall"
|
2) MODO MANUALINUX
libva-utils-2.22.0-scripts.tar.gz
$ su
# tar zxvf libva-utils-2.22.0-scripts.tar.gz
# cd libva-utils-2.22.0-scripts
# ./Desinstalar_libva-utils-2.22.0 |
Copia de Seguridad como root
$ su
# tar zxvf libva-utils-2.22.0-scripts.tar.gz
# cd libva-utils-2.22.0-scripts
# ./Respaldar_libva-utils-2.22.0 |
Restaurar la Copia de Seguridad como root
$ su
# cd /var/copibin/restaurar_copias
# ./Restaurar_libva-utils-2.22.0
|
OpenCL Headers
Cabeceras de OpenCL requeridas para la compilación del soporte de OpenCL con Mesa y del cargador OpenCL ICD Loader.
Instalación
Descarga
OpenCL-Headers-2024.05.08.tar.gz
Extracción
y
Configuración
$
tar zxvf OpenCL-Headers-2024.05.08.tar.gz
$ cd OpenCL-Headers-2024.05.08
$ cmake -S . -B build -DCMAKE_INSTALL_PREFIX=/usr -DBUILD_TESTING=OFF -G Ninja |
Explicación de los
comandos
-S . -B build : Establece el directorio del código fuente y crea de forma automática el directorio de compilación.
-DCMAKE_INSTALL_PREFIX=/usr : Instala la
librería en el
directorio principal /usr.
-DBUILD_TESTING=OFF : Desactiva la compilación de los tests.
-G Ninja : Utiliza Ninja en lugar de GNU Make para compilar el paquete (opcional).
Instalación
como root
$ su -c "ninja -C build install"
|
Estadísticas
de Instalación de OpenCL Headers
Estadísticas de Instalación de OpenCL Headers |
Sistema de archivos |
XFS |
Archivos
instalados |
22 |
|
Ocupación de espacio en disco |
424 KB. |
Desinstalación
como root
1)
MODO TRADICIONAL
Este paquete no tiene soporte para desinstalación con el comando 'ninja uninstall'
2)
MODO MANUALINUX
OpenCL-Headers-2024.05.08-scripts.tar.gz
$ su
# tar zxvf OpenCL-Headers-2024.05.08-scripts.tar.gz
# cd OpenCL-Headers-2024.05.08-scripts
# ./Desinstalar_OpenCL-Headers-2024.05.08 |
Copia
de Seguridad
como root
$ su
# tar zxvf OpenCL-Headers-2024.05.08-scripts.tar.gz
# cd OpenCL-Headers-2024.05.08-scripts
# ./Respaldar_OpenCL-Headers-2024.05.08 |
Restaurar
la Copia de Seguridad
como root
$ su
# cd /var/copibin/restaurar_copias
# ./Restaurar_OpenCL-Headers-2024.05.08
|
OpenCL ICD Loader (32/64 bits)
Cargador OpenCL independiente de la librería utilizada por cada
proveedor de librerías OpenCL. Lo mismo que Libglvnd
para OpenGL.
Instalación
Dependencias
Herramientas
de Compilación
Entre paréntesis la
versión con la que se ha compilado OpenCL ICD Loader
para la elaboración de este documento.
* GCC - (14.1.0) o Clang - (18.1.6)
* CMake - (3.29.3)
* Ninja - (1.12.0)
* Pkg-config - (0.29.2)
Librerías
de Desarrollo
* OpenCL-Headers - (2024.05.08)
Descarga
OpenCL-ICD-Loader-2024.05.08.tar.gz
Optimizaciones
Optimizaciones adicionales
Optimizaciones adicionales |
GCC |
Graphite
|
$ export {C,CXX}FLAGS+=' -ftree-loop-linear -floop-strip-mine -floop-block'
|
IPA
|
$ export {C,CXX}FLAGS+=' -fipa-pta'
|
LTO |
$ export {C,CXX}FLAGS+=' -fuse-linker-plugin -flto=auto' |
En versiones inferiores a GCC
10, sustituir auto
por el número de núcleos que tenga nuestro
procesador. Si sólo tiene uno, utilizar el parámetro -flto
|
Clang |
Polly |
$ export {C,CXX}FLAGS+=' -O3 -mllvm -polly -mllvm -polly-vectorizer=stripmine'
|
LTO |
$ export {C,CXX}FLAGS+=' -flto'
|
ThinLTO |
$ export {C,CXX}FLAGS+=' -flto=thin'
|
La aplicación de esta optimización es alternativa
a la tradicional LTO, a partir de Clang 3.9 y, por lo tanto, no es combinable con la misma. |
Unified LTO |
LTO >> ThinLTO |
$ export {C,CXX}FLAGS+=' -flto -funified-lto'
$ export LDFLAGS+=' -Wl,--lto=thin' |
ThinLTO >> LTO |
$ export {C,CXX}FLAGS+=' -flto=thin -funified-lto'
$ export LDFLAGS+=' -Wl,--lto=full' |
La aplicación de esta optimización es aplicable, a partir de Clang 17, y sólo es combinable con LLD. |
Parámetros adicionales para la versión de 32 bits
Optimizaciones de CPU para Intel en sistemas de 64 bits multiarquitectura |
$ export {C,CXX}FLAGS='-O3 -march=i686 -mtune=pentium4' |
Optimizaciones de CPU para AMD en sistemas de 64 bits multiarquitectura |
$ export {C,CXX}FLAGS='-O3 -march=i686 -mtune=athlon-xp' |
Establecer la variable de entorno adecuada para pkg-config en sistemas de 64 bits multiarquitectura |
$ export PKG_CONFIG_PATH=/usr/lib/pkgconfig:/usr/local/lib/pkgconfig:/usr/share/pkgconfig:$PKG_CONFIG_PATH |
Establecer la ruta de búsqueda de directorios de librerías en sistemas de 64 bits multiarquitectura |
$ export LDFLAGS+=' -L/usr/lib -L/usr/local/lib -L/opt/gcc14/lib' |
Cada usuario tendrá
que establecer la ruta de búsqueda de directorios, en
función de la distribución que utilice. |
Establecer la variable de entorno de uso de compilador en modo de 32 bits, en sistemas de 64 bits multiarquitectura |
GCC |
$ export CC="gcc -m32" CXX="g++ -m32"
|
Clang |
$ export CC="clang -m32" CXX="clang++ -m32"
|
Parámetros adicionales para la versión de 64 bits
Establecer la ruta de búsqueda de directorios de librerías en sistemas de 64 bits multiarquitectura |
$ export
LDFLAGS+=" -L/usr/lib64 -L/usr/local/lib64 -L/opt/gcc14/lib64" |
Cada usuario tendrá
que establecer la ruta de búsqueda de directorios, en
función de la distribución que utilice. |
Establecer la variable de entorno de uso de compilador para Clang |
$ export CC=clang CXX=clang++ |
Parámetros adicionales globales
Parámetros adicionales de eliminación de avisos en el proceso de compilación |
$ export {C,CXX}FLAGS+=' -w' |
Establecer el uso de enlazador dinámico para Mold |
$ export LDFLAGS+=' -fuse-ld=mold' |
Establecer el uso de enlazador dinámico para LLD |
Clang |
$ export LDFLAGS+=' -fuse-ld=lld' |
Optimizaciones complementarias LTO/ThinLTO de LLD |
$ export LDFLAGS+=' -Wl,--lto-aa-pipeline=globals-aa -Wl,--lto-newpm-passes=memcpyopt' |
Optimizaciones complementarias LTO de LLD |
$ export LDFLAGS+=" -Wl,--lto-partitions=$(expr $(nproc) / 2)" |
Optimizaciones complementarias ThinLTO de LLD |
$ export LDFLAGS+=" -Wl,--thinlto-jobs=$(expr $(nproc) / 2)" |
Extracción
$
tar zxvf OpenCL-ICD-Loader-2024.05.08.tar.gz
$ cd OpenCL-ICD-Loader-2024.05.08
|
Configuración de la versión de 32 bits
$ cmake -S . -B build32 -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release \
-DBUILD_TESTING=OFF -DCMAKE_INSTALL_DATAROOTDIR=lib -G Ninja |
Explicación de los
comandos
-S . -B build32 : Establece el directorio del código fuente y crea de forma automática el directorio de compilación.
-DCMAKE_INSTALL_PREFIX=/usr : Instala la
librería en el
directorio principal /usr.
-DCMAKE_BUILD_TYPE=Release : Compila la versión optimizada de OpenCL ICD Loader.
-DBUILD_TESTING=OFF : Desactiva la compilación de los tests.
-DCMAKE_INSTALL_DATAROOTDIR=lib : Evita que los archivos de configuración de CMake se instalen en /usr/share/cmake, siendo el lugar correcto, /usr/lib/cmake, ya que esto sí es una librería. La ubicación y el
nombre de este directorio, puede variar en función de la
distribución que cada usuario use.
-G Ninja : Utiliza Ninja en lugar de GNU Make para compilar el paquete (opcional).
Compilación
Parámetros de
compilación opcionales
Instalación
como root
$ su
# ninja -C build32 install/strip
# ldconfig -v |
Configuración de la versión de 64 bits
$ cmake -S . -B build64 -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release \
-DBUILD_TESTING=OFF -DCMAKE_INSTALL_DATAROOTDIR=lib64 -G Ninja .. |
Explicación de los
comandos
-S . -B build64 : Establece el directorio del código fuente y crea de forma automática el directorio de compilación.
-DCMAKE_INSTALL_DATAROOTDIR=lib64
: Evita que los archivos de configuración de CMake se instalen en
/usr/share/cmake, siendo el lugar correcto, /usr/lib64/cmake, ya que esto
sí es una librería. La ubicación y el
nombre de este directorio, puede variar en función de la
distribución que cada usuario use.
Compilación
Instalación
como root
$ su
# ninja -C build64 install/strip
# ldconfig -v |
Estadísticas
de Compilación e Instalación de OpenCL ICD Loader
Estadísticas de
Compilación e Instalación de OpenCL ICD Loader |
CPU |
AMD Ryzen 5 5500 |
MHz |
3600 (BoostMax=4457) |
RAM |
32 GB |
Sistema de archivos |
XFS |
Versión del Kernel |
6.9.1-ml SMP PREEMPT_DYNAMIC x86_64 |
Modo de frecuencia de la CPU |
powersave (balance performance) |
Planificador de CPU |
BORE |
Versión de Glibc |
2.39 |
Enlazador dinámico |
LLD 18.1.6 |
Compilador |
Clang 18.1.6 |
Parámetros de
optimización de la versión de 32 bits |
-03
-march=i686 -mtune=athlon-xp -fexperimental-new-pass-manager -mllvm -polly -mllvm -polly-vectorizer=stripmine
-flto -funified-lto -Wl,--lto=thin -Wl,--thinlto-jobs=6 -Wl,--lto-aa-pipeline=globals-aa -Wl,--lto-newpm-passes=memcpyopt |
Parámetros de
optimización de la versión de 64 bits |
-03
-march=znver3 -mtune=znver3 -fexperimental-new-pass-manager -mllvm -polly -mllvm -polly-vectorizer=stripmine
-flto -funified-lto -Wl,--lto=thin -Wl,--thinlto-jobs=6 -Wl,--lto-aa-pipeline=globals-aa -Wl,--lto-newpm-passes=memcpyopt |
Parámetros de
compilación |
-v -j12 |
Tiempo de compilación |
2" |
Archivos
instalados |
13 |
|
Enlaces
simbólicos creados |
4 |
|
Ocupación de espacio
en disco |
228 KB |
Desinstalación
como root
1)
MODO TRADICIONAL
Este paquete no tiene soporte para desinstalación con el comando 'ninja uninstall'
2)
MODO MANUALINUX
OpenCL-ICD-Loader-2024.05.08-scripts.tar.gz
$ su
# tar zxvf OpenCL-ICD-Loader-2024.05.08-scripts.tar.gz
# cd OpenCL-ICD-Loader-2024.05.08-scripts
# ./Desinstalar_OpenCL-ICD-Loader-2024.05.08 |
Copia
de Seguridad
como root
$ su
# tar zxvf OpenCL-ICD-Loader-2024.05.08-scripts.tar.gz
# cd OpenCL-ICD-Loader-2024.05.08-scripts
# ./Respaldar_OpenCL-ICD-Loader-2024.05.08 |
Restaurar
la Copia de Seguridad
como root
$ su
# cd /var/copibin/restaurar_copias
# ./Restaurar_OpenCL-ICD-Loader-2024.05.08
|
Mesa (32/64 bits)
Conjunto de librerías encargadas de proporcionar un sistema basado en OpenGL
para representar gráficos en 3D de forma interactiva en sistemas
operativos derivados de UNIX. Proporcionan el controlador de
gráficos en 3D para AMDGPU.
Instalación
Dependencias
Herramientas de Compilación
Entre paréntesis la versión con la que se ha compilado Mesa para la elaboración de este documento.
* GCC - (14.2.0) o Clang - (19.1.1)
* Rust - (1.81.0)
Rust-bindgen - (0.69.4)
Rustfmt - (1.7.0)
* Meson - (1.5.2)
* Ninja - (1.12.1)
* Pkg-config - (0.29.2)
* Bison - (3.8.2)
* Flex - (2.6.4)
Librerías de Desarrollo
* Xorg - (7.7 / xorg-server 21.1.13)
LibX11 - (1.8.10)
LibXdamage - (1.1.6)
LibXext - (1.3.6)
LibXfixes - (6.0.1)
LibXrandr - (1.5.4)
LibXxf86vm - (1.1.5)
Libdrm - (2.4.123)
Libxcb - (1.17.0)
Xorgproto - (2024.1)
* Elfutils - (0.191)
* Expat - (2.6.3)
* Glslang - (13.1.1)
* LibPolly - (19.1.1)
* LibPollyISL - (19.1.1)
* Libclang-cpp - (19.1.1)
* Libclc - (19.1.1)
* Libglvnd - (1.7.0)
* Libunwind - (1.8.1)
* Libva - (2.22.0)
* Libvdpau - (1.5)
* Libzstd - (1.5.6)
* LLVM - (19.1.1)
* Lm_sensors - (3.6.0)
* SPIRV-LLVM-Translator - (19.1.0)
* SPIRV-Tools - (2024.1)
* Valgrind - (3.23.0)
Intérpretes de Lenguaje de Programación
* Python - (3.12.7)
Descarga
mesa-24.2.4.tar.xz
Optimizaciones
Optimizaciones adicionales
Optimizaciones adicionales |
GCC |
Graphite
|
$ export {C,CXX}FLAGS+=' -ftree-loop-linear -floop-strip-mine -floop-block' |
IPA
|
$ export {C,CXX}FLAGS+=' -fipa-pta'
|
Clang |
Polly |
$ export {C,CXX}FLAGS+=' -O3 -mllvm -polly -mllvm -polly-vectorizer=stripmine'
|
Parámetros adicionales para la versión de 32 bits
Optimizaciones de CPU para Intel en sistemas de 64 bits multiarquitectura |
$ export {C,CXX}FLAGS='-O3 -march=i686 -mtune=pentium4' |
Optimizaciones de CPU para AMD en sistemas de 64 bits multiarquitectura |
$ export {C,CXX}FLAGS='-O3 -march=i686 -mtune=athlon-xp' |
Establecer la variable de entorno adecuada para pkg-config en sistemas de 64 bits multiarquitectura |
$ export PKG_CONFIG_PATH=/usr/lib/pkgconfig:/usr/local/lib/pkgconfig:\
/opt/llvm19/lib:pkgconfig/:/opt/llvm19/share/pkgconfig/:usr/share/pkgconfig:$PKG_CONFIG_PATH |
Establecer la ruta de búsqueda de directorios de librerías en sistemas de 64 bits multiarquitectura |
$ export LDFLAGS+=' -L/usr/lib -L/usr/local/lib -L/opt/gcc14/lib' |
Cada usuario tendrá
que establecer la ruta de búsqueda de directorios, en
función de la distribución que utilice. |
Establecer la variable de entorno de uso de compilador en modo de 32 bits, en sistemas de 64 bits multiarquitectura |
GCC |
$ export CC="gcc -m32" CXX="g++ -m32"
|
Clang |
$ export CC="clang -m32" CXX="clang++ -m32"
|
Parámetros adicionales para la versión de 64 bits
Establecer la ruta de búsqueda de directorios de librerías en sistemas de 64 bits multiarquitectura |
$ export
LDFLAGS+=" -L/usr/lib64 -L/usr/local/lib64 -L/opt/gcc14/lib64" |
Cada usuario tendrá
que establecer la ruta de búsqueda de directorios, en
función de la distribución que utilice. |
Establecer la variable de entorno de uso de compilador para Clang |
$ export CC=clang CXX=clang++ |
Parámetros adicionales globales
Parámetros adicionales de eliminación de avisos en el proceso de compilación |
$ export {C,CXX}FLAGS+=' -w' |
Establecer el uso de enlazador dinámico para Mold |
$ export LDFLAGS+=' -fuse-ld=mold' |
Establecer el uso de enlazador dinámico para LLD |
Clang |
$ export LDFLAGS+=' -fuse-ld=lld' |
Extracción
$ tar Jxvf mesa-24.2.4.tar.xz
$ cd mesa-24.2.4
|
Configuración de la versión de 32 bits
$ meson build32 --prefix=/usr -Dplatforms=x11 -Dgallium-drivers=radeonsi,llvmpipe \
-Dosmesa=true -Dvulkan-drivers=amd --buildtype=release --cross-file x86-linux \
-Dglvnd=true -Dgallium-opencl=icd -Dopencl-spirv=true -Dgallium-rusticl=true \
-Dgallium-vdpau=disabled --strip
$ sed -i '/main_format_utils.c.o.d$/{n;n;s/-mllvm -polly -mllvm -polly-vectorizer=stripmine//;}' build32/build.ninja
|
Explicación de los comandos
--prefix=/usr : Instala las librerías en el directorio principal /usr.
-Dplatforms=x11 : Activa la compilación del soporte de EGL para el servidor gráfico X.
-Dgallium-drivers=radeonsi,llvmpipe : Activa la compilación de los controladores gallium de gráficos en 3D, radeonsi (requerido para el uso de OpenCL a través de Rusticl) y llvmpipe, este último utilizado en la renderización por software.
-Dosmesa=true : Activa la compilación de la librería de renderizado por software, libOSMesa.
-Dvulkan-drivers=amd : Compila el controlador Vulkan por hardware para AMD.
--buildtype=release
: Compila la versión optimizada del paquete, ya que Meson
compila por defecto los paquetes con los parámetros -O2 -g.
--cross-file x86-linux : Establece el archivo de configuración de Meson, requerido para la compilación cruzada, ubicado en ~/.local/share/meson/cross. Un ejemplo con Clang y otro ejemplo con GCC.
-Dglvnd=true : Activa el soporte de Libglvnd,
lo que evita que se sobrescriban las librerías proporcionadas
por este último, y facilita la coexistencia de los controladores
de código abierto con el controlador de gráficos original
de NVIDIA, como controlador de OpenGL, sin necesidad de sobrescribir
archivos de instalación.
-Dgallium-opencl=icd
: Activa el soporte de OpenCL con la interfaz Clover de Gallium,
haciéndolo compatible con OpenCL-ICD-Loader. La versión
máxima de OpenCL, soportada por esta interfaz es la 1.2.
-Dopencl-spirv=true : Activa el soporte del uso de SPIR-V en la interfaz Clover de Gallium.
-Dgallium-rusticl=true:
Activa el soporte experimental de la interfaz para OpenCL,
gallium-rusticl, compatible con OpenCL 3.0 y reemplazo futuro del
abandonado y vetusto Clover.
-Dgallium-vdpau=disabled
: Desactiva el soporte de VDPAU a través del controlador
radeonsi de Gallium, innecesario si no tenemos instaladas las
librerías de libvdpau de 32 bits.
--strip : Elimina los símbolos no necesarios para su ejecución de los binarios ejecutables correspondientes.
sed -i '/main_format_utils.c.o.d$/{n;n;s/-mllvm -polly -mllvm -polly-vectorizer=stripmine//;}' build32/build.ninja
: Anula la optimación Polly en la compilación de un
archivo de código de Mesa, para que el proceso de
compilación no se alargue de forma infinita.
Compilación
Parámetros de compilación opcionales
Instalación como root
$ su
# ninja -C build32 install
# ldconfig -v |
Configuración de la versión de 64 bits
$ meson build64 --prefix=/usr -Dplatforms=x11 -Dgallium-drivers=radeonsi,llvmpipe \
-Dosmesa=true -Dvulkan-drivers=amd --buildtype=release -Dglvnd=true \
-Dgallium-opencl=icd -Dopencl-spirv=true -Dgallium-rusticl=true \
-Dvideo-codecs=h264dec,h264enc,h265dec,h265enc,vc1dec --strip
$ sed -i '/main_format_utils.c.o.d$/{n;n;s/-mllvm -polly -mllvm -polly-vectorizer=stripmine//;}' build64/build.ninja
|
Explicación de los comandos
--prefix=/usr : Instala las librerías en el directorio principal /usr.
-Dplatforms=x11 : Activa la compilación del soporte de EGL para el servidor gráfico X.
-Dgallium-drivers=radeonsi,llvmpipe : Activa la compilación de los controladores gallium de gráficos en 3D, radeonsi (requerido para el uso de VDPAU y VA-API) y llvmpipe, este último utilizado en la renderización por software.
-Dosmesa=true : Activa la compilación de la librería de renderizado por software, libOSMesa.
-Dvulkan-drivers=amd : Compila el controladores Vulkan por hardware para AMD.
-Dglvnd=true : Activa el soporte de Libglvnd,
lo que evita que se sobrescriban las librerías proporcionadas
por este último, y facilita la coexistencia de los controladores
de código abierto con el controlador de gráficos original
de NVIDIA, como controlador de OpenGL, sin necesidad de sobrescribir
archivos de instalación.
-Dopencl-spirv=true : Activa el soporte del uso de SPIR-V en la interfaz Clover de Gallium.
-Dgallium-rusticl=true
: Activa el soporte experimental de la interfaz para OpenCL,
gallium-rusticl, compatible con OpenCL 3.0 y reemplazo futuro del
abandonado y vetusto Clover.
-Dvideo-codecs=h264dec,h264enc,h265dec,h265enc,vc1dec
: Activa el soporte de codificadores y decodificadores de vídeo
en el controlador radeonsi, que vienen desactivados por defecto, por
problemas de patentes en Estados Unidos.
--strip : Elimina los símbolos no necesarios para su ejecución de los binarios ejecutables correspondientes.
sed -i '/main_format_utils.c.o.d$/{n;n;s/-mllvm -polly -mllvm -polly-vectorizer=stripmine//;}' build64/build.ninja
: Anula la optimación Polly en la compilación de un
archivo de código de Mesa, para que el proceso de
compilación no se alargue de forma infinita.
Compilación
Instalación como root
$ su
# ninja -C build64 install
# ldconfig -v |
Estadísticas de Compilación e Instalación de Mesa
Estadísticas de Compilación e Instalación de Mesa |
CPU |
AMD Ryzen 5 5500 |
MHz |
3600 (BoostMax=4457) |
RAM |
32 GB |
Sistema de archivos |
XFS |
Versión del Kernel |
6.11.1-ml SMP PREEMPT_DYNAMIC x86_64 |
Modo de frecuencia de la CPU |
powersave (balance performance) |
Planificador de CPU |
BMQ |
Versión de Glibc |
2.40 |
Enlazador dinámico |
Mold 2.34.0 |
Compilador |
Clang 19.1.1 + Ccache 4.10.2 |
Parámetros de
optimización de la versión de 32 bits |
-03
-march=i686 -mtune=athlon-xp -mllvm -polly -mllvm -polly-vectorizer=stripmine |
Parámetros de
optimización de la versión de 64 bits |
-03
-march=znver3 -mtune=znver3 -mllvm -polly -mllvm -polly-vectorizer=stripmine |
Parámetros de compilación |
-v -j12 |
Tiempo de compilación |
3' 54" |
Archivos instalados |
49 |
|
Enlaces simbólicos creados |
32 |
|
Ocupación de espacio en disco |
247,8 MB |
Desinstalación como root
1) MODO TRADICIONAL
$ su -c "ninja -C build{32,64} uninstall" |
2) MODO MANUALINUX
mesa-24.2.4-scripts.tar.gz
$ su
# tar zxvf mesa-24.2.4-scripts.tar.gz
# cd mesa-24.2.4-scripts
# ./Desinstalar_mesa-24.2.4 |
Copia de Seguridad como root
$ su
# tar zxvf mesa-24.2.4-scripts.tar.gz
# cd mesa-24.2.4-scripts
# ./Respaldar_mesa-24.2.4 |
Restaurar la Copia de Seguridad como root
$ su
# cd /var/copibin/restaurar_copias
# ./Restaurar_mesa-24.2.4
|
|