kumquat-buildroot/package/openblas/Config.in
Thomas De Schampheleire 6f29cdeee4 package/openblas: allow disabling multithreading
Buildroot would automatically enable multithreading in OpenBLAS if the
architecture supports it. However, one may want to avoid OpenBLAS creating
threads itself and configure single-threaded operation. To accommodate this
use case, add a config option for multithreading.

When multithreading is disabled but OpenBLAS functions are called in the
same application by multiple threads, then locking is mandatory. The
USE_LOCKING flag was added in version 0.3.7 with following release note:

    a new option USE_LOCKING was added to ensure thread safety when OpenBLAS
    itself is built without multithreading but will be called from multiple
    threads.

However, if one knows that OpenBLAS will only be called from single-threaded
applications, then passing USE_LOCKING is not necessary, so make it a config
option too.

When multithreading is enabled, locking is implicitly enabled inside
openblas, so only provide the locking option when multithreading is
disabled.

Signed-off-by: Thomas De Schampheleire <thomas.de_schampheleire@nokia.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2021-02-16 23:10:57 +01:00

98 lines
3.8 KiB
Plaintext

config BR2_PACKAGE_OPENBLAS_DEFAULT_TARGET
string
default "P2" if BR2_x86_pentium2
default "KATMAI" if BR2_x86_pentium3
default "NORTHWOOD" if BR2_x86_pentium4
default "PRESCOTT" if BR2_x86_prescott || BR2_x86_nocona
default "BANIAS" if BR2_x86_pentium_m
default "CORE2" if BR2_x86_core2
default "NEHALEM" if BR2_x86_corei7 || BR2_x86_silvermont || BR2_x86_westmere
default "SANDYBRIDGE" if BR2_x86_corei7_avx
default "HASWELL" if BR2_x86_core_avx2
default "ATOM" if BR2_x86_atom
default "ATHLON" if BR2_x86_athlon || BR2_x86_athlon_4
default "OPTERON" if BR2_x86_opteron
default "OPTERON_SSE3" if BR2_x86_opteron_sse3
default "BARCELONA" if BR2_x86_barcelona
default "BOBCAT" if BR2_x86_jaguar
default "STEAMROLLER" if BR2_x86_steamroller
default "VIAC3" if BR2_x86_c3 || BR2_x86_c32
default "POWER4" if BR2_powerpc_power4
default "POWER5" if BR2_powerpc_power5
default "POWER6" if BR2_powerpc_power6
default "POWER7" if BR2_powerpc_power7
default "POWER8" if BR2_powerpc_power8
default "PPCG4" if BR2_powerpc_7400 || BR2_powerpc_7450
default "PPC970" if BR2_powerpc_970
default "PPC440" if BR2_powerpc_440
default "PPC440FP2" if BR2_powerpc_440fp
# P5600 is built with MSA support which is only available in Codescape toolchains
default "P5600" if BR2_mips_p5600 && BR2_TOOLCHAIN_EXTERNAL_CODESCAPE_MTI_MIPS
default "SICORTEX" if BR2_MIPS_CPU_MIPS64
# I6400 is built with MSA support which is only available in Codescape toolchains
default "I6400" if BR2_mips_i6400 && BR2_TOOLCHAIN_EXTERNAL_CODESCAPE_IMG_MIPS
# OpenBLAS assumes SPARC=Sparc v9
default "SPARC" if BR2_sparc_v9
# Cortex-A15 always have a VFPv4
default "CORTEXA15" if (BR2_cortex_a15 && BR2_ARM_EABIHF)
# Cortex-A9 have an optional VFPv3, so we need to make sure it
# is available
default "CORTEXA9" if (BR2_cortex_a9 && BR2_ARM_EABIHF && \
BR2_ARM_CPU_HAS_VFPV3)
default "ARMV5" if BR2_ARM_CPU_ARMV5
# On ARMv6, OpenBLAS assumes that a VFP is available, and
# EABIhf is used
default "ARMV6" if (BR2_ARM_CPU_ARMV6 && BR2_ARM_EABIHF && \
BR2_ARM_CPU_HAS_VFPV2)
# On ARMv7, OpenBLAS assumes that a full VFPv3+ is available
# (and not the more limited D16 variant), and that EABIhf is
# used.
default "ARMV7" if (BR2_ARM_CPU_ARMV7A && BR2_ARM_EABIHF && \
BR2_ARM_CPU_HAS_VFPV3)
default "ARMV8" if BR2_aarch64 || BR2_aarch64_be
help
OpenBLAS target CPU. See TargetList.txt in the source tree for
the possible target strings. A possible value is set
automatically based on your Target Architecture Variant.
config BR2_PACKAGE_OPENBLAS_ARCH_SUPPORTS
bool
default y if BR2_PACKAGE_OPENBLAS_DEFAULT_TARGET != ""
config BR2_PACKAGE_OPENBLAS
bool "openblas"
depends on BR2_PACKAGE_OPENBLAS_ARCH_SUPPORTS
help
An optimized BLAS library based on GotoBLAS2 1.13 BSD version.
https://www.openblas.net/
if BR2_PACKAGE_OPENBLAS
config BR2_PACKAGE_OPENBLAS_TARGET
string "OpenBLAS target CPU"
default BR2_PACKAGE_OPENBLAS_DEFAULT_TARGET
config BR2_PACKAGE_OPENBLAS_USE_THREAD
bool "use multithreading"
default y
depends on BR2_TOOLCHAIN_HAS_THREADS
depends on !BR2_STATIC_LIBS
help
Tell OpenBLAS to use multithreading, by passing USE_THREAD=1.
config BR2_PACKAGE_OPENBLAS_USE_LOCKING
bool "use locking"
default y
depends on BR2_TOOLCHAIN_HAS_THREADS
depends on !BR2_PACKAGE_OPENBLAS_USE_THREAD
help
Tell OpenBLAS to use locking, by passing USE_LOCKING=1.
Locking is implicitly enabled when USE_THREAD=1.
However, if USE_THREAD=0 (i.e. OpenBLAS itself will run in
single-threaded mode) but an application makes OpenBLAS
function calls from multiple threads, then locking is
mandatory for correct operation.
endif