This change upstreams llamafile's cpu matrix
multiplication kernels for ppc64le using MMA
builtins for FP32 datatype.
This change results in a consistent 90%
improvement in input processing time, and 20%
to 80% improvement in output processing time,
across various batch sizes.
The patch is tested with Meta-Lllama-3-8B,
Mistral-7B, Llama-2-7B-chat-hf models on a
IBM POWER10 machine.
Signed-off-by: Amrita H S <redacted>
endif()
elseif (${CMAKE_SYSTEM_PROCESSOR} MATCHES "ppc64")
message(STATUS "PowerPC detected")
- if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "ppc64le")
- list(APPEND ARCH_FLAGS -mcpu=powerpc64le)
+ execute_process(COMMAND bash -c "grep POWER10 /proc/cpuinfo | head -n 1"
+ OUTPUT_VARIABLE POWER10_M)
+ string(FIND ${POWER10_M} "POWER10" substring_index)
+ if(${substring_index} GREATER_EQUAL 0)
+ list(APPEND ARCH_FLAGS -mcpu=power10)
+ elseif (${CMAKE_SYSTEM_PROCESSOR} MATCHES "ppc64le")
+ list(APPEND ARCH_FLAGS -mcpu=powerpc64le)
else()
list(APPEND ARCH_FLAGS -mcpu=native -mtune=native)
#TODO: Add targets for Power8/Power9 (Altivec/VSX) and Power10(MMA) and query for big endian systems (ppc64/le/be)