mirror of
https://github.com/ggerganov/whisper.cpp.git
synced 2025-04-22 10:18:49 +02:00
whisper.android : enable fp16 instrinsics (FP16_VA) which is supported by ARMv8.2 or later. (#572)
This commit is contained in:
parent
59fdcd19c8
commit
a3fb6c507f
@ -74,6 +74,7 @@ private class WhisperLib {
|
|||||||
init {
|
init {
|
||||||
Log.d(LOG_TAG, "Primary ABI: ${Build.SUPPORTED_ABIS[0]}")
|
Log.d(LOG_TAG, "Primary ABI: ${Build.SUPPORTED_ABIS[0]}")
|
||||||
var loadVfpv4 = false
|
var loadVfpv4 = false
|
||||||
|
var loadV8fp16 = false
|
||||||
if (isArmEabiV7a()) {
|
if (isArmEabiV7a()) {
|
||||||
// armeabi-v7a needs runtime detection support
|
// armeabi-v7a needs runtime detection support
|
||||||
val cpuInfo = cpuInfo()
|
val cpuInfo = cpuInfo()
|
||||||
@ -84,11 +85,24 @@ private class WhisperLib {
|
|||||||
loadVfpv4 = true
|
loadVfpv4 = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else if (isArmEabiV8a()) {
|
||||||
|
// ARMv8.2a needs runtime detection support
|
||||||
|
val cpuInfo = cpuInfo()
|
||||||
|
cpuInfo?.let {
|
||||||
|
Log.d(LOG_TAG, "CPU info: $cpuInfo")
|
||||||
|
if (cpuInfo.contains("fphp")) {
|
||||||
|
Log.d(LOG_TAG, "CPU supports fp16 arithmetic")
|
||||||
|
loadV8fp16 = true
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (loadVfpv4) {
|
if (loadVfpv4) {
|
||||||
Log.d(LOG_TAG, "Loading libwhisper_vfpv4.so")
|
Log.d(LOG_TAG, "Loading libwhisper_vfpv4.so")
|
||||||
System.loadLibrary("whisper_vfpv4")
|
System.loadLibrary("whisper_vfpv4")
|
||||||
|
} else if (loadV8fp16) {
|
||||||
|
Log.d(LOG_TAG, "Loading libwhisper_v8fp16_va.so")
|
||||||
|
System.loadLibrary("whisper_v8fp16_va")
|
||||||
} else {
|
} else {
|
||||||
Log.d(LOG_TAG, "Loading libwhisper.so")
|
Log.d(LOG_TAG, "Loading libwhisper.so")
|
||||||
System.loadLibrary("whisper")
|
System.loadLibrary("whisper")
|
||||||
@ -110,6 +124,10 @@ private fun isArmEabiV7a(): Boolean {
|
|||||||
return Build.SUPPORTED_ABIS[0].equals("armeabi-v7a")
|
return Build.SUPPORTED_ABIS[0].equals("armeabi-v7a")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun isArmEabiV8a(): Boolean {
|
||||||
|
return Build.SUPPORTED_ABIS[0].equals("arm64-v8a")
|
||||||
|
}
|
||||||
|
|
||||||
private fun cpuInfo(): String? {
|
private fun cpuInfo(): String? {
|
||||||
return try {
|
return try {
|
||||||
File("/proc/cpuinfo").inputStream().bufferedReader().use {
|
File("/proc/cpuinfo").inputStream().bufferedReader().use {
|
||||||
|
@ -13,3 +13,14 @@ ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
|
|||||||
LOCAL_CFLAGS += -mfpu=neon-vfpv4
|
LOCAL_CFLAGS += -mfpu=neon-vfpv4
|
||||||
include $(BUILD_SHARED_LIBRARY)
|
include $(BUILD_SHARED_LIBRARY)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifeq ($(TARGET_ARCH_ABI),arm64-v8a)
|
||||||
|
include $(CLEAR_VARS)
|
||||||
|
LOCAL_MODULE := libwhisper_v8fp16_va
|
||||||
|
include $(LOCAL_PATH)/Whisper.mk
|
||||||
|
# Allow building NEON FMA code.
|
||||||
|
# https://android.googlesource.com/platform/ndk/+/master/sources/android/cpufeatures/cpu-features.h
|
||||||
|
LOCAL_CFLAGS += -march=armv8.2-a+fp16
|
||||||
|
include $(BUILD_SHARED_LIBRARY)
|
||||||
|
endif
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user