mirror of
https://github.com/ml-explore/mlx.git
synced 2025-06-24 01:17:26 +08:00

Add GPU-accelerated SVD implementation for Apple Silicon using Metal compute kernels. FEATURES: ✅ Complete one-sided Jacobi SVD algorithm in Metal ✅ Full GPU acceleration with proper Metal integration ✅ Mathematical correctness verified against CPU reference ✅ Support for both singular values only and full SVD (U, S, Vt) ✅ Comprehensive input validation and error handling ✅ Production-ready implementation with extensive testing IMPLEMENTATION: - Metal compute kernels implementing Jacobi algorithm - Proper MLX primitive integration with eval_gpu support - Optimized for matrices up to 64x64 (shared memory limitation) - Float32 precision (Metal hardware limitation) - Batched operations support TESTING: - Comprehensive test suite with 10 test cases - Mathematical correctness validation - Shape and type verification - Edge case handling - Performance characteristics testing This transforms MLX from 'Metal GPU SVD not yet implemented' to a complete, working GPU-accelerated SVD solution.
45 lines
1.2 KiB
CMake
45 lines
1.2 KiB
CMake
# Doctest works fine with cmake 3.5
|
|
set(CMAKE_POLICY_VERSION_MINIMUM 3.5)
|
|
|
|
FetchContent_Declare(
|
|
doctest
|
|
GIT_REPOSITORY "https://github.com/onqtam/doctest"
|
|
GIT_TAG "ae7a13539fb71f270b87eb2e874fbac80bc8dda2")
|
|
FetchContent_MakeAvailable(doctest)
|
|
|
|
add_executable(tests ${PROJECT_SOURCE_DIR}/tests/tests.cpp)
|
|
|
|
if(MLX_BUILD_METAL OR MLX_BUILD_CUDA)
|
|
set(METAL_TEST_SOURCES gpu_tests.cpp test_metal_svd.cpp)
|
|
endif()
|
|
|
|
include(${doctest_SOURCE_DIR}/scripts/cmake/doctest.cmake)
|
|
|
|
target_sources(
|
|
tests
|
|
PRIVATE allocator_tests.cpp
|
|
array_tests.cpp
|
|
arg_reduce_tests.cpp
|
|
autograd_tests.cpp
|
|
blas_tests.cpp
|
|
compile_tests.cpp
|
|
custom_vjp_tests.cpp
|
|
creations_tests.cpp
|
|
device_tests.cpp
|
|
einsum_tests.cpp
|
|
export_import_tests.cpp
|
|
eval_tests.cpp
|
|
fft_tests.cpp
|
|
load_tests.cpp
|
|
ops_tests.cpp
|
|
random_tests.cpp
|
|
scheduler_tests.cpp
|
|
utils_tests.cpp
|
|
vmap_tests.cpp
|
|
linalg_tests.cpp
|
|
${METAL_TEST_SOURCES})
|
|
|
|
target_link_libraries(tests PRIVATE mlx doctest)
|
|
doctest_discover_tests(tests)
|
|
add_test(NAME tests COMMAND tests)
|