mirror of
				https://github.com/ml-explore/mlx.git
				synced 2025-10-31 16:21:27 +08:00 
			
		
		
		
	
							
								
								
									
										121
									
								
								docs/src/dev/mlx_in_cpp.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										121
									
								
								docs/src/dev/mlx_in_cpp.rst
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,121 @@ | ||||
| .. _mlx_in_cpp: | ||||
|  | ||||
| Using MLX in C++ | ||||
| ================ | ||||
|  | ||||
| You can use MLX in a C++ project with CMake. | ||||
|  | ||||
| .. note:: | ||||
|  | ||||
|   This guide is based one the following `example using MLX in C++  | ||||
|   <https://github.com/ml-explore/mlx/tree/main/examples/cmake_project>`_ | ||||
|  | ||||
| First install MLX: | ||||
|  | ||||
| .. code-block:: bash | ||||
|  | ||||
|   pip install -U mlx | ||||
|  | ||||
| You can also install the MLX Python package from source or just the C++ | ||||
| library. For more information see the :ref:`documentation on installing MLX | ||||
| <build_and_install>`. | ||||
|  | ||||
| Next make an example program in ``example.cpp``:  | ||||
|  | ||||
| .. code-block:: C++ | ||||
|  | ||||
|   #include <iostream> | ||||
|  | ||||
|   #include "mlx/mlx.h" | ||||
|  | ||||
|   namespace mx = mlx::core; | ||||
|  | ||||
|   int main() { | ||||
|     auto x = mx::array({1, 2, 3}); | ||||
|     auto y = mx::array({1, 2, 3}); | ||||
|     std::cout << x + y << std::endl; | ||||
|     return 0; | ||||
|   } | ||||
|  | ||||
| The next step is to setup a CMake file in ``CMakeLists.txt``: | ||||
|  | ||||
| .. code-block:: cmake | ||||
|  | ||||
|   cmake_minimum_required(VERSION 3.27) | ||||
|  | ||||
|   project(example LANGUAGES CXX) | ||||
|  | ||||
|   set(CMAKE_CXX_STANDARD 17) | ||||
|   set(CMAKE_CXX_STANDARD_REQUIRED ON) | ||||
|  | ||||
|  | ||||
| Depending on how you installed MLX, you may need to tell CMake where to | ||||
| find it.  | ||||
|  | ||||
| If you installed MLX with Python, then add the following to the CMake file: | ||||
|  | ||||
| .. code-block:: cmake | ||||
|  | ||||
|   find_package( | ||||
|     Python 3.9 | ||||
|     COMPONENTS Interpreter Development.Module | ||||
|     REQUIRED) | ||||
|   execute_process( | ||||
|     COMMAND "${Python_EXECUTABLE}" -m mlx --cmake-dir | ||||
|     OUTPUT_STRIP_TRAILING_WHITESPACE | ||||
|     OUTPUT_VARIABLE MLX_ROOT) | ||||
|  | ||||
| If you installed the MLX C++ package to a system path, then CMake should be | ||||
| able to find it. If you installed it to a non-standard location or CMake can't | ||||
| find MLX then set ``MLX_ROOT`` to the location where MLX is installed: | ||||
|  | ||||
| .. code-block:: cmake | ||||
|  | ||||
|   set(MLX_ROOT "/path/to/mlx/") | ||||
|  | ||||
| Next, instruct CMake to find MLX: | ||||
|  | ||||
| .. code-block:: cmake | ||||
|  | ||||
|   find_package(MLX CONFIG REQUIRED) | ||||
|  | ||||
| Finally, add the ``example.cpp`` program as an executable and link MLX. | ||||
|  | ||||
| .. code-block:: cmake | ||||
|  | ||||
|   add_executable(example example.cpp) | ||||
|   target_link_libraries(example PRIVATE mlx) | ||||
|  | ||||
| You can build the example with: | ||||
|  | ||||
| .. code-block:: bash | ||||
|  | ||||
|   cmake -B build -DCMAKE_BUILD_TYPE=Release | ||||
|   cmake --build build | ||||
|  | ||||
| And run it with: | ||||
|  | ||||
| .. code-block:: bash | ||||
|  | ||||
|   ./build/example | ||||
|  | ||||
| Note ``find_package(MLX CONFIG REQUIRED)`` sets the following variables: | ||||
|  | ||||
| .. list-table:: Package Variables | ||||
|    :widths: 20 20  | ||||
|    :header-rows: 1 | ||||
|  | ||||
|    * - Variable  | ||||
|      - Description  | ||||
|    * - MLX_FOUND | ||||
|      - ``True`` if MLX is found | ||||
|    * - MLX_INCLUDE_DIRS | ||||
|      - Include directory | ||||
|    * - MLX_LIBRARIES | ||||
|      - Libraries to link against | ||||
|    * - MLX_CXX_FLAGS | ||||
|      - Additional compiler flags | ||||
|    * - MLX_BUILD_ACCELERATE | ||||
|      - ``True`` if MLX was built with Accelerate  | ||||
|    * - MLX_BUILD_METAL | ||||
|      - ``True`` if MLX was built with Metal | ||||
| @@ -87,3 +87,4 @@ are the CPU and GPU. | ||||
|    dev/extensions | ||||
|    dev/metal_debugger | ||||
|    dev/custom_metal_kernels | ||||
|    dev/mlx_in_cpp | ||||
|   | ||||
| @@ -1,3 +1,5 @@ | ||||
| .. _build_and_install: | ||||
|  | ||||
| Build and Install | ||||
| ================= | ||||
|  | ||||
|   | ||||
| @@ -89,6 +89,7 @@ Operations | ||||
|    isneginf | ||||
|    isposinf | ||||
|    issubdtype | ||||
|    kron | ||||
|    left_shift | ||||
|    less | ||||
|    less_equal | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Awni Hannun
					Awni Hannun