mirror of
https://github.com/ml-explore/mlx.git
synced 2025-06-26 02:33:21 +08:00
53 lines
1.5 KiB
ReStructuredText
53 lines
1.5 KiB
ReStructuredText
Metal Debugger
|
|
==============
|
|
|
|
Profiling is a key step for performance optimization. You can build MLX with
|
|
the ``MLX_METAL_DEBUG`` option to improve the Metal debugging and optimization
|
|
workflow. The ``MLX_METAL_DEBUG`` debug option:
|
|
|
|
* Records source during Metal compilation, for later inspection while
|
|
debugging.
|
|
* Labels Metal objects such as command queues, improving capture readability.
|
|
|
|
The ``metal::start_capture`` function initiates a capture of all MLX GPU work.
|
|
|
|
.. code-block:: C++
|
|
|
|
int main() {
|
|
metal::start_capture("/Users/Jane/Developer/MLX.gputrace");
|
|
|
|
auto a = arange(10.f, 20.f, 1.f, float32);
|
|
auto b = arange(30.f, 40.f, 1.f, float32);
|
|
auto c = add(a, b);
|
|
|
|
eval(c);
|
|
|
|
metal::stop_capture();
|
|
}
|
|
|
|
You can open and replay the GPU trace in Xcode. The ``Dependencies`` view
|
|
has a great overview of all operations. Checkout the `Metal debugger
|
|
documentation`_ for more information.
|
|
|
|
.. image:: ../_static/metal_debugger/capture.png
|
|
:class: dark-light
|
|
|
|
Xcode Workflow
|
|
--------------
|
|
|
|
You can skip saving to a path by running within Xcode. First, generate an Xcode
|
|
project using CMake.
|
|
|
|
.. code-block::
|
|
|
|
mkdir build && cd build
|
|
cmake .. -DMLX_METAL_DEBUG=ON -G Xcode
|
|
open mlx.xcodeproj
|
|
|
|
Select the ``metal_capture`` example schema and run.
|
|
|
|
.. image:: ../_static/metal_debugger/schema.png
|
|
:class: dark-light
|
|
|
|
.. _`Metal debugger documentation`: https://developer.apple.com/documentation/xcode/metal-debugger
|