Files
pmomusic/tools/test_cpu
Eric Coissac c31596fdb5 Passons en stéreo
reprise du module DSP pmoaudio
2025-11-03 14:45:37 +01:00

124 lines
3.3 KiB
Bash
Executable File

#!/bin/bash
echo "=== Identification CPU ==="
echo ""
# Architecture
ARCH=$(uname -m)
echo "Architecture: $ARCH"
# Modèle CPU
if [ -f /proc/cpuinfo ]; then
MODEL=$(grep "model name" /proc/cpuinfo | head -1 | cut -d: -f2 | xargs)
if [ -z "$MODEL" ]; then
# Sur ARM, pas de "model name"
MODEL=$(grep "Hardware" /proc/cpuinfo | head -1 | cut -d: -f2 | xargs)
fi
echo "Modèle: $MODEL"
fi
# Nombre de cœurs
CORES=$(nproc)
echo "Cœurs: $CORES"
echo ""
echo "=== Capacités SIMD ==="
if [[ "$ARCH" == "x86_64" || "$ARCH" == "i686" ]]; then
# x86/x86_64
echo "Type: x86/x86_64"
if grep -q "avx512" /proc/cpuinfo; then
echo "✅ AVX-512 disponible"
fi
if grep -q "avx2" /proc/cpuinfo; then
echo "✅ AVX2 disponible (recommandé pour SIMD)"
fi
if grep -q "avx" /proc/cpuinfo; then
echo "✅ AVX disponible"
fi
if grep -q "sse4_2" /proc/cpuinfo; then
echo "✅ SSE4.2 disponible"
fi
if grep -q "fma" /proc/cpuinfo; then
echo "✅ FMA (Fused Multiply-Add) disponible"
fi
elif [[ "$ARCH" == "aarch64" ]]; then
# ARM 64-bit
echo "Type: ARM 64-bit"
FEATURES=$(grep "Features" /proc/cpuinfo | head -1)
if echo "$FEATURES" | grep -q "asimd"; then
echo "✅ NEON/Advanced SIMD disponible (recommandé)"
fi
if echo "$FEATURES" | grep -q "fp"; then
echo "✅ FPU matériel disponible"
fi
if echo "$FEATURES" | grep -q "sve"; then
echo "✅ SVE (Scalable Vector Extension) disponible"
fi
elif [[ "$ARCH" == "armv7l" || "$ARCH" == "armv6l" ]]; then
# ARM 32-bit
echo "Type: ARM 32-bit"
FEATURES=$(grep "Features" /proc/cpuinfo | head -1)
if echo "$FEATURES" | grep -q "neon"; then
echo "✅ NEON disponible (SIMD)"
fi
if echo "$FEATURES" | grep -q "vfpv4"; then
echo "✅ VFPv4 (FPU simple précision) disponible"
elif echo "$FEATURES" | grep -q "vfp"; then
echo "✅ VFP (FPU basique) disponible"
else
echo "❌ Pas de FPU matériel (Cortex-M0/M3?)"
fi
fi
echo ""
echo "=== Recommandation pour audio DSP ==="
if [[ "$ARCH" == "x86_64" ]]; then
if grep -q "avx2" /proc/cpuinfo; then
echo "🚀 Float f64 + SIMD (std::simd avec AVX2)"
echo " Performance optimale garantie"
else
echo "✅ Float f64 + SIMD (std::simd avec SSE)"
echo " Bonne performance"
fi
elif [[ "$ARCH" == "aarch64" ]]; then
if grep -q "asimd" /proc/cpuinfo; then
echo "🚀 Float f64 + SIMD (std::simd avec NEON)"
echo " Performance optimale sur ARM64"
else
echo "⚠️ ARM64 sans NEON (rare)"
fi
elif [[ "$ARCH" == "armv7l" ]]; then
if grep -q "neon" /proc/cpuinfo; then
echo "✅ Float f32 + NEON SIMD"
echo " Bonne performance sur ARM32"
elif grep -q "vfp" /proc/cpuinfo; then
echo "⚖️ Float f32 scalaire (avec FPU)"
echo " Performance correcte, équivalent à integer"
else
echo "💡 Integer fixed-point Q23"
echo " Pas de FPU, integer sera plus rapide"
fi
elif [[ "$ARCH" == "armv6l" ]]; then
echo "💡 Integer fixed-point Q23"
echo " CPU ancien, pas de FPU performant"
fi