mirror of
https://github.com/ggerganov/whisper.cpp.git
synced 2025-07-02 07:20:13 +02:00
Compare commits
1 Commits
Author | SHA1 | Date | |
---|---|---|---|
c6174cb868 |
61
.github/workflows/build.yml
vendored
61
.github/workflows/build.yml
vendored
@ -236,61 +236,6 @@ jobs:
|
|||||||
name: whisper-blas-bin-${{ matrix.arch }}
|
name: whisper-blas-bin-${{ matrix.arch }}
|
||||||
path: build/bin/${{ matrix.build }}
|
path: build/bin/${{ matrix.build }}
|
||||||
|
|
||||||
windows-cublas:
|
|
||||||
runs-on: windows-latest
|
|
||||||
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
build: [Release]
|
|
||||||
arch: [x64]
|
|
||||||
cublas: [ON]
|
|
||||||
sdl2: [ON]
|
|
||||||
include:
|
|
||||||
- arch: x64
|
|
||||||
s2arc: x64
|
|
||||||
- sdl2: ON
|
|
||||||
s2ver: 2.26.0
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Clone
|
|
||||||
uses: actions/checkout@v1
|
|
||||||
|
|
||||||
- name: Add msbuild to PATH
|
|
||||||
uses: microsoft/setup-msbuild@v1
|
|
||||||
|
|
||||||
- name: Install CUDA Toolkit
|
|
||||||
id: cuda-toolkit
|
|
||||||
uses: Jimver/cuda-toolkit@v0.2.10
|
|
||||||
|
|
||||||
- name: Fetch SDL2 and set SDL2_DIR
|
|
||||||
if: matrix.sdl2 == 'ON'
|
|
||||||
run: |
|
|
||||||
C:/msys64/usr/bin/wget.exe -qO sdl2.zip https://github.com/libsdl-org/SDL/releases/download/release-${{ matrix.s2ver }}/SDL2-devel-${{ matrix.s2ver }}-VC.zip
|
|
||||||
7z x sdl2.zip
|
|
||||||
echo "SDL2_DIR=$env:GITHUB_WORKSPACE/SDL2-${{ matrix.s2ver }}/cmake" >> $env:GITHUB_ENV
|
|
||||||
|
|
||||||
- name: Configure
|
|
||||||
run: >
|
|
||||||
cmake -S . -B ./build -A ${{ matrix.arch }}
|
|
||||||
-DCMAKE_BUILD_TYPE=${{ matrix.build }}
|
|
||||||
-DWHISPER_CUBLAS=1
|
|
||||||
|
|
||||||
- name: Build
|
|
||||||
run: |
|
|
||||||
cd ./build
|
|
||||||
msbuild ALL_BUILD.vcxproj -t:build -p:configuration=${{ matrix.build }} -p:platform=${{ matrix.arch }}
|
|
||||||
|
|
||||||
- name: Copy SDL2.dll
|
|
||||||
if: matrix.sdl2 == 'ON'
|
|
||||||
run: copy "$env:SDL2_DIR/../lib/${{ matrix.s2arc }}/SDL2.dll" build/bin/${{ matrix.build }}
|
|
||||||
|
|
||||||
- name: Upload binaries
|
|
||||||
if: matrix.sdl2 == 'ON'
|
|
||||||
uses: actions/upload-artifact@v1
|
|
||||||
with:
|
|
||||||
name: whisper-cublas-bin-${{ matrix.arch }}
|
|
||||||
path: build/bin/${{ matrix.build }}
|
|
||||||
|
|
||||||
emscripten:
|
emscripten:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
@ -337,7 +282,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Build objc example
|
- name: Build objc example
|
||||||
run: xcodebuild -project examples/whisper.objc/whisper.objc.xcodeproj -scheme whisper.objc -configuration ${{ matrix.build }} -sdk iphonesimulator build
|
run: xcodebuild -project examples/whisper.objc/whisper.objc.xcodeproj -scheme whisper.objc -configuration ${{ matrix.build }} -sdk iphonesimulator build
|
||||||
|
|
||||||
- name: Build swiftui example
|
- name: Build swiftui example
|
||||||
run: xcodebuild -project examples/whisper.swiftui/whisper.swiftui.xcodeproj -scheme WhisperCppDemo -configuration ${{ matrix.build }} -sdk iphonesimulator build
|
run: xcodebuild -project examples/whisper.swiftui/whisper.swiftui.xcodeproj -scheme WhisperCppDemo -configuration ${{ matrix.build }} -sdk iphonesimulator build
|
||||||
|
|
||||||
@ -353,11 +298,11 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
distribution: zulu
|
distribution: zulu
|
||||||
java-version: 17
|
java-version: 17
|
||||||
|
|
||||||
- name: Setup Android SDK
|
- name: Setup Android SDK
|
||||||
uses: android-actions/setup-android@v2
|
uses: android-actions/setup-android@v2
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: |
|
run: |
|
||||||
cd examples/whisper.android
|
cd examples/whisper.android
|
||||||
./gradlew assembleRelease --no-daemon
|
./gradlew assembleRelease --no-daemon
|
68
.github/workflows/release-deb.yml
vendored
68
.github/workflows/release-deb.yml
vendored
@ -1,68 +0,0 @@
|
|||||||
name: release-deb
|
|
||||||
|
|
||||||
on:
|
|
||||||
release:
|
|
||||||
types: [created]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
runs-on: ubuntu-20.04
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
|
|
||||||
- name: Configure
|
|
||||||
run: |
|
|
||||||
set -x -e
|
|
||||||
VERSION=$(echo $GITHUB_REF | cut --delimiter=/ -f 3)
|
|
||||||
ID="whisper-cpp-small_${VERSION}_amd64"
|
|
||||||
|
|
||||||
echo "PKG_VERSION=$VERSION" >> $GITHUB_ENV
|
|
||||||
echo "PKG_ID=$ID" >> $GITHUB_ENV
|
|
||||||
|
|
||||||
- name: Install deps
|
|
||||||
run: |
|
|
||||||
sudo apt install -y --no-install-recommends intel-mkl
|
|
||||||
|
|
||||||
- name: Build
|
|
||||||
run: |
|
|
||||||
cmake -S . -B build-mkl \
|
|
||||||
-DCMAKE_BUILD_TYPE=Release\
|
|
||||||
-DBUILD_SHARED_LIBS=0\
|
|
||||||
-DWHISPER_BLAS=1\
|
|
||||||
-DWHISPER_BLAS_VENDOR=Intel10_64lp
|
|
||||||
cd build-mkl
|
|
||||||
make
|
|
||||||
cd ..
|
|
||||||
|
|
||||||
- name: Create package tree
|
|
||||||
env:
|
|
||||||
GITHUB_REPO: ${{ github.repository }}
|
|
||||||
run: |
|
|
||||||
export ROOT=$PKG_ID/opt/project/whisper.cpp
|
|
||||||
mkdir -p $ROOT/bin
|
|
||||||
mkdir -p $ROOT/share
|
|
||||||
mkdir -p $PKG_ID/DEBIAN
|
|
||||||
|
|
||||||
cp build-mkl/bin/main $ROOT/bin/whisper
|
|
||||||
cp -r contrib/debian/control $PKG_ID/DEBIAN/
|
|
||||||
|
|
||||||
echo "Version: $PKG_VERSION" >> $PKG_ID/DEBIAN/control
|
|
||||||
echo "Vcs-Git: $GITHUB_REPO" >> $PKG_ID/DEBIAN/control
|
|
||||||
echo "Vcs-Git-Commit: $GITHUB_SHA" >> $PKG_ID/DEBIAN/control
|
|
||||||
|
|
||||||
models/download-ggml-model.sh small
|
|
||||||
build-mkl/bin/quantize models/ggml-small.bin \
|
|
||||||
$ROOT/share/ggml-small-q5_1.bin q5_1
|
|
||||||
|
|
||||||
- name: Create deb package
|
|
||||||
run: |
|
|
||||||
mkdir artifacts
|
|
||||||
dpkg-deb --build --root-owner-group $PKG_ID
|
|
||||||
|
|
||||||
- name: Upload Release Asset
|
|
||||||
uses: xresloader/upload-to-github-release@v1
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
with:
|
|
||||||
release_id: ${{ github.event.release.id }}
|
|
||||||
file: ${{ env.PKG_ID }}.deb
|
|
2
.gitignore
vendored
2
.gitignore
vendored
@ -5,7 +5,6 @@
|
|||||||
.test/
|
.test/
|
||||||
.vs/
|
.vs/
|
||||||
.vscode/
|
.vscode/
|
||||||
.idea/
|
|
||||||
.DS_Store
|
.DS_Store
|
||||||
|
|
||||||
build/
|
build/
|
||||||
@ -17,7 +16,6 @@ build-cublas/
|
|||||||
build-no-accel/
|
build-no-accel/
|
||||||
build-sanitize-addr/
|
build-sanitize-addr/
|
||||||
build-sanitize-thread/
|
build-sanitize-thread/
|
||||||
cmake-build-debug/
|
|
||||||
|
|
||||||
/main
|
/main
|
||||||
/stream
|
/stream
|
||||||
|
@ -2,6 +2,10 @@ cmake_minimum_required (VERSION 3.0)
|
|||||||
|
|
||||||
project(whisper.cpp VERSION 1.4.1)
|
project(whisper.cpp VERSION 1.4.1)
|
||||||
|
|
||||||
|
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
||||||
|
add_compile_options(/utf-8)
|
||||||
|
endif ()
|
||||||
|
|
||||||
# Add path to modules
|
# Add path to modules
|
||||||
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/")
|
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/")
|
||||||
|
|
||||||
@ -49,21 +53,17 @@ option(WHISPER_BUILD_EXAMPLES "whisper: build examples" ${WHISPER_STANDA
|
|||||||
|
|
||||||
option(WHISPER_SDL2 "whisper: support for libSDL2" OFF)
|
option(WHISPER_SDL2 "whisper: support for libSDL2" OFF)
|
||||||
|
|
||||||
option(WHISPER_NO_AVX "whisper: disable AVX" OFF)
|
|
||||||
option(WHISPER_NO_AVX2 "whisper: disable AVX2" OFF)
|
|
||||||
option(WHISPER_NO_FMA "whisper: disable FMA" OFF)
|
|
||||||
option(WHISPER_NO_F16C "whisper: disable F16c" OFF)
|
|
||||||
|
|
||||||
if (APPLE)
|
if (APPLE)
|
||||||
option(WHISPER_NO_ACCELERATE "whisper: disable Accelerate framework" OFF)
|
option(WHISPER_NO_ACCELERATE "whisper: disable Accelerate framework" OFF)
|
||||||
option(WHISPER_COREML "whisper: enable Core ML framework" OFF)
|
option(WHISPER_NO_AVX "whisper: disable AVX" OFF)
|
||||||
option(WHISPER_COREML_ALLOW_FALLBACK "whisper: allow non-CoreML fallback" OFF)
|
option(WHISPER_NO_AVX2 "whisper: disable AVX2" OFF)
|
||||||
|
option(WHISPER_NO_FMA "whisper: disable FMA" OFF)
|
||||||
|
|
||||||
|
option(WHISPER_COREML "whisper: enable Core ML framework" OFF)
|
||||||
|
option(WHISPER_COREML_ALLOW_FALLBACK "whisper: allow non-CoreML fallback" OFF)
|
||||||
else()
|
else()
|
||||||
option(WHISPER_BLAS "whisper: use BLAS libraries" OFF)
|
option(WHISPER_OPENBLAS "whisper: support for OpenBLAS" OFF)
|
||||||
option(WHISPER_BLAS_VENDOR "whisper: BLAS library vendor" Generic)
|
option(WHISPER_CUBLAS "whisper: support for cuBLAS" OFF)
|
||||||
option(WHISPER_OPENBLAS "whisper: prefer OpenBLAS" OFF)
|
|
||||||
option(WHISPER_CUBLAS "whisper: support for cuBLAS" OFF)
|
|
||||||
option(WHISPER_CLBLAST "whisper: use CLBlast" OFF)
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
option(WHISPER_PERF "whisper: enable perf timings" OFF)
|
option(WHISPER_PERF "whisper: enable perf timings" OFF)
|
||||||
@ -129,31 +129,18 @@ if (APPLE)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (WHISPER_OPENBLAS)
|
if (WHISPER_OPENBLAS)
|
||||||
set(WHISPER_BLAS_VENDOR "OpenBLAS")
|
find_library(OPENBLAS_LIB
|
||||||
set(WHISPER_BLAS ON)
|
NAMES openblas libopenblas
|
||||||
endif()
|
)
|
||||||
|
if (OPENBLAS_LIB)
|
||||||
|
message(STATUS "OpenBLAS found")
|
||||||
|
|
||||||
if (WHISPER_BLAS)
|
set(WHISPER_EXTRA_LIBS ${WHISPER_EXTRA_LIBS} ${OPENBLAS_LIB})
|
||||||
if (WHISPER_STATIC)
|
|
||||||
set(BLA_STATIC 1)
|
|
||||||
else()
|
|
||||||
set(BLA_STATIC 0)
|
|
||||||
endif ()
|
|
||||||
set(BLA_VENDOR ${WHISPER_BLAS_VENDOR})
|
|
||||||
set(BLA_SIZEOF_INTEGER 8)
|
|
||||||
find_package(BLAS)
|
|
||||||
|
|
||||||
if(BLAS_FOUND)
|
|
||||||
message(STATUS "BLAS compatible library found")
|
|
||||||
message(STATUS "Libraries ${BLAS_LIBRARIES}")
|
|
||||||
set(WHISPER_EXTRA_FLAGS ${WHISPER_EXTRA_FLAGS} -DGGML_USE_OPENBLAS)
|
set(WHISPER_EXTRA_FLAGS ${WHISPER_EXTRA_FLAGS} -DGGML_USE_OPENBLAS)
|
||||||
|
|
||||||
include_directories(${BLAS_INCLUDE_DIRS})
|
|
||||||
set(WHISPER_EXTRA_LIBS ${WHISPER_EXTRA_LIBS} ${BLAS_LIBRARIES})
|
|
||||||
else()
|
else()
|
||||||
message(WARNING "BLAS library was not found")
|
message(WARNING "OpenBLAS not found")
|
||||||
endif()
|
endif()
|
||||||
endif ()
|
endif()
|
||||||
|
|
||||||
if (WHISPER_CUBLAS)
|
if (WHISPER_CUBLAS)
|
||||||
cmake_minimum_required(VERSION 3.17)
|
cmake_minimum_required(VERSION 3.17)
|
||||||
@ -162,7 +149,7 @@ if (WHISPER_CUBLAS)
|
|||||||
|
|
||||||
if (CUDAToolkit_FOUND)
|
if (CUDAToolkit_FOUND)
|
||||||
message(STATUS "cuBLAS found")
|
message(STATUS "cuBLAS found")
|
||||||
set(CMAKE_CUDA_COMPILER /usr/local/cuda/bin/nvcc)
|
|
||||||
enable_language(CUDA)
|
enable_language(CUDA)
|
||||||
|
|
||||||
set(GGML_CUDA_SOURCES ggml-cuda.cu ggml-cuda.h)
|
set(GGML_CUDA_SOURCES ggml-cuda.cu ggml-cuda.h)
|
||||||
@ -180,21 +167,6 @@ if (WHISPER_CUBLAS)
|
|||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (WHISPER_CLBLAST)
|
|
||||||
find_package(CLBlast)
|
|
||||||
if (CLBlast_FOUND)
|
|
||||||
message(STATUS "CLBlast found")
|
|
||||||
|
|
||||||
set(GGML_OPENCL_SOURCES ggml-opencl.c ggml-opencl.h)
|
|
||||||
|
|
||||||
add_compile_definitions(GGML_USE_CLBLAST)
|
|
||||||
|
|
||||||
set(WHISPER_EXTRA_LIBS ${WHISPER_EXTRA_LIBS} clblast)
|
|
||||||
else()
|
|
||||||
message(WARNING "CLBlast not found")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# compiler flags
|
# compiler flags
|
||||||
|
|
||||||
if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
|
if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
|
||||||
@ -302,7 +274,6 @@ add_library(${TARGET}
|
|||||||
ggml.h
|
ggml.h
|
||||||
ggml.c
|
ggml.c
|
||||||
${GGML_CUDA_SOURCES}
|
${GGML_CUDA_SOURCES}
|
||||||
${GGML_OPENCL_SOURCES}
|
|
||||||
whisper.h
|
whisper.h
|
||||||
whisper.cpp
|
whisper.cpp
|
||||||
)
|
)
|
||||||
|
22
Makefile
22
Makefile
@ -171,22 +171,13 @@ ggml-cuda.o: ggml-cuda.cu ggml-cuda.h
|
|||||||
$(NVCC) $(NVCCFLAGS) $(CXXFLAGS) -Wno-pedantic -c $< -o $@
|
$(NVCC) $(NVCCFLAGS) $(CXXFLAGS) -Wno-pedantic -c $< -o $@
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifdef WHISPER_CLBLAST
|
|
||||||
CFLAGS += -DGGML_USE_CLBLAST
|
|
||||||
LDFLAGS += -lclblast -lOpenCL
|
|
||||||
WHISPER_OBJ += ggml-opencl.o
|
|
||||||
|
|
||||||
ggml-opencl.o: ggml-opencl.c ggml-opencl.h
|
|
||||||
$(CC) $(CFLAGS) -c $< -o $@
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef WHISPER_GPROF
|
ifdef WHISPER_GPROF
|
||||||
CFLAGS += -pg
|
CFLAGS += -pg
|
||||||
CXXFLAGS += -pg
|
CXXFLAGS += -pg
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifneq ($(filter aarch64%,$(UNAME_M)),)
|
ifneq ($(filter aarch64%,$(UNAME_M)),)
|
||||||
CFLAGS += -mcpu=native
|
CFLAGS += -mcpu=native
|
||||||
CXXFLAGS += -mcpu=native
|
CXXFLAGS += -mcpu=native
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@ -197,18 +188,15 @@ endif
|
|||||||
|
|
||||||
ifneq ($(filter armv7%,$(UNAME_M)),)
|
ifneq ($(filter armv7%,$(UNAME_M)),)
|
||||||
# 32-bit ARM, for example on Armbian or possibly raspbian
|
# 32-bit ARM, for example on Armbian or possibly raspbian
|
||||||
#CFLAGS += -mfpu=neon -mfp16-format=ieee -funsafe-math-optimizations -mno-unaligned-access
|
CFLAGS += -mfpu=neon -mfp16-format=ieee -mno-unaligned-access -funsafe-math-optimizations
|
||||||
#CXXFLAGS += -mfpu=neon -mfp16-format=ieee -funsafe-math-optimizations -mno-unaligned-access
|
|
||||||
|
|
||||||
# 64-bit ARM on 32-bit OS, use these (TODO: auto-detect 64-bit)
|
# 64-bit ARM, use these (TODO: auto-detect 64-bit)
|
||||||
CFLAGS += -mfpu=neon-fp-armv8 -mfp16-format=ieee -funsafe-math-optimizations -mno-unaligned-access
|
# CFLAGS += -mfpu=neon-fp-armv8 -mfp16-format=ieee -mno-unaligned-access -funsafe-math-optimizations
|
||||||
CXXFLAGS += -mfpu=neon-fp-armv8 -mfp16-format=ieee -funsafe-math-optimizations -mno-unaligned-access
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifneq ($(filter armv8%,$(UNAME_M)),)
|
ifneq ($(filter armv8%,$(UNAME_M)),)
|
||||||
# Raspberry Pi 4
|
# Raspberry Pi 4
|
||||||
CFLAGS += -mfpu=neon-fp-armv8 -mfp16-format=ieee -funsafe-math-optimizations -mno-unaligned-access
|
CFLAGS += -mfp16-format=ieee -mno-unaligned-access
|
||||||
CXXFLAGS += -mfpu=neon-fp-armv8 -mfp16-format=ieee -funsafe-math-optimizations -mno-unaligned-access
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
#
|
#
|
||||||
|
24
README.md
24
README.md
@ -20,7 +20,6 @@ High-performance inference of [OpenAI's Whisper](https://github.com/openai/whisp
|
|||||||
- Zero memory allocations at runtime
|
- Zero memory allocations at runtime
|
||||||
- Runs on the CPU
|
- Runs on the CPU
|
||||||
- [Partial GPU support for NVIDIA via cuBLAS](https://github.com/ggerganov/whisper.cpp#nvidia-gpu-support-via-cublas)
|
- [Partial GPU support for NVIDIA via cuBLAS](https://github.com/ggerganov/whisper.cpp#nvidia-gpu-support-via-cublas)
|
||||||
- [Partial OpenCL GPU support via CLBlast](https://github.com/ggerganov/whisper.cpp#opencl-gpu-support-via-clblast)
|
|
||||||
- [C-style API](https://github.com/ggerganov/whisper.cpp/blob/master/whisper.h)
|
- [C-style API](https://github.com/ggerganov/whisper.cpp/blob/master/whisper.h)
|
||||||
|
|
||||||
Supported platforms:
|
Supported platforms:
|
||||||
@ -312,29 +311,6 @@ make clean
|
|||||||
WHISPER_CUBLAS=1 make -j
|
WHISPER_CUBLAS=1 make -j
|
||||||
```
|
```
|
||||||
|
|
||||||
## OpenCL GPU support via CLBlast
|
|
||||||
|
|
||||||
For cards and integrated GPUs that support OpenCL, the Encoder processing can be largely offloaded to the GPU through CLBlast. This is especially useful for users with AMD APU's or low end devices for up to ~2x speedup.
|
|
||||||
|
|
||||||
First, make sure you have installed `CLBlast` for your OS or Distribution: https://github.com/CNugteren/CLBlast
|
|
||||||
|
|
||||||
Now build `whisper.cpp` with CLBlast support:
|
|
||||||
|
|
||||||
```
|
|
||||||
Makefile:
|
|
||||||
cd whisper.cpp
|
|
||||||
make clean
|
|
||||||
WHISPER_CLBLAST=1 make -j
|
|
||||||
|
|
||||||
CMake:
|
|
||||||
cd whisper.cpp ; mkdir build ; cd build
|
|
||||||
cmake -DWHISPER_CLBLAST=ON ..
|
|
||||||
make clean
|
|
||||||
make -j
|
|
||||||
cp bin/* ../
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
Run all the examples as usual.
|
Run all the examples as usual.
|
||||||
|
|
||||||
## Limitations
|
## Limitations
|
||||||
|
@ -1,5 +0,0 @@
|
|||||||
Package: whisper-small-cpp
|
|
||||||
Architecture: amd64
|
|
||||||
Maintainer: Alexey Kharlamov <alexey@kharlamov.biz>
|
|
||||||
Description: Whisper Speech to Text Converter
|
|
||||||
Depends: libc6 (>= 2.2.1), intel-mkl
|
|
Reference in New Issue
Block a user