How to resolve MPS Framework doesn't support float64 on M1 Mac
Master System Design with Codemia
Enhance your system design skills with over 120 practice problems, detailed solutions, and hands-on exercises.
Introduction
With the advent of Apple's custom silicon, particularly the M1 chip, there's been increased interest in optimizing code for this architecture. For software developers, one common issue encountered is the error message: "MPS Framework doesn't support float64" on M1 Mac. In this article, we will explore the intricacies of this error, understand the limitations of the MPS (Metal Performance Shaders) framework, and outline solutions to overcome these challenges.
Understanding MPS and Float64
What is MPS?
Metal Performance Shaders (MPS) is a highly efficient, low-level framework designed by Apple to enhance graphics and data-parallel computation across its devices. MPS is optimized for matrices, graphics processing, and neural networks, making it a go-to for many high-performance applications.
The Role of Float64
Float64, or double-precision floating-point format, is often used when developers need to maintain precision in calculations, particularly in scientific computations. However, not all hardware and software environments natively support or optimize for Float64, primarily due to performance and power consumption considerations.
M1 Chip Constraints
The Apple M1 chip is a hybrid architecture combining high-performance cores with efficiency cores. While it's incredibly powerful for most applications, it does not natively support double-precision floating-point calculations in the Metal Performance Shaders framework. This limitation is because the MPS framework is primarily designed for speed and efficiency using 32-bit floats (float32
), which are more than sufficient for the majority of graphics and neural network tasks.
Resolving the "MPS Framework Doesn't Support Float64" Error
To resolve this issue and effectively develop on an M1 Mac, consider the following strategies:
1. Convert Float64 to Float32
The most straightforward solution is converting your double-precision floats to single-precision. This approach accommodates the MPS framework's design and maintains compatibility across computations.
- Direct alignment with MPS framework.
- Generally faster computations with lower memory footprint.
- Potential loss of precision.

