Copyright
Copyright © José
Luis Lara Carrascal 2015-2024
Sumario
Introducción
Instalación
ImageMagick 6
Iniciamos ImageMagick
Enlaces
Introducción
ImageMagick es un conjunto de programas de línea de
comandos, orientado a la edición, creación,
conversión y composición de archivos de imagen. Soporta
más de 200 formatos gráficos y uno de sus componentes,
convert, es el programa utilizado por defecto en los manuales de esta
web, para crear los iconos que el paquete no proporciona de forma
nativa. Además de estar referenciado también, en manuales
como el del filtro IM para Gimp. Era evidente que más tarde, o más temprano, ImageMagick tenía que estar documentado en este sitio web.
Instalación
Dependencias
Herramientas
de Compilación
Entre paréntesis la
versión con la que se ha compilado ImageMagick
para la elaboración de este documento.
* GCC - (14.2.0) o Clang - (19.1.3)
* Gawk - (5.3.1)
* M4 - (1.4.19)
* Libtool - (2.5.3)
* Make - (4.4.1)
* Automake - (1.17)
* Autoconf - (2.72)
* Pkg-config - (0.29.2)
Librerías
de Desarrollo
*
Xorg - (7.7 / xorg-server 21.1.14)
LibX11 - (1.8.10)
LibXext - (1.3.6)
LibXt - (1.3.0)
* Cairo - (1.18.2)
* DjVULibre - (3.5.28)
* Fftw3 - (3.3.10)
* Fontconfig - (2.15.0)
* Freetype2 - (2.13.3)
* Ghostscript - (10.04.0)
* Gperftools - (2.15)
* Graphviz - (12.2.0)
* Libbzip2 - (1.0.8)
* Libheif - (1.19.3)
* Libjbig - (2.1)
* Libjpeg-turbo - (3.0.4)
* Libjxl - (0.11.0)
* Liblcms - (2.16)
* Libpng - (1.6.44)
* LibRaw - (0.21.3)
* Librsvg - (2.59.2)
* LibTIFF - (4.7.0)
* Libwebp - (1.4.0)
* Libwmf - (0.2.8.4)
* Libxml2 - (2.11.9)
* Libzip - (1.11.2)
* Libzstd - (1.5.6)
* Liquid Rescale Library - (0.4.2)
* OpenCL Headers - (2024.10.24)
* OpenCL ICD Loader - (2024.10.24)
* OpenEXR - (3.2.4)
* OpenJPEG - (2.5.2)
* Pango - (1.54.0)
* XZ Utils - (5.6.3)
* Zlib - (1.3.1)
Intérpretes de Lenguaje de Programación
* Perl - (5.40.0)
Descarga
ImageMagick-7.1.1-41.tar.lz
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'
|
OpenMP |
$ export {C,CXX}FLAGS+=" -ftree-parallelize-loops=$(nproc)"
|
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
|
PGO |
1) Fase inicial de compilación e instalación del paquete. |
$ export {C,CXX}FLAGS+=' -O2 g1 -fprofile-generate=/var/pgo/imagemagick'
|
2) Ejecutar 'make check' en el directorio de compilación. |
3) Fase final de compilación e instalación del paquete. |
$ export {C,CXX}FLAGS+=' -fprofile-use=/var/pgo/imagemagick -Wno-error=coverage-mismatch'
|
Clang |
Polly |
$
export {C,CXX}FLAGS+=' -O3 -mllvm -polly -mllvm
-polly-vectorizer=stripmine -mllvm -polly-parallel -mllvm
-polly-omp-backend=LLVM'
|
LTO |
$ export AR=llvm-ar RANLIB=llvm-ranlib NM=llvm-nm
$ export {C,CXX,LD}FLAGS+=' -flto'
|
ThinLTO |
$ export AR=llvm-ar RANLIB=llvm-ranlib NM=llvm-nm
$ export {C,CXX,LD}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. |
PGO |
1) Fase inicial de compilación e instalación del paquete. |
$ export {C,CXX}FLAGS+=' -O2 -g1 -fprofile-generate=/var/pgo/imagemagick' |
2) Ejecutar 'make check' en el directorio de compilación. |
3) Conversión del perfil de optimización a un formato legible por Clang. |
$ PGODIR=/var/pgo/imagemagick; llvm-profdata merge $PGODIR/default_*.profraw --output=$PGODIR/default.profdata |
4) Fase final de compilación e instalación del paquete. |
$ export {C,CXX}FLAGS+=' -fprofile-use=/var/pgo/imagemagick' |
CSPGO |
1) Fase inicial de compilación e instalación del paquete. |
$ export {C,CXX}FLAGS+=' -O2 -g1 -fprofile-use=/var/pgo/imagemagick -fcs-profile-generate=/var/pgo/imagemagick' |
2) Ejecutar 'make check' en el directorio de compilación. |
3) Conversión y mezcla con el perfil PGO, del perfil de optimización a un formato legible por Clang. |
$ PGODIR=/var/pgo/imagemagick;
llvm-profdata merge $PGODIR/default_*.profraw $PGODIR/default.profdata
--output=$PGODIR/cspgo.profdata |
4) Fase final de compilación e instalación del paquete. |
$ export {C,CXX}FLAGS+=' -fprofile-use=/var/pgo/imagemagick/cspgo.profdata' |
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/PGO de LLD |
$ export LDFLAGS+=' -Wl,--lto-aa-pipeline=globals-aa -Wl,--lto-newpm-passes=pgo-memop-opt' |
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
$ tar axvf ImageMagick-7.1.1-41.tar.lz
$ cd ImageMagick-7.1.1-41
$ ./configure --prefix=/usr --sysconfdir=/etc --with-modules \
--with-fftw --with-gslib --with-rsvg --with-perl --with-gvc \
--with-tcmalloc --with-jxl --disable-static --enable-opencl --libdir=/usr/lib64 \
--with-perl-options="INSTALLARCHLIB=$(perl '-V:installarchlib' | cut -d\' -f2) \
INSTALLSITEARCH=$(perl '-V:installsitearch' | cut -d\' -f2) \
INSTALLSITEMAN3DIR=$(perl '-V:installsiteman3dir' | cut -d\' -f2)"
$ find . -name "Makefile" -o -name "*.pc" -type f | xargs sed -i 's:-lgomp:-lomp:g' |
Explicación de los
comandos
--prefix=/usr : Instala el programa en el directorio principal /usr.
--sysconfdir=/etc
: Instala los archivos de configuración en /etc/ImageMagick-7, en lugar de /usr/etc/ImageMagick-7.
--with-modules
: Compila el soporte de módulos compartidos en lugar de
integrarlos de forma estática en los binarios ejecutables del
paquete.
--with-fftw : Activa el soporte de FFTW.
--with-gslib : Activa el soporte de Libgs de Ghostscript.
--with-rsvg : Activa el soporte de imágenes en formato SVG mediante el uso de Librsvg. Si no añadimos esta opción, se utilizará Cairo para compilar el soporte de este formato de imagen.
--with-perl : Activa la compilación e instalación de PerlMagic.
--with-gvc : Activa el soporte de Graphviz.
--with-tcmalloc : Activa el soporte del asignador de memoria, TCMalloc, para optimizar el uso de la misma en operaciones multihilo.
--with-jxl : Activa el soporte del formato de compresión JPEG XL, mediante el uso de Libjxl.
--disable-static
: Desactiva la compilación de las librerías
estáticas, al no ser necesarias para la ejecución de los
programas.
--enable-opencl : Activa el soporte de OpenCL en algunas de las operaciones del programa. Requiere de un controlador de gráficos que lo soporte también.
--libdir=/usr/lib64 : Instala las librerías en /usr/lib64, en sistemas de 64 bits multiarquitectura. La ubicación y el
nombre de este directorio, puede variar en función de la
distribución que cada usuario use.
--with-perl-options="INSTALLARCHLIB=$(perl '-V:installarchlib' | cut -d\' -f2) \
INSTALLSITEARCH=$(perl '-V:installsitearch' | cut -d\' -f2) \
INSTALLSITEMAN3DIR=$(perl '-V:installsiteman3dir' | cut -d\' -f2)" : Opción requerida tras la modificación de código realizada a partir de la versión 7.1.1-30, que no respeta la instalación original de Perl.
find . -name "Makefile" -o -name "*.pc" -type f | xargs sed -i 's:-lgomp:-lomp:g' : Modificamos los archivos Makefile creados para evitar que los binarios se enlacen contra la librería Libgomp de GCC, en el caso de que utilicemos Clang para compilar el paquete, y se enlacen sólo contra la librería Libomp proporcionada por LLVM. También modificamos los archivos de configuración que se instalan para Pkg-config, para que aparezca de forma correcta esta librería en los mismos.
Compilación
Parámetros de compilación opcionales
V=1 : 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
# make install-strip
# ldconfig -v
|
Estadísticas de Compilación e Instalación de ImageMagick
Estadísticas de Compilación e Instalación de ImageMagick |
CPU |
AMD Ryzen 5 5500 |
MHz |
3600 (BoostMax=4457) |
RAM |
32 GB |
Tarjeta gráfica |
AMD Radeon RX 580 2048SP |
Controlador de gráficos |
AMDGPU 23.0.0 |
Sistema de archivos |
XFS |
Versión del Kernel |
6.11.8-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 19.1.3 |
Compilador |
Clang 19.1.3 + Ccache 4.10.2 |
Parámetros de optimización |
-03 -march=znver3
-mtune=znver3 -mllvm
-polly -mllvm -polly-vectorizer=stripmine -mllvm -polly-parallel -mllvm
-polly-omp-backend=LLVM -funified-lto
-fprofile-use=/var/pgo/imagemagick/cspgo.profdata -Wl,--lto=thin
-Wl,--thinlto-jobs=6 -Wl,--lto-aa-pipeline=globals-aa
-Wl,--lto-newpm-passes=pgo-memop-opt |
Parámetros de compilación |
V=1 -j12 |
Tiempo de compilación |
25" |
Tiempo de instalación |
49" |
Tiempo total consumido |
1' 14" |
Archivos instalados |
801 |
|
Enlaces simbólicos creados |
18 |
|
Ocupación de espacio en disco |
23,5 MB |
Aplicaciones instaladas
Aplicaciones
instaladas |
Ejecutable
|
Descripción
|
magick |
Es el nuevo programa principal y único binario ejecutable a partir de la versión 7 de ImageMagick. El resto de ejecutables que existían en la versión 6, se
han convertido en enlaces simbólicos que apuntan a éste,
mostrando las opciones particulares de cada uno cuando los ejecutamos, y preservando la
compatibilidad nominal con los de la versión 6. Digamos que
se adopta el mismo modo de funcionamiento que el otro proyecto derivado de ImageMagick, GraphicsMagick.
Todos los comandos siguientes en esta tabla se pueden
invocar también desde este mismo comando: magick animate, magick convert,
magick compare, etc.
Un ejemplo:
magick fondo-120.jpg -resize 1024 fondo-120a.jpg
|
magick-script |
Nuevo comando introducido a partir de la versión 7 de ImageMagick que sirve para crear scripts de ejecución, encabezados con la variable de entorno con el nombre del programa. Un ejemplo:
#!/bin/env magick-script
-size 100x100 xc:red ( rose: -rotate -90 ) +append -write show: |
animate
|
Anima una secuencia de imágenes en cualquier servidor X. Es el programa de ImageMagick utilizado para visualizar animaciones en formato GIF. También se puede utilizar para visualizar un directorio de imágenes en modo presentación. Un ejemplo:
animate -delay 200 ~/Fondos/*.jpg
El retardo (-delay 200) se mide siempre en milisegundos. |
compare |
Compara
matemática y visualmente la diferencia entre una imagen y el
resultado de su manipulación. Si por ejemplo, aplicamos un
filtro de nitidez con convert a una imagen, este programa puede
comparar la imagen original con la imagen resultante del comando
anterior, dando lugar a una imagen como resultado con las zonas de la
imagen original afectadas por la aplicación del filtro de color
rojo. Un ejemplo:
convert ejemplo.jpg -sharpen 0x1 resultado.jpg
compare ejemplo.jpg resultado.jpg diferencias.png
Y la comparación matemática se obtiene con el siguiente comando (admite también otros):
compare -verbose -metric mae imagen.jpg resultado.jpg diferencias.png
|
composite |
Comando que superpone una imagen sobre otra. El ejemplo que pongo a continuación lo extraigo del manual de FF Multi Converter,
en el que se crea una imagen transparente con convert de 256x256
píxeles y posteriormente se fusiona con el icono del paquete,
centrando éste en el medio con el comando composite con la
opción 'gravity center'.
convert -size 256x256 canvas:none -alpha transparent fondo.png
composite -gravity center share/ffmulticonverter.png fondo.png \
share/ffmulticonverter.png
|
conjure |
Comando que lee y ejecuta scripts escritos en el lenguaje de programación, Magick Scripting Language (MSL). |
convert |
Era el programa más utilizado de ImageMagick hasta la versión 7,
por lo menos en esta web. Permite convertir entre diferentes formatos
de imagen, redimensionar imágenes, aplicar filtros, etc. El
programa siempre requiere de una imagen de entrada y otra de salida.
Para leer de la entrada estándar o enviar a la salida
estándar tiene que añadirse el guión (-)
detrás del comando. Un ejemplo:
convert -resize 1024 fondo-120.jpg fondo-120a.jpg
Desde la versión 7.1.1-33, este comando pasa a estar obsoleto,
mostrando el siguiente mensaje de aviso, cuando lo utilizamos: WARNING: The convert command is deprecated in IMv7, use "magick" instead of "convert" or "magick convert".
Con lo que en esta web, se utilizará de forma directa, magick en
lugar de convert, en aquellos manuales donde sea requerido su uso. La
diferencia principal entre utilizar convert o magick, reside en que,
magick no admite las opciones antes que el archivo de origen, es decir,
con convert esto es válido:
convert -resize 1024 fondo-120.jpg fondo-120a.jpg
En cambio, con magick, tenemos que dejarlo así:
magick fondo-120.jpg -resize 1024 fondo-120a.jpg
|
display |
Muestra una imagen o
secuencia de imágenes a pantalla completa o en una ventana. Si
lo ejecutamos sin argumentos se mostrará la ventana de ImageMagick,
desde la que podremos acceder al menú del mismo, que en
ningún momento llega a las posibilidades que ofrece la
línea de comandos.
Este programa no soporta pseudotransparencias, con lo que su uso como setter para poner imágenes en el fondo de la pantalla queda muy limitado. |
identify |
Muestra información del formato y las características de una imagen o grupo de imágenes. |
import |
Realiza una captura de
pantalla del escritorio, una ventana determinada, o una zona
rectangular seleccionada de la pantalla. Varios ejemplos:
1) Capturar cualquier zona de la pantalla seleccionándola con el
puntero del ratón o haciendo clic en el fondo o en una ventana,
guardando la imagen en formato JPEG con una calidad del 90 %. Si es una
ventana, con el parámetro -frame, capturaremos también el marco de la misma.
import -frame -quality 90 /home/jose/Capturas/captura-001.jpg
2) Capturar el escritorio, guardando la imagen en formato JPEG con una calidad
del 90 %.
import -window root -quality 90 /home/jose/Capturas/captura-001.jpg
|
mogrify |
Comando que posee las mismas características que convert, pero con una diferencia muy importante, siempre trabaja sobre la imagen original. |
montage |
Comando de
composición de imágenes, dando lugar a una imagen en
mosaico, a la que se le pueden añadir marcos, nombres de imagen,
color de fondo, etc. Básicamente, la función de este comando nos
sirve para crear hojas de contacto, de un determinado directorio de
imágenes. Un ejemplo:
montage -resize 320 -background '#336699' -geometry +4+4 ~/Fondos/*.jpg montaje.jpg
El parámetro -resize determina el tamaño de las imágenes incluidas en la composición final, -background el color de fondo y -geometry la disposición en columnas y filas de las imágenes. |
stream |
Comando utilizado para extraer píxeles de una imagen, o una determinada porción de la misma. |
Directorio de
configuración personal
~/.config/ImageMagick |
Es
el directorio de configuración personal de ImageMagick
en nuestro home. |
Desinstalación
como root
1) MODO TRADICIONAL
En el directorio de compilación
ejecutamos el siguiente comando:
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.
ImageMagick-7.1.1-41-scripts.tar.gz
$ su
# tar zxvf ImageMagick-7.1.1-41-scripts.tar.gz
# cd ImageMagick-7.1.1-41-scripts
# ./Desinstalar_ImageMagick-7.1.1-41 |
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 ImageMagick-7.1.1-41-scripts.tar.gz
# cd ImageMagick-7.1.1-41-scripts
# ./Respaldar_ImageMagick-7.1.1-41 |
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_ImageMagick-7.1.1-41
|
ImageMagick 6
Como la mayoría de paquetes de código fuente que necesitan de ImageMagick para ser compilados, no son compatibles con ImageMagick 7,
instalaremos la última versión de la serie anterior, para
poder compilar su suporte allí donde sea necesario.
Preliminares
1)
Editamos el archivo /etc/ld.so.conf
y añadimos /opt/imagemagick-6/lib64
include ld.so.conf.d/*.conf
/opt/gcc-4.4.3/lib
/usr/X11R7/lib
/opt/e17/lib
/usr/lib
/opt/imagemagick-6/lib64 |
Instalación
Dependencias
Herramientas
de Compilación
Entre paréntesis la
versión con la que se ha compilado ImageMagick
para la elaboración de este documento.
* GCC - (14.2.0) o Clang - (19.1.3)
* Gawk - (5.3.1)
* M4 - (1.4.19)
* Libtool - (2.5.3)
* Make - (4.4.1)
* Automake - (1.17)
* Autoconf - (2.72)
* Pkg-config - (0.29.2)
Librerías
de Desarrollo
*
Xorg - (7.7 / xorg-server 21.1.14)
LibX11 - (1.8.10)
LibXext - (1.3.6)
LibXt - (1.3.0)
* Cairo - (1.18.2)
* DjVULibre - (3.5.28)
* Fftw3 - (3.3.10)
* Fontconfig - (2.15.0)
* Freetype2 - (2.13.3)
* Ghostscript - (10.04.0)
* Gperftools - (2.15)
* Graphviz - (12.2.0)
* Libbzip2 - (1.0.8)
* Libheif - (1.19.3)
* Libjbig - (2.1)
* Libjpeg-turbo - (3.0.4)
* Liblcms - (2.16)
* Libpng - (1.6.44)
* LibRaw - (0.21.3)
* Librsvg - (2.59.2)
* LibTIFF - (4.7.0)
* Libwebp - (1.4.0)
* Libwmf - (0.2.8.4)
* Libxml2 - (2.11.9)
* Libzstd - (1.5.6)
* Liquid Rescale Library - (0.4.2)
* OpenCL Headers - (2024.10.24)
* OpenCL ICD Loader - (2024.10.24)
* OpenEXR - (3.2.4)
* OpenJPEG - (2.5.2)
* Pango - (1.54.0)
* XZ Utils - (5.6.3)
* Zlib - (1.3.1)
Intérpretes de Lenguaje de Programación
* Perl - (5.40.0)
Descarga
ImageMagick-6.9.13-19.tar.lz
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'
|
OpenMP |
$ export {C,CXX}FLAGS+=" -ftree-parallelize-loops=$(nproc)"
|
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 |
PGO |
1) Fase inicial de compilación e instalación del paquete. |
$ export {C,CXX}FLAGS+=' -O2 -g1 -fprofile-generate=/var/pgo/imagemagick-6'
|
2) Ejecutar 'make check' en el directorio de compilación. |
3) Fase final de compilación e instalación del paquete. |
$ export {C,CXX}FLAGS+=' -fprofile-use=/var/pgo/imagemagick-6 -Wno-error=coverage-mismatch'
|
Clang |
Polly |
$
export {C,CXX}FLAGS+=' -O3 -mllvm -polly -mllvm
-polly-vectorizer=stripmine -mllvm -polly-parallel -mllvm -polly-omp-backend=LLVM'
|
LTO |
$ export AR=llvm-ar RANLIB=llvm-ranlib NM=llvm-nm
$ export {C,CXX,LD}FLAGS+=' -flto'
|
ThinLTO |
$ export AR=llvm-ar RANLIB=llvm-ranlib NM=llvm-nm
$ export {C,CXX,LD}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. |
PGO |
1) Fase inicial de compilación e instalación del paquete. |
$ export {C,CXX}FLAGS+=' -O2 -g1 -fprofile-generate=/var/pgo/imagemagick-6' |
2) Ejecutar 'make check' en el directorio de compilación. |
3) Conversión del perfil de optimización a un formato legible por Clang. |
$ PGODIR=/var/pgo/imagemagick-6; llvm-profdata merge $PGODIR/default_*.profraw --output=$PGODIR/default.profdata |
4) Fase final de compilación e instalación del paquete. |
$ export {C,CXX}FLAGS+=' -fprofile-use=/var/pgo/imagemagick-6' |
CSPGO |
1) Fase inicial de compilación e instalación del paquete. |
$ export {C,CXX}FLAGS+=' -O2 -g1 -fprofile-use=/var/pgo/imagemagick-6 -fcs-profile-generate=/var/pgo/imagemagick-6' |
2) Ejecutar 'make check' en el directorio de compilación. |
3) Conversión y mezcla con el perfil PGO, del perfil de optimización a un formato legible por Clang. |
$ PGODIR=/var/pgo/imagemagick-6;
llvm-profdata merge $PGODIR/default_*.profraw $PGODIR/default.profdata
--output=$PGODIR/cspgo.profdata |
4) Fase final de compilación e instalación del paquete. |
$ export {C,CXX}FLAGS+=' -fprofile-use=/var/pgo/imagemagick-6/cspgo.profdata' |
Parámetros adicionales
Parámetros adicionales de eliminación de avisos en el proceso de compilación |
$ export {C,CXX}FLAGS+=' -w' |
Parámetros adicionales de eliminación de errores específicos en el proceso de compilación |
Clang 15 y superiores |
$ export {C,CXX}FLAGS+=' -Wno-implicit-function-declaration' |
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/PGO de LLD |
$ export LDFLAGS+=' -Wl,--lto-aa-pipeline=globals-aa -Wl,--lto-newpm-passes=pgo-memop-opt' |
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
$ tar axvf ImageMagick-6.9.13-19.tar.lz
$ cd ImageMagick-6.9.13-19
$ ./configure --prefix=/opt/imagemagick-6 --with-modules \
--with-fftw --with-gslib --with-rsvg --with-gvc --with-tcmalloc \
--disable-static --enable-hdri --enable-opencl --libdir=/opt/imagemagick-6/lib64
$ find . -name "Makefile" -o -name "*.pc" -type f | xargs sed -i 's:-lgomp:-lomp:g' |
Explicación de los
comandos
--prefix=/opt/imagemagick-6 : Instala el programa en el directorio /opt/imagemagick-6.
--with-modules
: Compila el soporte de módulos compartidos en lugar de
integrarlos de forma estática en los binarios ejecutables del
paquete.
--with-fftw : Activa el soporte de FFTW.
--with-gslib : Activa el soporte de Libgs de Ghostscript.
--with-rsvg : Activa el soporte de imágenes en formato SVG mediante el uso de Librsvg. Si no añadimos esta opción, se utilizará Cairo para compilar el soporte de este formato de imagen.
--with-gvc : Activa el soporte de Graphviz.
--with-tcmalloc : Activa el soporte del asignador de memoria, TCMalloc, para optimizar el uso de la misma en operaciones multihilo.
--disable-static
: Desactiva la compilación de las librerías
estáticas, al no ser necesarias para la ejecución de los
programas.
--enable-hdri : Activa el soporte de imágenes de alto rango dinámico.
--enable-opencl : Activa el soporte de OpenCL en algunas de las operaciones del programa. Requiere de un controlador de gráficos que lo soporte también.
--libdir=/opt/imagemagick-6/lib64 : Instala las librerías en /opt/imagemagick-6/lib64, en sistemas de 64 bits multiarquitectura.
find . -name "Makefile" -o -name "*.pc" -type f | xargs sed -i 's:-lgomp:-lomp:g' : Modifica los archivos Makefile creados para evitar que los binarios se enlacen contra la librería Libgomp de GCC, en el caso de que utilicemos Clang para compilar el paquete, y se enlacen sólo contra la librería Libomp proporcionada por LLVM. También modifica los archivos de configuración que se instalan para Pkg-config, para que aparezca de forma correcta esta librería en los mismos.
Compilación
Parámetros de compilación opcionales
Instalación
como root
$ su
# make install-strip
# ldconfig -v
|
Estadísticas de Compilación e Instalación de ImageMagick 6
Estadísticas de Compilación e Instalación de ImageMagick 6 |
CPU |
AMD Ryzen 5 5500 |
MHz |
3600 (BoostMax=4457) |
RAM |
32 GB |
Tarjeta gráfica |
AMD Radeon RX 580 2048SP |
Controlador de gráficos |
AMDGPU 23.0.0 |
Sistema de archivos |
XFS |
Versión del Kernel |
6.11.8-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 19.1.3 |
Compilador |
Clang 19.1.3 + Ccache 4.10.2 |
Parámetros de optimización |
-03 -march=znver3
-mtune=znver3 -mllvm
-polly -mllvm -polly-vectorizer=stripmine -mllvm -polly-parallel -mllvm
-polly-omp-backend=LLVM -flto -funified-lto
-fprofile-use=/var/pgo/imagemagick-6/cspgo.profdata -Wl,--lto=thin
-Wl,--thinlto-jobs=6 -Wl,--lto-aa-pipeline=globals-aa
-Wl,--lto-newpm-passes=pgo-memop-opt |
Parámetros de compilación |
V=1 -j12 |
Tiempo de compilación |
19" |
Tiempo de instalación |
43" |
Tiempo total consumido |
1' 02" |
Archivos instalados |
770 |
|
Enlaces simbólicos creados |
6 |
|
Ocupación de espacio en disco |
21,5 MB |
Desinstalación como root
1)
MODO TRADICIONAL
En el directorio de compilación
ejecutamos el siguiente comando:
2)
MODO MANUALINUX
ImageMagick-6.9.13-19-scripts.tar.gz
$ su
# tar zxvf ImageMagick-6.9.13-19-scripts.tar.gz
# cd ImageMagick-6.9.13-19-scripts
# ./Desinstalar_ImageMagick-6.9.13-19 |
Copia de Seguridad
como root
$ su
# tar zxvf ImageMagick-6.9.13-19-scripts.tar.gz
# cd ImageMagick-6.9.13-19-scripts
# ./Respaldar_ImageMagick-6.9.13-19 |
Restaurar la Copia de
Seguridad
como root
$ su
# cd /var/copibin/restaurar_copias
# ./Restaurar_ImageMagick-6.9.13-19
|
Variables de entorno a
establecer para poder compilar los paquetes con ImageMagick 6
$ export PKG_CONFIG_PATH=/opt/imagemagick-6/lib64/pkgconfig:$PKG_CONFIG_PATH
$ export PATH=/opt/imagemagick-6/bin:$PATH |
Iniciamos ImageMagick
Sólo nos
queda teclear en una terminal o en un lanzador el comando display,
y el programa aparecerá en la pantalla. La interfaz gráfica es bastante espartana y poco funcional.
Enlaces
http://imagemagick.org >> La web de ImageMagick.
Filtros de Gimp - IM >> Manual del filtro de Gimp, IM, que nos permite utilizar ImageMagick con este editor de imágenes.
|