This commit is contained in:
CircleCI Docs
2025-10-17 19:15:00 +00:00
parent 830f99716d
commit 231caa94a6
2642 changed files with 137687 additions and 70861 deletions
+1 -1
View File
@@ -1,4 +1,4 @@
# Sphinx build info version 1
# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
config: d832ae99342413e9277cab63924f1dd4
config: b9afea4432e35a4ac5dbffb76ed39348
tags: 645f666f9bcd5a90fca523b33c5a78b7
+6 -20
View File
@@ -420,8 +420,8 @@ element in the output.
constant const float& alpha [[buffer(3)]],
constant const float& beta [[buffer(4)]],
constant const int* shape [[buffer(5)]],
constant const size_t* x_strides [[buffer(6)]],
constant const size_t* y_strides [[buffer(7)]],
constant const int64_t* x_strides [[buffer(6)]],
constant const int64_t* y_strides [[buffer(7)]],
constant const int& ndim [[buffer(8)]],
uint index [[thread_position_in_grid]]) {
// Convert linear indices to offsets in array
@@ -438,24 +438,10 @@ each instantiation a unique host name so we can identify it.
.. code-block:: C++
#define instantiate_axpby(type_name, type) \
template [[host_name("axpby_general_" #type_name)]] \
[[kernel]] void axpby_general<type>( \
device const type* x [[buffer(0)]], \
device const type* y [[buffer(1)]], \
device type* out [[buffer(2)]], \
constant const float& alpha [[buffer(3)]], \
constant const float& beta [[buffer(4)]], \
constant const int* shape [[buffer(5)]], \
constant const size_t* x_strides [[buffer(6)]], \
constant const size_t* y_strides [[buffer(7)]], \
constant const int& ndim [[buffer(8)]], \
uint index [[thread_position_in_grid]]);
instantiate_axpby(float32, float);
instantiate_axpby(float16, half);
instantiate_axpby(bfloat16, bfloat16_t);
instantiate_axpby(complex64, complex64_t);
instantiate_kernel("axpby_general_float32", axpby_general, float)
instantiate_kernel("axpby_general_float16", axpby_general, float16_t)
instantiate_kernel("axpby_general_bfloat16", axpby_general, bfloat16_t)
instantiate_kernel("axpby_general_complex64", axpby_general, complex64_t)
The logic to determine the kernel, set the inputs, resolve the grid dimensions,
and dispatch to the GPU are contained in :meth:`Axpby::eval_gpu` as shown
+121
View 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
+3
View File
@@ -45,6 +45,7 @@ are the CPU and GPU.
usage/numpy
usage/distributed
usage/using_streams
usage/export
.. toctree::
:caption: Examples
@@ -61,6 +62,7 @@ are the CPU and GPU.
python/array
python/data_types
python/devices_and_streams
python/export
python/ops
python/random
python/transforms
@@ -86,3 +88,4 @@ are the CPU and GPU.
dev/extensions
dev/metal_debugger
dev/custom_metal_kernels
dev/mlx_in_cpp
+3 -1
View File
@@ -1,3 +1,5 @@
.. _build_and_install:
Build and Install
=================
@@ -53,7 +55,7 @@ Build Requirements
^^^^^^^^^^^^^^^^^^
- A C++ compiler with C++17 support (e.g. Clang >= 5.0)
- `cmake <https://cmake.org/>`_ -- version 3.24 or later, and ``make``
- `cmake <https://cmake.org/>`_ -- version 3.25 or later, and ``make``
- Xcode >= 15.0 and macOS SDK >= 14.0
.. note::
@@ -0,0 +1,6 @@
mlx.core.export\_function
=========================
.. currentmodule:: mlx.core
.. autofunction:: export_function
@@ -0,0 +1,6 @@
mlx.core.export\_to\_dot
========================
.. currentmodule:: mlx.core
.. autofunction:: export_to_dot
@@ -0,0 +1,6 @@
mlx.core.exporter
=================
.. currentmodule:: mlx.core
.. autofunction:: exporter
@@ -0,0 +1,30 @@
mlx.core.finfo
==============
.. currentmodule:: mlx.core
.. autoclass:: finfo
.. automethod:: __init__
.. rubric:: Methods
.. autosummary::
~finfo.__init__
.. rubric:: Attributes
.. autosummary::
~finfo.dtype
~finfo.max
~finfo.min
@@ -0,0 +1,6 @@
mlx.core.import\_function
=========================
.. currentmodule:: mlx.core
.. autofunction:: import_function
@@ -0,0 +1,6 @@
mlx.core.kron
=============
.. currentmodule:: mlx.core
.. autofunction:: kron
@@ -0,0 +1,6 @@
mlx.core.slice
==============
.. currentmodule:: mlx.core
.. autofunction:: slice
@@ -0,0 +1,6 @@
mlx.core.slice\_update
======================
.. currentmodule:: mlx.core
.. autofunction:: slice_update
@@ -0,0 +1,6 @@
mlx.core.unflatten
==================
.. currentmodule:: mlx.core
.. autofunction:: unflatten
+1
View File
@@ -66,3 +66,4 @@ documentation for more information. Use :func:`issubdtype` to determine if one
Dtype
DtypeCategory
issubdtype
finfo
+14
View File
@@ -0,0 +1,14 @@
.. _export:
Export Functions
================
.. currentmodule:: mlx.core
.. autosummary::
:toctree: _autosummary
export_function
import_function
exporter
export_to_dot
+4
View File
@@ -89,6 +89,7 @@ Operations
isneginf
isposinf
issubdtype
kron
left_shift
less
less_equal
@@ -144,6 +145,8 @@ Operations
sign
sin
sinh
slice
slice_update
softmax
sort
split
@@ -168,6 +171,7 @@ Operations
tri
tril
triu
unflatten
var
view
where
+74
View File
@@ -421,3 +421,77 @@ the most opportunity to optimize the computation graph:
# Compiling the outer function is good to do as it will likely
# be faster even though the inner functions are compiled
fun = mx.compile(outer)
.. _shapeless_compile:
Shapeless Compilation
---------------------
When the shape of an input to a compiled function changes, the function is
recompiled. You can compile a function once and run it on inputs with
variable shapes by specifying ``shapeless=True`` to :func:`compile`. In this
case changes to the shapes of the inputs do not cause the function to be
recompiled.
.. code-block:: python
def fun(x, y):
return mx.abs(x + y)
compiled_fun = mx.compile(fun, shapeless=True)
x = mx.array(1.0)
y = mx.array(-2.0)
# Firt call compiles the function
print(compiled_fun(x, y))
# Second call with different shapes
# does not recompile the function
x = mx.array([1.0, -6.0])
y = mx.array([-2.0, 3.0])
print(compiled_fun(x, y))
Use shapeless compilations carefully. Since compilation is not triggered when
shapes change, any graphs which are conditional on the input shapes will not
work as expected. Shape-dependent computations are common and sometimes subtle
to detect. For example:
.. code-block:: python
def fun(x):
return x.reshape(x.shape[0] * x.shape[1], -1)
compiled_fun = mx.compile(fun, shapeless=True)
x = mx.random.uniform(shape=(2, 3, 4))
out = compiled_fun(x)
x = mx.random.uniform(shape=(5, 5, 3))
# Error, can't reshape (5, 5, 3) to (6, -1)
out = compiled_fun(x)
The second call to the ``compiled_fun`` fails because of the call to
:func:`reshape` which uses the static shape of ``x`` in the first call. We can
fix this by using :func:`flatten` to avoid hardcoding the shape of ``x``:
.. code-block:: python
def fun(x):
return x.flatten(0, 1)
compiled_fun = mx.compile(fun, shapeless=True)
x = mx.random.uniform(shape=(2, 3, 4))
out = compiled_fun(x)
x = mx.random.uniform(shape=(5, 5, 3))
# Ok
out = compiled_fun(x)
+4 -3
View File
@@ -141,12 +141,13 @@ everything else remaining the same.
from mlx.utils import tree_map
def all_reduce_grads(grads):
N = mx.distributed.init()
N = mx.distributed.init().size()
if N == 1:
return grads
return tree_map(
lambda x: mx.distributed.all_sum(x) / N,
grads)
lambda x: mx.distributed.all_sum(x) / N,
grads
)
def step(model, x, y):
loss, grads = loss_grad_fn(model, x, y)
+288
View File
@@ -0,0 +1,288 @@
.. _export_usage:
Exporting Functions
===================
.. currentmodule:: mlx.core
MLX has an API to export and import functions to and from a file. This lets you
run computations written in one MLX front-end (e.g. Python) in another MLX
front-end (e.g. C++).
This guide walks through the basics of the MLX export API with some examples.
To see the full list of functions check-out the :ref:`API documentation
<export>`.
Basics of Exporting
-------------------
Let's start with a simple example:
.. code-block:: python
def fun(x, y):
return x + y
x = mx.array(1.0)
y = mx.array(1.0)
mx.export_function("add.mlxfn", fun, x, y)
To export a function, provide sample input arrays that the function
can be called with. The data doesn't matter, but the shapes and types of the
arrays do. In the above example we exported ``fun`` with two ``float32``
scalar arrays. We can then import the function and run it:
.. code-block:: python
add_fun = mx.import_function("add.mlxfn")
out, = add_fun(mx.array(1.0), mx.array(2.0))
# Prints: array(3, dtype=float32)
print(out)
out, = add_fun(mx.array(1.0), mx.array(3.0))
# Prints: array(4, dtype=float32)
print(out)
# Raises an exception
add_fun(mx.array(1), mx.array(3.0))
# Raises an exception
add_fun(mx.array([1.0, 2.0]), mx.array(3.0))
Notice the third and fourth calls to ``add_fun`` raise exceptions because the
shapes and types of the inputs are different than the shapes and types of the
example inputs we exported the function with.
Also notice that even though the original ``fun`` returns a single output
array, the imported function always returns a tuple of one or more arrays.
The inputs to :func:`export_function` and to an imported function can be
specified as variable positional arguments or as a tuple of arrays:
.. code-block:: python
def fun(x, y):
return x + y
x = mx.array(1.0)
y = mx.array(1.0)
# Both arguments to fun are positional
mx.export_function("add.mlxfn", fun, x, y)
# Same as above
mx.export_function("add.mlxfn", fun, (x, y))
imported_fun = mx.import_function("add.mlxfn")
# Ok
out, = imported_fun(x, y)
# Also ok
out, = imported_fun((x, y))
You can pass example inputs to functions as positional or keyword arguments. If
you use keyword arguments to export the function, then you have to use the same
keyword arguments when calling the imported function.
.. code-block:: python
def fun(x, y):
return x + y
# One argument to fun is positional, the other is a kwarg
mx.export_function("add.mlxfn", fun, x, y=y)
imported_fun = mx.import_function("add.mlxfn")
# Ok
out, = imported_fun(x, y=y)
# Also ok
out, = imported_fun((x,), {"y": y})
# Raises since the keyword argument is missing
out, = imported_fun(x, y)
# Raises since the keyword argument has the wrong key
out, = imported_fun(x, z=y)
Exporting Modules
-----------------
An :obj:`mlx.nn.Module` can be exported with or without the parameters included
in the exported function. Here's an example:
.. code-block:: python
model = nn.Linear(4, 4)
mx.eval(model.parameters())
def call(x):
return model(x)
mx.export_function("model.mlxfn", call, mx.zeros(4))
In the above example, the :obj:`mlx.nn.Linear` module is exported. Its
parameters are also saved to the ``model.mlxfn`` file.
.. note::
For enclosed arrays inside an exported function, be extra careful to ensure
they are evaluated. The computation graph that gets exported will include
the computation that produces enclosed inputs.
If the above example was missing ``mx.eval(model.parameters()``, the
exported function would include the random initialization of the
:obj:`mlx.nn.Module` parameters.
If you only want to export the ``Module.__call__`` function without the
parameters, pass them as inputs to the ``call`` wrapper:
.. code-block:: python
model = nn.Linear(4, 4)
mx.eval(model.parameters())
def call(x, **params):
# Set the model's parameters to the input parameters
model.update(tree_unflatten(list(params.items())))
return model(x)
params = dict(tree_flatten(model.parameters()))
mx.export_function("model.mlxfn", call, (mx.zeros(4),), params)
Shapeless Exports
-----------------
Just like :func:`compile`, functions can also be exported for dynamically shaped
inputs. Pass ``shapeless=True`` to :func:`export_function` or :func:`exporter`
to export a function which can be used for inputs with variable shapes:
.. code-block:: python
mx.export_function("fun.mlxfn", mx.abs, mx.array(0.0), shapeless=True)
imported_abs = mx.import_function("fun.mlxfn")
# Ok
out, = imported_abs(mx.array(-1.0))
# Also ok
out, = imported_abs(mx.array([-1.0, -2.0]))
With ``shapeless=False`` (which is the default), the second call to
``imported_abs`` would raise an exception with a shape mismatch.
Shapeless exporting works the same as shapeless compilation and should be
used carefully. See the :ref:`documentation on shapeless compilation
<shapeless_compile>` for more information.
Exporting Multiple Traces
-------------------------
In some cases, functions build different computation graphs for different
input arguments. A simple way to manage this is to export to a new file with
each set of inputs. This is a fine option in many cases. But it can be
suboptimal if the exported functions have a large amount of duplicate constant
data (for example the parameters of a :obj:`mlx.nn.Module`).
The export API in MLX lets you export multiple traces of the same function to
a single file by creating an exporting context manager with :func:`exporter`:
.. code-block:: python
def fun(x, y=None):
constant = mx.array(3.0)
if y is not None:
x += y
return x + constant
with mx.exporter("fun.mlxfn", fun) as exporter:
exporter(mx.array(1.0))
exporter(mx.array(1.0), y=mx.array(0.0))
imported_function = mx.import_function("fun.mlxfn")
# Call the function with y=None
out, = imported_function(mx.array(1.0))
print(out)
# Call the function with y specified
out, = imported_function(mx.array(1.0), y=mx.array(1.0))
print(out)
In the above example the function constant data, (i.e. ``constant``), is only
saved once.
Transformations with Imported Functions
---------------------------------------
Function transformations like :func:`grad`, :func:`vmap`, and :func:`compile` work
on imported functions just like regular Python functions:
.. code-block:: python
def fun(x):
return mx.sin(x)
x = mx.array(0.0)
mx.export_function("sine.mlxfn", fun, x)
imported_fun = mx.import_function("sine.mlxfn")
# Take the derivative of the imported function
dfdx = mx.grad(lambda x: imported_fun(x)[0])
# Prints: array(1, dtype=float32)
print(dfdx(x))
# Compile the imported function
mx.compile(imported_fun)
# Prints: array(0, dtype=float32)
print(compiled_fun(x)[0])
Importing Functions in C++
--------------------------
Importing and running functions in C++ is basically the same as importing and
running them in Python. First, follow the :ref:`instructions <mlx_in_cpp>` to
setup a simple C++ project that uses MLX as a library.
Next, export a simple function from Python:
.. code-block:: python
def fun(x, y):
return mx.exp(x + y)
x = mx.array(1.0)
y = mx.array(1.0)
mx.export_function("fun.mlxfn", fun, x, y)
Import and run the function in C++ with only a few lines of code:
.. code-block:: c++
auto fun = mx::import_function("fun.mlxfn");
auto inputs = {mx::array(1.0), mx::array(1.0)};
auto outputs = fun(inputs);
// Prints: array(2, dtype=float32)
std::cout << outputs[0] << std::endl;
Imported functions can be transformed in C++ just like in Python. Use
``std::vector<mx::array>`` for positional arguments and ``std::map<std::string,
mx::array>`` for keyword arguments when calling imported functions in C++.
More Examples
-------------
Here are a few more complete examples exporting more complex functions from
Python and importing and running them in C++:
* `Inference and training a multi-layer perceptron <https://github.com/ml-explore/mlx/tree/main/examples/export>`_
+1 -1
View File
@@ -55,7 +55,7 @@ div.sphinxsidebarwrapper {
div.sphinxsidebar {
float: left;
width: 270px;
width: 230px;
margin-left: -100%;
font-size: 90%;
word-wrap: break-word;
+1 -1
View File
@@ -1,5 +1,5 @@
const DOCUMENTATION_OPTIONS = {
VERSION: '0.21.1',
VERSION: '0.22.0',
LANGUAGE: 'en',
COLLAPSE_INDEX: false,
BUILDER: 'html',
+121 -121
View File
@@ -6,11 +6,11 @@ html[data-theme="light"] .highlight span.linenos.special { color: #000000; backg
html[data-theme="light"] .highlight .hll { background-color: #fae4c2 }
html[data-theme="light"] .highlight { background: #fefefe; color: #080808 }
html[data-theme="light"] .highlight .c { color: #515151 } /* Comment */
html[data-theme="light"] .highlight .err { color: #a12236 } /* Error */
html[data-theme="light"] .highlight .k { color: #6730c5 } /* Keyword */
html[data-theme="light"] .highlight .l { color: #7f4707 } /* Literal */
html[data-theme="light"] .highlight .err { color: #A12236 } /* Error */
html[data-theme="light"] .highlight .k { color: #6730C5 } /* Keyword */
html[data-theme="light"] .highlight .l { color: #7F4707 } /* Literal */
html[data-theme="light"] .highlight .n { color: #080808 } /* Name */
html[data-theme="light"] .highlight .o { color: #00622f } /* Operator */
html[data-theme="light"] .highlight .o { color: #00622F } /* Operator */
html[data-theme="light"] .highlight .p { color: #080808 } /* Punctuation */
html[data-theme="light"] .highlight .ch { color: #515151 } /* Comment.Hashbang */
html[data-theme="light"] .highlight .cm { color: #515151 } /* Comment.Multiline */
@@ -18,135 +18,135 @@ html[data-theme="light"] .highlight .cp { color: #515151 } /* Comment.Preproc */
html[data-theme="light"] .highlight .cpf { color: #515151 } /* Comment.PreprocFile */
html[data-theme="light"] .highlight .c1 { color: #515151 } /* Comment.Single */
html[data-theme="light"] .highlight .cs { color: #515151 } /* Comment.Special */
html[data-theme="light"] .highlight .gd { color: #005b82 } /* Generic.Deleted */
html[data-theme="light"] .highlight .gd { color: #005B82 } /* Generic.Deleted */
html[data-theme="light"] .highlight .ge { font-style: italic } /* Generic.Emph */
html[data-theme="light"] .highlight .gh { color: #005b82 } /* Generic.Heading */
html[data-theme="light"] .highlight .gh { color: #005B82 } /* Generic.Heading */
html[data-theme="light"] .highlight .gs { font-weight: bold } /* Generic.Strong */
html[data-theme="light"] .highlight .gu { color: #005b82 } /* Generic.Subheading */
html[data-theme="light"] .highlight .kc { color: #6730c5 } /* Keyword.Constant */
html[data-theme="light"] .highlight .kd { color: #6730c5 } /* Keyword.Declaration */
html[data-theme="light"] .highlight .kn { color: #6730c5 } /* Keyword.Namespace */
html[data-theme="light"] .highlight .kp { color: #6730c5 } /* Keyword.Pseudo */
html[data-theme="light"] .highlight .kr { color: #6730c5 } /* Keyword.Reserved */
html[data-theme="light"] .highlight .kt { color: #7f4707 } /* Keyword.Type */
html[data-theme="light"] .highlight .ld { color: #7f4707 } /* Literal.Date */
html[data-theme="light"] .highlight .m { color: #7f4707 } /* Literal.Number */
html[data-theme="light"] .highlight .s { color: #00622f } /* Literal.String */
html[data-theme="light"] .highlight .gu { color: #005B82 } /* Generic.Subheading */
html[data-theme="light"] .highlight .kc { color: #6730C5 } /* Keyword.Constant */
html[data-theme="light"] .highlight .kd { color: #6730C5 } /* Keyword.Declaration */
html[data-theme="light"] .highlight .kn { color: #6730C5 } /* Keyword.Namespace */
html[data-theme="light"] .highlight .kp { color: #6730C5 } /* Keyword.Pseudo */
html[data-theme="light"] .highlight .kr { color: #6730C5 } /* Keyword.Reserved */
html[data-theme="light"] .highlight .kt { color: #7F4707 } /* Keyword.Type */
html[data-theme="light"] .highlight .ld { color: #7F4707 } /* Literal.Date */
html[data-theme="light"] .highlight .m { color: #7F4707 } /* Literal.Number */
html[data-theme="light"] .highlight .s { color: #00622F } /* Literal.String */
html[data-theme="light"] .highlight .na { color: #912583 } /* Name.Attribute */
html[data-theme="light"] .highlight .nb { color: #7f4707 } /* Name.Builtin */
html[data-theme="light"] .highlight .nc { color: #005b82 } /* Name.Class */
html[data-theme="light"] .highlight .no { color: #005b82 } /* Name.Constant */
html[data-theme="light"] .highlight .nd { color: #7f4707 } /* Name.Decorator */
html[data-theme="light"] .highlight .ni { color: #00622f } /* Name.Entity */
html[data-theme="light"] .highlight .ne { color: #6730c5 } /* Name.Exception */
html[data-theme="light"] .highlight .nf { color: #005b82 } /* Name.Function */
html[data-theme="light"] .highlight .nl { color: #7f4707 } /* Name.Label */
html[data-theme="light"] .highlight .nb { color: #7F4707 } /* Name.Builtin */
html[data-theme="light"] .highlight .nc { color: #005B82 } /* Name.Class */
html[data-theme="light"] .highlight .no { color: #005B82 } /* Name.Constant */
html[data-theme="light"] .highlight .nd { color: #7F4707 } /* Name.Decorator */
html[data-theme="light"] .highlight .ni { color: #00622F } /* Name.Entity */
html[data-theme="light"] .highlight .ne { color: #6730C5 } /* Name.Exception */
html[data-theme="light"] .highlight .nf { color: #005B82 } /* Name.Function */
html[data-theme="light"] .highlight .nl { color: #7F4707 } /* Name.Label */
html[data-theme="light"] .highlight .nn { color: #080808 } /* Name.Namespace */
html[data-theme="light"] .highlight .nx { color: #080808 } /* Name.Other */
html[data-theme="light"] .highlight .py { color: #005b82 } /* Name.Property */
html[data-theme="light"] .highlight .nt { color: #005b82 } /* Name.Tag */
html[data-theme="light"] .highlight .nv { color: #a12236 } /* Name.Variable */
html[data-theme="light"] .highlight .ow { color: #6730c5 } /* Operator.Word */
html[data-theme="light"] .highlight .py { color: #005B82 } /* Name.Property */
html[data-theme="light"] .highlight .nt { color: #005B82 } /* Name.Tag */
html[data-theme="light"] .highlight .nv { color: #A12236 } /* Name.Variable */
html[data-theme="light"] .highlight .ow { color: #6730C5 } /* Operator.Word */
html[data-theme="light"] .highlight .pm { color: #080808 } /* Punctuation.Marker */
html[data-theme="light"] .highlight .w { color: #080808 } /* Text.Whitespace */
html[data-theme="light"] .highlight .mb { color: #7f4707 } /* Literal.Number.Bin */
html[data-theme="light"] .highlight .mf { color: #7f4707 } /* Literal.Number.Float */
html[data-theme="light"] .highlight .mh { color: #7f4707 } /* Literal.Number.Hex */
html[data-theme="light"] .highlight .mi { color: #7f4707 } /* Literal.Number.Integer */
html[data-theme="light"] .highlight .mo { color: #7f4707 } /* Literal.Number.Oct */
html[data-theme="light"] .highlight .sa { color: #00622f } /* Literal.String.Affix */
html[data-theme="light"] .highlight .sb { color: #00622f } /* Literal.String.Backtick */
html[data-theme="light"] .highlight .sc { color: #00622f } /* Literal.String.Char */
html[data-theme="light"] .highlight .dl { color: #00622f } /* Literal.String.Delimiter */
html[data-theme="light"] .highlight .sd { color: #00622f } /* Literal.String.Doc */
html[data-theme="light"] .highlight .s2 { color: #00622f } /* Literal.String.Double */
html[data-theme="light"] .highlight .se { color: #00622f } /* Literal.String.Escape */
html[data-theme="light"] .highlight .sh { color: #00622f } /* Literal.String.Heredoc */
html[data-theme="light"] .highlight .si { color: #00622f } /* Literal.String.Interpol */
html[data-theme="light"] .highlight .sx { color: #00622f } /* Literal.String.Other */
html[data-theme="light"] .highlight .sr { color: #a12236 } /* Literal.String.Regex */
html[data-theme="light"] .highlight .s1 { color: #00622f } /* Literal.String.Single */
html[data-theme="light"] .highlight .ss { color: #005b82 } /* Literal.String.Symbol */
html[data-theme="light"] .highlight .bp { color: #7f4707 } /* Name.Builtin.Pseudo */
html[data-theme="light"] .highlight .fm { color: #005b82 } /* Name.Function.Magic */
html[data-theme="light"] .highlight .vc { color: #a12236 } /* Name.Variable.Class */
html[data-theme="light"] .highlight .vg { color: #a12236 } /* Name.Variable.Global */
html[data-theme="light"] .highlight .vi { color: #a12236 } /* Name.Variable.Instance */
html[data-theme="light"] .highlight .vm { color: #7f4707 } /* Name.Variable.Magic */
html[data-theme="light"] .highlight .il { color: #7f4707 } /* Literal.Number.Integer.Long */
html[data-theme="light"] .highlight .mb { color: #7F4707 } /* Literal.Number.Bin */
html[data-theme="light"] .highlight .mf { color: #7F4707 } /* Literal.Number.Float */
html[data-theme="light"] .highlight .mh { color: #7F4707 } /* Literal.Number.Hex */
html[data-theme="light"] .highlight .mi { color: #7F4707 } /* Literal.Number.Integer */
html[data-theme="light"] .highlight .mo { color: #7F4707 } /* Literal.Number.Oct */
html[data-theme="light"] .highlight .sa { color: #00622F } /* Literal.String.Affix */
html[data-theme="light"] .highlight .sb { color: #00622F } /* Literal.String.Backtick */
html[data-theme="light"] .highlight .sc { color: #00622F } /* Literal.String.Char */
html[data-theme="light"] .highlight .dl { color: #00622F } /* Literal.String.Delimiter */
html[data-theme="light"] .highlight .sd { color: #00622F } /* Literal.String.Doc */
html[data-theme="light"] .highlight .s2 { color: #00622F } /* Literal.String.Double */
html[data-theme="light"] .highlight .se { color: #00622F } /* Literal.String.Escape */
html[data-theme="light"] .highlight .sh { color: #00622F } /* Literal.String.Heredoc */
html[data-theme="light"] .highlight .si { color: #00622F } /* Literal.String.Interpol */
html[data-theme="light"] .highlight .sx { color: #00622F } /* Literal.String.Other */
html[data-theme="light"] .highlight .sr { color: #A12236 } /* Literal.String.Regex */
html[data-theme="light"] .highlight .s1 { color: #00622F } /* Literal.String.Single */
html[data-theme="light"] .highlight .ss { color: #005B82 } /* Literal.String.Symbol */
html[data-theme="light"] .highlight .bp { color: #7F4707 } /* Name.Builtin.Pseudo */
html[data-theme="light"] .highlight .fm { color: #005B82 } /* Name.Function.Magic */
html[data-theme="light"] .highlight .vc { color: #A12236 } /* Name.Variable.Class */
html[data-theme="light"] .highlight .vg { color: #A12236 } /* Name.Variable.Global */
html[data-theme="light"] .highlight .vi { color: #A12236 } /* Name.Variable.Instance */
html[data-theme="light"] .highlight .vm { color: #7F4707 } /* Name.Variable.Magic */
html[data-theme="light"] .highlight .il { color: #7F4707 } /* Literal.Number.Integer.Long */
html[data-theme="dark"] .highlight pre { line-height: 125%; }
html[data-theme="dark"] .highlight td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
html[data-theme="dark"] .highlight span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
html[data-theme="dark"] .highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
html[data-theme="dark"] .highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
html[data-theme="dark"] .highlight .hll { background-color: #ffd9002e }
html[data-theme="dark"] .highlight { background: #2b2b2b; color: #f8f8f2 }
html[data-theme="dark"] .highlight .c { color: #ffd900 } /* Comment */
html[data-theme="dark"] .highlight .err { color: #ffa07a } /* Error */
html[data-theme="dark"] .highlight .k { color: #dcc6e0 } /* Keyword */
html[data-theme="dark"] .highlight .l { color: #ffd900 } /* Literal */
html[data-theme="dark"] .highlight .n { color: #f8f8f2 } /* Name */
html[data-theme="dark"] .highlight .o { color: #abe338 } /* Operator */
html[data-theme="dark"] .highlight .p { color: #f8f8f2 } /* Punctuation */
html[data-theme="dark"] .highlight .ch { color: #ffd900 } /* Comment.Hashbang */
html[data-theme="dark"] .highlight .cm { color: #ffd900 } /* Comment.Multiline */
html[data-theme="dark"] .highlight .cp { color: #ffd900 } /* Comment.Preproc */
html[data-theme="dark"] .highlight .cpf { color: #ffd900 } /* Comment.PreprocFile */
html[data-theme="dark"] .highlight .c1 { color: #ffd900 } /* Comment.Single */
html[data-theme="dark"] .highlight .cs { color: #ffd900 } /* Comment.Special */
html[data-theme="dark"] .highlight .gd { color: #00e0e0 } /* Generic.Deleted */
html[data-theme="dark"] .highlight { background: #2b2b2b; color: #F8F8F2 }
html[data-theme="dark"] .highlight .c { color: #FFD900 } /* Comment */
html[data-theme="dark"] .highlight .err { color: #FFA07A } /* Error */
html[data-theme="dark"] .highlight .k { color: #DCC6E0 } /* Keyword */
html[data-theme="dark"] .highlight .l { color: #FFD900 } /* Literal */
html[data-theme="dark"] .highlight .n { color: #F8F8F2 } /* Name */
html[data-theme="dark"] .highlight .o { color: #ABE338 } /* Operator */
html[data-theme="dark"] .highlight .p { color: #F8F8F2 } /* Punctuation */
html[data-theme="dark"] .highlight .ch { color: #FFD900 } /* Comment.Hashbang */
html[data-theme="dark"] .highlight .cm { color: #FFD900 } /* Comment.Multiline */
html[data-theme="dark"] .highlight .cp { color: #FFD900 } /* Comment.Preproc */
html[data-theme="dark"] .highlight .cpf { color: #FFD900 } /* Comment.PreprocFile */
html[data-theme="dark"] .highlight .c1 { color: #FFD900 } /* Comment.Single */
html[data-theme="dark"] .highlight .cs { color: #FFD900 } /* Comment.Special */
html[data-theme="dark"] .highlight .gd { color: #00E0E0 } /* Generic.Deleted */
html[data-theme="dark"] .highlight .ge { font-style: italic } /* Generic.Emph */
html[data-theme="dark"] .highlight .gh { color: #00e0e0 } /* Generic.Heading */
html[data-theme="dark"] .highlight .gh { color: #00E0E0 } /* Generic.Heading */
html[data-theme="dark"] .highlight .gs { font-weight: bold } /* Generic.Strong */
html[data-theme="dark"] .highlight .gu { color: #00e0e0 } /* Generic.Subheading */
html[data-theme="dark"] .highlight .kc { color: #dcc6e0 } /* Keyword.Constant */
html[data-theme="dark"] .highlight .kd { color: #dcc6e0 } /* Keyword.Declaration */
html[data-theme="dark"] .highlight .kn { color: #dcc6e0 } /* Keyword.Namespace */
html[data-theme="dark"] .highlight .kp { color: #dcc6e0 } /* Keyword.Pseudo */
html[data-theme="dark"] .highlight .kr { color: #dcc6e0 } /* Keyword.Reserved */
html[data-theme="dark"] .highlight .kt { color: #ffd900 } /* Keyword.Type */
html[data-theme="dark"] .highlight .ld { color: #ffd900 } /* Literal.Date */
html[data-theme="dark"] .highlight .m { color: #ffd900 } /* Literal.Number */
html[data-theme="dark"] .highlight .s { color: #abe338 } /* Literal.String */
html[data-theme="dark"] .highlight .na { color: #ffd900 } /* Name.Attribute */
html[data-theme="dark"] .highlight .nb { color: #ffd900 } /* Name.Builtin */
html[data-theme="dark"] .highlight .nc { color: #00e0e0 } /* Name.Class */
html[data-theme="dark"] .highlight .no { color: #00e0e0 } /* Name.Constant */
html[data-theme="dark"] .highlight .nd { color: #ffd900 } /* Name.Decorator */
html[data-theme="dark"] .highlight .ni { color: #abe338 } /* Name.Entity */
html[data-theme="dark"] .highlight .ne { color: #dcc6e0 } /* Name.Exception */
html[data-theme="dark"] .highlight .nf { color: #00e0e0 } /* Name.Function */
html[data-theme="dark"] .highlight .nl { color: #ffd900 } /* Name.Label */
html[data-theme="dark"] .highlight .nn { color: #f8f8f2 } /* Name.Namespace */
html[data-theme="dark"] .highlight .nx { color: #f8f8f2 } /* Name.Other */
html[data-theme="dark"] .highlight .py { color: #00e0e0 } /* Name.Property */
html[data-theme="dark"] .highlight .nt { color: #00e0e0 } /* Name.Tag */
html[data-theme="dark"] .highlight .nv { color: #ffa07a } /* Name.Variable */
html[data-theme="dark"] .highlight .ow { color: #dcc6e0 } /* Operator.Word */
html[data-theme="dark"] .highlight .pm { color: #f8f8f2 } /* Punctuation.Marker */
html[data-theme="dark"] .highlight .w { color: #f8f8f2 } /* Text.Whitespace */
html[data-theme="dark"] .highlight .mb { color: #ffd900 } /* Literal.Number.Bin */
html[data-theme="dark"] .highlight .mf { color: #ffd900 } /* Literal.Number.Float */
html[data-theme="dark"] .highlight .mh { color: #ffd900 } /* Literal.Number.Hex */
html[data-theme="dark"] .highlight .mi { color: #ffd900 } /* Literal.Number.Integer */
html[data-theme="dark"] .highlight .mo { color: #ffd900 } /* Literal.Number.Oct */
html[data-theme="dark"] .highlight .sa { color: #abe338 } /* Literal.String.Affix */
html[data-theme="dark"] .highlight .sb { color: #abe338 } /* Literal.String.Backtick */
html[data-theme="dark"] .highlight .sc { color: #abe338 } /* Literal.String.Char */
html[data-theme="dark"] .highlight .dl { color: #abe338 } /* Literal.String.Delimiter */
html[data-theme="dark"] .highlight .sd { color: #abe338 } /* Literal.String.Doc */
html[data-theme="dark"] .highlight .s2 { color: #abe338 } /* Literal.String.Double */
html[data-theme="dark"] .highlight .se { color: #abe338 } /* Literal.String.Escape */
html[data-theme="dark"] .highlight .sh { color: #abe338 } /* Literal.String.Heredoc */
html[data-theme="dark"] .highlight .si { color: #abe338 } /* Literal.String.Interpol */
html[data-theme="dark"] .highlight .sx { color: #abe338 } /* Literal.String.Other */
html[data-theme="dark"] .highlight .sr { color: #ffa07a } /* Literal.String.Regex */
html[data-theme="dark"] .highlight .s1 { color: #abe338 } /* Literal.String.Single */
html[data-theme="dark"] .highlight .ss { color: #00e0e0 } /* Literal.String.Symbol */
html[data-theme="dark"] .highlight .bp { color: #ffd900 } /* Name.Builtin.Pseudo */
html[data-theme="dark"] .highlight .fm { color: #00e0e0 } /* Name.Function.Magic */
html[data-theme="dark"] .highlight .vc { color: #ffa07a } /* Name.Variable.Class */
html[data-theme="dark"] .highlight .vg { color: #ffa07a } /* Name.Variable.Global */
html[data-theme="dark"] .highlight .vi { color: #ffa07a } /* Name.Variable.Instance */
html[data-theme="dark"] .highlight .vm { color: #ffd900 } /* Name.Variable.Magic */
html[data-theme="dark"] .highlight .il { color: #ffd900 } /* Literal.Number.Integer.Long */
html[data-theme="dark"] .highlight .gu { color: #00E0E0 } /* Generic.Subheading */
html[data-theme="dark"] .highlight .kc { color: #DCC6E0 } /* Keyword.Constant */
html[data-theme="dark"] .highlight .kd { color: #DCC6E0 } /* Keyword.Declaration */
html[data-theme="dark"] .highlight .kn { color: #DCC6E0 } /* Keyword.Namespace */
html[data-theme="dark"] .highlight .kp { color: #DCC6E0 } /* Keyword.Pseudo */
html[data-theme="dark"] .highlight .kr { color: #DCC6E0 } /* Keyword.Reserved */
html[data-theme="dark"] .highlight .kt { color: #FFD900 } /* Keyword.Type */
html[data-theme="dark"] .highlight .ld { color: #FFD900 } /* Literal.Date */
html[data-theme="dark"] .highlight .m { color: #FFD900 } /* Literal.Number */
html[data-theme="dark"] .highlight .s { color: #ABE338 } /* Literal.String */
html[data-theme="dark"] .highlight .na { color: #FFD900 } /* Name.Attribute */
html[data-theme="dark"] .highlight .nb { color: #FFD900 } /* Name.Builtin */
html[data-theme="dark"] .highlight .nc { color: #00E0E0 } /* Name.Class */
html[data-theme="dark"] .highlight .no { color: #00E0E0 } /* Name.Constant */
html[data-theme="dark"] .highlight .nd { color: #FFD900 } /* Name.Decorator */
html[data-theme="dark"] .highlight .ni { color: #ABE338 } /* Name.Entity */
html[data-theme="dark"] .highlight .ne { color: #DCC6E0 } /* Name.Exception */
html[data-theme="dark"] .highlight .nf { color: #00E0E0 } /* Name.Function */
html[data-theme="dark"] .highlight .nl { color: #FFD900 } /* Name.Label */
html[data-theme="dark"] .highlight .nn { color: #F8F8F2 } /* Name.Namespace */
html[data-theme="dark"] .highlight .nx { color: #F8F8F2 } /* Name.Other */
html[data-theme="dark"] .highlight .py { color: #00E0E0 } /* Name.Property */
html[data-theme="dark"] .highlight .nt { color: #00E0E0 } /* Name.Tag */
html[data-theme="dark"] .highlight .nv { color: #FFA07A } /* Name.Variable */
html[data-theme="dark"] .highlight .ow { color: #DCC6E0 } /* Operator.Word */
html[data-theme="dark"] .highlight .pm { color: #F8F8F2 } /* Punctuation.Marker */
html[data-theme="dark"] .highlight .w { color: #F8F8F2 } /* Text.Whitespace */
html[data-theme="dark"] .highlight .mb { color: #FFD900 } /* Literal.Number.Bin */
html[data-theme="dark"] .highlight .mf { color: #FFD900 } /* Literal.Number.Float */
html[data-theme="dark"] .highlight .mh { color: #FFD900 } /* Literal.Number.Hex */
html[data-theme="dark"] .highlight .mi { color: #FFD900 } /* Literal.Number.Integer */
html[data-theme="dark"] .highlight .mo { color: #FFD900 } /* Literal.Number.Oct */
html[data-theme="dark"] .highlight .sa { color: #ABE338 } /* Literal.String.Affix */
html[data-theme="dark"] .highlight .sb { color: #ABE338 } /* Literal.String.Backtick */
html[data-theme="dark"] .highlight .sc { color: #ABE338 } /* Literal.String.Char */
html[data-theme="dark"] .highlight .dl { color: #ABE338 } /* Literal.String.Delimiter */
html[data-theme="dark"] .highlight .sd { color: #ABE338 } /* Literal.String.Doc */
html[data-theme="dark"] .highlight .s2 { color: #ABE338 } /* Literal.String.Double */
html[data-theme="dark"] .highlight .se { color: #ABE338 } /* Literal.String.Escape */
html[data-theme="dark"] .highlight .sh { color: #ABE338 } /* Literal.String.Heredoc */
html[data-theme="dark"] .highlight .si { color: #ABE338 } /* Literal.String.Interpol */
html[data-theme="dark"] .highlight .sx { color: #ABE338 } /* Literal.String.Other */
html[data-theme="dark"] .highlight .sr { color: #FFA07A } /* Literal.String.Regex */
html[data-theme="dark"] .highlight .s1 { color: #ABE338 } /* Literal.String.Single */
html[data-theme="dark"] .highlight .ss { color: #00E0E0 } /* Literal.String.Symbol */
html[data-theme="dark"] .highlight .bp { color: #FFD900 } /* Name.Builtin.Pseudo */
html[data-theme="dark"] .highlight .fm { color: #00E0E0 } /* Name.Function.Magic */
html[data-theme="dark"] .highlight .vc { color: #FFA07A } /* Name.Variable.Class */
html[data-theme="dark"] .highlight .vg { color: #FFA07A } /* Name.Variable.Global */
html[data-theme="dark"] .highlight .vi { color: #FFA07A } /* Name.Variable.Instance */
html[data-theme="dark"] .highlight .vm { color: #FFD900 } /* Name.Variable.Magic */
html[data-theme="dark"] .highlight .il { color: #FFD900 } /* Literal.Number.Integer.Long */
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+7 -7
View File
@@ -5,20 +5,20 @@
{% macro head_pre_assets() %}
<!-- Loaded before other Sphinx assets -->
<link href="{{ pathto('_static/styles/theme.css', 1) }}?digest=26a4bc78f4c0ddb94549" rel="stylesheet" />
<link href="{{ pathto('_static/styles/pydata-sphinx-theme.css', 1) }}?digest=26a4bc78f4c0ddb94549" rel="stylesheet" />
<link href="{{ pathto('_static/styles/theme.css', 1) }}?digest=8878045cc6db502f8baf" rel="stylesheet" />
<link href="{{ pathto('_static/styles/pydata-sphinx-theme.css', 1) }}?digest=8878045cc6db502f8baf" rel="stylesheet" />
{% endmacro %}
{% macro head_js_preload() %}
<!-- So that users can add custom icons -->
<script src="{{ pathto('_static/scripts/fontawesome.js', 1) }}?digest=26a4bc78f4c0ddb94549"></script>
<script src="{{ pathto('_static/scripts/fontawesome.js', 1) }}?digest=8878045cc6db502f8baf"></script>
<!-- Pre-loaded scripts that we'll load fully later -->
<link rel="preload" as="script" href="{{ pathto('_static/scripts/bootstrap.js', 1) }}?digest=26a4bc78f4c0ddb94549" />
<link rel="preload" as="script" href="{{ pathto('_static/scripts/pydata-sphinx-theme.js', 1) }}?digest=26a4bc78f4c0ddb94549" />
<link rel="preload" as="script" href="{{ pathto('_static/scripts/bootstrap.js', 1) }}?digest=8878045cc6db502f8baf" />
<link rel="preload" as="script" href="{{ pathto('_static/scripts/pydata-sphinx-theme.js', 1) }}?digest=8878045cc6db502f8baf" />
{% endmacro %}
{% macro body_post() %}
<!-- Scripts loaded after <body> so the DOM is not blocked -->
<script defer src="{{ pathto('_static/scripts/bootstrap.js', 1) }}?digest=26a4bc78f4c0ddb94549"></script>
<script defer src="{{ pathto('_static/scripts/pydata-sphinx-theme.js', 1) }}?digest=26a4bc78f4c0ddb94549"></script>
<script defer src="{{ pathto('_static/scripts/bootstrap.js', 1) }}?digest=8878045cc6db502f8baf"></script>
<script defer src="{{ pathto('_static/scripts/pydata-sphinx-theme.js', 1) }}?digest=8878045cc6db502f8baf"></script>
{% endmacro %}
+41 -24
View File
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.12.0"/>
<meta name="generator" content="Doxygen 1.13.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MLX: mlx/allocator.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -11,11 +11,18 @@
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
@@ -28,12 +35,24 @@
<div id="projectname">MLX
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.12.0 -->
<!-- Generated by Doxygen 1.13.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
@@ -44,22 +63,23 @@ var searchBox = new SearchBox("searchBox", "search/",'.html');
$(function() { codefold.init(0); });
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search',false);
$(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){ initResizable(false); });
$(function(){initNavTree('allocator_8h.html',''); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
@@ -81,12 +101,6 @@ $(function(){ initResizable(false); });
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li> </ul>
</div>
</div><!-- top -->
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#nested-classes">Classes</a> &#124;
@@ -129,10 +143,13 @@ Functions</h2></td></tr>
<tr class="separator:aa23e2f20a336d0b159c097087194634e"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0
</small></address>
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="allocator_8h.html">allocator.h</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.1 </li>
</ul>
</div>
</body>
</html>
+10
View File
@@ -0,0 +1,10 @@
var allocator_8h =
[
[ "mlx::core::allocator::Buffer", "classmlx_1_1core_1_1allocator_1_1_buffer.html", "classmlx_1_1core_1_1allocator_1_1_buffer" ],
[ "mlx::core::allocator::Allocator", "classmlx_1_1core_1_1allocator_1_1_allocator.html", "classmlx_1_1core_1_1allocator_1_1_allocator" ],
[ "mlx::core::allocator::CommonAllocator", "classmlx_1_1core_1_1allocator_1_1_common_allocator.html", "classmlx_1_1core_1_1allocator_1_1_common_allocator" ],
[ "mlx::core::allocator::allocator", "namespacemlx_1_1core_1_1allocator.html#aa23e2f20a336d0b159c097087194634e", null ],
[ "mlx::core::allocator::free", "namespacemlx_1_1core_1_1allocator.html#a77f0a1215be242db6485612bcb273af5", null ],
[ "mlx::core::allocator::malloc", "namespacemlx_1_1core_1_1allocator.html#a560d10a166e3c294f3757166f9bd6801", null ],
[ "mlx::core::allocator::malloc_or_wait", "namespacemlx_1_1core_1_1allocator.html#a86ac0a11ff78f21e717f641716c34abc", null ]
];
+50 -34
View File
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.12.0"/>
<meta name="generator" content="Doxygen 1.13.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MLX: mlx/allocator.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -11,11 +11,18 @@
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
@@ -28,12 +35,24 @@
<div id="projectname">MLX
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.12.0 -->
<!-- Generated by Doxygen 1.13.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
@@ -44,22 +63,23 @@ var searchBox = new SearchBox("searchBox", "search/",'.html');
$(function() { codefold.init(0); });
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search',false);
$(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){ initResizable(false); });
$(function(){initNavTree('allocator_8h_source.html',''); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
@@ -81,12 +101,6 @@ $(function(){ initResizable(false); });
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li> </ul>
</div>
</div><!-- top -->
<div id="doc-content">
<div class="header">
<div class="headertitle"><div class="title">allocator.h</div></div>
</div><!--header-->
@@ -104,7 +118,7 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment">// WARNING: Only Buffer objects constructed from and those that wrap</span></div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment">// raw pointers from mlx::allocator are supported.</span></div>
<div class="foldopen" id="foldopen00012" data-start="{" data-end="};">
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1allocator_1_1_buffer.html"> 12</a></span><span class="keyword">class </span><a class="code hl_class" href="classmlx_1_1core_1_1allocator_1_1_buffer.html">Buffer</a> {</div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1allocator_1_1_buffer.html"> 12</a></span><span class="keyword">class </span><a class="code hl_function" href="classmlx_1_1core_1_1allocator_1_1_buffer.html#ac4fc2cc6aa1368cfb74aff329d9a1300">Buffer</a> {</div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span> <span class="keyword">private</span>:</div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span> <span class="keywordtype">void</span>* ptr_;</div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> </div>
@@ -137,17 +151,17 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"><a class="line" href="namespacemlx_1_1core_1_1allocator.html#a86ac0a11ff78f21e717f641716c34abc"> 37</a></span><a class="code hl_class" href="classmlx_1_1core_1_1allocator_1_1_buffer.html">Buffer</a> <a class="code hl_function" href="namespacemlx_1_1core_1_1allocator.html#a86ac0a11ff78f21e717f641716c34abc">malloc_or_wait</a>(<span class="keywordtype">size_t</span> size);</div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> </div>
<div class="foldopen" id="foldopen00039" data-start="{" data-end="};">
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1allocator_1_1_allocator.html"> 39</a></span><span class="keyword">class </span><a class="code hl_class" href="classmlx_1_1core_1_1allocator_1_1_allocator.html">Allocator</a> {</div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1allocator_1_1_allocator.html"> 39</a></span><span class="keyword">class </span><a class="code hl_function" href="classmlx_1_1core_1_1allocator_1_1_allocator.html#a5803678a418fef687fc65fa9d5c37b65">Allocator</a> {</div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1allocator_1_1_allocator.html#a9a17d2c7a97772bf4a15e6c74af34ca4"> 42</a></span> <span class="keyword">virtual</span> <a class="code hl_class" href="classmlx_1_1core_1_1allocator_1_1_buffer.html">Buffer</a> <a class="code hl_function" href="classmlx_1_1core_1_1allocator_1_1_allocator.html#a9a17d2c7a97772bf4a15e6c74af34ca4">malloc</a>(<span class="keywordtype">size_t</span> <a class="code hl_function" href="classmlx_1_1core_1_1allocator_1_1_allocator.html#a2adf9a9c968f113dde830cc0dc27dcc6">size</a>, <span class="keywordtype">bool</span> allow_swap = <span class="keyword">false</span>) = 0;</div>
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1allocator_1_1_allocator.html#ae963d551be646ae0e13df2c16f2beefb"> 43</a></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1allocator_1_1_allocator.html#ae963d551be646ae0e13df2c16f2beefb">free</a>(<a class="code hl_class" href="classmlx_1_1core_1_1allocator_1_1_buffer.html">Buffer</a> buffer) = 0;</div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1allocator_1_1_allocator.html#a2adf9a9c968f113dde830cc0dc27dcc6"> 44</a></span> <span class="keyword">virtual</span> <span class="keywordtype">size_t</span> <a class="code hl_function" href="classmlx_1_1core_1_1allocator_1_1_allocator.html#a2adf9a9c968f113dde830cc0dc27dcc6">size</a>(<a class="code hl_class" href="classmlx_1_1core_1_1allocator_1_1_buffer.html">Buffer</a> buffer) <span class="keyword">const</span> = 0;</div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> </div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1allocator_1_1_allocator.html#a5803678a418fef687fc65fa9d5c37b65"> 46</a></span> <a class="code hl_function" href="classmlx_1_1core_1_1allocator_1_1_allocator.html#a5803678a418fef687fc65fa9d5c37b65">Allocator</a>() = <span class="keywordflow">default</span>;</div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1allocator_1_1_allocator.html#aa05c081ce80dc036f9d3dd8c195259d2"> 47</a></span> <a class="code hl_function" href="classmlx_1_1core_1_1allocator_1_1_allocator.html#aa05c081ce80dc036f9d3dd8c195259d2">Allocator</a>(<span class="keyword">const</span> <a class="code hl_class" href="classmlx_1_1core_1_1allocator_1_1_allocator.html">Allocator</a>&amp; other) = <span class="keyword">delete</span>;</div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1allocator_1_1_allocator.html#a8e8ce346a16cf0c62847bed9289f9959"> 48</a></span> <a class="code hl_function" href="classmlx_1_1core_1_1allocator_1_1_allocator.html#a8e8ce346a16cf0c62847bed9289f9959">Allocator</a>(<a class="code hl_class" href="classmlx_1_1core_1_1allocator_1_1_allocator.html">Allocator</a>&amp;&amp; other) = <span class="keyword">delete</span>;</div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1allocator_1_1_allocator.html#a027b84cddc8d476f736ac1f1a9991fe4"> 49</a></span> <a class="code hl_class" href="classmlx_1_1core_1_1allocator_1_1_allocator.html">Allocator</a>&amp; <a class="code hl_function" href="classmlx_1_1core_1_1allocator_1_1_allocator.html#a027b84cddc8d476f736ac1f1a9991fe4">operator=</a>(<span class="keyword">const</span> <a class="code hl_class" href="classmlx_1_1core_1_1allocator_1_1_allocator.html">Allocator</a>&amp; other) = <span class="keyword">delete</span>;</div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1allocator_1_1_allocator.html#a2e971b47339b1d0849a334a902a9df3c"> 50</a></span> <a class="code hl_class" href="classmlx_1_1core_1_1allocator_1_1_allocator.html">Allocator</a>&amp; <a class="code hl_function" href="classmlx_1_1core_1_1allocator_1_1_allocator.html#a2e971b47339b1d0849a334a902a9df3c">operator=</a>(<a class="code hl_class" href="classmlx_1_1core_1_1allocator_1_1_allocator.html">Allocator</a>&amp;&amp; other) = <span class="keyword">delete</span>;</div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1allocator_1_1_allocator.html#aa05c081ce80dc036f9d3dd8c195259d2"> 47</a></span> <a class="code hl_function" href="classmlx_1_1core_1_1allocator_1_1_allocator.html#aa05c081ce80dc036f9d3dd8c195259d2">Allocator</a>(<span class="keyword">const</span> <a class="code hl_function" href="classmlx_1_1core_1_1allocator_1_1_allocator.html#a5803678a418fef687fc65fa9d5c37b65">Allocator</a>&amp; other) = <span class="keyword">delete</span>;</div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1allocator_1_1_allocator.html#a8e8ce346a16cf0c62847bed9289f9959"> 48</a></span> <a class="code hl_function" href="classmlx_1_1core_1_1allocator_1_1_allocator.html#a8e8ce346a16cf0c62847bed9289f9959">Allocator</a>(<a class="code hl_function" href="classmlx_1_1core_1_1allocator_1_1_allocator.html#a5803678a418fef687fc65fa9d5c37b65">Allocator</a>&amp;&amp; other) = <span class="keyword">delete</span>;</div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1allocator_1_1_allocator.html#a027b84cddc8d476f736ac1f1a9991fe4"> 49</a></span> <a class="code hl_function" href="classmlx_1_1core_1_1allocator_1_1_allocator.html#a5803678a418fef687fc65fa9d5c37b65">Allocator</a>&amp; <a class="code hl_function" href="classmlx_1_1core_1_1allocator_1_1_allocator.html#a027b84cddc8d476f736ac1f1a9991fe4">operator=</a>(<span class="keyword">const</span> <a class="code hl_function" href="classmlx_1_1core_1_1allocator_1_1_allocator.html#a5803678a418fef687fc65fa9d5c37b65">Allocator</a>&amp; other) = <span class="keyword">delete</span>;</div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1allocator_1_1_allocator.html#a2e971b47339b1d0849a334a902a9df3c"> 50</a></span> <a class="code hl_function" href="classmlx_1_1core_1_1allocator_1_1_allocator.html#a5803678a418fef687fc65fa9d5c37b65">Allocator</a>&amp; <a class="code hl_function" href="classmlx_1_1core_1_1allocator_1_1_allocator.html#a2e971b47339b1d0849a334a902a9df3c">operator=</a>(<a class="code hl_function" href="classmlx_1_1core_1_1allocator_1_1_allocator.html#a5803678a418fef687fc65fa9d5c37b65">Allocator</a>&amp;&amp; other) = <span class="keyword">delete</span>;</div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1allocator_1_1_allocator.html#a90ad02c2e2a6ed89bb8bbf7b871efdf1"> 51</a></span> <span class="keyword">virtual</span> <a class="code hl_function" href="classmlx_1_1core_1_1allocator_1_1_allocator.html#a90ad02c2e2a6ed89bb8bbf7b871efdf1">~Allocator</a>() = <span class="keywordflow">default</span>;</div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span>};</div>
</div>
@@ -155,15 +169,15 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"><a class="line" href="namespacemlx_1_1core_1_1allocator.html#aa23e2f20a336d0b159c097087194634e"> 54</a></span><a class="code hl_class" href="classmlx_1_1core_1_1allocator_1_1_allocator.html">Allocator</a>&amp; <a class="code hl_function" href="namespacemlx_1_1core_1_1allocator.html#aa23e2f20a336d0b159c097087194634e">allocator</a>();</div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> </div>
<div class="foldopen" id="foldopen00056" data-start="{" data-end="};">
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1allocator_1_1_common_allocator.html"> 56</a></span><span class="keyword">class </span><a class="code hl_class" href="classmlx_1_1core_1_1allocator_1_1_common_allocator.html">CommonAllocator</a> : <span class="keyword">public</span> <a class="code hl_class" href="classmlx_1_1core_1_1allocator_1_1_allocator.html">Allocator</a> {</div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1allocator_1_1_common_allocator.html"> 56</a></span><span class="keyword">class </span>CommonAllocator : <span class="keyword">public</span> <a class="code hl_function" href="classmlx_1_1core_1_1allocator_1_1_allocator.html#a5803678a418fef687fc65fa9d5c37b65">Allocator</a> {</div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1allocator_1_1_common_allocator.html#a4f3d5de6b8c0eba22e9403b28a5ef3f0"> 59</a></span> <span class="keyword">virtual</span> <a class="code hl_class" href="classmlx_1_1core_1_1allocator_1_1_buffer.html">Buffer</a> <a class="code hl_function" href="classmlx_1_1core_1_1allocator_1_1_common_allocator.html#a4f3d5de6b8c0eba22e9403b28a5ef3f0">malloc</a>(<span class="keywordtype">size_t</span> <a class="code hl_function" href="classmlx_1_1core_1_1allocator_1_1_common_allocator.html#aafa92e8310db089b1ac72b840777e26b">size</a>, <span class="keywordtype">bool</span> allow_swap = <span class="keyword">false</span>) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1allocator_1_1_common_allocator.html#a84b50d1a3cbffa12c1a6cf0ed8c71079"> 60</a></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1allocator_1_1_common_allocator.html#a84b50d1a3cbffa12c1a6cf0ed8c71079">free</a>(<a class="code hl_class" href="classmlx_1_1core_1_1allocator_1_1_buffer.html">Buffer</a> buffer) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1allocator_1_1_common_allocator.html#aafa92e8310db089b1ac72b840777e26b"> 61</a></span> <span class="keyword">virtual</span> <span class="keywordtype">size_t</span> <a class="code hl_function" href="classmlx_1_1core_1_1allocator_1_1_common_allocator.html#aafa92e8310db089b1ac72b840777e26b">size</a>(<a class="code hl_class" href="classmlx_1_1core_1_1allocator_1_1_buffer.html">Buffer</a> buffer) <span class="keyword">const override</span>;</div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> </div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> <span class="keyword">private</span>:</div>
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> <a class="code hl_class" href="classmlx_1_1core_1_1allocator_1_1_common_allocator.html">CommonAllocator</a>() = <span class="keywordflow">default</span>;</div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1allocator_1_1_common_allocator.html#abf84c726a37df68345589b897b2e35f0"> 65</a></span> <span class="keyword">friend</span> <a class="code hl_class" href="classmlx_1_1core_1_1allocator_1_1_allocator.html">Allocator</a>&amp; <a class="code hl_friend" href="classmlx_1_1core_1_1allocator_1_1_common_allocator.html#abf84c726a37df68345589b897b2e35f0">allocator</a>();</div>
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> CommonAllocator() = <span class="keywordflow">default</span>;</div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1allocator_1_1_common_allocator.html#abf84c726a37df68345589b897b2e35f0"> 65</a></span> <span class="keyword">friend</span> <a class="code hl_function" href="classmlx_1_1core_1_1allocator_1_1_allocator.html#a5803678a418fef687fc65fa9d5c37b65">Allocator</a>&amp; <a class="code hl_friend" href="classmlx_1_1core_1_1allocator_1_1_common_allocator.html#abf84c726a37df68345589b897b2e35f0">allocator</a>();</div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span>};</div>
</div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> </div>
@@ -184,7 +198,6 @@ $(function(){ initResizable(false); });
<div class="ttc" id="aclassmlx_1_1core_1_1allocator_1_1_buffer_html_a990643feac06961c5599aac098c17b94"><div class="ttname"><a href="classmlx_1_1core_1_1allocator_1_1_buffer.html#a990643feac06961c5599aac098c17b94">mlx::core::allocator::Buffer::ptr</a></div><div class="ttdeci">const void * ptr() const</div><div class="ttdef"><b>Definition</b> allocator.h:23</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1allocator_1_1_buffer_html_ac4fc2cc6aa1368cfb74aff329d9a1300"><div class="ttname"><a href="classmlx_1_1core_1_1allocator_1_1_buffer.html#ac4fc2cc6aa1368cfb74aff329d9a1300">mlx::core::allocator::Buffer::Buffer</a></div><div class="ttdeci">Buffer(void *ptr)</div><div class="ttdef"><b>Definition</b> allocator.h:17</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1allocator_1_1_buffer_html_acb15b2f057568828ea09635ed968b62a"><div class="ttname"><a href="classmlx_1_1core_1_1allocator_1_1_buffer.html#acb15b2f057568828ea09635ed968b62a">mlx::core::allocator::Buffer::ptr</a></div><div class="ttdeci">void * ptr()</div><div class="ttdef"><b>Definition</b> allocator.h:26</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1allocator_1_1_common_allocator_html"><div class="ttname"><a href="classmlx_1_1core_1_1allocator_1_1_common_allocator.html">mlx::core::allocator::CommonAllocator</a></div><div class="ttdef"><b>Definition</b> allocator.h:56</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1allocator_1_1_common_allocator_html_a4f3d5de6b8c0eba22e9403b28a5ef3f0"><div class="ttname"><a href="classmlx_1_1core_1_1allocator_1_1_common_allocator.html#a4f3d5de6b8c0eba22e9403b28a5ef3f0">mlx::core::allocator::CommonAllocator::malloc</a></div><div class="ttdeci">virtual Buffer malloc(size_t size, bool allow_swap=false) override</div><div class="ttdoc">A general CPU allocator.</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1allocator_1_1_common_allocator_html_a84b50d1a3cbffa12c1a6cf0ed8c71079"><div class="ttname"><a href="classmlx_1_1core_1_1allocator_1_1_common_allocator.html#a84b50d1a3cbffa12c1a6cf0ed8c71079">mlx::core::allocator::CommonAllocator::free</a></div><div class="ttdeci">virtual void free(Buffer buffer) override</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1allocator_1_1_common_allocator_html_aafa92e8310db089b1ac72b840777e26b"><div class="ttname"><a href="classmlx_1_1core_1_1allocator_1_1_common_allocator.html#aafa92e8310db089b1ac72b840777e26b">mlx::core::allocator::CommonAllocator::size</a></div><div class="ttdeci">virtual size_t size(Buffer buffer) const override</div></div>
@@ -195,10 +208,13 @@ $(function(){ initResizable(false); });
<div class="ttc" id="anamespacemlx_1_1core_1_1allocator_html_a86ac0a11ff78f21e717f641716c34abc"><div class="ttname"><a href="namespacemlx_1_1core_1_1allocator.html#a86ac0a11ff78f21e717f641716c34abc">mlx::core::allocator::malloc_or_wait</a></div><div class="ttdeci">Buffer malloc_or_wait(size_t size)</div></div>
<div class="ttc" id="anamespacemlx_1_1core_1_1allocator_html_aa23e2f20a336d0b159c097087194634e"><div class="ttname"><a href="namespacemlx_1_1core_1_1allocator.html#aa23e2f20a336d0b159c097087194634e">mlx::core::allocator::allocator</a></div><div class="ttdeci">Allocator &amp; allocator()</div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0
</small></address>
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="allocator_8h.html">allocator.h</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.1 </li>
</ul>
</div>
</body>
</html>
+198 -157
View File
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.12.0"/>
<meta name="generator" content="Doxygen 1.13.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MLX: Class List</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -11,11 +11,18 @@
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
@@ -28,12 +35,24 @@
<div id="projectname">MLX
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.12.0 -->
<!-- Generated by Doxygen 1.13.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
@@ -44,24 +63,23 @@ var searchBox = new SearchBox("searchBox", "search/",'.html');
$(function() { codefold.init(0); });
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search',false);
$(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="doc-content">
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){ initResizable(false); });
$(function(){initNavTree('annotated.html',''); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
@@ -95,10 +113,10 @@ $(function(){ initResizable(false); });
<tr id="row_0_2_" class="odd" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmetal_1_1is__static.html" target="_self">is_static</a></td><td class="desc"></td></tr>
<tr id="row_0_3_" class="odd" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmetal_1_1make__void.html" target="_self">make_void</a></td><td class="desc"></td></tr>
<tr id="row_0_4_" class="odd" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmetal_1_1pointer__element.html" target="_self">pointer_element</a></td><td class="desc"></td></tr>
<tr id="row_0_5_" class="odd" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmetal_1_1pointer__element_3_01constant_01_t_01_5_01_4.html" target="_self">pointer_element&lt; constant T * &gt;</a></td><td class="desc"></td></tr>
<tr id="row_0_6_" class="odd" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmetal_1_1pointer__element_3_01device_01_t_01_5_01_4.html" target="_self">pointer_element&lt; device T * &gt;</a></td><td class="desc"></td></tr>
<tr id="row_0_7_" class="odd" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmetal_1_1pointer__element_3_01thread_01_t_01_5_01_4.html" target="_self">pointer_element&lt; thread T * &gt;</a></td><td class="desc"></td></tr>
<tr id="row_0_8_" class="odd" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmetal_1_1pointer__element_3_01threadgroup_01_t_01_5_01_4.html" target="_self">pointer_element&lt; threadgroup T * &gt;</a></td><td class="desc"></td></tr>
<tr id="row_0_5_" class="odd" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmetal_1_1pointer__element.html" target="_self">pointer_element&lt; constant T * &gt;</a></td><td class="desc"></td></tr>
<tr id="row_0_6_" class="odd" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmetal_1_1pointer__element.html" target="_self">pointer_element&lt; device T * &gt;</a></td><td class="desc"></td></tr>
<tr id="row_0_7_" class="odd" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmetal_1_1pointer__element.html" target="_self">pointer_element&lt; thread T * &gt;</a></td><td class="desc"></td></tr>
<tr id="row_0_8_" class="odd" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmetal_1_1pointer__element.html" target="_self">pointer_element&lt; threadgroup T * &gt;</a></td><td class="desc"></td></tr>
<tr id="row_1_" class="odd"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_1_" class="arrow" onclick="dynsection.toggleFolder('1_')">&#9658;</span><span class="icona"><span class="icon">N</span></span><a class="el" href="namespacemlx.html" target="_self">mlx</a></td><td class="desc"></td></tr>
<tr id="row_1_0_" class="even" style="display:none;"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_1_0_" class="arrow" onclick="dynsection.toggleFolder('1_0_')">&#9658;</span><span class="icona"><span class="icon">N</span></span><a class="el" href="namespacemlx_1_1core.html" target="_self">core</a></td><td class="desc"></td></tr>
<tr id="row_1_0_0_" class="even" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_1_0_0_" class="arrow" onclick="dynsection.toggleFolder('1_0_0_')">&#9658;</span><span class="icona"><span class="icon">N</span></span><a class="el" href="namespacemlx_1_1core_1_1allocator.html" target="_self">allocator</a></td><td class="desc"></td></tr>
@@ -169,12 +187,14 @@ $(function(){ initResizable(false); });
<tr id="row_1_0_1_60_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1core_1_1detail_1_1_tan.html" target="_self">Tan</a></td><td class="desc"></td></tr>
<tr id="row_1_0_1_61_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1core_1_1detail_1_1_tanh.html" target="_self">Tanh</a></td><td class="desc"></td></tr>
<tr id="row_1_0_2_" class="even" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_1_0_2_" class="arrow" onclick="dynsection.toggleFolder('1_0_2_')">&#9658;</span><span class="icona"><span class="icon">N</span></span><a class="el" href="namespacemlx_1_1core_1_1distributed.html" target="_self">distributed</a></td><td class="desc"></td></tr>
<tr id="row_1_0_2_0_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1distributed_1_1_all_gather.html" target="_self">AllGather</a></td><td class="desc"></td></tr>
<tr id="row_1_0_2_1_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1distributed_1_1_all_reduce.html" target="_self">AllReduce</a></td><td class="desc"></td></tr>
<tr id="row_1_0_2_2_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1distributed_1_1_dist_primitive.html" target="_self">DistPrimitive</a></td><td class="desc"></td></tr>
<tr id="row_1_0_2_3_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1core_1_1distributed_1_1_group.html" target="_self">Group</a></td><td class="desc">A <a class="el" href="structmlx_1_1core_1_1distributed_1_1_group.html" title="A distributed::Group represents a group of independent mlx processes that can communicate.">distributed::Group</a> represents a group of independent mlx processes that can communicate </td></tr>
<tr id="row_1_0_2_4_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1distributed_1_1_recv.html" target="_self">Recv</a></td><td class="desc"></td></tr>
<tr id="row_1_0_2_5_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1distributed_1_1_send.html" target="_self">Send</a></td><td class="desc"></td></tr>
<tr id="row_1_0_2_0_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span id="arr_1_0_2_0_" class="arrow" onclick="dynsection.toggleFolder('1_0_2_0_')">&#9658;</span><span class="icona"><span class="icon">N</span></span><a class="el" href="namespacemlx_1_1core_1_1distributed_1_1detail.html" target="_self">detail</a></td><td class="desc"></td></tr>
<tr id="row_1_0_2_0_0_" class="even" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1distributed_1_1detail_1_1_group_impl.html" target="_self">GroupImpl</a></td><td class="desc">Abstract base class of a distributed group implementation </td></tr>
<tr id="row_1_0_2_1_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1distributed_1_1_all_gather.html" target="_self">AllGather</a></td><td class="desc"></td></tr>
<tr id="row_1_0_2_2_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1distributed_1_1_all_reduce.html" target="_self">AllReduce</a></td><td class="desc"></td></tr>
<tr id="row_1_0_2_3_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1distributed_1_1_dist_primitive.html" target="_self">DistPrimitive</a></td><td class="desc"></td></tr>
<tr id="row_1_0_2_4_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1core_1_1distributed_1_1_group.html" target="_self">Group</a></td><td class="desc">A <a class="el" href="structmlx_1_1core_1_1distributed_1_1_group.html" title="A distributed::Group represents a group of independent mlx processes that can communicate.">distributed::Group</a> represents a group of independent mlx processes that can communicate </td></tr>
<tr id="row_1_0_2_5_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1distributed_1_1_recv.html" target="_self">Recv</a></td><td class="desc"></td></tr>
<tr id="row_1_0_2_6_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1distributed_1_1_send.html" target="_self">Send</a></td><td class="desc"></td></tr>
<tr id="row_1_0_3_" class="even" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_1_0_3_" class="arrow" onclick="dynsection.toggleFolder('1_0_3_')">&#9658;</span><span class="icona"><span class="icon">N</span></span><a class="el" href="namespacemlx_1_1core_1_1fast.html" target="_self">fast</a></td><td class="desc"></td></tr>
<tr id="row_1_0_3_0_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1fast_1_1_affine_quantize.html" target="_self">AffineQuantize</a></td><td class="desc"></td></tr>
<tr id="row_1_0_3_1_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1fast_1_1_custom.html" target="_self">Custom</a></td><td class="desc"></td></tr>
@@ -192,13 +212,14 @@ $(function(){ initResizable(false); });
<tr id="row_1_0_4_2_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1io_1_1_reader.html" target="_self">Reader</a></td><td class="desc"></td></tr>
<tr id="row_1_0_4_3_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1io_1_1_writer.html" target="_self">Writer</a></td><td class="desc"></td></tr>
<tr id="row_1_0_5_" class="even" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_1_0_5_" class="arrow" onclick="dynsection.toggleFolder('1_0_5_')">&#9658;</span><span class="icona"><span class="icon">N</span></span><a class="el" href="namespacemlx_1_1core_1_1metal.html" target="_self">metal</a></td><td class="desc"></td></tr>
<tr id="row_1_0_5_0_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span id="arr_1_0_5_0_" class="arrow" onclick="dynsection.toggleFolder('1_0_5_0_')">&#9658;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1core_1_1metal_1_1_command_encoder.html" target="_self">CommandEncoder</a></td><td class="desc"></td></tr>
<tr id="row_1_0_5_0_0_" class="even" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1core_1_1metal_1_1_command_encoder_1_1_concurrent_context.html" target="_self">ConcurrentContext</a></td><td class="desc"></td></tr>
<tr id="row_1_0_5_1_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1metal_1_1_device.html" target="_self">Device</a></td><td class="desc"></td></tr>
<tr id="row_1_0_5_2_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1core_1_1metal_1_1_device_stream.html" target="_self">DeviceStream</a></td><td class="desc"></td></tr>
<tr id="row_1_0_5_3_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1core_1_1metal_1_1_fence.html" target="_self">Fence</a></td><td class="desc"></td></tr>
<tr id="row_1_0_5_4_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1metal_1_1_metal_allocator.html" target="_self">MetalAllocator</a></td><td class="desc"></td></tr>
<tr id="row_1_0_5_5_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1metal_1_1_residency_set.html" target="_self">ResidencySet</a></td><td class="desc"></td></tr>
<tr id="row_1_0_5_0_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1metal_1_1_buffer.html" target="_self">Buffer</a></td><td class="desc"></td></tr>
<tr id="row_1_0_5_1_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span id="arr_1_0_5_1_" class="arrow" onclick="dynsection.toggleFolder('1_0_5_1_')">&#9658;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1core_1_1metal_1_1_command_encoder.html" target="_self">CommandEncoder</a></td><td class="desc"></td></tr>
<tr id="row_1_0_5_1_0_" class="even" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1core_1_1metal_1_1_command_encoder_1_1_concurrent_context.html" target="_self">ConcurrentContext</a></td><td class="desc"></td></tr>
<tr id="row_1_0_5_2_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1metal_1_1_device.html" target="_self">Device</a></td><td class="desc"></td></tr>
<tr id="row_1_0_5_3_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1core_1_1metal_1_1_device_stream.html" target="_self">DeviceStream</a></td><td class="desc"></td></tr>
<tr id="row_1_0_5_4_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1core_1_1metal_1_1_fence.html" target="_self">Fence</a></td><td class="desc"></td></tr>
<tr id="row_1_0_5_5_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1metal_1_1_metal_allocator.html" target="_self">MetalAllocator</a></td><td class="desc"></td></tr>
<tr id="row_1_0_5_6_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1metal_1_1_residency_set.html" target="_self">ResidencySet</a></td><td class="desc"></td></tr>
<tr id="row_1_0_6_" class="even" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_1_0_6_" class="arrow" onclick="dynsection.toggleFolder('1_0_6_')">&#9658;</span><span class="icona"><span class="icon">N</span></span><a class="el" href="namespacemlx_1_1core_1_1random.html" target="_self">random</a></td><td class="desc"></td></tr>
<tr id="row_1_0_6_0_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1random_1_1_key_sequence.html" target="_self">KeySequence</a></td><td class="desc"></td></tr>
<tr id="row_1_0_7_" class="even" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_1_0_7_" class="arrow" onclick="dynsection.toggleFolder('1_0_7_')">&#9658;</span><span class="icona"><span class="icon">N</span></span><a class="el" href="namespacemlx_1_1core_1_1scheduler.html" target="_self">scheduler</a></td><td class="desc"></td></tr>
@@ -229,117 +250,135 @@ $(function(){ initResizable(false); });
<tr id="row_1_0_27_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_bitwise_binary.html" target="_self">BitwiseBinary</a></td><td class="desc"></td></tr>
<tr id="row_1_0_28_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_block_masked_m_m.html" target="_self">BlockMaskedMM</a></td><td class="desc"></td></tr>
<tr id="row_1_0_29_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_broadcast.html" target="_self">Broadcast</a></td><td class="desc"></td></tr>
<tr id="row_1_0_30_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_ceil.html" target="_self">Ceil</a></td><td class="desc"></td></tr>
<tr id="row_1_0_31_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_cholesky.html" target="_self">Cholesky</a></td><td class="desc"></td></tr>
<tr id="row_1_0_32_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_compiled.html" target="_self">Compiled</a></td><td class="desc"></td></tr>
<tr id="row_1_0_33_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1core_1_1complex128__t.html" target="_self">complex128_t</a></td><td class="desc"></td></tr>
<tr id="row_1_0_34_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1core_1_1complex64__t.html" target="_self">complex64_t</a></td><td class="desc"></td></tr>
<tr id="row_1_0_35_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_concatenate.html" target="_self">Concatenate</a></td><td class="desc"></td></tr>
<tr id="row_1_0_36_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_conjugate.html" target="_self">Conjugate</a></td><td class="desc"></td></tr>
<tr id="row_1_0_37_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_contiguous.html" target="_self">Contiguous</a></td><td class="desc"></td></tr>
<tr id="row_1_0_38_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1core_1_1_contiguous_iterator.html" target="_self">ContiguousIterator</a></td><td class="desc"></td></tr>
<tr id="row_1_0_39_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_convolution.html" target="_self">Convolution</a></td><td class="desc"></td></tr>
<tr id="row_1_0_40_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_copy.html" target="_self">Copy</a></td><td class="desc"></td></tr>
<tr id="row_1_0_41_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_cos.html" target="_self">Cos</a></td><td class="desc"></td></tr>
<tr id="row_1_0_42_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_cosh.html" target="_self">Cosh</a></td><td class="desc"></td></tr>
<tr id="row_1_0_43_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_custom_transforms.html" target="_self">CustomTransforms</a></td><td class="desc"></td></tr>
<tr id="row_1_0_44_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1core_1_1_default_contiguous_reduce.html" target="_self">DefaultContiguousReduce</a></td><td class="desc"></td></tr>
<tr id="row_1_0_45_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1core_1_1_default_strided_reduce.html" target="_self">DefaultStridedReduce</a></td><td class="desc"></td></tr>
<tr id="row_1_0_46_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_depends.html" target="_self">Depends</a></td><td class="desc"></td></tr>
<tr id="row_1_0_47_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1core_1_1_device.html" target="_self">Device</a></td><td class="desc"></td></tr>
<tr id="row_1_0_48_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_divide.html" target="_self">Divide</a></td><td class="desc"></td></tr>
<tr id="row_1_0_49_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_div_mod.html" target="_self">DivMod</a></td><td class="desc"></td></tr>
<tr id="row_1_0_50_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1core_1_1_dtype.html" target="_self">Dtype</a></td><td class="desc"></td></tr>
<tr id="row_1_0_51_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_eigh.html" target="_self">Eigh</a></td><td class="desc"></td></tr>
<tr id="row_1_0_52_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_equal.html" target="_self">Equal</a></td><td class="desc"></td></tr>
<tr id="row_1_0_53_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_erf.html" target="_self">Erf</a></td><td class="desc"></td></tr>
<tr id="row_1_0_54_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_erf_inv.html" target="_self">ErfInv</a></td><td class="desc"></td></tr>
<tr id="row_1_0_55_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_event.html" target="_self">Event</a></td><td class="desc"></td></tr>
<tr id="row_1_0_56_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_exp.html" target="_self">Exp</a></td><td class="desc"></td></tr>
<tr id="row_1_0_57_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_expm1.html" target="_self">Expm1</a></td><td class="desc"></td></tr>
<tr id="row_1_0_58_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_f_f_t.html" target="_self">FFT</a></td><td class="desc"></td></tr>
<tr id="row_1_0_59_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_floor.html" target="_self">Floor</a></td><td class="desc"></td></tr>
<tr id="row_1_0_60_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_full.html" target="_self">Full</a></td><td class="desc"></td></tr>
<tr id="row_1_0_61_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_gather.html" target="_self">Gather</a></td><td class="desc"></td></tr>
<tr id="row_1_0_62_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_gather_m_m.html" target="_self">GatherMM</a></td><td class="desc"></td></tr>
<tr id="row_1_0_63_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_gather_q_m_m.html" target="_self">GatherQMM</a></td><td class="desc"></td></tr>
<tr id="row_1_0_64_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_greater.html" target="_self">Greater</a></td><td class="desc"></td></tr>
<tr id="row_1_0_65_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_greater_equal.html" target="_self">GreaterEqual</a></td><td class="desc"></td></tr>
<tr id="row_1_0_66_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_hadamard.html" target="_self">Hadamard</a></td><td class="desc"></td></tr>
<tr id="row_1_0_67_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_imag.html" target="_self">Imag</a></td><td class="desc"></td></tr>
<tr id="row_1_0_68_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_inverse.html" target="_self">Inverse</a></td><td class="desc"></td></tr>
<tr id="row_1_0_69_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_less.html" target="_self">Less</a></td><td class="desc"></td></tr>
<tr id="row_1_0_70_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_less_equal.html" target="_self">LessEqual</a></td><td class="desc"></td></tr>
<tr id="row_1_0_71_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_load.html" target="_self">Load</a></td><td class="desc"></td></tr>
<tr id="row_1_0_72_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_log.html" target="_self">Log</a></td><td class="desc"></td></tr>
<tr id="row_1_0_73_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_log1p.html" target="_self">Log1p</a></td><td class="desc"></td></tr>
<tr id="row_1_0_74_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_log_add_exp.html" target="_self">LogAddExp</a></td><td class="desc"></td></tr>
<tr id="row_1_0_75_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_logical_and.html" target="_self">LogicalAnd</a></td><td class="desc"></td></tr>
<tr id="row_1_0_76_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_logical_not.html" target="_self">LogicalNot</a></td><td class="desc"></td></tr>
<tr id="row_1_0_77_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_logical_or.html" target="_self">LogicalOr</a></td><td class="desc"></td></tr>
<tr id="row_1_0_78_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_matmul.html" target="_self">Matmul</a></td><td class="desc"></td></tr>
<tr id="row_1_0_79_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_maximum.html" target="_self">Maximum</a></td><td class="desc"></td></tr>
<tr id="row_1_0_80_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_minimum.html" target="_self">Minimum</a></td><td class="desc"></td></tr>
<tr id="row_1_0_81_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_multiply.html" target="_self">Multiply</a></td><td class="desc"></td></tr>
<tr id="row_1_0_82_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_negative.html" target="_self">Negative</a></td><td class="desc"></td></tr>
<tr id="row_1_0_83_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1core_1_1_node_namer.html" target="_self">NodeNamer</a></td><td class="desc"></td></tr>
<tr id="row_1_0_84_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_not_equal.html" target="_self">NotEqual</a></td><td class="desc"></td></tr>
<tr id="row_1_0_85_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_number_of_elements.html" target="_self">NumberOfElements</a></td><td class="desc"></td></tr>
<tr id="row_1_0_86_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_pad.html" target="_self">Pad</a></td><td class="desc"></td></tr>
<tr id="row_1_0_87_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_partition.html" target="_self">Partition</a></td><td class="desc"></td></tr>
<tr id="row_1_0_88_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_power.html" target="_self">Power</a></td><td class="desc"></td></tr>
<tr id="row_1_0_89_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_primitive.html" target="_self">Primitive</a></td><td class="desc"></td></tr>
<tr id="row_1_0_90_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1core_1_1_print_formatter.html" target="_self">PrintFormatter</a></td><td class="desc"></td></tr>
<tr id="row_1_0_91_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_q_r_f.html" target="_self">QRF</a></td><td class="desc"></td></tr>
<tr id="row_1_0_92_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_quantized_matmul.html" target="_self">QuantizedMatmul</a></td><td class="desc"></td></tr>
<tr id="row_1_0_93_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_random_bits.html" target="_self">RandomBits</a></td><td class="desc"></td></tr>
<tr id="row_1_0_94_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_real.html" target="_self">Real</a></td><td class="desc"></td></tr>
<tr id="row_1_0_95_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_reduce.html" target="_self">Reduce</a></td><td class="desc"></td></tr>
<tr id="row_1_0_96_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1core_1_1_reduction_plan.html" target="_self">ReductionPlan</a></td><td class="desc"></td></tr>
<tr id="row_1_0_97_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_remainder.html" target="_self">Remainder</a></td><td class="desc"></td></tr>
<tr id="row_1_0_98_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_reshape.html" target="_self">Reshape</a></td><td class="desc"></td></tr>
<tr id="row_1_0_99_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_round.html" target="_self">Round</a></td><td class="desc"></td></tr>
<tr id="row_1_0_100_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_scan.html" target="_self">Scan</a></td><td class="desc"></td></tr>
<tr id="row_1_0_101_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_scatter.html" target="_self">Scatter</a></td><td class="desc"></td></tr>
<tr id="row_1_0_102_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_select.html" target="_self">Select</a></td><td class="desc"></td></tr>
<tr id="row_1_0_103_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_sigmoid.html" target="_self">Sigmoid</a></td><td class="desc"></td></tr>
<tr id="row_1_0_104_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_sign.html" target="_self">Sign</a></td><td class="desc"></td></tr>
<tr id="row_1_0_105_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_sin.html" target="_self">Sin</a></td><td class="desc"></td></tr>
<tr id="row_1_0_106_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_sinh.html" target="_self">Sinh</a></td><td class="desc"></td></tr>
<tr id="row_1_0_107_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_slice.html" target="_self">Slice</a></td><td class="desc"></td></tr>
<tr id="row_1_0_108_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_slice_update.html" target="_self">SliceUpdate</a></td><td class="desc"></td></tr>
<tr id="row_1_0_109_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_softmax.html" target="_self">Softmax</a></td><td class="desc"></td></tr>
<tr id="row_1_0_110_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_sort.html" target="_self">Sort</a></td><td class="desc"></td></tr>
<tr id="row_1_0_111_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_split.html" target="_self">Split</a></td><td class="desc"></td></tr>
<tr id="row_1_0_112_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_sqrt.html" target="_self">Sqrt</a></td><td class="desc"></td></tr>
<tr id="row_1_0_113_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_square.html" target="_self">Square</a></td><td class="desc"></td></tr>
<tr id="row_1_0_114_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_stop_gradient.html" target="_self">StopGradient</a></td><td class="desc"></td></tr>
<tr id="row_1_0_115_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1core_1_1_stream.html" target="_self">Stream</a></td><td class="desc"></td></tr>
<tr id="row_1_0_116_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1core_1_1_stream_context.html" target="_self">StreamContext</a></td><td class="desc"></td></tr>
<tr id="row_1_0_117_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_subtract.html" target="_self">Subtract</a></td><td class="desc"></td></tr>
<tr id="row_1_0_118_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_s_v_d.html" target="_self">SVD</a></td><td class="desc"></td></tr>
<tr id="row_1_0_119_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_tan.html" target="_self">Tan</a></td><td class="desc"></td></tr>
<tr id="row_1_0_120_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_tanh.html" target="_self">Tanh</a></td><td class="desc"></td></tr>
<tr id="row_1_0_121_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_transpose.html" target="_self">Transpose</a></td><td class="desc"></td></tr>
<tr id="row_1_0_122_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1core_1_1_type_to_dtype.html" target="_self">TypeToDtype</a></td><td class="desc"></td></tr>
<tr id="row_1_0_123_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_unary_primitive.html" target="_self">UnaryPrimitive</a></td><td class="desc"></td></tr>
<tr id="row_1_0_124_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_uniform.html" target="_self">Uniform</a></td><td class="desc"></td></tr>
<tr id="row_1_0_125_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_view.html" target="_self">View</a></td><td class="desc"></td></tr>
<tr id="row_1_0_30_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_broadcast_axes.html" target="_self">BroadcastAxes</a></td><td class="desc"></td></tr>
<tr id="row_1_0_31_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_ceil.html" target="_self">Ceil</a></td><td class="desc"></td></tr>
<tr id="row_1_0_32_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_cholesky.html" target="_self">Cholesky</a></td><td class="desc"></td></tr>
<tr id="row_1_0_33_" class="even" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_1_0_33_" class="arrow" onclick="dynsection.toggleFolder('1_0_33_')">&#9658;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1core_1_1_command_encoder.html" target="_self">CommandEncoder</a></td><td class="desc"></td></tr>
<tr id="row_1_0_33_0_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1core_1_1_command_encoder_1_1_concurrent_context.html" target="_self">ConcurrentContext</a></td><td class="desc"></td></tr>
<tr id="row_1_0_34_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_compiled.html" target="_self">Compiled</a></td><td class="desc"></td></tr>
<tr id="row_1_0_35_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1core_1_1complex128__t.html" target="_self">complex128_t</a></td><td class="desc"></td></tr>
<tr id="row_1_0_36_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1core_1_1complex64__t.html" target="_self">complex64_t</a></td><td class="desc"></td></tr>
<tr id="row_1_0_37_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_concatenate.html" target="_self">Concatenate</a></td><td class="desc"></td></tr>
<tr id="row_1_0_38_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_conjugate.html" target="_self">Conjugate</a></td><td class="desc"></td></tr>
<tr id="row_1_0_39_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_contiguous.html" target="_self">Contiguous</a></td><td class="desc"></td></tr>
<tr id="row_1_0_40_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1core_1_1_contiguous_iterator.html" target="_self">ContiguousIterator</a></td><td class="desc"></td></tr>
<tr id="row_1_0_41_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_convolution.html" target="_self">Convolution</a></td><td class="desc"></td></tr>
<tr id="row_1_0_42_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_copy.html" target="_self">Copy</a></td><td class="desc"></td></tr>
<tr id="row_1_0_43_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_cos.html" target="_self">Cos</a></td><td class="desc"></td></tr>
<tr id="row_1_0_44_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_cosh.html" target="_self">Cosh</a></td><td class="desc"></td></tr>
<tr id="row_1_0_45_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_custom_transforms.html" target="_self">CustomTransforms</a></td><td class="desc"></td></tr>
<tr id="row_1_0_46_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1core_1_1_default_contiguous_reduce.html" target="_self">DefaultContiguousReduce</a></td><td class="desc"></td></tr>
<tr id="row_1_0_47_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1core_1_1_default_strided_reduce.html" target="_self">DefaultStridedReduce</a></td><td class="desc"></td></tr>
<tr id="row_1_0_48_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_depends.html" target="_self">Depends</a></td><td class="desc"></td></tr>
<tr id="row_1_0_49_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1core_1_1_device.html" target="_self">Device</a></td><td class="desc"></td></tr>
<tr id="row_1_0_50_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_divide.html" target="_self">Divide</a></td><td class="desc"></td></tr>
<tr id="row_1_0_51_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_div_mod.html" target="_self">DivMod</a></td><td class="desc"></td></tr>
<tr id="row_1_0_52_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1core_1_1_dtype.html" target="_self">Dtype</a></td><td class="desc"></td></tr>
<tr id="row_1_0_53_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_dynamic_slice.html" target="_self">DynamicSlice</a></td><td class="desc"></td></tr>
<tr id="row_1_0_54_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_dynamic_slice_update.html" target="_self">DynamicSliceUpdate</a></td><td class="desc"></td></tr>
<tr id="row_1_0_55_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_eigh.html" target="_self">Eigh</a></td><td class="desc"></td></tr>
<tr id="row_1_0_56_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_equal.html" target="_self">Equal</a></td><td class="desc"></td></tr>
<tr id="row_1_0_57_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_erf.html" target="_self">Erf</a></td><td class="desc"></td></tr>
<tr id="row_1_0_58_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_erf_inv.html" target="_self">ErfInv</a></td><td class="desc"></td></tr>
<tr id="row_1_0_59_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_event.html" target="_self">Event</a></td><td class="desc"></td></tr>
<tr id="row_1_0_60_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_exp.html" target="_self">Exp</a></td><td class="desc"></td></tr>
<tr id="row_1_0_61_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_expand_dims.html" target="_self">ExpandDims</a></td><td class="desc"></td></tr>
<tr id="row_1_0_62_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_expm1.html" target="_self">Expm1</a></td><td class="desc"></td></tr>
<tr id="row_1_0_63_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_f_f_t.html" target="_self">FFT</a></td><td class="desc"></td></tr>
<tr id="row_1_0_64_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1core_1_1finfo.html" target="_self">finfo</a></td><td class="desc">Holds information about floating-point types </td></tr>
<tr id="row_1_0_65_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_flatten.html" target="_self">Flatten</a></td><td class="desc"></td></tr>
<tr id="row_1_0_66_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_floor.html" target="_self">Floor</a></td><td class="desc"></td></tr>
<tr id="row_1_0_67_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_full.html" target="_self">Full</a></td><td class="desc"></td></tr>
<tr id="row_1_0_68_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1core_1_1_function_exporter.html" target="_self">FunctionExporter</a></td><td class="desc"></td></tr>
<tr id="row_1_0_69_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_gather.html" target="_self">Gather</a></td><td class="desc"></td></tr>
<tr id="row_1_0_70_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_gather_m_m.html" target="_self">GatherMM</a></td><td class="desc"></td></tr>
<tr id="row_1_0_71_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_gather_q_m_m.html" target="_self">GatherQMM</a></td><td class="desc"></td></tr>
<tr id="row_1_0_72_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_greater.html" target="_self">Greater</a></td><td class="desc"></td></tr>
<tr id="row_1_0_73_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_greater_equal.html" target="_self">GreaterEqual</a></td><td class="desc"></td></tr>
<tr id="row_1_0_74_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_hadamard.html" target="_self">Hadamard</a></td><td class="desc"></td></tr>
<tr id="row_1_0_75_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_imag.html" target="_self">Imag</a></td><td class="desc"></td></tr>
<tr id="row_1_0_76_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1core_1_1_imported_function.html" target="_self">ImportedFunction</a></td><td class="desc"></td></tr>
<tr id="row_1_0_77_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_inverse.html" target="_self">Inverse</a></td><td class="desc"></td></tr>
<tr id="row_1_0_78_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_jit_compiler.html" target="_self">JitCompiler</a></td><td class="desc"></td></tr>
<tr id="row_1_0_79_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_less.html" target="_self">Less</a></td><td class="desc"></td></tr>
<tr id="row_1_0_80_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_less_equal.html" target="_self">LessEqual</a></td><td class="desc"></td></tr>
<tr id="row_1_0_81_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_load.html" target="_self">Load</a></td><td class="desc"></td></tr>
<tr id="row_1_0_82_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_log.html" target="_self">Log</a></td><td class="desc"></td></tr>
<tr id="row_1_0_83_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_log1p.html" target="_self">Log1p</a></td><td class="desc"></td></tr>
<tr id="row_1_0_84_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_log_add_exp.html" target="_self">LogAddExp</a></td><td class="desc"></td></tr>
<tr id="row_1_0_85_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_logical_and.html" target="_self">LogicalAnd</a></td><td class="desc"></td></tr>
<tr id="row_1_0_86_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_logical_not.html" target="_self">LogicalNot</a></td><td class="desc"></td></tr>
<tr id="row_1_0_87_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_logical_or.html" target="_self">LogicalOr</a></td><td class="desc"></td></tr>
<tr id="row_1_0_88_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_matmul.html" target="_self">Matmul</a></td><td class="desc"></td></tr>
<tr id="row_1_0_89_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_maximum.html" target="_self">Maximum</a></td><td class="desc"></td></tr>
<tr id="row_1_0_90_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_minimum.html" target="_self">Minimum</a></td><td class="desc"></td></tr>
<tr id="row_1_0_91_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_multiply.html" target="_self">Multiply</a></td><td class="desc"></td></tr>
<tr id="row_1_0_92_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_negative.html" target="_self">Negative</a></td><td class="desc"></td></tr>
<tr id="row_1_0_93_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1core_1_1_node_namer.html" target="_self">NodeNamer</a></td><td class="desc"></td></tr>
<tr id="row_1_0_94_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_not_equal.html" target="_self">NotEqual</a></td><td class="desc"></td></tr>
<tr id="row_1_0_95_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_number_of_elements.html" target="_self">NumberOfElements</a></td><td class="desc"></td></tr>
<tr id="row_1_0_96_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1core_1_1numeric__limits.html" target="_self">numeric_limits</a></td><td class="desc"></td></tr>
<tr id="row_1_0_97_" class="even" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_1_0_97_" class="arrow" onclick="dynsection.toggleFolder('1_0_97_')">&#9658;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1core_1_1numeric__limits.html" target="_self">numeric_limits&lt; bfloat16_t &gt;</a></td><td class="desc"></td></tr>
<tr id="row_1_0_97_0_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1core_1_1numeric__limits.html" target="_self">bfloat_or_bits</a></td><td class="desc"></td></tr>
<tr id="row_1_0_98_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1core_1_1numeric__limits.html" target="_self">numeric_limits&lt; float &gt;</a></td><td class="desc"></td></tr>
<tr id="row_1_0_99_" class="even" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_1_0_99_" class="arrow" onclick="dynsection.toggleFolder('1_0_99_')">&#9658;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1core_1_1numeric__limits.html" target="_self">numeric_limits&lt; float16_t &gt;</a></td><td class="desc"></td></tr>
<tr id="row_1_0_99_0_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1core_1_1numeric__limits.html" target="_self">half_or_bits</a></td><td class="desc"></td></tr>
<tr id="row_1_0_100_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_pad.html" target="_self">Pad</a></td><td class="desc"></td></tr>
<tr id="row_1_0_101_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_partition.html" target="_self">Partition</a></td><td class="desc"></td></tr>
<tr id="row_1_0_102_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_power.html" target="_self">Power</a></td><td class="desc"></td></tr>
<tr id="row_1_0_103_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_primitive.html" target="_self">Primitive</a></td><td class="desc"></td></tr>
<tr id="row_1_0_104_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1core_1_1_print_formatter.html" target="_self">PrintFormatter</a></td><td class="desc"></td></tr>
<tr id="row_1_0_105_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_q_r_f.html" target="_self">QRF</a></td><td class="desc"></td></tr>
<tr id="row_1_0_106_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_quantized_matmul.html" target="_self">QuantizedMatmul</a></td><td class="desc"></td></tr>
<tr id="row_1_0_107_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_random_bits.html" target="_self">RandomBits</a></td><td class="desc"></td></tr>
<tr id="row_1_0_108_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_real.html" target="_self">Real</a></td><td class="desc"></td></tr>
<tr id="row_1_0_109_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_reduce.html" target="_self">Reduce</a></td><td class="desc"></td></tr>
<tr id="row_1_0_110_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1core_1_1_reduction_plan.html" target="_self">ReductionPlan</a></td><td class="desc"></td></tr>
<tr id="row_1_0_111_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_remainder.html" target="_self">Remainder</a></td><td class="desc"></td></tr>
<tr id="row_1_0_112_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_reshape.html" target="_self">Reshape</a></td><td class="desc"></td></tr>
<tr id="row_1_0_113_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_round.html" target="_self">Round</a></td><td class="desc"></td></tr>
<tr id="row_1_0_114_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_scan.html" target="_self">Scan</a></td><td class="desc"></td></tr>
<tr id="row_1_0_115_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_scatter.html" target="_self">Scatter</a></td><td class="desc"></td></tr>
<tr id="row_1_0_116_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_select.html" target="_self">Select</a></td><td class="desc"></td></tr>
<tr id="row_1_0_117_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_sigmoid.html" target="_self">Sigmoid</a></td><td class="desc"></td></tr>
<tr id="row_1_0_118_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_sign.html" target="_self">Sign</a></td><td class="desc"></td></tr>
<tr id="row_1_0_119_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_sin.html" target="_self">Sin</a></td><td class="desc"></td></tr>
<tr id="row_1_0_120_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_sinh.html" target="_self">Sinh</a></td><td class="desc"></td></tr>
<tr id="row_1_0_121_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_slice.html" target="_self">Slice</a></td><td class="desc"></td></tr>
<tr id="row_1_0_122_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_slice_update.html" target="_self">SliceUpdate</a></td><td class="desc"></td></tr>
<tr id="row_1_0_123_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_softmax.html" target="_self">Softmax</a></td><td class="desc"></td></tr>
<tr id="row_1_0_124_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_sort.html" target="_self">Sort</a></td><td class="desc"></td></tr>
<tr id="row_1_0_125_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_split.html" target="_self">Split</a></td><td class="desc"></td></tr>
<tr id="row_1_0_126_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_sqrt.html" target="_self">Sqrt</a></td><td class="desc"></td></tr>
<tr id="row_1_0_127_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_square.html" target="_self">Square</a></td><td class="desc"></td></tr>
<tr id="row_1_0_128_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_squeeze.html" target="_self">Squeeze</a></td><td class="desc"></td></tr>
<tr id="row_1_0_129_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_stop_gradient.html" target="_self">StopGradient</a></td><td class="desc"></td></tr>
<tr id="row_1_0_130_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1core_1_1_stream.html" target="_self">Stream</a></td><td class="desc"></td></tr>
<tr id="row_1_0_131_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1core_1_1_stream_context.html" target="_self">StreamContext</a></td><td class="desc"></td></tr>
<tr id="row_1_0_132_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_subtract.html" target="_self">Subtract</a></td><td class="desc"></td></tr>
<tr id="row_1_0_133_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_s_v_d.html" target="_self">SVD</a></td><td class="desc"></td></tr>
<tr id="row_1_0_134_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_tan.html" target="_self">Tan</a></td><td class="desc"></td></tr>
<tr id="row_1_0_135_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_tanh.html" target="_self">Tanh</a></td><td class="desc"></td></tr>
<tr id="row_1_0_136_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_transpose.html" target="_self">Transpose</a></td><td class="desc"></td></tr>
<tr id="row_1_0_137_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1core_1_1_type_to_dtype.html" target="_self">TypeToDtype</a></td><td class="desc"></td></tr>
<tr id="row_1_0_138_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_unary_primitive.html" target="_self">UnaryPrimitive</a></td><td class="desc"></td></tr>
<tr id="row_1_0_139_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_unflatten.html" target="_self">Unflatten</a></td><td class="desc"></td></tr>
<tr id="row_1_0_140_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmlx_1_1core_1_1_view.html" target="_self">View</a></td><td class="desc"></td></tr>
<tr id="row_1_1_" class="even" style="display:none;"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_1_1_" class="arrow" onclick="dynsection.toggleFolder('1_1_')">&#9658;</span><span class="icona"><span class="icon">N</span></span><a class="el" href="namespacemlx_1_1steel.html" target="_self">steel</a></td><td class="desc"></td></tr>
<tr id="row_1_1_0_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1steel_1_1_accum_helper.html" target="_self">AccumHelper</a></td><td class="desc"></td></tr>
<tr id="row_1_1_1_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1steel_1_1_attn_params.html" target="_self">AttnParams</a></td><td class="desc"></td></tr>
<tr id="row_1_1_2_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html" target="_self">BaseMMAFrag</a></td><td class="desc"></td></tr>
<tr id="row_1_1_3_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html" target="_self">BaseMMAFrag&lt; T, 8, 8 &gt;</a></td><td class="desc"></td></tr>
<tr id="row_1_1_3_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html" target="_self">BaseMMAFrag&lt; T, 8, 8 &gt;</a></td><td class="desc"></td></tr>
<tr id="row_1_1_4_" class="even" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_1_1_4_" class="arrow" onclick="dynsection.toggleFolder('1_1_4_')">&#9658;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1steel_1_1_block_loader.html" target="_self">BlockLoader</a></td><td class="desc"></td></tr>
<tr id="row_1_1_4_0_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1steel_1_1_block_loader_1_1_read_vector.html" target="_self">ReadVector</a></td><td class="desc"></td></tr>
<tr id="row_1_1_5_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1steel_1_1_block_loader_t.html" target="_self">BlockLoaderT</a></td><td class="desc"></td></tr>
<tr id="row_1_1_6_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1steel_1_1_block_m_m_a.html" target="_self">BlockMMA</a></td><td class="desc"></td></tr>
<tr id="row_1_1_7_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1steel_1_1_block_swizzle.html" target="_self">BlockSwizzle</a></td><td class="desc"></td></tr>
<tr id="row_1_1_8_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1steel_1_1_channel_helper.html" target="_self">ChannelHelper</a></td><td class="desc"></td></tr>
<tr id="row_1_1_9_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1steel_1_1_channel_helper_3_011_01_4.html" target="_self">ChannelHelper&lt; 1 &gt;</a></td><td class="desc"></td></tr>
<tr id="row_1_1_10_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1steel_1_1_channel_helper_3_012_01_4.html" target="_self">ChannelHelper&lt; 2 &gt;</a></td><td class="desc"></td></tr>
<tr id="row_1_1_11_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1steel_1_1_channel_helper_3_013_01_4.html" target="_self">ChannelHelper&lt; 3 &gt;</a></td><td class="desc"></td></tr>
<tr id="row_1_1_12_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1steel_1_1_channel_helper_3_014_01_4.html" target="_self">ChannelHelper&lt; 4 &gt;</a></td><td class="desc"></td></tr>
<tr id="row_1_1_9_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1steel_1_1_channel_helper.html" target="_self">ChannelHelper&lt; 1 &gt;</a></td><td class="desc"></td></tr>
<tr id="row_1_1_10_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1steel_1_1_channel_helper.html" target="_self">ChannelHelper&lt; 2 &gt;</a></td><td class="desc"></td></tr>
<tr id="row_1_1_11_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1steel_1_1_channel_helper.html" target="_self">ChannelHelper&lt; 3 &gt;</a></td><td class="desc"></td></tr>
<tr id="row_1_1_12_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1steel_1_1_channel_helper.html" target="_self">ChannelHelper&lt; 4 &gt;</a></td><td class="desc"></td></tr>
<tr id="row_1_1_13_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1steel_1_1_conv2_d_general_base_info.html" target="_self">Conv2DGeneralBaseInfo</a></td><td class="desc"></td></tr>
<tr id="row_1_1_14_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1steel_1_1_conv2_d_general_jump_params.html" target="_self">Conv2DGeneralJumpParams</a></td><td class="desc"></td></tr>
<tr id="row_1_1_15_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1steel_1_1_conv2_d_input_block_loader_general.html" target="_self">Conv2DInputBlockLoaderGeneral</a></td><td class="desc"></td></tr>
@@ -357,7 +396,7 @@ $(function(){ initResizable(false); });
<tr id="row_1_1_27_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1steel_1_1_implicit_gemm_conv2_d_params.html" target="_self">ImplicitGemmConv2DParams</a></td><td class="desc"></td></tr>
<tr id="row_1_1_28_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1steel_1_1integral__constant.html" target="_self">integral_constant</a></td><td class="desc"></td></tr>
<tr id="row_1_1_29_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1steel_1_1is__integral.html" target="_self">is_integral</a></td><td class="desc"></td></tr>
<tr id="row_1_1_30_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1steel_1_1is__integral_3_01integral__constant_3_01_t_00_01v_01_4_01_4.html" target="_self">is_integral&lt; integral_constant&lt; T, v &gt; &gt;</a></td><td class="desc"></td></tr>
<tr id="row_1_1_30_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1steel_1_1is__integral.html" target="_self">is_integral&lt; integral_constant&lt; T, v &gt; &gt;</a></td><td class="desc"></td></tr>
<tr id="row_1_1_31_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1steel_1_1_layout2_d.html" target="_self">Layout2D</a></td><td class="desc"></td></tr>
<tr id="row_1_1_32_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1steel_1_1_loop_alignment.html" target="_self">LoopAlignment</a></td><td class="desc"></td></tr>
<tr id="row_1_1_33_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx_1_1steel_1_1_m_m_a_tile.html" target="_self">MMATile</a></td><td class="desc"></td></tr>
@@ -373,7 +412,7 @@ $(function(){ initResizable(false); });
<tr id="row_2_0_0_2_" class="odd" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classpocketfft_1_1detail_1_1threading_1_1latch.html" target="_self">latch</a></td><td class="desc"></td></tr>
<tr id="row_2_0_0_3_" class="odd" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classpocketfft_1_1detail_1_1threading_1_1thread__pool.html" target="_self">thread_pool</a></td><td class="desc"></td></tr>
<tr id="row_2_0_1_" class="odd" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structpocketfft_1_1detail_1_1add__vec.html" target="_self">add_vec</a></td><td class="desc"></td></tr>
<tr id="row_2_0_2_" class="odd" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structpocketfft_1_1detail_1_1add__vec_3_01cmplx_3_01_t_01_4_01_4.html" target="_self">add_vec&lt; cmplx&lt; T &gt; &gt;</a></td><td class="desc"></td></tr>
<tr id="row_2_0_2_" class="odd" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structpocketfft_1_1detail_1_1add__vec.html" target="_self">add_vec&lt; cmplx&lt; T &gt; &gt;</a></td><td class="desc"></td></tr>
<tr id="row_2_0_3_" class="odd" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classpocketfft_1_1detail_1_1arr.html" target="_self">arr</a></td><td class="desc"></td></tr>
<tr id="row_2_0_4_" class="odd" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classpocketfft_1_1detail_1_1arr__info.html" target="_self">arr_info</a></td><td class="desc"></td></tr>
<tr id="row_2_0_5_" class="odd" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classpocketfft_1_1detail_1_1cfftp.html" target="_self">cfftp</a></td><td class="desc"></td></tr>
@@ -420,14 +459,14 @@ $(function(){ initResizable(false); });
<tr id="row_20_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_ceil.html" target="_self">Ceil</a></td><td class="desc"></td></tr>
<tr id="row_21_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structcomplex64__t.html" target="_self">complex64_t</a></td><td class="desc"></td></tr>
<tr id="row_22_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_conditional_type.html" target="_self">ConditionalType</a></td><td class="desc"></td></tr>
<tr id="row_23_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_conditional_type_3_01true_00_01_t_00_01_u_01_4.html" target="_self">ConditionalType&lt; true, T, U &gt;</a></td><td class="desc"></td></tr>
<tr id="row_23_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_conditional_type.html" target="_self">ConditionalType&lt; true, T, U &gt;</a></td><td class="desc"></td></tr>
<tr id="row_24_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_conjugate.html" target="_self">Conjugate</a></td><td class="desc"></td></tr>
<tr id="row_25_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_cos.html" target="_self">Cos</a></td><td class="desc"></td></tr>
<tr id="row_26_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_cosh.html" target="_self">Cosh</a></td><td class="desc"></td></tr>
<tr id="row_27_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_cum_max.html" target="_self">CumMax</a></td><td class="desc"></td></tr>
<tr id="row_28_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_cum_min.html" target="_self">CumMin</a></td><td class="desc"></td></tr>
<tr id="row_29_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_cum_prod.html" target="_self">CumProd</a></td><td class="desc"></td></tr>
<tr id="row_30_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_cum_prod_3_01bool_01_4.html" target="_self">CumProd&lt; bool &gt;</a></td><td class="desc"></td></tr>
<tr id="row_30_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_cum_prod.html" target="_self">CumProd&lt; bool &gt;</a></td><td class="desc"></td></tr>
<tr id="row_31_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_cum_sum.html" target="_self">CumSum</a></td><td class="desc"></td></tr>
<tr id="row_32_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_divide.html" target="_self">Divide</a></td><td class="desc"></td></tr>
<tr id="row_33_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_div_mod.html" target="_self">DivMod</a></td><td class="desc"></td></tr>
@@ -453,19 +492,19 @@ $(function(){ initResizable(false); });
<tr id="row_53_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_less_equal.html" target="_self">LessEqual</a></td><td class="desc"></td></tr>
<tr id="row_54_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_less_than.html" target="_self">LessThan</a></td><td class="desc"></td></tr>
<tr id="row_55_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_limits.html" target="_self">Limits</a></td><td class="desc"></td></tr>
<tr id="row_56_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_limits_3_01bfloat16__t_01_4.html" target="_self">Limits&lt; bfloat16_t &gt;</a></td><td class="desc"></td></tr>
<tr id="row_57_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_limits_3_01bool_01_4.html" target="_self">Limits&lt; bool &gt;</a></td><td class="desc"></td></tr>
<tr id="row_58_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_limits_3_01complex64__t_01_4.html" target="_self">Limits&lt; complex64_t &gt;</a></td><td class="desc"></td></tr>
<tr id="row_59_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_limits_3_01float_01_4.html" target="_self">Limits&lt; float &gt;</a></td><td class="desc"></td></tr>
<tr id="row_60_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_limits_3_01half_01_4.html" target="_self">Limits&lt; half &gt;</a></td><td class="desc"></td></tr>
<tr id="row_61_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_limits_3_01int16__t_01_4.html" target="_self">Limits&lt; int16_t &gt;</a></td><td class="desc"></td></tr>
<tr id="row_62_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_limits_3_01int32__t_01_4.html" target="_self">Limits&lt; int32_t &gt;</a></td><td class="desc"></td></tr>
<tr id="row_63_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_limits_3_01int64__t_01_4.html" target="_self">Limits&lt; int64_t &gt;</a></td><td class="desc"></td></tr>
<tr id="row_64_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_limits_3_01int8__t_01_4.html" target="_self">Limits&lt; int8_t &gt;</a></td><td class="desc"></td></tr>
<tr id="row_65_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_limits_3_01uint16__t_01_4.html" target="_self">Limits&lt; uint16_t &gt;</a></td><td class="desc"></td></tr>
<tr id="row_66_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_limits_3_01uint32__t_01_4.html" target="_self">Limits&lt; uint32_t &gt;</a></td><td class="desc"></td></tr>
<tr id="row_67_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_limits_3_01uint64__t_01_4.html" target="_self">Limits&lt; uint64_t &gt;</a></td><td class="desc"></td></tr>
<tr id="row_68_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_limits_3_01uint8__t_01_4.html" target="_self">Limits&lt; uint8_t &gt;</a></td><td class="desc"></td></tr>
<tr id="row_56_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_limits.html" target="_self">Limits&lt; bfloat16_t &gt;</a></td><td class="desc"></td></tr>
<tr id="row_57_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_limits.html" target="_self">Limits&lt; bool &gt;</a></td><td class="desc"></td></tr>
<tr id="row_58_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_limits.html" target="_self">Limits&lt; complex64_t &gt;</a></td><td class="desc"></td></tr>
<tr id="row_59_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_limits.html" target="_self">Limits&lt; float &gt;</a></td><td class="desc"></td></tr>
<tr id="row_60_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_limits.html" target="_self">Limits&lt; half &gt;</a></td><td class="desc"></td></tr>
<tr id="row_61_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_limits.html" target="_self">Limits&lt; int16_t &gt;</a></td><td class="desc"></td></tr>
<tr id="row_62_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_limits.html" target="_self">Limits&lt; int32_t &gt;</a></td><td class="desc"></td></tr>
<tr id="row_63_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_limits.html" target="_self">Limits&lt; int64_t &gt;</a></td><td class="desc"></td></tr>
<tr id="row_64_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_limits.html" target="_self">Limits&lt; int8_t &gt;</a></td><td class="desc"></td></tr>
<tr id="row_65_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_limits.html" target="_self">Limits&lt; uint16_t &gt;</a></td><td class="desc"></td></tr>
<tr id="row_66_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_limits.html" target="_self">Limits&lt; uint32_t &gt;</a></td><td class="desc"></td></tr>
<tr id="row_67_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_limits.html" target="_self">Limits&lt; uint64_t &gt;</a></td><td class="desc"></td></tr>
<tr id="row_68_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_limits.html" target="_self">Limits&lt; uint8_t &gt;</a></td><td class="desc"></td></tr>
<tr id="row_69_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_log.html" target="_self">Log</a></td><td class="desc"></td></tr>
<tr id="row_70_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_log10.html" target="_self">Log10</a></td><td class="desc"></td></tr>
<tr id="row_71_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_log1p.html" target="_self">Log1p</a></td><td class="desc"></td></tr>
@@ -475,15 +514,15 @@ $(function(){ initResizable(false); });
<tr id="row_75_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_logical_not.html" target="_self">LogicalNot</a></td><td class="desc"></td></tr>
<tr id="row_76_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_logical_or.html" target="_self">LogicalOr</a></td><td class="desc"></td></tr>
<tr id="row_77_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_looped_elem_to_loc.html" target="_self">LoopedElemToLoc</a></td><td class="desc"></td></tr>
<tr id="row_78_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_looped_elem_to_loc_3_011_00_01_offset_t_00_01false_01_4.html" target="_self">LoopedElemToLoc&lt; 1, OffsetT, false &gt;</a></td><td class="desc"></td></tr>
<tr id="row_79_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_looped_elem_to_loc_3_011_00_01_offset_t_00_01true_01_4.html" target="_self">LoopedElemToLoc&lt; 1, OffsetT, true &gt;</a></td><td class="desc"></td></tr>
<tr id="row_78_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_looped_elem_to_loc.html" target="_self">LoopedElemToLoc&lt; 1, OffsetT, false &gt;</a></td><td class="desc"></td></tr>
<tr id="row_79_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_looped_elem_to_loc.html" target="_self">LoopedElemToLoc&lt; 1, OffsetT, true &gt;</a></td><td class="desc"></td></tr>
<tr id="row_80_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_max.html" target="_self">Max</a></td><td class="desc"></td></tr>
<tr id="row_81_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_maximum.html" target="_self">Maximum</a></td><td class="desc"></td></tr>
<tr id="row_82_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_max_op.html" target="_self">MaxOp</a></td><td class="desc"></td></tr>
<tr id="row_83_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_min.html" target="_self">Min</a></td><td class="desc"></td></tr>
<tr id="row_84_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_minimum.html" target="_self">Minimum</a></td><td class="desc"></td></tr>
<tr id="row_85_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx__atomic.html" target="_self">mlx_atomic</a></td><td class="desc"></td></tr>
<tr id="row_86_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx__atomic_3_01_t_00_01enable__if__t_3_01is__metal__atomic_3_01_t_01_4_01_4_01_4.html" target="_self">mlx_atomic&lt; T, enable_if_t&lt; is_metal_atomic&lt; T &gt; &gt; &gt;</a></td><td class="desc"></td></tr>
<tr id="row_86_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmlx__atomic.html" target="_self">mlx_atomic&lt; T, enable_if_t&lt; is_metal_atomic&lt; T &gt; &gt; &gt;</a></td><td class="desc"></td></tr>
<tr id="row_87_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_m_l_x_conv_params.html" target="_self">MLXConvParams</a></td><td class="desc"></td></tr>
<tr id="row_88_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_mul_op.html" target="_self">MulOp</a></td><td class="desc"></td></tr>
<tr id="row_89_" class="odd"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="struct_multiply.html" target="_self">Multiply</a></td><td class="desc"></td></tr>
@@ -521,10 +560,12 @@ $(function(){ initResizable(false); });
</table>
</div><!-- directory -->
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0
</small></address>
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.1 </li>
</ul>
</div>
</body>
</html>
+460
View File
@@ -0,0 +1,460 @@
var annotated_dup =
[
[ "metal", "namespacemetal.html", [
[ "_numeric_limits_impl< bfloat16_t >", "structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html", "structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4" ],
[ "is_empty", "structmetal_1_1is__empty.html", null ],
[ "is_static", "structmetal_1_1is__static.html", null ],
[ "make_void", "structmetal_1_1make__void.html", "structmetal_1_1make__void" ],
[ "pointer_element", "structmetal_1_1pointer__element.html", null ],
[ "pointer_element< constant T * >", "structmetal_1_1pointer__element.html", "structmetal_1_1pointer__element" ],
[ "pointer_element< device T * >", "structmetal_1_1pointer__element.html", "structmetal_1_1pointer__element" ],
[ "pointer_element< thread T * >", "structmetal_1_1pointer__element.html", "structmetal_1_1pointer__element" ],
[ "pointer_element< threadgroup T * >", "structmetal_1_1pointer__element.html", "structmetal_1_1pointer__element" ]
] ],
[ "mlx", "namespacemlx.html", [
[ "core", "namespacemlx_1_1core.html", [
[ "allocator", "namespacemlx_1_1core_1_1allocator.html", [
[ "Allocator", "classmlx_1_1core_1_1allocator_1_1_allocator.html", "classmlx_1_1core_1_1allocator_1_1_allocator" ],
[ "Buffer", "classmlx_1_1core_1_1allocator_1_1_buffer.html", "classmlx_1_1core_1_1allocator_1_1_buffer" ],
[ "CommonAllocator", "classmlx_1_1core_1_1allocator_1_1_common_allocator.html", "classmlx_1_1core_1_1allocator_1_1_common_allocator" ]
] ],
[ "detail", "namespacemlx_1_1core_1_1detail.html", [
[ "Abs", "structmlx_1_1core_1_1detail_1_1_abs.html", "structmlx_1_1core_1_1detail_1_1_abs" ],
[ "Add", "structmlx_1_1core_1_1detail_1_1_add.html", "structmlx_1_1core_1_1detail_1_1_add" ],
[ "ArcCos", "structmlx_1_1core_1_1detail_1_1_arc_cos.html", "structmlx_1_1core_1_1detail_1_1_arc_cos" ],
[ "ArcCosh", "structmlx_1_1core_1_1detail_1_1_arc_cosh.html", "structmlx_1_1core_1_1detail_1_1_arc_cosh" ],
[ "ArcSin", "structmlx_1_1core_1_1detail_1_1_arc_sin.html", "structmlx_1_1core_1_1detail_1_1_arc_sin" ],
[ "ArcSinh", "structmlx_1_1core_1_1detail_1_1_arc_sinh.html", "structmlx_1_1core_1_1detail_1_1_arc_sinh" ],
[ "ArcTan", "structmlx_1_1core_1_1detail_1_1_arc_tan.html", "structmlx_1_1core_1_1detail_1_1_arc_tan" ],
[ "ArcTan2", "structmlx_1_1core_1_1detail_1_1_arc_tan2.html", "structmlx_1_1core_1_1detail_1_1_arc_tan2" ],
[ "ArcTanh", "structmlx_1_1core_1_1detail_1_1_arc_tanh.html", "structmlx_1_1core_1_1detail_1_1_arc_tanh" ],
[ "BitwiseAnd", "structmlx_1_1core_1_1detail_1_1_bitwise_and.html", "structmlx_1_1core_1_1detail_1_1_bitwise_and" ],
[ "BitwiseOr", "structmlx_1_1core_1_1detail_1_1_bitwise_or.html", "structmlx_1_1core_1_1detail_1_1_bitwise_or" ],
[ "BitwiseXor", "structmlx_1_1core_1_1detail_1_1_bitwise_xor.html", "structmlx_1_1core_1_1detail_1_1_bitwise_xor" ],
[ "Ceil", "structmlx_1_1core_1_1detail_1_1_ceil.html", "structmlx_1_1core_1_1detail_1_1_ceil" ],
[ "Conjugate", "structmlx_1_1core_1_1detail_1_1_conjugate.html", "structmlx_1_1core_1_1detail_1_1_conjugate" ],
[ "Cos", "structmlx_1_1core_1_1detail_1_1_cos.html", "structmlx_1_1core_1_1detail_1_1_cos" ],
[ "Cosh", "structmlx_1_1core_1_1detail_1_1_cosh.html", "structmlx_1_1core_1_1detail_1_1_cosh" ],
[ "Divide", "structmlx_1_1core_1_1detail_1_1_divide.html", "structmlx_1_1core_1_1detail_1_1_divide" ],
[ "Equal", "structmlx_1_1core_1_1detail_1_1_equal.html", "structmlx_1_1core_1_1detail_1_1_equal" ],
[ "Erf", "structmlx_1_1core_1_1detail_1_1_erf.html", "structmlx_1_1core_1_1detail_1_1_erf" ],
[ "ErfInv", "structmlx_1_1core_1_1detail_1_1_erf_inv.html", "structmlx_1_1core_1_1detail_1_1_erf_inv" ],
[ "Exp", "structmlx_1_1core_1_1detail_1_1_exp.html", "structmlx_1_1core_1_1detail_1_1_exp" ],
[ "Expm1", "structmlx_1_1core_1_1detail_1_1_expm1.html", "structmlx_1_1core_1_1detail_1_1_expm1" ],
[ "Floor", "structmlx_1_1core_1_1detail_1_1_floor.html", "structmlx_1_1core_1_1detail_1_1_floor" ],
[ "Greater", "structmlx_1_1core_1_1detail_1_1_greater.html", "structmlx_1_1core_1_1detail_1_1_greater" ],
[ "GreaterEqual", "structmlx_1_1core_1_1detail_1_1_greater_equal.html", "structmlx_1_1core_1_1detail_1_1_greater_equal" ],
[ "Imag", "structmlx_1_1core_1_1detail_1_1_imag.html", "structmlx_1_1core_1_1detail_1_1_imag" ],
[ "IntOrFloat", "unionmlx_1_1core_1_1detail_1_1_int_or_float.html", "unionmlx_1_1core_1_1detail_1_1_int_or_float" ],
[ "InTracing", "structmlx_1_1core_1_1detail_1_1_in_tracing.html", "structmlx_1_1core_1_1detail_1_1_in_tracing" ],
[ "LeftShift", "structmlx_1_1core_1_1detail_1_1_left_shift.html", "structmlx_1_1core_1_1detail_1_1_left_shift" ],
[ "Less", "structmlx_1_1core_1_1detail_1_1_less.html", "structmlx_1_1core_1_1detail_1_1_less" ],
[ "LessEqual", "structmlx_1_1core_1_1detail_1_1_less_equal.html", "structmlx_1_1core_1_1detail_1_1_less_equal" ],
[ "Log", "structmlx_1_1core_1_1detail_1_1_log.html", "structmlx_1_1core_1_1detail_1_1_log" ],
[ "Log10", "structmlx_1_1core_1_1detail_1_1_log10.html", "structmlx_1_1core_1_1detail_1_1_log10" ],
[ "Log1p", "structmlx_1_1core_1_1detail_1_1_log1p.html", "structmlx_1_1core_1_1detail_1_1_log1p" ],
[ "Log2", "structmlx_1_1core_1_1detail_1_1_log2.html", "structmlx_1_1core_1_1detail_1_1_log2" ],
[ "LogAddExp", "structmlx_1_1core_1_1detail_1_1_log_add_exp.html", "structmlx_1_1core_1_1detail_1_1_log_add_exp" ],
[ "LogicalAnd", "structmlx_1_1core_1_1detail_1_1_logical_and.html", "structmlx_1_1core_1_1detail_1_1_logical_and" ],
[ "LogicalNot", "structmlx_1_1core_1_1detail_1_1_logical_not.html", "structmlx_1_1core_1_1detail_1_1_logical_not" ],
[ "LogicalOr", "structmlx_1_1core_1_1detail_1_1_logical_or.html", "structmlx_1_1core_1_1detail_1_1_logical_or" ],
[ "Maximum", "structmlx_1_1core_1_1detail_1_1_maximum.html", "structmlx_1_1core_1_1detail_1_1_maximum" ],
[ "Minimum", "structmlx_1_1core_1_1detail_1_1_minimum.html", "structmlx_1_1core_1_1detail_1_1_minimum" ],
[ "Multiply", "structmlx_1_1core_1_1detail_1_1_multiply.html", "structmlx_1_1core_1_1detail_1_1_multiply" ],
[ "NaNEqual", "structmlx_1_1core_1_1detail_1_1_na_n_equal.html", "structmlx_1_1core_1_1detail_1_1_na_n_equal" ],
[ "Negative", "structmlx_1_1core_1_1detail_1_1_negative.html", "structmlx_1_1core_1_1detail_1_1_negative" ],
[ "NotEqual", "structmlx_1_1core_1_1detail_1_1_not_equal.html", "structmlx_1_1core_1_1detail_1_1_not_equal" ],
[ "Power", "structmlx_1_1core_1_1detail_1_1_power.html", "structmlx_1_1core_1_1detail_1_1_power" ],
[ "Real", "structmlx_1_1core_1_1detail_1_1_real.html", "structmlx_1_1core_1_1detail_1_1_real" ],
[ "Remainder", "structmlx_1_1core_1_1detail_1_1_remainder.html", "structmlx_1_1core_1_1detail_1_1_remainder" ],
[ "RetainGraph", "structmlx_1_1core_1_1detail_1_1_retain_graph.html", "structmlx_1_1core_1_1detail_1_1_retain_graph" ],
[ "RightShift", "structmlx_1_1core_1_1detail_1_1_right_shift.html", "structmlx_1_1core_1_1detail_1_1_right_shift" ],
[ "Round", "structmlx_1_1core_1_1detail_1_1_round.html", "structmlx_1_1core_1_1detail_1_1_round" ],
[ "Rsqrt", "structmlx_1_1core_1_1detail_1_1_rsqrt.html", "structmlx_1_1core_1_1detail_1_1_rsqrt" ],
[ "Select", "structmlx_1_1core_1_1detail_1_1_select.html", "structmlx_1_1core_1_1detail_1_1_select" ],
[ "Sigmoid", "structmlx_1_1core_1_1detail_1_1_sigmoid.html", "structmlx_1_1core_1_1detail_1_1_sigmoid" ],
[ "Sign", "structmlx_1_1core_1_1detail_1_1_sign.html", "structmlx_1_1core_1_1detail_1_1_sign" ],
[ "Sin", "structmlx_1_1core_1_1detail_1_1_sin.html", "structmlx_1_1core_1_1detail_1_1_sin" ],
[ "Sinh", "structmlx_1_1core_1_1detail_1_1_sinh.html", "structmlx_1_1core_1_1detail_1_1_sinh" ],
[ "Sqrt", "structmlx_1_1core_1_1detail_1_1_sqrt.html", "structmlx_1_1core_1_1detail_1_1_sqrt" ],
[ "Square", "structmlx_1_1core_1_1detail_1_1_square.html", "structmlx_1_1core_1_1detail_1_1_square" ],
[ "Subtract", "structmlx_1_1core_1_1detail_1_1_subtract.html", "structmlx_1_1core_1_1detail_1_1_subtract" ],
[ "Tan", "structmlx_1_1core_1_1detail_1_1_tan.html", "structmlx_1_1core_1_1detail_1_1_tan" ],
[ "Tanh", "structmlx_1_1core_1_1detail_1_1_tanh.html", "structmlx_1_1core_1_1detail_1_1_tanh" ]
] ],
[ "distributed", "namespacemlx_1_1core_1_1distributed.html", [
[ "detail", "namespacemlx_1_1core_1_1distributed_1_1detail.html", [
[ "GroupImpl", "classmlx_1_1core_1_1distributed_1_1detail_1_1_group_impl.html", "classmlx_1_1core_1_1distributed_1_1detail_1_1_group_impl" ]
] ],
[ "AllGather", "classmlx_1_1core_1_1distributed_1_1_all_gather.html", "classmlx_1_1core_1_1distributed_1_1_all_gather" ],
[ "AllReduce", "classmlx_1_1core_1_1distributed_1_1_all_reduce.html", "classmlx_1_1core_1_1distributed_1_1_all_reduce" ],
[ "DistPrimitive", "classmlx_1_1core_1_1distributed_1_1_dist_primitive.html", "classmlx_1_1core_1_1distributed_1_1_dist_primitive" ],
[ "Group", "structmlx_1_1core_1_1distributed_1_1_group.html", "structmlx_1_1core_1_1distributed_1_1_group" ],
[ "Recv", "classmlx_1_1core_1_1distributed_1_1_recv.html", "classmlx_1_1core_1_1distributed_1_1_recv" ],
[ "Send", "classmlx_1_1core_1_1distributed_1_1_send.html", "classmlx_1_1core_1_1distributed_1_1_send" ]
] ],
[ "fast", "namespacemlx_1_1core_1_1fast.html", [
[ "AffineQuantize", "classmlx_1_1core_1_1fast_1_1_affine_quantize.html", "classmlx_1_1core_1_1fast_1_1_affine_quantize" ],
[ "Custom", "classmlx_1_1core_1_1fast_1_1_custom.html", "classmlx_1_1core_1_1fast_1_1_custom" ],
[ "CustomKernel", "classmlx_1_1core_1_1fast_1_1_custom_kernel.html", "classmlx_1_1core_1_1fast_1_1_custom_kernel" ],
[ "CustomKernelShapeInfo", "structmlx_1_1core_1_1fast_1_1_custom_kernel_shape_info.html", "structmlx_1_1core_1_1fast_1_1_custom_kernel_shape_info" ],
[ "LayerNorm", "classmlx_1_1core_1_1fast_1_1_layer_norm.html", "classmlx_1_1core_1_1fast_1_1_layer_norm" ],
[ "LayerNormVJP", "classmlx_1_1core_1_1fast_1_1_layer_norm_v_j_p.html", "classmlx_1_1core_1_1fast_1_1_layer_norm_v_j_p" ],
[ "RMSNorm", "classmlx_1_1core_1_1fast_1_1_r_m_s_norm.html", "classmlx_1_1core_1_1fast_1_1_r_m_s_norm" ],
[ "RMSNormVJP", "classmlx_1_1core_1_1fast_1_1_r_m_s_norm_v_j_p.html", "classmlx_1_1core_1_1fast_1_1_r_m_s_norm_v_j_p" ],
[ "RoPE", "classmlx_1_1core_1_1fast_1_1_ro_p_e.html", "classmlx_1_1core_1_1fast_1_1_ro_p_e" ],
[ "ScaledDotProductAttention", "classmlx_1_1core_1_1fast_1_1_scaled_dot_product_attention.html", "classmlx_1_1core_1_1fast_1_1_scaled_dot_product_attention" ]
] ],
[ "io", "namespacemlx_1_1core_1_1io.html", [
[ "FileWriter", "classmlx_1_1core_1_1io_1_1_file_writer.html", "classmlx_1_1core_1_1io_1_1_file_writer" ],
[ "ParallelFileReader", "classmlx_1_1core_1_1io_1_1_parallel_file_reader.html", "classmlx_1_1core_1_1io_1_1_parallel_file_reader" ],
[ "Reader", "classmlx_1_1core_1_1io_1_1_reader.html", "classmlx_1_1core_1_1io_1_1_reader" ],
[ "Writer", "classmlx_1_1core_1_1io_1_1_writer.html", "classmlx_1_1core_1_1io_1_1_writer" ]
] ],
[ "metal", "namespacemlx_1_1core_1_1metal.html", [
[ "Buffer", "classmlx_1_1core_1_1metal_1_1_buffer.html", "classmlx_1_1core_1_1metal_1_1_buffer" ],
[ "CommandEncoder", "structmlx_1_1core_1_1metal_1_1_command_encoder.html", "structmlx_1_1core_1_1metal_1_1_command_encoder" ],
[ "Device", "classmlx_1_1core_1_1metal_1_1_device.html", "classmlx_1_1core_1_1metal_1_1_device" ],
[ "DeviceStream", "structmlx_1_1core_1_1metal_1_1_device_stream.html", "structmlx_1_1core_1_1metal_1_1_device_stream" ],
[ "Fence", "structmlx_1_1core_1_1metal_1_1_fence.html", "structmlx_1_1core_1_1metal_1_1_fence" ],
[ "MetalAllocator", "classmlx_1_1core_1_1metal_1_1_metal_allocator.html", "classmlx_1_1core_1_1metal_1_1_metal_allocator" ],
[ "ResidencySet", "classmlx_1_1core_1_1metal_1_1_residency_set.html", "classmlx_1_1core_1_1metal_1_1_residency_set" ]
] ],
[ "random", "namespacemlx_1_1core_1_1random.html", [
[ "KeySequence", "classmlx_1_1core_1_1random_1_1_key_sequence.html", "classmlx_1_1core_1_1random_1_1_key_sequence" ]
] ],
[ "scheduler", "namespacemlx_1_1core_1_1scheduler.html", [
[ "Scheduler", "classmlx_1_1core_1_1scheduler_1_1_scheduler.html", "classmlx_1_1core_1_1scheduler_1_1_scheduler" ],
[ "StreamThread", "structmlx_1_1core_1_1scheduler_1_1_stream_thread.html", "structmlx_1_1core_1_1scheduler_1_1_stream_thread" ]
] ],
[ "_MLX_BFloat16", "structmlx_1_1core_1_1___m_l_x___b_float16.html", "structmlx_1_1core_1_1___m_l_x___b_float16" ],
[ "_MLX_Float16", "structmlx_1_1core_1_1___m_l_x___float16.html", "structmlx_1_1core_1_1___m_l_x___float16" ],
[ "Abs", "classmlx_1_1core_1_1_abs.html", "classmlx_1_1core_1_1_abs" ],
[ "Add", "classmlx_1_1core_1_1_add.html", "classmlx_1_1core_1_1_add" ],
[ "AddMM", "classmlx_1_1core_1_1_add_m_m.html", "classmlx_1_1core_1_1_add_m_m" ],
[ "Arange", "classmlx_1_1core_1_1_arange.html", "classmlx_1_1core_1_1_arange" ],
[ "ArcCos", "classmlx_1_1core_1_1_arc_cos.html", "classmlx_1_1core_1_1_arc_cos" ],
[ "ArcCosh", "classmlx_1_1core_1_1_arc_cosh.html", "classmlx_1_1core_1_1_arc_cosh" ],
[ "ArcSin", "classmlx_1_1core_1_1_arc_sin.html", "classmlx_1_1core_1_1_arc_sin" ],
[ "ArcSinh", "classmlx_1_1core_1_1_arc_sinh.html", "classmlx_1_1core_1_1_arc_sinh" ],
[ "ArcTan", "classmlx_1_1core_1_1_arc_tan.html", "classmlx_1_1core_1_1_arc_tan" ],
[ "ArcTan2", "classmlx_1_1core_1_1_arc_tan2.html", "classmlx_1_1core_1_1_arc_tan2" ],
[ "ArcTanh", "classmlx_1_1core_1_1_arc_tanh.html", "classmlx_1_1core_1_1_arc_tanh" ],
[ "ArgPartition", "classmlx_1_1core_1_1_arg_partition.html", "classmlx_1_1core_1_1_arg_partition" ],
[ "ArgReduce", "classmlx_1_1core_1_1_arg_reduce.html", "classmlx_1_1core_1_1_arg_reduce" ],
[ "ArgSort", "classmlx_1_1core_1_1_arg_sort.html", "classmlx_1_1core_1_1_arg_sort" ],
[ "array", "classmlx_1_1core_1_1array.html", "classmlx_1_1core_1_1array" ],
[ "AsStrided", "classmlx_1_1core_1_1_as_strided.html", "classmlx_1_1core_1_1_as_strided" ],
[ "AsType", "classmlx_1_1core_1_1_as_type.html", "classmlx_1_1core_1_1_as_type" ],
[ "BitwiseBinary", "classmlx_1_1core_1_1_bitwise_binary.html", "classmlx_1_1core_1_1_bitwise_binary" ],
[ "BlockMaskedMM", "classmlx_1_1core_1_1_block_masked_m_m.html", "classmlx_1_1core_1_1_block_masked_m_m" ],
[ "Broadcast", "classmlx_1_1core_1_1_broadcast.html", "classmlx_1_1core_1_1_broadcast" ],
[ "BroadcastAxes", "classmlx_1_1core_1_1_broadcast_axes.html", "classmlx_1_1core_1_1_broadcast_axes" ],
[ "Ceil", "classmlx_1_1core_1_1_ceil.html", "classmlx_1_1core_1_1_ceil" ],
[ "Cholesky", "classmlx_1_1core_1_1_cholesky.html", "classmlx_1_1core_1_1_cholesky" ],
[ "CommandEncoder", "structmlx_1_1core_1_1_command_encoder.html", "structmlx_1_1core_1_1_command_encoder" ],
[ "Compiled", "classmlx_1_1core_1_1_compiled.html", "classmlx_1_1core_1_1_compiled" ],
[ "complex128_t", "structmlx_1_1core_1_1complex128__t.html", "structmlx_1_1core_1_1complex128__t" ],
[ "complex64_t", "structmlx_1_1core_1_1complex64__t.html", "structmlx_1_1core_1_1complex64__t" ],
[ "Concatenate", "classmlx_1_1core_1_1_concatenate.html", "classmlx_1_1core_1_1_concatenate" ],
[ "Conjugate", "classmlx_1_1core_1_1_conjugate.html", "classmlx_1_1core_1_1_conjugate" ],
[ "Contiguous", "classmlx_1_1core_1_1_contiguous.html", "classmlx_1_1core_1_1_contiguous" ],
[ "ContiguousIterator", "structmlx_1_1core_1_1_contiguous_iterator.html", "structmlx_1_1core_1_1_contiguous_iterator" ],
[ "Convolution", "classmlx_1_1core_1_1_convolution.html", "classmlx_1_1core_1_1_convolution" ],
[ "Copy", "classmlx_1_1core_1_1_copy.html", "classmlx_1_1core_1_1_copy" ],
[ "Cos", "classmlx_1_1core_1_1_cos.html", "classmlx_1_1core_1_1_cos" ],
[ "Cosh", "classmlx_1_1core_1_1_cosh.html", "classmlx_1_1core_1_1_cosh" ],
[ "CustomTransforms", "classmlx_1_1core_1_1_custom_transforms.html", "classmlx_1_1core_1_1_custom_transforms" ],
[ "DefaultContiguousReduce", "structmlx_1_1core_1_1_default_contiguous_reduce.html", "structmlx_1_1core_1_1_default_contiguous_reduce" ],
[ "DefaultStridedReduce", "structmlx_1_1core_1_1_default_strided_reduce.html", "structmlx_1_1core_1_1_default_strided_reduce" ],
[ "Depends", "classmlx_1_1core_1_1_depends.html", "classmlx_1_1core_1_1_depends" ],
[ "Device", "structmlx_1_1core_1_1_device.html", "structmlx_1_1core_1_1_device" ],
[ "Divide", "classmlx_1_1core_1_1_divide.html", "classmlx_1_1core_1_1_divide" ],
[ "DivMod", "classmlx_1_1core_1_1_div_mod.html", "classmlx_1_1core_1_1_div_mod" ],
[ "Dtype", "structmlx_1_1core_1_1_dtype.html", "structmlx_1_1core_1_1_dtype" ],
[ "DynamicSlice", "classmlx_1_1core_1_1_dynamic_slice.html", "classmlx_1_1core_1_1_dynamic_slice" ],
[ "DynamicSliceUpdate", "classmlx_1_1core_1_1_dynamic_slice_update.html", "classmlx_1_1core_1_1_dynamic_slice_update" ],
[ "Eigh", "classmlx_1_1core_1_1_eigh.html", "classmlx_1_1core_1_1_eigh" ],
[ "Equal", "classmlx_1_1core_1_1_equal.html", "classmlx_1_1core_1_1_equal" ],
[ "Erf", "classmlx_1_1core_1_1_erf.html", "classmlx_1_1core_1_1_erf" ],
[ "ErfInv", "classmlx_1_1core_1_1_erf_inv.html", "classmlx_1_1core_1_1_erf_inv" ],
[ "Event", "classmlx_1_1core_1_1_event.html", "classmlx_1_1core_1_1_event" ],
[ "Exp", "classmlx_1_1core_1_1_exp.html", "classmlx_1_1core_1_1_exp" ],
[ "ExpandDims", "classmlx_1_1core_1_1_expand_dims.html", "classmlx_1_1core_1_1_expand_dims" ],
[ "Expm1", "classmlx_1_1core_1_1_expm1.html", "classmlx_1_1core_1_1_expm1" ],
[ "FFT", "classmlx_1_1core_1_1_f_f_t.html", "classmlx_1_1core_1_1_f_f_t" ],
[ "finfo", "structmlx_1_1core_1_1finfo.html", "structmlx_1_1core_1_1finfo" ],
[ "Flatten", "classmlx_1_1core_1_1_flatten.html", "classmlx_1_1core_1_1_flatten" ],
[ "Floor", "classmlx_1_1core_1_1_floor.html", "classmlx_1_1core_1_1_floor" ],
[ "Full", "classmlx_1_1core_1_1_full.html", "classmlx_1_1core_1_1_full" ],
[ "FunctionExporter", "structmlx_1_1core_1_1_function_exporter.html", "structmlx_1_1core_1_1_function_exporter" ],
[ "Gather", "classmlx_1_1core_1_1_gather.html", "classmlx_1_1core_1_1_gather" ],
[ "GatherMM", "classmlx_1_1core_1_1_gather_m_m.html", "classmlx_1_1core_1_1_gather_m_m" ],
[ "GatherQMM", "classmlx_1_1core_1_1_gather_q_m_m.html", "classmlx_1_1core_1_1_gather_q_m_m" ],
[ "Greater", "classmlx_1_1core_1_1_greater.html", "classmlx_1_1core_1_1_greater" ],
[ "GreaterEqual", "classmlx_1_1core_1_1_greater_equal.html", "classmlx_1_1core_1_1_greater_equal" ],
[ "Hadamard", "classmlx_1_1core_1_1_hadamard.html", "classmlx_1_1core_1_1_hadamard" ],
[ "Imag", "classmlx_1_1core_1_1_imag.html", "classmlx_1_1core_1_1_imag" ],
[ "ImportedFunction", "structmlx_1_1core_1_1_imported_function.html", "structmlx_1_1core_1_1_imported_function" ],
[ "Inverse", "classmlx_1_1core_1_1_inverse.html", "classmlx_1_1core_1_1_inverse" ],
[ "JitCompiler", "classmlx_1_1core_1_1_jit_compiler.html", "classmlx_1_1core_1_1_jit_compiler" ],
[ "Less", "classmlx_1_1core_1_1_less.html", "classmlx_1_1core_1_1_less" ],
[ "LessEqual", "classmlx_1_1core_1_1_less_equal.html", "classmlx_1_1core_1_1_less_equal" ],
[ "Load", "classmlx_1_1core_1_1_load.html", "classmlx_1_1core_1_1_load" ],
[ "Log", "classmlx_1_1core_1_1_log.html", "classmlx_1_1core_1_1_log" ],
[ "Log1p", "classmlx_1_1core_1_1_log1p.html", "classmlx_1_1core_1_1_log1p" ],
[ "LogAddExp", "classmlx_1_1core_1_1_log_add_exp.html", "classmlx_1_1core_1_1_log_add_exp" ],
[ "LogicalAnd", "classmlx_1_1core_1_1_logical_and.html", "classmlx_1_1core_1_1_logical_and" ],
[ "LogicalNot", "classmlx_1_1core_1_1_logical_not.html", "classmlx_1_1core_1_1_logical_not" ],
[ "LogicalOr", "classmlx_1_1core_1_1_logical_or.html", "classmlx_1_1core_1_1_logical_or" ],
[ "Matmul", "classmlx_1_1core_1_1_matmul.html", "classmlx_1_1core_1_1_matmul" ],
[ "Maximum", "classmlx_1_1core_1_1_maximum.html", "classmlx_1_1core_1_1_maximum" ],
[ "Minimum", "classmlx_1_1core_1_1_minimum.html", "classmlx_1_1core_1_1_minimum" ],
[ "Multiply", "classmlx_1_1core_1_1_multiply.html", "classmlx_1_1core_1_1_multiply" ],
[ "Negative", "classmlx_1_1core_1_1_negative.html", "classmlx_1_1core_1_1_negative" ],
[ "NodeNamer", "structmlx_1_1core_1_1_node_namer.html", "structmlx_1_1core_1_1_node_namer" ],
[ "NotEqual", "classmlx_1_1core_1_1_not_equal.html", "classmlx_1_1core_1_1_not_equal" ],
[ "NumberOfElements", "classmlx_1_1core_1_1_number_of_elements.html", "classmlx_1_1core_1_1_number_of_elements" ],
[ "numeric_limits", "structmlx_1_1core_1_1numeric__limits.html", null ],
[ "numeric_limits< bfloat16_t >", "structmlx_1_1core_1_1numeric__limits.html", "structmlx_1_1core_1_1numeric__limits" ],
[ "numeric_limits< float >", "structmlx_1_1core_1_1numeric__limits.html", null ],
[ "numeric_limits< float16_t >", "structmlx_1_1core_1_1numeric__limits.html", "structmlx_1_1core_1_1numeric__limits" ],
[ "Pad", "classmlx_1_1core_1_1_pad.html", "classmlx_1_1core_1_1_pad" ],
[ "Partition", "classmlx_1_1core_1_1_partition.html", "classmlx_1_1core_1_1_partition" ],
[ "Power", "classmlx_1_1core_1_1_power.html", "classmlx_1_1core_1_1_power" ],
[ "Primitive", "classmlx_1_1core_1_1_primitive.html", "classmlx_1_1core_1_1_primitive" ],
[ "PrintFormatter", "structmlx_1_1core_1_1_print_formatter.html", "structmlx_1_1core_1_1_print_formatter" ],
[ "QRF", "classmlx_1_1core_1_1_q_r_f.html", "classmlx_1_1core_1_1_q_r_f" ],
[ "QuantizedMatmul", "classmlx_1_1core_1_1_quantized_matmul.html", "classmlx_1_1core_1_1_quantized_matmul" ],
[ "RandomBits", "classmlx_1_1core_1_1_random_bits.html", "classmlx_1_1core_1_1_random_bits" ],
[ "Real", "classmlx_1_1core_1_1_real.html", "classmlx_1_1core_1_1_real" ],
[ "Reduce", "classmlx_1_1core_1_1_reduce.html", "classmlx_1_1core_1_1_reduce" ],
[ "ReductionPlan", "structmlx_1_1core_1_1_reduction_plan.html", "structmlx_1_1core_1_1_reduction_plan" ],
[ "Remainder", "classmlx_1_1core_1_1_remainder.html", "classmlx_1_1core_1_1_remainder" ],
[ "Reshape", "classmlx_1_1core_1_1_reshape.html", "classmlx_1_1core_1_1_reshape" ],
[ "Round", "classmlx_1_1core_1_1_round.html", "classmlx_1_1core_1_1_round" ],
[ "Scan", "classmlx_1_1core_1_1_scan.html", "classmlx_1_1core_1_1_scan" ],
[ "Scatter", "classmlx_1_1core_1_1_scatter.html", "classmlx_1_1core_1_1_scatter" ],
[ "Select", "classmlx_1_1core_1_1_select.html", "classmlx_1_1core_1_1_select" ],
[ "Sigmoid", "classmlx_1_1core_1_1_sigmoid.html", "classmlx_1_1core_1_1_sigmoid" ],
[ "Sign", "classmlx_1_1core_1_1_sign.html", "classmlx_1_1core_1_1_sign" ],
[ "Sin", "classmlx_1_1core_1_1_sin.html", "classmlx_1_1core_1_1_sin" ],
[ "Sinh", "classmlx_1_1core_1_1_sinh.html", "classmlx_1_1core_1_1_sinh" ],
[ "Slice", "classmlx_1_1core_1_1_slice.html", "classmlx_1_1core_1_1_slice" ],
[ "SliceUpdate", "classmlx_1_1core_1_1_slice_update.html", "classmlx_1_1core_1_1_slice_update" ],
[ "Softmax", "classmlx_1_1core_1_1_softmax.html", "classmlx_1_1core_1_1_softmax" ],
[ "Sort", "classmlx_1_1core_1_1_sort.html", "classmlx_1_1core_1_1_sort" ],
[ "Split", "classmlx_1_1core_1_1_split.html", "classmlx_1_1core_1_1_split" ],
[ "Sqrt", "classmlx_1_1core_1_1_sqrt.html", "classmlx_1_1core_1_1_sqrt" ],
[ "Square", "classmlx_1_1core_1_1_square.html", "classmlx_1_1core_1_1_square" ],
[ "Squeeze", "classmlx_1_1core_1_1_squeeze.html", "classmlx_1_1core_1_1_squeeze" ],
[ "StopGradient", "classmlx_1_1core_1_1_stop_gradient.html", "classmlx_1_1core_1_1_stop_gradient" ],
[ "Stream", "structmlx_1_1core_1_1_stream.html", "structmlx_1_1core_1_1_stream" ],
[ "StreamContext", "structmlx_1_1core_1_1_stream_context.html", "structmlx_1_1core_1_1_stream_context" ],
[ "Subtract", "classmlx_1_1core_1_1_subtract.html", "classmlx_1_1core_1_1_subtract" ],
[ "SVD", "classmlx_1_1core_1_1_s_v_d.html", "classmlx_1_1core_1_1_s_v_d" ],
[ "Tan", "classmlx_1_1core_1_1_tan.html", "classmlx_1_1core_1_1_tan" ],
[ "Tanh", "classmlx_1_1core_1_1_tanh.html", "classmlx_1_1core_1_1_tanh" ],
[ "Transpose", "classmlx_1_1core_1_1_transpose.html", "classmlx_1_1core_1_1_transpose" ],
[ "TypeToDtype", "structmlx_1_1core_1_1_type_to_dtype.html", "structmlx_1_1core_1_1_type_to_dtype" ],
[ "UnaryPrimitive", "classmlx_1_1core_1_1_unary_primitive.html", "classmlx_1_1core_1_1_unary_primitive" ],
[ "Unflatten", "classmlx_1_1core_1_1_unflatten.html", "classmlx_1_1core_1_1_unflatten" ],
[ "View", "classmlx_1_1core_1_1_view.html", "classmlx_1_1core_1_1_view" ]
] ],
[ "steel", "namespacemlx_1_1steel.html", [
[ "AccumHelper", "structmlx_1_1steel_1_1_accum_helper.html", "structmlx_1_1steel_1_1_accum_helper" ],
[ "AttnParams", "structmlx_1_1steel_1_1_attn_params.html", "structmlx_1_1steel_1_1_attn_params" ],
[ "BaseMMAFrag", "structmlx_1_1steel_1_1_base_m_m_a_frag.html", null ],
[ "BaseMMAFrag< T, 8, 8 >", "structmlx_1_1steel_1_1_base_m_m_a_frag.html", "structmlx_1_1steel_1_1_base_m_m_a_frag" ],
[ "BlockLoader", "structmlx_1_1steel_1_1_block_loader.html", "structmlx_1_1steel_1_1_block_loader" ],
[ "BlockLoaderT", "structmlx_1_1steel_1_1_block_loader_t.html", "structmlx_1_1steel_1_1_block_loader_t" ],
[ "BlockMMA", "structmlx_1_1steel_1_1_block_m_m_a.html", "structmlx_1_1steel_1_1_block_m_m_a" ],
[ "BlockSwizzle", "structmlx_1_1steel_1_1_block_swizzle.html", "structmlx_1_1steel_1_1_block_swizzle" ],
[ "ChannelHelper", "structmlx_1_1steel_1_1_channel_helper.html", "structmlx_1_1steel_1_1_channel_helper" ],
[ "ChannelHelper< 1 >", "structmlx_1_1steel_1_1_channel_helper.html", "structmlx_1_1steel_1_1_channel_helper" ],
[ "ChannelHelper< 2 >", "structmlx_1_1steel_1_1_channel_helper.html", "structmlx_1_1steel_1_1_channel_helper" ],
[ "ChannelHelper< 3 >", "structmlx_1_1steel_1_1_channel_helper.html", "structmlx_1_1steel_1_1_channel_helper" ],
[ "ChannelHelper< 4 >", "structmlx_1_1steel_1_1_channel_helper.html", "structmlx_1_1steel_1_1_channel_helper" ],
[ "Conv2DGeneralBaseInfo", "structmlx_1_1steel_1_1_conv2_d_general_base_info.html", "structmlx_1_1steel_1_1_conv2_d_general_base_info" ],
[ "Conv2DGeneralJumpParams", "structmlx_1_1steel_1_1_conv2_d_general_jump_params.html", "structmlx_1_1steel_1_1_conv2_d_general_jump_params" ],
[ "Conv2DInputBlockLoaderGeneral", "structmlx_1_1steel_1_1_conv2_d_input_block_loader_general.html", "structmlx_1_1steel_1_1_conv2_d_input_block_loader_general" ],
[ "Conv2DInputBlockLoaderLargeFilter", "structmlx_1_1steel_1_1_conv2_d_input_block_loader_large_filter.html", "structmlx_1_1steel_1_1_conv2_d_input_block_loader_large_filter" ],
[ "Conv2DInputBlockLoaderSmallChannels", "structmlx_1_1steel_1_1_conv2_d_input_block_loader_small_channels.html", "structmlx_1_1steel_1_1_conv2_d_input_block_loader_small_channels" ],
[ "Conv2DInputBlockLoaderSmallFilter", "structmlx_1_1steel_1_1_conv2_d_input_block_loader_small_filter.html", "structmlx_1_1steel_1_1_conv2_d_input_block_loader_small_filter" ],
[ "Conv2DWeightBlockLoader", "structmlx_1_1steel_1_1_conv2_d_weight_block_loader.html", "structmlx_1_1steel_1_1_conv2_d_weight_block_loader" ],
[ "Conv2DWeightBlockLoaderGeneral", "structmlx_1_1steel_1_1_conv2_d_weight_block_loader_general.html", "structmlx_1_1steel_1_1_conv2_d_weight_block_loader_general" ],
[ "Conv2DWeightBlockLoaderSmallChannels", "structmlx_1_1steel_1_1_conv2_d_weight_block_loader_small_channels.html", "structmlx_1_1steel_1_1_conv2_d_weight_block_loader_small_channels" ],
[ "CShape", "structmlx_1_1steel_1_1_c_shape.html", "structmlx_1_1steel_1_1_c_shape" ],
[ "GEMMAddMMParams", "structmlx_1_1steel_1_1_g_e_m_m_add_m_m_params.html", "structmlx_1_1steel_1_1_g_e_m_m_add_m_m_params" ],
[ "GEMMKernel", "structmlx_1_1steel_1_1_g_e_m_m_kernel.html", "structmlx_1_1steel_1_1_g_e_m_m_kernel" ],
[ "GEMMParams", "structmlx_1_1steel_1_1_g_e_m_m_params.html", "structmlx_1_1steel_1_1_g_e_m_m_params" ],
[ "GEMMSpiltKParams", "structmlx_1_1steel_1_1_g_e_m_m_spilt_k_params.html", "structmlx_1_1steel_1_1_g_e_m_m_spilt_k_params" ],
[ "ImplicitGemmConv2DParams", "structmlx_1_1steel_1_1_implicit_gemm_conv2_d_params.html", "structmlx_1_1steel_1_1_implicit_gemm_conv2_d_params" ],
[ "integral_constant", "structmlx_1_1steel_1_1integral__constant.html", "structmlx_1_1steel_1_1integral__constant" ],
[ "is_integral", "structmlx_1_1steel_1_1is__integral.html", null ],
[ "is_integral< integral_constant< T, v > >", "structmlx_1_1steel_1_1is__integral.html", null ],
[ "Layout2D", "structmlx_1_1steel_1_1_layout2_d.html", "structmlx_1_1steel_1_1_layout2_d" ],
[ "LoopAlignment", "structmlx_1_1steel_1_1_loop_alignment.html", null ],
[ "MMATile", "structmlx_1_1steel_1_1_m_m_a_tile.html", "structmlx_1_1steel_1_1_m_m_a_tile" ],
[ "Shape2D", "structmlx_1_1steel_1_1_shape2_d.html", "structmlx_1_1steel_1_1_shape2_d" ],
[ "TransformAdd", "structmlx_1_1steel_1_1_transform_add.html", "structmlx_1_1steel_1_1_transform_add" ],
[ "TransformAxpby", "structmlx_1_1steel_1_1_transform_axpby.html", "structmlx_1_1steel_1_1_transform_axpby" ],
[ "TransformNone", "structmlx_1_1steel_1_1_transform_none.html", "structmlx_1_1steel_1_1_transform_none" ]
] ]
] ],
[ "pocketfft", "namespacepocketfft.html", [
[ "detail", "namespacepocketfft_1_1detail.html", [
[ "threading", "namespacepocketfft_1_1detail_1_1threading.html", [
[ "aligned_allocator", "structpocketfft_1_1detail_1_1threading_1_1aligned__allocator.html", "structpocketfft_1_1detail_1_1threading_1_1aligned__allocator" ],
[ "concurrent_queue", "classpocketfft_1_1detail_1_1threading_1_1concurrent__queue.html", "classpocketfft_1_1detail_1_1threading_1_1concurrent__queue" ],
[ "latch", "classpocketfft_1_1detail_1_1threading_1_1latch.html", "classpocketfft_1_1detail_1_1threading_1_1latch" ],
[ "thread_pool", "classpocketfft_1_1detail_1_1threading_1_1thread__pool.html", "classpocketfft_1_1detail_1_1threading_1_1thread__pool" ]
] ],
[ "add_vec", "structpocketfft_1_1detail_1_1add__vec.html", "structpocketfft_1_1detail_1_1add__vec" ],
[ "add_vec< cmplx< T > >", "structpocketfft_1_1detail_1_1add__vec.html", "structpocketfft_1_1detail_1_1add__vec" ],
[ "arr", "classpocketfft_1_1detail_1_1arr.html", "classpocketfft_1_1detail_1_1arr" ],
[ "arr_info", "classpocketfft_1_1detail_1_1arr__info.html", "classpocketfft_1_1detail_1_1arr__info" ],
[ "cfftp", "classpocketfft_1_1detail_1_1cfftp.html", "classpocketfft_1_1detail_1_1cfftp" ],
[ "cmplx", "structpocketfft_1_1detail_1_1cmplx.html", "structpocketfft_1_1detail_1_1cmplx" ],
[ "cndarr", "classpocketfft_1_1detail_1_1cndarr.html", "classpocketfft_1_1detail_1_1cndarr" ],
[ "ExecC2C", "structpocketfft_1_1detail_1_1_exec_c2_c.html", "structpocketfft_1_1detail_1_1_exec_c2_c" ],
[ "ExecDcst", "structpocketfft_1_1detail_1_1_exec_dcst.html", "structpocketfft_1_1detail_1_1_exec_dcst" ],
[ "ExecHartley", "structpocketfft_1_1detail_1_1_exec_hartley.html", "structpocketfft_1_1detail_1_1_exec_hartley" ],
[ "ExecR2R", "structpocketfft_1_1detail_1_1_exec_r2_r.html", "structpocketfft_1_1detail_1_1_exec_r2_r" ],
[ "fftblue", "classpocketfft_1_1detail_1_1fftblue.html", "classpocketfft_1_1detail_1_1fftblue" ],
[ "multi_iter", "classpocketfft_1_1detail_1_1multi__iter.html", "classpocketfft_1_1detail_1_1multi__iter" ],
[ "ndarr", "classpocketfft_1_1detail_1_1ndarr.html", "classpocketfft_1_1detail_1_1ndarr" ],
[ "pocketfft_c", "classpocketfft_1_1detail_1_1pocketfft__c.html", "classpocketfft_1_1detail_1_1pocketfft__c" ],
[ "pocketfft_r", "classpocketfft_1_1detail_1_1pocketfft__r.html", "classpocketfft_1_1detail_1_1pocketfft__r" ],
[ "rev_iter", "classpocketfft_1_1detail_1_1rev__iter.html", "classpocketfft_1_1detail_1_1rev__iter" ],
[ "rfftp", "classpocketfft_1_1detail_1_1rfftp.html", "classpocketfft_1_1detail_1_1rfftp" ],
[ "simple_iter", "classpocketfft_1_1detail_1_1simple__iter.html", "classpocketfft_1_1detail_1_1simple__iter" ],
[ "sincos_2pibyn", "classpocketfft_1_1detail_1_1sincos__2pibyn.html", "classpocketfft_1_1detail_1_1sincos__2pibyn" ],
[ "T_dcst23", "classpocketfft_1_1detail_1_1_t__dcst23.html", "classpocketfft_1_1detail_1_1_t__dcst23" ],
[ "T_dcst4", "classpocketfft_1_1detail_1_1_t__dcst4.html", "classpocketfft_1_1detail_1_1_t__dcst4" ],
[ "T_dct1", "classpocketfft_1_1detail_1_1_t__dct1.html", "classpocketfft_1_1detail_1_1_t__dct1" ],
[ "T_dst1", "classpocketfft_1_1detail_1_1_t__dst1.html", "classpocketfft_1_1detail_1_1_t__dst1" ],
[ "util", "structpocketfft_1_1detail_1_1util.html", "structpocketfft_1_1detail_1_1util" ],
[ "VLEN", "structpocketfft_1_1detail_1_1_v_l_e_n.html", "structpocketfft_1_1detail_1_1_v_l_e_n" ],
[ "VTYPE", "structpocketfft_1_1detail_1_1_v_t_y_p_e.html", null ]
] ]
] ],
[ "_MLX_BFloat16", "struct___m_l_x___b_float16.html", "struct___m_l_x___b_float16" ],
[ "_NoMask", "struct___no_mask.html", "struct___no_mask" ],
[ "Abs", "struct_abs.html", "struct_abs" ],
[ "Add", "struct_add.html", "struct_add" ],
[ "And", "struct_and.html", null ],
[ "ArcCos", "struct_arc_cos.html", "struct_arc_cos" ],
[ "ArcCosh", "struct_arc_cosh.html", "struct_arc_cosh" ],
[ "ArcSin", "struct_arc_sin.html", "struct_arc_sin" ],
[ "ArcSinh", "struct_arc_sinh.html", "struct_arc_sinh" ],
[ "ArcTan", "struct_arc_tan.html", "struct_arc_tan" ],
[ "ArcTan2", "struct_arc_tan2.html", "struct_arc_tan2" ],
[ "ArcTanh", "struct_arc_tanh.html", "struct_arc_tanh" ],
[ "BitwiseAnd", "struct_bitwise_and.html", "struct_bitwise_and" ],
[ "BitwiseOr", "struct_bitwise_or.html", "struct_bitwise_or" ],
[ "BitwiseXor", "struct_bitwise_xor.html", "struct_bitwise_xor" ],
[ "BlockMergeSort", "struct_block_merge_sort.html", "struct_block_merge_sort" ],
[ "bool4_or_uint", "unionbool4__or__uint.html", "unionbool4__or__uint" ],
[ "Ceil", "struct_ceil.html", "struct_ceil" ],
[ "complex64_t", "structcomplex64__t.html", "structcomplex64__t" ],
[ "ConditionalType", "struct_conditional_type.html", "struct_conditional_type" ],
[ "ConditionalType< true, T, U >", "struct_conditional_type.html", "struct_conditional_type" ],
[ "Conjugate", "struct_conjugate.html", "struct_conjugate" ],
[ "Cos", "struct_cos.html", "struct_cos" ],
[ "Cosh", "struct_cosh.html", "struct_cosh" ],
[ "CumMax", "struct_cum_max.html", "struct_cum_max" ],
[ "CumMin", "struct_cum_min.html", "struct_cum_min" ],
[ "CumProd", "struct_cum_prod.html", null ],
[ "CumProd< bool >", "struct_cum_prod.html", "struct_cum_prod" ],
[ "CumSum", "struct_cum_sum.html", null ],
[ "Divide", "struct_divide.html", "struct_divide" ],
[ "DivMod", "struct_div_mod.html", "struct_div_mod" ],
[ "DivOp", "struct_div_op.html", "struct_div_op" ],
[ "Equal", "struct_equal.html", "struct_equal" ],
[ "Erf", "struct_erf.html", "struct_erf" ],
[ "ErfInv", "struct_erf_inv.html", "struct_erf_inv" ],
[ "Exp", "struct_exp.html", "struct_exp" ],
[ "Expm1", "struct_expm1.html", "struct_expm1" ],
[ "ExpSubOp", "struct_exp_sub_op.html", "struct_exp_sub_op" ],
[ "Floor", "struct_floor.html", "struct_floor" ],
[ "FloorDivide", "struct_floor_divide.html", "struct_floor_divide" ],
[ "GEMVKernel", "struct_g_e_m_v_kernel.html", "struct_g_e_m_v_kernel" ],
[ "GEMVTKernel", "struct_g_e_m_v_t_kernel.html", "struct_g_e_m_v_t_kernel" ],
[ "Greater", "struct_greater.html", "struct_greater" ],
[ "GreaterEqual", "struct_greater_equal.html", "struct_greater_equal" ],
[ "Imag", "struct_imag.html", "struct_imag" ],
[ "Indices", "struct_indices.html", "struct_indices" ],
[ "KernelMergeSort", "struct_kernel_merge_sort.html", "struct_kernel_merge_sort" ],
[ "KernelMultiBlockMergeSort", "struct_kernel_multi_block_merge_sort.html", "struct_kernel_multi_block_merge_sort" ],
[ "LeftShift", "struct_left_shift.html", "struct_left_shift" ],
[ "Less", "struct_less.html", "struct_less" ],
[ "LessEqual", "struct_less_equal.html", "struct_less_equal" ],
[ "LessThan", "struct_less_than.html", "struct_less_than" ],
[ "Limits", "struct_limits.html", "struct_limits" ],
[ "Limits< bfloat16_t >", "struct_limits.html", "struct_limits" ],
[ "Limits< bool >", "struct_limits.html", "struct_limits" ],
[ "Limits< complex64_t >", "struct_limits.html", "struct_limits" ],
[ "Limits< float >", "struct_limits.html", "struct_limits" ],
[ "Limits< half >", "struct_limits.html", "struct_limits" ],
[ "Limits< int16_t >", "struct_limits.html", "struct_limits" ],
[ "Limits< int32_t >", "struct_limits.html", "struct_limits" ],
[ "Limits< int64_t >", "struct_limits.html", "struct_limits" ],
[ "Limits< int8_t >", "struct_limits.html", "struct_limits" ],
[ "Limits< uint16_t >", "struct_limits.html", "struct_limits" ],
[ "Limits< uint32_t >", "struct_limits.html", "struct_limits" ],
[ "Limits< uint64_t >", "struct_limits.html", "struct_limits" ],
[ "Limits< uint8_t >", "struct_limits.html", "struct_limits" ],
[ "Log", "struct_log.html", "struct_log" ],
[ "Log10", "struct_log10.html", "struct_log10" ],
[ "Log1p", "struct_log1p.html", "struct_log1p" ],
[ "Log2", "struct_log2.html", "struct_log2" ],
[ "LogAddExp", "struct_log_add_exp.html", "struct_log_add_exp" ],
[ "LogicalAnd", "struct_logical_and.html", "struct_logical_and" ],
[ "LogicalNot", "struct_logical_not.html", "struct_logical_not" ],
[ "LogicalOr", "struct_logical_or.html", "struct_logical_or" ],
[ "LoopedElemToLoc", "struct_looped_elem_to_loc.html", "struct_looped_elem_to_loc" ],
[ "LoopedElemToLoc< 1, OffsetT, false >", "struct_looped_elem_to_loc.html", "struct_looped_elem_to_loc" ],
[ "LoopedElemToLoc< 1, OffsetT, true >", "struct_looped_elem_to_loc.html", "struct_looped_elem_to_loc" ],
[ "Max", "struct_max.html", "struct_max" ],
[ "Maximum", "struct_maximum.html", "struct_maximum" ],
[ "MaxOp", "struct_max_op.html", "struct_max_op" ],
[ "Min", "struct_min.html", null ],
[ "Minimum", "struct_minimum.html", "struct_minimum" ],
[ "mlx_atomic", "structmlx__atomic.html", "structmlx__atomic" ],
[ "mlx_atomic< T, enable_if_t< is_metal_atomic< T > > >", "structmlx__atomic.html", "structmlx__atomic" ],
[ "MLXConvParams", "struct_m_l_x_conv_params.html", "struct_m_l_x_conv_params" ],
[ "MulOp", "struct_mul_op.html", "struct_mul_op" ],
[ "Multiply", "struct_multiply.html", "struct_multiply" ],
[ "NaNEqual", "struct_na_n_equal.html", "struct_na_n_equal" ],
[ "Negative", "struct_negative.html", "struct_negative" ],
[ "None", "struct_none.html", "struct_none" ],
[ "NotEqual", "struct_not_equal.html", "struct_not_equal" ],
[ "Or", "struct_or.html", null ],
[ "Power", "struct_power.html", "struct_power" ],
[ "Prod", "struct_prod.html", null ],
[ "QuantizedBlockLoader", "struct_quantized_block_loader.html", "struct_quantized_block_loader" ],
[ "ReadWriter", "struct_read_writer.html", "struct_read_writer" ],
[ "Real", "struct_real.html", "struct_real" ],
[ "Remainder", "struct_remainder.html", "struct_remainder" ],
[ "RightShift", "struct_right_shift.html", "struct_right_shift" ],
[ "Round", "struct_round.html", "struct_round" ],
[ "Rsqrt", "struct_rsqrt.html", "struct_rsqrt" ],
[ "ScaleOp", "struct_scale_op.html", "struct_scale_op" ],
[ "Select", "struct_select.html", "struct_select" ],
[ "Sigmoid", "struct_sigmoid.html", "struct_sigmoid" ],
[ "Sign", "struct_sign.html", "struct_sign" ],
[ "Sin", "struct_sin.html", "struct_sin" ],
[ "Sinh", "struct_sinh.html", "struct_sinh" ],
[ "Sqrt", "struct_sqrt.html", "struct_sqrt" ],
[ "Square", "struct_square.html", "struct_square" ],
[ "SubOp", "struct_sub_op.html", "struct_sub_op" ],
[ "Subtract", "struct_subtract.html", "struct_subtract" ],
[ "Sum", "struct_sum.html", null ],
[ "SumOp", "struct_sum_op.html", "struct_sum_op" ],
[ "Tan", "struct_tan.html", "struct_tan" ],
[ "Tanh", "struct_tanh.html", "struct_tanh" ],
[ "ThreadPool", "class_thread_pool.html", "class_thread_pool" ],
[ "ThreadSort", "struct_thread_sort.html", "struct_thread_sort" ],
[ "TransformScale", "struct_transform_scale.html", "struct_transform_scale" ]
];
+48 -29
View File
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.12.0"/>
<meta name="generator" content="Doxygen 1.13.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MLX: mlx/array.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -11,11 +11,18 @@
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
@@ -28,12 +35,24 @@
<div id="projectname">MLX
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.12.0 -->
<!-- Generated by Doxygen 1.13.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
@@ -44,22 +63,23 @@ var searchBox = new SearchBox("searchBox", "search/",'.html');
$(function() { codefold.init(0); });
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search',false);
$(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){ initResizable(false); });
$(function(){initNavTree('array_8h.html',''); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
@@ -81,12 +101,6 @@ $(function(){ initResizable(false); });
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li> </ul>
</div>
</div><!-- top -->
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#nested-classes">Classes</a> &#124;
@@ -129,17 +143,19 @@ Namespaces</h2></td></tr>
Typedefs</h2></td></tr>
<tr class="memitem:af834c1e18d6f11c4f233a2e1ce814a4b" id="r_af834c1e18d6f11c4f233a2e1ce814a4b"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacemlx_1_1core.html#af834c1e18d6f11c4f233a2e1ce814a4b">mlx::core::Deleter</a> = std::function&lt;void(<a class="el" href="classmlx_1_1core_1_1allocator_1_1_buffer.html">allocator::Buffer</a>)&gt;</td></tr>
<tr class="separator:af834c1e18d6f11c4f233a2e1ce814a4b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9be5b57d393e66169279cf521813af9b" id="r_a9be5b57d393e66169279cf521813af9b"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacemlx_1_1core.html#a9be5b57d393e66169279cf521813af9b">mlx::core::Shape</a> = std::vector&lt;int32_t&gt;</td></tr>
<tr class="separator:a9be5b57d393e66169279cf521813af9b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aca6e505f52ea1464d9c2c09f9f445d62" id="r_aca6e505f52ea1464d9c2c09f9f445d62"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacemlx_1_1core.html#aca6e505f52ea1464d9c2c09f9f445d62">mlx::core::Strides</a> = std::vector&lt;size_t&gt;</td></tr>
<tr class="separator:aca6e505f52ea1464d9c2c09f9f445d62"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a167cdec84c0ae62b5b299c617384346e" id="r_a167cdec84c0ae62b5b299c617384346e"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacemlx_1_1core.html#a167cdec84c0ae62b5b299c617384346e">mlx::core::ShapeElem</a> = int32_t</td></tr>
<tr class="separator:a167cdec84c0ae62b5b299c617384346e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a694e23f2d59606643728ad443d621416" id="r_a694e23f2d59606643728ad443d621416"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacemlx_1_1core.html#a694e23f2d59606643728ad443d621416">mlx::core::Shape</a> = std::vector&lt;<a class="el" href="namespacemlx_1_1core.html#a167cdec84c0ae62b5b299c617384346e">ShapeElem</a>&gt;</td></tr>
<tr class="separator:a694e23f2d59606643728ad443d621416"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a79939016d0972ded7db37130da2a8b5c" id="r_a79939016d0972ded7db37130da2a8b5c"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacemlx_1_1core.html#a79939016d0972ded7db37130da2a8b5c">mlx::core::Strides</a> = std::vector&lt;int64_t&gt;</td></tr>
<tr class="separator:a79939016d0972ded7db37130da2a8b5c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af89751d79339f3e4d9318ea97d64d114" id="r_af89751d79339f3e4d9318ea97d64d114"><td class="memTemplParams" colspan="2">template&lt;typename... T&gt; </td></tr>
<tr class="memitem:af89751d79339f3e4d9318ea97d64d114"><td class="memTemplItemLeft" align="right" valign="top">using&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacemlx_1_1core.html#af89751d79339f3e4d9318ea97d64d114">mlx::core::enable_for_arrays_t</a> = typename std::enable_if_t&lt;<a class="el" href="namespacemlx_1_1core.html#a94c1057929b390e5613304afa16dfbda">is_arrays_v</a>&lt;T...&gt;&gt;</td></tr>
<tr class="separator:af89751d79339f3e4d9318ea97d64d114"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="var-members" name="var-members"></a>
Variables</h2></td></tr>
<tr class="memitem:a01b0d64a75dfa2e95d6c7b5c53d708af" id="r_a01b0d64a75dfa2e95d6c7b5c53d708af"><td class="memTemplParams" colspan="2">template&lt;typename T &gt; </td></tr>
<tr class="memitem:a01b0d64a75dfa2e95d6c7b5c53d708af" id="r_a01b0d64a75dfa2e95d6c7b5c53d708af"><td class="memTemplParams" colspan="2">template&lt;typename T&gt; </td></tr>
<tr class="memitem:a01b0d64a75dfa2e95d6c7b5c53d708af"><td class="memTemplItemLeft" align="right" valign="top">constexpr bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacemlx_1_1core.html#a01b0d64a75dfa2e95d6c7b5c53d708af">mlx::core::is_array_v</a></td></tr>
<tr class="separator:a01b0d64a75dfa2e95d6c7b5c53d708af"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a94c1057929b390e5613304afa16dfbda" id="r_a94c1057929b390e5613304afa16dfbda"><td class="memTemplParams" colspan="2">template&lt;typename... T&gt; </td></tr>
@@ -147,10 +163,13 @@ Variables</h2></td></tr>
<tr class="separator:a94c1057929b390e5613304afa16dfbda"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0
</small></address>
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="array_8h.html">array.h</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.1 </li>
</ul>
</div>
</body>
</html>
+14
View File
@@ -0,0 +1,14 @@
var array_8h =
[
[ "mlx::core::array", "classmlx_1_1core_1_1array.html", "classmlx_1_1core_1_1array" ],
[ "mlx::core::array::ArrayIterator", "structmlx_1_1core_1_1array_1_1_array_iterator.html", "structmlx_1_1core_1_1array_1_1_array_iterator" ],
[ "mlx::core::array::Data", "structmlx_1_1core_1_1array_1_1_data.html", "structmlx_1_1core_1_1array_1_1_data" ],
[ "mlx::core::array::Flags", "structmlx_1_1core_1_1array_1_1_flags.html", "structmlx_1_1core_1_1array_1_1_flags" ],
[ "mlx::core::Deleter", "namespacemlx_1_1core.html#af834c1e18d6f11c4f233a2e1ce814a4b", null ],
[ "mlx::core::enable_for_arrays_t", "namespacemlx_1_1core.html#af89751d79339f3e4d9318ea97d64d114", null ],
[ "mlx::core::Shape", "namespacemlx_1_1core.html#a694e23f2d59606643728ad443d621416", null ],
[ "mlx::core::ShapeElem", "namespacemlx_1_1core.html#a167cdec84c0ae62b5b299c617384346e", null ],
[ "mlx::core::Strides", "namespacemlx_1_1core.html#a79939016d0972ded7db37130da2a8b5c", null ],
[ "mlx::core::is_array_v", "namespacemlx_1_1core.html#a01b0d64a75dfa2e95d6c7b5c53d708af", null ],
[ "mlx::core::is_arrays_v", "namespacemlx_1_1core.html#a94c1057929b390e5613304afa16dfbda", null ]
];
+714 -694
View File
File diff suppressed because it is too large Load Diff
+65 -48
View File
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.12.0"/>
<meta name="generator" content="Doxygen 1.13.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MLX: mlx/backend/metal/kernels/atomic.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -11,11 +11,18 @@
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
@@ -28,12 +35,24 @@
<div id="projectname">MLX
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.12.0 -->
<!-- Generated by Doxygen 1.13.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
@@ -44,22 +63,23 @@ var searchBox = new SearchBox("searchBox", "search/",'.html');
$(function() { codefold.init(0); });
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search',false);
$(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){ initResizable(false); });
$(function(){initNavTree('atomic_8h.html',''); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
@@ -81,12 +101,6 @@ $(function(){ initResizable(false); });
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_d0c977ea65824390717cdb7efc36c157.html">metal</a></li><li class="navelem"><a class="el" href="dir_70a37effa88bcbd6b791977fa1e64356.html">kernels</a></li> </ul>
</div>
</div><!-- top -->
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#nested-classes">Classes</a> &#124;
@@ -104,36 +118,36 @@ $(function(){ initResizable(false); });
Classes</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structmlx__atomic.html">mlx_atomic&lt; T, typename &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structmlx__atomic_3_01_t_00_01enable__if__t_3_01is__metal__atomic_3_01_t_01_4_01_4_01_4.html">mlx_atomic&lt; T, enable_if_t&lt; is_metal_atomic&lt; T &gt; &gt; &gt;</a></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structmlx__atomic.html">mlx_atomic&lt; T, enable_if_t&lt; is_metal_atomic&lt; T &gt; &gt; &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:a253a4e8c2c5768a069e2791b627dfc99" id="r_a253a4e8c2c5768a069e2791b627dfc99"><td class="memTemplParams" colspan="2">template&lt;typename T , enable_if_t&lt; <a class="el" href="#a91a8bdcae647947a83c6689d7f252d24">is_metal_atomic</a>&lt; T &gt;, bool &gt; = true&gt; </td></tr>
<tr class="memitem:a253a4e8c2c5768a069e2791b627dfc99" id="r_a253a4e8c2c5768a069e2791b627dfc99"><td class="memTemplParams" colspan="2">template&lt;typename T, enable_if_t&lt; <a class="el" href="#a91a8bdcae647947a83c6689d7f252d24">is_metal_atomic</a>&lt; T &gt;, bool &gt; = true&gt; </td></tr>
<tr class="memitem:a253a4e8c2c5768a069e2791b627dfc99"><td class="memTemplItemLeft" align="right" valign="top">METAL_FUNC T&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="#a253a4e8c2c5768a069e2791b627dfc99">mlx_atomic_load_explicit</a> (device <a class="el" href="structmlx__atomic.html">mlx_atomic</a>&lt; T &gt; *object, size_t offset)</td></tr>
<tr class="separator:a253a4e8c2c5768a069e2791b627dfc99"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0ae453140b0819a4c02f265334de98c0" id="r_a0ae453140b0819a4c02f265334de98c0"><td class="memTemplParams" colspan="2">template&lt;typename T , enable_if_t&lt; <a class="el" href="#a91a8bdcae647947a83c6689d7f252d24">is_metal_atomic</a>&lt; T &gt;, bool &gt; = true&gt; </td></tr>
<tr class="memitem:a0ae453140b0819a4c02f265334de98c0" id="r_a0ae453140b0819a4c02f265334de98c0"><td class="memTemplParams" colspan="2">template&lt;typename T, enable_if_t&lt; <a class="el" href="#a91a8bdcae647947a83c6689d7f252d24">is_metal_atomic</a>&lt; T &gt;, bool &gt; = true&gt; </td></tr>
<tr class="memitem:a0ae453140b0819a4c02f265334de98c0"><td class="memTemplItemLeft" align="right" valign="top">METAL_FUNC void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="#a0ae453140b0819a4c02f265334de98c0">mlx_atomic_store_explicit</a> (device <a class="el" href="structmlx__atomic.html">mlx_atomic</a>&lt; T &gt; *object, T val, size_t offset)</td></tr>
<tr class="separator:a0ae453140b0819a4c02f265334de98c0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a253e3c870c0ddc7c28ab2f6ca2c3eae5" id="r_a253e3c870c0ddc7c28ab2f6ca2c3eae5"><td class="memTemplParams" colspan="2">template&lt;typename T , enable_if_t&lt; <a class="el" href="#a91a8bdcae647947a83c6689d7f252d24">is_metal_atomic</a>&lt; T &gt;, bool &gt; = true&gt; </td></tr>
<tr class="memitem:a253e3c870c0ddc7c28ab2f6ca2c3eae5" id="r_a253e3c870c0ddc7c28ab2f6ca2c3eae5"><td class="memTemplParams" colspan="2">template&lt;typename T, enable_if_t&lt; <a class="el" href="#a91a8bdcae647947a83c6689d7f252d24">is_metal_atomic</a>&lt; T &gt;, bool &gt; = true&gt; </td></tr>
<tr class="memitem:a253e3c870c0ddc7c28ab2f6ca2c3eae5"><td class="memTemplItemLeft" align="right" valign="top">METAL_FUNC void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="#a253e3c870c0ddc7c28ab2f6ca2c3eae5">mlx_atomic_fetch_and_explicit</a> (device <a class="el" href="structmlx__atomic.html">mlx_atomic</a>&lt; T &gt; *object, T val, size_t offset)</td></tr>
<tr class="separator:a253e3c870c0ddc7c28ab2f6ca2c3eae5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab7391f197001471e4788312bdb6ab37a" id="r_ab7391f197001471e4788312bdb6ab37a"><td class="memTemplParams" colspan="2">template&lt;typename T , enable_if_t&lt; <a class="el" href="#a91a8bdcae647947a83c6689d7f252d24">is_metal_atomic</a>&lt; T &gt;, bool &gt; = true&gt; </td></tr>
<tr class="memitem:ab7391f197001471e4788312bdb6ab37a" id="r_ab7391f197001471e4788312bdb6ab37a"><td class="memTemplParams" colspan="2">template&lt;typename T, enable_if_t&lt; <a class="el" href="#a91a8bdcae647947a83c6689d7f252d24">is_metal_atomic</a>&lt; T &gt;, bool &gt; = true&gt; </td></tr>
<tr class="memitem:ab7391f197001471e4788312bdb6ab37a"><td class="memTemplItemLeft" align="right" valign="top">METAL_FUNC void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="#ab7391f197001471e4788312bdb6ab37a">mlx_atomic_fetch_or_explicit</a> (device <a class="el" href="structmlx__atomic.html">mlx_atomic</a>&lt; T &gt; *object, T val, size_t offset)</td></tr>
<tr class="separator:ab7391f197001471e4788312bdb6ab37a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2ec33dca0039bd944d73d1c2b378cc19" id="r_a2ec33dca0039bd944d73d1c2b378cc19"><td class="memTemplParams" colspan="2">template&lt;typename T , enable_if_t&lt; <a class="el" href="#a91a8bdcae647947a83c6689d7f252d24">is_metal_atomic</a>&lt; T &gt;, bool &gt; = true&gt; </td></tr>
<tr class="memitem:a2ec33dca0039bd944d73d1c2b378cc19" id="r_a2ec33dca0039bd944d73d1c2b378cc19"><td class="memTemplParams" colspan="2">template&lt;typename T, enable_if_t&lt; <a class="el" href="#a91a8bdcae647947a83c6689d7f252d24">is_metal_atomic</a>&lt; T &gt;, bool &gt; = true&gt; </td></tr>
<tr class="memitem:a2ec33dca0039bd944d73d1c2b378cc19"><td class="memTemplItemLeft" align="right" valign="top">METAL_FUNC void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="#a2ec33dca0039bd944d73d1c2b378cc19">mlx_atomic_fetch_min_explicit</a> (device <a class="el" href="structmlx__atomic.html">mlx_atomic</a>&lt; T &gt; *object, T val, size_t offset)</td></tr>
<tr class="separator:a2ec33dca0039bd944d73d1c2b378cc19"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac480f2b459a8ad9095cee353e152d00c" id="r_ac480f2b459a8ad9095cee353e152d00c"><td class="memTemplParams" colspan="2">template&lt;typename T , enable_if_t&lt; <a class="el" href="#a91a8bdcae647947a83c6689d7f252d24">is_metal_atomic</a>&lt; T &gt;, bool &gt; = true&gt; </td></tr>
<tr class="memitem:ac480f2b459a8ad9095cee353e152d00c" id="r_ac480f2b459a8ad9095cee353e152d00c"><td class="memTemplParams" colspan="2">template&lt;typename T, enable_if_t&lt; <a class="el" href="#a91a8bdcae647947a83c6689d7f252d24">is_metal_atomic</a>&lt; T &gt;, bool &gt; = true&gt; </td></tr>
<tr class="memitem:ac480f2b459a8ad9095cee353e152d00c"><td class="memTemplItemLeft" align="right" valign="top">METAL_FUNC void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="#ac480f2b459a8ad9095cee353e152d00c">mlx_atomic_fetch_max_explicit</a> (device <a class="el" href="structmlx__atomic.html">mlx_atomic</a>&lt; T &gt; *object, T val, size_t offset)</td></tr>
<tr class="separator:ac480f2b459a8ad9095cee353e152d00c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aad448d9e06e001700b65ca8317216a3b" id="r_aad448d9e06e001700b65ca8317216a3b"><td class="memTemplParams" colspan="2">template&lt;typename T , enable_if_t&lt; <a class="el" href="#a91a8bdcae647947a83c6689d7f252d24">is_metal_atomic</a>&lt; T &gt;, bool &gt; = true&gt; </td></tr>
<tr class="memitem:aad448d9e06e001700b65ca8317216a3b" id="r_aad448d9e06e001700b65ca8317216a3b"><td class="memTemplParams" colspan="2">template&lt;typename T, enable_if_t&lt; <a class="el" href="#a91a8bdcae647947a83c6689d7f252d24">is_metal_atomic</a>&lt; T &gt;, bool &gt; = true&gt; </td></tr>
<tr class="memitem:aad448d9e06e001700b65ca8317216a3b"><td class="memTemplItemLeft" align="right" valign="top">METAL_FUNC void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="#aad448d9e06e001700b65ca8317216a3b">mlx_atomic_fetch_add_explicit</a> (device <a class="el" href="structmlx__atomic.html">mlx_atomic</a>&lt; T &gt; *object, T val, size_t offset)</td></tr>
<tr class="separator:aad448d9e06e001700b65ca8317216a3b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adfdbea60436f14f1af9ce36e2a0a77a3" id="r_adfdbea60436f14f1af9ce36e2a0a77a3"><td class="memTemplParams" colspan="2">template&lt;typename T , enable_if_t&lt; <a class="el" href="#a91a8bdcae647947a83c6689d7f252d24">is_metal_atomic</a>&lt; T &gt;, bool &gt; = true&gt; </td></tr>
<tr class="memitem:adfdbea60436f14f1af9ce36e2a0a77a3" id="r_adfdbea60436f14f1af9ce36e2a0a77a3"><td class="memTemplParams" colspan="2">template&lt;typename T, enable_if_t&lt; <a class="el" href="#a91a8bdcae647947a83c6689d7f252d24">is_metal_atomic</a>&lt; T &gt;, bool &gt; = true&gt; </td></tr>
<tr class="memitem:adfdbea60436f14f1af9ce36e2a0a77a3"><td class="memTemplItemLeft" align="right" valign="top">METAL_FUNC void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="#adfdbea60436f14f1af9ce36e2a0a77a3">mlx_atomic_fetch_mul_explicit</a> (device <a class="el" href="structmlx__atomic.html">mlx_atomic</a>&lt; T &gt; *object, T val, size_t offset)</td></tr>
<tr class="separator:adfdbea60436f14f1af9ce36e2a0a77a3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad7f32327ff66354cfa2f0cfdac79316f" id="r_ad7f32327ff66354cfa2f0cfdac79316f"><td class="memTemplParams" colspan="2">template&lt;typename T , enable_if_t&lt; <a class="el" href="#a91a8bdcae647947a83c6689d7f252d24">is_metal_atomic</a>&lt; T &gt;, bool &gt; = true&gt; </td></tr>
<tr class="memitem:ad7f32327ff66354cfa2f0cfdac79316f" id="r_ad7f32327ff66354cfa2f0cfdac79316f"><td class="memTemplParams" colspan="2">template&lt;typename T, enable_if_t&lt; <a class="el" href="#a91a8bdcae647947a83c6689d7f252d24">is_metal_atomic</a>&lt; T &gt;, bool &gt; = true&gt; </td></tr>
<tr class="memitem:ad7f32327ff66354cfa2f0cfdac79316f"><td class="memTemplItemLeft" align="right" valign="top">METAL_FUNC bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="#ad7f32327ff66354cfa2f0cfdac79316f">mlx_atomic_compare_exchange_weak_explicit</a> (device <a class="el" href="structmlx__atomic.html">mlx_atomic</a>&lt; T &gt; *object, thread T *expected, T val, size_t offset)</td></tr>
<tr class="separator:ad7f32327ff66354cfa2f0cfdac79316f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab7d1dc49f319f239b7ee0b7c72976dd0" id="r_ab7d1dc49f319f239b7ee0b7c72976dd0"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
@@ -142,13 +156,13 @@ Functions</h2></td></tr>
<tr class="memitem:a1dce2abfa16417122c4d2bf261129ae4" id="r_a1dce2abfa16417122c4d2bf261129ae4"><td class="memItemLeft" align="right" valign="top">template&lt;&gt; </td></tr>
<tr class="memitem:a1dce2abfa16417122c4d2bf261129ae4"><td class="memTemplItemLeft" align="right" valign="top">METAL_FUNC void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="#a1dce2abfa16417122c4d2bf261129ae4">mlx_atomic_fetch_max_explicit&lt; float &gt;</a> (device <a class="el" href="structmlx__atomic.html">mlx_atomic</a>&lt; float &gt; *object, float val, size_t offset)</td></tr>
<tr class="separator:a1dce2abfa16417122c4d2bf261129ae4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa8f47b2e9b95d4b00ad51f08b070deb5" id="r_aa8f47b2e9b95d4b00ad51f08b070deb5"><td class="memTemplParams" colspan="2">template&lt;typename T , enable_if_t&lt;!<a class="el" href="#a91a8bdcae647947a83c6689d7f252d24">is_metal_atomic</a>&lt; T &gt;, bool &gt; = true&gt; </td></tr>
<tr class="memitem:aa8f47b2e9b95d4b00ad51f08b070deb5" id="r_aa8f47b2e9b95d4b00ad51f08b070deb5"><td class="memTemplParams" colspan="2">template&lt;typename T, enable_if_t&lt;!<a class="el" href="#a91a8bdcae647947a83c6689d7f252d24">is_metal_atomic</a>&lt; T &gt;, bool &gt; = true&gt; </td></tr>
<tr class="memitem:aa8f47b2e9b95d4b00ad51f08b070deb5"><td class="memTemplItemLeft" align="right" valign="top">METAL_FUNC bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="#aa8f47b2e9b95d4b00ad51f08b070deb5">mlx_atomic_compare_exchange_weak_explicit</a> (device <a class="el" href="structmlx__atomic.html">mlx_atomic</a>&lt; T &gt; *object, thread uint *expected, uint val, size_t offset)</td></tr>
<tr class="separator:aa8f47b2e9b95d4b00ad51f08b070deb5"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="var-members" name="var-members"></a>
Variables</h2></td></tr>
<tr class="memitem:a91a8bdcae647947a83c6689d7f252d24" id="r_a91a8bdcae647947a83c6689d7f252d24"><td class="memTemplParams" colspan="2">template&lt;typename T &gt; </td></tr>
<tr class="memitem:a91a8bdcae647947a83c6689d7f252d24" id="r_a91a8bdcae647947a83c6689d7f252d24"><td class="memTemplParams" colspan="2">template&lt;typename T&gt; </td></tr>
<tr class="memitem:a91a8bdcae647947a83c6689d7f252d24"><td class="memTemplItemLeft" align="right" valign="top">constexpr constant bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="#a91a8bdcae647947a83c6689d7f252d24">is_metal_atomic</a></td></tr>
<tr class="separator:a91a8bdcae647947a83c6689d7f252d24"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
@@ -159,7 +173,7 @@ Variables</h2></td></tr>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename T , enable_if_t&lt; <a class="el" href="#a91a8bdcae647947a83c6689d7f252d24">is_metal_atomic</a>&lt; T &gt;, bool &gt; = true&gt; </div>
template&lt;typename T, enable_if_t&lt; <a class="el" href="#a91a8bdcae647947a83c6689d7f252d24">is_metal_atomic</a>&lt; T &gt;, bool &gt; = true&gt; </div>
<table class="memname">
<tr>
<td class="memname">METAL_FUNC bool mlx_atomic_compare_exchange_weak_explicit </td>
@@ -192,7 +206,7 @@ template&lt;typename T , enable_if_t&lt; <a class="el" href="#a91a8bdcae647947a8
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename T , enable_if_t&lt;!<a class="el" href="#a91a8bdcae647947a83c6689d7f252d24">is_metal_atomic</a>&lt; T &gt;, bool &gt; = true&gt; </div>
template&lt;typename T, enable_if_t&lt;!<a class="el" href="#a91a8bdcae647947a83c6689d7f252d24">is_metal_atomic</a>&lt; T &gt;, bool &gt; = true&gt; </div>
<table class="memname">
<tr>
<td class="memname">METAL_FUNC bool mlx_atomic_compare_exchange_weak_explicit </td>
@@ -225,7 +239,7 @@ template&lt;typename T , enable_if_t&lt;!<a class="el" href="#a91a8bdcae647947a8
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename T , enable_if_t&lt; <a class="el" href="#a91a8bdcae647947a83c6689d7f252d24">is_metal_atomic</a>&lt; T &gt;, bool &gt; = true&gt; </div>
template&lt;typename T, enable_if_t&lt; <a class="el" href="#a91a8bdcae647947a83c6689d7f252d24">is_metal_atomic</a>&lt; T &gt;, bool &gt; = true&gt; </div>
<table class="memname">
<tr>
<td class="memname">METAL_FUNC void mlx_atomic_fetch_add_explicit </td>
@@ -253,7 +267,7 @@ template&lt;typename T , enable_if_t&lt; <a class="el" href="#a91a8bdcae647947a8
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename T , enable_if_t&lt; <a class="el" href="#a91a8bdcae647947a83c6689d7f252d24">is_metal_atomic</a>&lt; T &gt;, bool &gt; = true&gt; </div>
template&lt;typename T, enable_if_t&lt; <a class="el" href="#a91a8bdcae647947a83c6689d7f252d24">is_metal_atomic</a>&lt; T &gt;, bool &gt; = true&gt; </div>
<table class="memname">
<tr>
<td class="memname">METAL_FUNC void mlx_atomic_fetch_and_explicit </td>
@@ -281,7 +295,7 @@ template&lt;typename T , enable_if_t&lt; <a class="el" href="#a91a8bdcae647947a8
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename T , enable_if_t&lt; <a class="el" href="#a91a8bdcae647947a83c6689d7f252d24">is_metal_atomic</a>&lt; T &gt;, bool &gt; = true&gt; </div>
template&lt;typename T, enable_if_t&lt; <a class="el" href="#a91a8bdcae647947a83c6689d7f252d24">is_metal_atomic</a>&lt; T &gt;, bool &gt; = true&gt; </div>
<table class="memname">
<tr>
<td class="memname">METAL_FUNC void mlx_atomic_fetch_max_explicit </td>
@@ -337,7 +351,7 @@ template&lt;&gt; </div>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename T , enable_if_t&lt; <a class="el" href="#a91a8bdcae647947a83c6689d7f252d24">is_metal_atomic</a>&lt; T &gt;, bool &gt; = true&gt; </div>
template&lt;typename T, enable_if_t&lt; <a class="el" href="#a91a8bdcae647947a83c6689d7f252d24">is_metal_atomic</a>&lt; T &gt;, bool &gt; = true&gt; </div>
<table class="memname">
<tr>
<td class="memname">METAL_FUNC void mlx_atomic_fetch_min_explicit </td>
@@ -393,7 +407,7 @@ template&lt;&gt; </div>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename T , enable_if_t&lt; <a class="el" href="#a91a8bdcae647947a83c6689d7f252d24">is_metal_atomic</a>&lt; T &gt;, bool &gt; = true&gt; </div>
template&lt;typename T, enable_if_t&lt; <a class="el" href="#a91a8bdcae647947a83c6689d7f252d24">is_metal_atomic</a>&lt; T &gt;, bool &gt; = true&gt; </div>
<table class="memname">
<tr>
<td class="memname">METAL_FUNC void mlx_atomic_fetch_mul_explicit </td>
@@ -421,7 +435,7 @@ template&lt;typename T , enable_if_t&lt; <a class="el" href="#a91a8bdcae647947a8
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename T , enable_if_t&lt; <a class="el" href="#a91a8bdcae647947a83c6689d7f252d24">is_metal_atomic</a>&lt; T &gt;, bool &gt; = true&gt; </div>
template&lt;typename T, enable_if_t&lt; <a class="el" href="#a91a8bdcae647947a83c6689d7f252d24">is_metal_atomic</a>&lt; T &gt;, bool &gt; = true&gt; </div>
<table class="memname">
<tr>
<td class="memname">METAL_FUNC void mlx_atomic_fetch_or_explicit </td>
@@ -449,7 +463,7 @@ template&lt;typename T , enable_if_t&lt; <a class="el" href="#a91a8bdcae647947a8
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename T , enable_if_t&lt; <a class="el" href="#a91a8bdcae647947a83c6689d7f252d24">is_metal_atomic</a>&lt; T &gt;, bool &gt; = true&gt; </div>
template&lt;typename T, enable_if_t&lt; <a class="el" href="#a91a8bdcae647947a83c6689d7f252d24">is_metal_atomic</a>&lt; T &gt;, bool &gt; = true&gt; </div>
<table class="memname">
<tr>
<td class="memname">METAL_FUNC T mlx_atomic_load_explicit </td>
@@ -472,7 +486,7 @@ template&lt;typename T , enable_if_t&lt; <a class="el" href="#a91a8bdcae647947a8
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename T , enable_if_t&lt; <a class="el" href="#a91a8bdcae647947a83c6689d7f252d24">is_metal_atomic</a>&lt; T &gt;, bool &gt; = true&gt; </div>
template&lt;typename T, enable_if_t&lt; <a class="el" href="#a91a8bdcae647947a83c6689d7f252d24">is_metal_atomic</a>&lt; T &gt;, bool &gt; = true&gt; </div>
<table class="memname">
<tr>
<td class="memname">METAL_FUNC void mlx_atomic_store_explicit </td>
@@ -501,7 +515,7 @@ template&lt;typename T , enable_if_t&lt; <a class="el" href="#a91a8bdcae647947a8
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename T &gt; </div>
template&lt;typename T&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
@@ -512,7 +526,7 @@ template&lt;typename T &gt; </div>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
<span class="mlabels"><span class="mlabel constexpr">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
@@ -525,10 +539,13 @@ template&lt;typename T &gt; </div>
</div>
</div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0
</small></address>
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_d0c977ea65824390717cdb7efc36c157.html">metal</a></li><li class="navelem"><a class="el" href="dir_70a37effa88bcbd6b791977fa1e64356.html">kernels</a></li><li class="navelem"><a class="el" href="atomic_8h.html">atomic.h</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.1 </li>
</ul>
</div>
</body>
</html>
+18
View File
@@ -0,0 +1,18 @@
var atomic_8h =
[
[ "mlx_atomic< T, typename >", "structmlx__atomic.html", "structmlx__atomic" ],
[ "mlx_atomic< T, enable_if_t< is_metal_atomic< T > > >", "structmlx__atomic.html", "structmlx__atomic" ],
[ "mlx_atomic_compare_exchange_weak_explicit", "atomic_8h.html#ad7f32327ff66354cfa2f0cfdac79316f", null ],
[ "mlx_atomic_compare_exchange_weak_explicit", "atomic_8h.html#aa8f47b2e9b95d4b00ad51f08b070deb5", null ],
[ "mlx_atomic_fetch_add_explicit", "atomic_8h.html#aad448d9e06e001700b65ca8317216a3b", null ],
[ "mlx_atomic_fetch_and_explicit", "atomic_8h.html#a253e3c870c0ddc7c28ab2f6ca2c3eae5", null ],
[ "mlx_atomic_fetch_max_explicit", "atomic_8h.html#ac480f2b459a8ad9095cee353e152d00c", null ],
[ "mlx_atomic_fetch_max_explicit< float >", "atomic_8h.html#a1dce2abfa16417122c4d2bf261129ae4", null ],
[ "mlx_atomic_fetch_min_explicit", "atomic_8h.html#a2ec33dca0039bd944d73d1c2b378cc19", null ],
[ "mlx_atomic_fetch_min_explicit< float >", "atomic_8h.html#ab7d1dc49f319f239b7ee0b7c72976dd0", null ],
[ "mlx_atomic_fetch_mul_explicit", "atomic_8h.html#adfdbea60436f14f1af9ce36e2a0a77a3", null ],
[ "mlx_atomic_fetch_or_explicit", "atomic_8h.html#ab7391f197001471e4788312bdb6ab37a", null ],
[ "mlx_atomic_load_explicit", "atomic_8h.html#a253a4e8c2c5768a069e2791b627dfc99", null ],
[ "mlx_atomic_store_explicit", "atomic_8h.html#a0ae453140b0819a4c02f265334de98c0", null ],
[ "is_metal_atomic", "atomic_8h.html#a91a8bdcae647947a83c6689d7f252d24", null ]
];
+50 -35
View File
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.12.0"/>
<meta name="generator" content="Doxygen 1.13.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MLX: mlx/backend/metal/kernels/atomic.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -11,11 +11,18 @@
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
@@ -28,12 +35,24 @@
<div id="projectname">MLX
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.12.0 -->
<!-- Generated by Doxygen 1.13.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
@@ -44,22 +63,23 @@ var searchBox = new SearchBox("searchBox", "search/",'.html');
$(function() { codefold.init(0); });
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search',false);
$(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){ initResizable(false); });
$(function(){initNavTree('atomic_8h_source.html',''); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
@@ -81,12 +101,6 @@ $(function(){ initResizable(false); });
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_d0c977ea65824390717cdb7efc36c157.html">metal</a></li><li class="navelem"><a class="el" href="dir_70a37effa88bcbd6b791977fa1e64356.html">kernels</a></li> </ul>
</div>
</div><!-- top -->
<div id="doc-content">
<div class="header">
<div class="headertitle"><div class="title">atomic.h</div></div>
</div><!--header-->
@@ -99,7 +113,7 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="preprocessor">#include &lt;metal_stdlib&gt;</span></div>
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span> </div>
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="keyword">using namespace </span><a class="code hl_namespace" href="namespacemetal.html">metal</a>;</div>
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span> </div>
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span></div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment">// Atomic utils</span></div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span> </div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="preprocessor">#pragma METAL internals : enable</span></div>
@@ -121,11 +135,11 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> </div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="foldopen" id="foldopen00030" data-start="{" data-end="};">
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"><a class="line" href="structmlx__atomic_3_01_t_00_01enable__if__t_3_01is__metal__atomic_3_01_t_01_4_01_4_01_4.html"> 30</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structmlx__atomic.html">mlx_atomic</a>&lt;T, enable_if_t&lt;<a class="code hl_variable" href="atomic_8h.html#a91a8bdcae647947a83c6689d7f252d24">is_metal_atomic</a>&lt;T&gt;&gt;&gt; {</div>
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"><a class="line" href="structmlx__atomic_3_01_t_00_01enable__if__t_3_01is__metal__atomic_3_01_t_01_4_01_4_01_4.html#a8dbf729fcd8c4a16e41b546c7405543d"> 31</a></span> atomic&lt;T&gt; <a class="code hl_variable" href="structmlx__atomic_3_01_t_00_01enable__if__t_3_01is__metal__atomic_3_01_t_01_4_01_4_01_4.html#a8dbf729fcd8c4a16e41b546c7405543d">val</a>;</div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"><a class="line" href="structmlx__atomic.html"> 30</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structmlx__atomic.html">mlx_atomic</a>&lt;T, enable_if_t&lt;<a class="code hl_variable" href="atomic_8h.html#a91a8bdcae647947a83c6689d7f252d24">is_metal_atomic</a>&lt;T&gt;&gt;&gt; {</div>
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"><a class="line" href="structmlx__atomic.html#a8dbf729fcd8c4a16e41b546c7405543d"> 31</a></span> atomic&lt;T&gt; <a class="code hl_variable" href="structmlx__atomic.html#a8dbf729fcd8c4a16e41b546c7405543d">val</a>;</div>
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span>};</div>
</div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> </div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span></div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span><span class="comment">// Native metal atomics</span></div>
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> </div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, enable_if_t&lt;is_metal_atomic&lt;T&gt;, <span class="keywordtype">bool</span>&gt; = true&gt;</div>
@@ -256,7 +270,7 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> }</div>
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span>}</div>
</div>
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> </div>
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span></div>
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span><span class="comment">// Custom atomics</span></div>
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> </div>
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span><span class="keyword">namespace </span>{</div>
@@ -267,14 +281,14 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span><span class="keyword">union </span>uint_or_packed {</div>
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> T val[packing_size&lt;T&gt;];</div>
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> uint <a class="code hl_function" href="namespacemlx_1_1core_1_1random.html#abb895baa477f5a06b5f88e69245f1825">bits</a>;</div>
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> uint bits;</div>
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span>};</div>
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> </div>
<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> Op&gt;</div>
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span><span class="keyword">struct </span>mlx_atomic_update_helper {</div>
<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> uint operator()(uint_or_packed&lt;T&gt; init, T update, <span class="keywordtype">size_t</span> elem_offset) {</div>
<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> Op <a class="code hl_variable" href="common_2binary_8h.html#a70228731d29946574b238d21fb4b360c">op</a>;</div>
<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> <a class="code hl_function" href="namespacemlx_1_1core_1_1distributed.html#a33633c058c7ec82cca4f237243c6810d">init</a>.val[elem_offset] = <a class="code hl_variable" href="common_2binary_8h.html#a70228731d29946574b238d21fb4b360c">op</a>(update, <a class="code hl_function" href="namespacemlx_1_1core_1_1distributed.html#a33633c058c7ec82cca4f237243c6810d">init</a>.val[elem_offset]);</div>
<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> Op op;</div>
<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> <a class="code hl_function" href="namespacemlx_1_1core_1_1distributed.html#a33633c058c7ec82cca4f237243c6810d">init</a>.val[elem_offset] = op(update, <a class="code hl_function" href="namespacemlx_1_1core_1_1distributed.html#a33633c058c7ec82cca4f237243c6810d">init</a>.val[elem_offset]);</div>
<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespacemlx_1_1core_1_1distributed.html#a33633c058c7ec82cca4f237243c6810d">init</a>.bits;</div>
<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> }</div>
<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span>};</div>
@@ -470,21 +484,22 @@ $(function(){ initResizable(false); });
<div class="ttc" id="aatomic_8h_html_ac480f2b459a8ad9095cee353e152d00c"><div class="ttname"><a href="atomic_8h.html#ac480f2b459a8ad9095cee353e152d00c">mlx_atomic_fetch_max_explicit</a></div><div class="ttdeci">METAL_FUNC void mlx_atomic_fetch_max_explicit(device mlx_atomic&lt; T &gt; *object, T val, size_t offset)</div><div class="ttdef"><b>Definition</b> atomic.h:75</div></div>
<div class="ttc" id="aatomic_8h_html_ad7f32327ff66354cfa2f0cfdac79316f"><div class="ttname"><a href="atomic_8h.html#ad7f32327ff66354cfa2f0cfdac79316f">mlx_atomic_compare_exchange_weak_explicit</a></div><div class="ttdeci">METAL_FUNC bool mlx_atomic_compare_exchange_weak_explicit(device mlx_atomic&lt; T &gt; *object, thread T *expected, T val, size_t offset)</div><div class="ttdef"><b>Definition</b> atomic.h:102</div></div>
<div class="ttc" id="aatomic_8h_html_adfdbea60436f14f1af9ce36e2a0a77a3"><div class="ttname"><a href="atomic_8h.html#adfdbea60436f14f1af9ce36e2a0a77a3">mlx_atomic_fetch_mul_explicit</a></div><div class="ttdeci">METAL_FUNC void mlx_atomic_fetch_mul_explicit(device mlx_atomic&lt; T &gt; *object, T val, size_t offset)</div><div class="ttdef"><b>Definition</b> atomic.h:91</div></div>
<div class="ttc" id="acommon_2binary_8h_html_a70228731d29946574b238d21fb4b360c"><div class="ttname"><a href="common_2binary_8h.html#a70228731d29946574b238d21fb4b360c">op</a></div><div class="ttdeci">Op op</div><div class="ttdef"><b>Definition</b> binary.h:129</div></div>
<div class="ttc" id="agroup__ops_html_ga484eaa10d5e19a4ca46d3a9cd9fab600"><div class="ttname"><a href="group__ops.html#ga484eaa10d5e19a4ca46d3a9cd9fab600">mlx::core::identity</a></div><div class="ttdeci">array identity(int n, Dtype dtype, StreamOrDevice s={})</div><div class="ttdoc">Create a square matrix of shape (n,n) of zeros, and ones in the major diagonal.</div></div>
<div class="ttc" id="anamespacemetal_html"><div class="ttname"><a href="namespacemetal.html">metal</a></div><div class="ttdef"><b>Definition</b> bf16_math.h:226</div></div>
<div class="ttc" id="anamespacemetal_html_a6653b28c9473087141eddce39878d4d3"><div class="ttname"><a href="namespacemetal.html#a6653b28c9473087141eddce39878d4d3">metal::min</a></div><div class="ttdeci">METAL_FUNC bfloat16_t min(bfloat16_t x, bfloat16_t y)</div><div class="ttdef"><b>Definition</b> bf16_math.h:232</div></div>
<div class="ttc" id="anamespacemetal_html_a853c80479ab2264d9c4587c7bcac767b"><div class="ttname"><a href="namespacemetal.html#a853c80479ab2264d9c4587c7bcac767b">metal::max</a></div><div class="ttdeci">METAL_FUNC bfloat16_t max(bfloat16_t x, bfloat16_t y)</div><div class="ttdef"><b>Definition</b> bf16_math.h:232</div></div>
<div class="ttc" id="anamespacemlx_1_1core_1_1distributed_html_a33633c058c7ec82cca4f237243c6810d"><div class="ttname"><a href="namespacemlx_1_1core_1_1distributed.html#a33633c058c7ec82cca4f237243c6810d">mlx::core::distributed::init</a></div><div class="ttdeci">Group init(bool strict=false)</div><div class="ttdoc">Initialize the distributed backend and return the group containing all discoverable processes.</div></div>
<div class="ttc" id="anamespacemlx_1_1core_1_1random_html_abb895baa477f5a06b5f88e69245f1825"><div class="ttname"><a href="namespacemlx_1_1core_1_1random.html#abb895baa477f5a06b5f88e69245f1825">mlx::core::random::bits</a></div><div class="ttdeci">array bits(const std::vector&lt; int &gt; &amp;shape, int width, const std::optional&lt; array &gt; &amp;key=std::nullopt, StreamOrDevice s={})</div><div class="ttdoc">Generate an array with type uint32 filled with random bits.</div></div>
<div class="ttc" id="astructmlx__atomic_3_01_t_00_01enable__if__t_3_01is__metal__atomic_3_01_t_01_4_01_4_01_4_html_a8dbf729fcd8c4a16e41b546c7405543d"><div class="ttname"><a href="structmlx__atomic_3_01_t_00_01enable__if__t_3_01is__metal__atomic_3_01_t_01_4_01_4_01_4.html#a8dbf729fcd8c4a16e41b546c7405543d">mlx_atomic&lt; T, enable_if_t&lt; is_metal_atomic&lt; T &gt; &gt; &gt;::val</a></div><div class="ttdeci">atomic&lt; T &gt; val</div><div class="ttdef"><b>Definition</b> atomic.h:31</div></div>
<div class="ttc" id="astructmlx__atomic_html"><div class="ttname"><a href="structmlx__atomic.html">mlx_atomic</a></div><div class="ttdef"><b>Definition</b> atomic.h:25</div></div>
<div class="ttc" id="astructmlx__atomic_html_a6f6651b8dd8149917c50cd99b13c6747"><div class="ttname"><a href="structmlx__atomic.html#a6f6651b8dd8149917c50cd99b13c6747">mlx_atomic::val</a></div><div class="ttdeci">atomic&lt; uint &gt; val</div><div class="ttdef"><b>Definition</b> atomic.h:26</div></div>
<div class="ttc" id="astructmlx__atomic_html_a8dbf729fcd8c4a16e41b546c7405543d"><div class="ttname"><a href="structmlx__atomic.html#a8dbf729fcd8c4a16e41b546c7405543d">mlx_atomic&lt; T, enable_if_t&lt; is_metal_atomic&lt; T &gt; &gt; &gt;::val</a></div><div class="ttdeci">atomic&lt; T &gt; val</div><div class="ttdef"><b>Definition</b> atomic.h:31</div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0
</small></address>
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_d0c977ea65824390717cdb7efc36c157.html">metal</a></li><li class="navelem"><a class="el" href="dir_70a37effa88bcbd6b791977fa1e64356.html">kernels</a></li><li class="navelem"><a class="el" href="atomic_8h.html">atomic.h</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.1 </li>
</ul>
</div>
</body>
</html>
+41 -24
View File
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.12.0"/>
<meta name="generator" content="Doxygen 1.13.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MLX: mlx/backend/metal/kernels/steel/attn/loader.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -11,11 +11,18 @@
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
@@ -28,12 +35,24 @@
<div id="projectname">MLX
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.12.0 -->
<!-- Generated by Doxygen 1.13.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
@@ -44,22 +63,23 @@ var searchBox = new SearchBox("searchBox", "search/",'.html');
$(function() { codefold.init(0); });
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search',false);
$(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){ initResizable(false); });
$(function(){initNavTree('attn_2loader_8h.html',''); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
@@ -81,12 +101,6 @@ $(function(){ initResizable(false); });
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_d0c977ea65824390717cdb7efc36c157.html">metal</a></li><li class="navelem"><a class="el" href="dir_70a37effa88bcbd6b791977fa1e64356.html">kernels</a></li><li class="navelem"><a class="el" href="dir_76215a6c54e2b67053e723fc2395583c.html">steel</a></li><li class="navelem"><a class="el" href="dir_e1756c7634b0c14aead026895ad71c6d.html">attn</a></li> </ul>
</div>
</div><!-- top -->
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#nested-classes">Classes</a> &#124;
@@ -117,10 +131,13 @@ Namespaces</h2></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0
</small></address>
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_d0c977ea65824390717cdb7efc36c157.html">metal</a></li><li class="navelem"><a class="el" href="dir_70a37effa88bcbd6b791977fa1e64356.html">kernels</a></li><li class="navelem"><a class="el" href="dir_76215a6c54e2b67053e723fc2395583c.html">steel</a></li><li class="navelem"><a class="el" href="dir_e1756c7634b0c14aead026895ad71c6d.html">attn</a></li><li class="navelem"><a class="el" href="attn_2loader_8h.html">loader.h</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.1 </li>
</ul>
</div>
</body>
</html>
+7
View File
@@ -0,0 +1,7 @@
var attn_2loader_8h =
[
[ "mlx::steel::BlockLoader< T, BROWS, BCOLS, dst_ld, reduction_dim, tgp_size, alignment, n_reads, TCOLS, TROWS >", "structmlx_1_1steel_1_1_block_loader.html", "structmlx_1_1steel_1_1_block_loader" ],
[ "mlx::steel::BlockLoader< T, BROWS, BCOLS, dst_ld, reduction_dim, tgp_size, alignment, n_reads, TCOLS, TROWS >::ReadVector", "structmlx_1_1steel_1_1_block_loader_1_1_read_vector.html", "structmlx_1_1steel_1_1_block_loader_1_1_read_vector" ],
[ "mlx::steel::CShape< R, C >", "structmlx_1_1steel_1_1_c_shape.html", "structmlx_1_1steel_1_1_c_shape" ],
[ "mlx::steel::BlockLoaderT< T, BROWS, BCOLS, kDstStrRow, kDstStrCol, reduction_dim, tgp_size, n_reads, TCOLS, TROWS >", "structmlx_1_1steel_1_1_block_loader_t.html", "structmlx_1_1steel_1_1_block_loader_t" ]
];
+71 -55
View File
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.12.0"/>
<meta name="generator" content="Doxygen 1.13.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MLX: mlx/backend/metal/kernels/steel/attn/loader.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -11,11 +11,18 @@
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
@@ -28,12 +35,24 @@
<div id="projectname">MLX
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.12.0 -->
<!-- Generated by Doxygen 1.13.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
@@ -44,22 +63,23 @@ var searchBox = new SearchBox("searchBox", "search/",'.html');
$(function() { codefold.init(0); });
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search',false);
$(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){ initResizable(false); });
$(function(){initNavTree('attn_2loader_8h_source.html',''); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
@@ -81,12 +101,6 @@ $(function(){ initResizable(false); });
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_d0c977ea65824390717cdb7efc36c157.html">metal</a></li><li class="navelem"><a class="el" href="dir_70a37effa88bcbd6b791977fa1e64356.html">kernels</a></li><li class="navelem"><a class="el" href="dir_76215a6c54e2b67053e723fc2395583c.html">steel</a></li><li class="navelem"><a class="el" href="dir_e1756c7634b0c14aead026895ad71c6d.html">attn</a></li> </ul>
</div>
</div><!-- top -->
<div id="doc-content">
<div class="header">
<div class="headertitle"><div class="title">loader.h</div></div>
</div><!--header-->
@@ -96,11 +110,11 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="preprocessor">#pragma once</span></div>
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span> </div>
<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="preprocessor">#include &quot;<a class="code" href="steel_2defines_8h.html">mlx/backend/metal/kernels/steel/defines.h</a>&quot;</span></div>
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span> </div>
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span></div>
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment">// Loading helper</span></div>
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span> </div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacemlx.html">mlx</a> {</div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="keyword">namespace </span>steel {</div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacemlx_1_1steel.html">steel</a> {</div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span> </div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="keyword">template</span> &lt;</div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> <span class="keyword">typename</span> T,</div>
@@ -113,7 +127,7 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> <span class="keywordtype">short</span> n_reads = (BCOLS * BROWS) / (tgp_size),</div>
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> <span class="keywordtype">short</span> TCOLS = BCOLS / n_reads,</div>
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> <span class="keywordtype">short</span> TROWS = tgp_size / TCOLS&gt;</div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="keyword">struct </span>BlockLoader {</div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="keyword">struct </span><a class="code hl_struct" href="structmlx_1_1steel_1_1_block_loader.html">BlockLoader</a> {</div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_block_loader.html#a973804e5b1d418c98c90861cda1a6fb5"> 26</a></span> <a class="code hl_define" href="steel_2defines_8h.html#a90b91c866313ffa46eff6d9cc944ad2b">STEEL_CONST</a> <span class="keywordtype">short</span> <a class="code hl_variable" href="structmlx_1_1steel_1_1_block_loader.html#a973804e5b1d418c98c90861cda1a6fb5">n_rows</a> = (BROWS + TROWS - 1) / TROWS;</div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_block_loader.html#a58bdf9b9c81962733e22ecdeae28c092"> 27</a></span> <a class="code hl_define" href="steel_2defines_8h.html#a90b91c866313ffa46eff6d9cc944ad2b">STEEL_CONST</a> <span class="keywordtype">short</span> <a class="code hl_variable" href="structmlx_1_1steel_1_1_block_loader.html#a58bdf9b9c81962733e22ecdeae28c092">vec_size</a> = n_reads;</div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> </div>
@@ -130,7 +144,7 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_block_loader.html#af1c6c35a42e9da4408c1013ff1741bc2"> 39</a></span> threadgroup T* <a class="code hl_variable" href="structmlx_1_1steel_1_1_block_loader.html#af1c6c35a42e9da4408c1013ff1741bc2">dst</a>;</div>
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_block_loader.html#ad1db14517568ae9eddfb6986ef31c7aa"> 40</a></span> <span class="keyword">const</span> device T* <a class="code hl_variable" href="structmlx_1_1steel_1_1_block_loader.html#ad1db14517568ae9eddfb6986ef31c7aa">src</a>;</div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> </div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> <span class="keyword">struct </span><span class="keyword">alignas</span>(alignment * sizeof(T)) <a class="code hl_struct" href="structmlx_1_1steel_1_1_block_loader_1_1_read_vector.html">ReadVector</a> {</div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> <span class="keyword">struct </span><span class="keyword">alignas</span>(alignment * sizeof(T)) ReadVector {</div>
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_block_loader_1_1_read_vector.html#a20963f7191251defca48bf8a843d019d"> 43</a></span> uint8_t <a class="code hl_variable" href="structmlx_1_1steel_1_1_block_loader_1_1_read_vector.html#a20963f7191251defca48bf8a843d019d">v</a>[<span class="keyword">sizeof</span>(T) * <a class="code hl_variable" href="structmlx_1_1steel_1_1_block_loader.html#a58bdf9b9c81962733e22ecdeae28c092">vec_size</a>];</div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> };</div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> </div>
@@ -147,19 +161,19 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> <a class="code hl_variable" href="structmlx_1_1steel_1_1_block_loader.html#a064e2cc77e0b1cf0f8027929e031775b">thread_idx</a>(simd_group_id * 32 + simd_lane_id),</div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> <a class="code hl_variable" href="structmlx_1_1steel_1_1_block_loader.html#a9ef13742bcdf07532d8f09394928a8af">bi</a>(<a class="code hl_variable" href="structmlx_1_1steel_1_1_block_loader.html#a064e2cc77e0b1cf0f8027929e031775b">thread_idx</a> / TCOLS),</div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> <a class="code hl_variable" href="structmlx_1_1steel_1_1_block_loader.html#a78c326e75ee35a484685771143047cd4">bj</a>(<a class="code hl_variable" href="structmlx_1_1steel_1_1_block_loader.html#a58bdf9b9c81962733e22ecdeae28c092">vec_size</a> * (<a class="code hl_variable" href="structmlx_1_1steel_1_1_block_loader.html#a064e2cc77e0b1cf0f8027929e031775b">thread_idx</a> % TCOLS)),</div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> dst(dst_ + <a class="code hl_variable" href="structmlx_1_1steel_1_1_block_loader.html#a9ef13742bcdf07532d8f09394928a8af">bi</a> * dst_ld + <a class="code hl_variable" href="structmlx_1_1steel_1_1_block_loader.html#a78c326e75ee35a484685771143047cd4">bj</a>),</div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> <a class="code hl_variable" href="structmlx_1_1steel_1_1_block_loader.html#af1c6c35a42e9da4408c1013ff1741bc2">dst</a>(dst_ + <a class="code hl_variable" href="structmlx_1_1steel_1_1_block_loader.html#a9ef13742bcdf07532d8f09394928a8af">bi</a> * dst_ld + <a class="code hl_variable" href="structmlx_1_1steel_1_1_block_loader.html#a78c326e75ee35a484685771143047cd4">bj</a>),</div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> <a class="code hl_variable" href="structmlx_1_1steel_1_1_block_loader.html#ad1db14517568ae9eddfb6986ef31c7aa">src</a>(src_ + <a class="code hl_variable" href="structmlx_1_1steel_1_1_block_loader.html#a9ef13742bcdf07532d8f09394928a8af">bi</a> * <a class="code hl_variable" href="structmlx_1_1steel_1_1_block_loader.html#aadafc50f7f06af434149d7469df4714d">src_ld</a> + <a class="code hl_variable" href="structmlx_1_1steel_1_1_block_loader.html#a78c326e75ee35a484685771143047cd4">bj</a>) {}</div>
</div>
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> </div>
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> <span class="comment">/* Apply operation to threadgroup without bound checking */</span></div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> <span class="keyword">template</span> &lt;<span class="keyword">typename</span> UnaryOp&gt;</div>
<div class="foldopen" id="foldopen00063" data-start="{" data-end="}">
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_block_loader.html#adb4ca2cc193630a779de552fa8847ddf"> 63</a></span> METAL_FUNC <span class="keywordtype">void</span> <a class="code hl_function" href="structmlx_1_1steel_1_1_block_loader.html#adb4ca2cc193630a779de552fa8847ddf">apply_inplace_op</a>(thread <span class="keyword">const</span> UnaryOp&amp; <a class="code hl_variable" href="common_2binary_8h.html#a70228731d29946574b238d21fb4b360c">op</a>)<span class="keyword"> const </span>{</div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_block_loader.html#adb4ca2cc193630a779de552fa8847ddf"> 63</a></span> METAL_FUNC <span class="keywordtype">void</span> <a class="code hl_function" href="structmlx_1_1steel_1_1_block_loader.html#adb4ca2cc193630a779de552fa8847ddf">apply_inplace_op</a>(thread <span class="keyword">const</span> UnaryOp&amp; op)<span class="keyword"> const </span>{</div>
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> <a class="code hl_define" href="steel_2defines_8h.html#a5a5c3095b132a7589bc19cd5cb80e2c6">STEEL_PRAGMA_UNROLL</a></div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> <span class="keywordflow">for</span> (<span class="keywordtype">short</span> i = 0; i &lt; BROWS; i += TROWS) {</div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> <a class="code hl_define" href="steel_2defines_8h.html#a5a5c3095b132a7589bc19cd5cb80e2c6">STEEL_PRAGMA_UNROLL</a></div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> <span class="keywordflow">for</span> (<span class="keywordtype">short</span> j = 0; j &lt; <a class="code hl_variable" href="structmlx_1_1steel_1_1_block_loader.html#a58bdf9b9c81962733e22ecdeae28c092">vec_size</a>; j++) {</div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> dst[i * dst_ld + j] = <a class="code hl_variable" href="common_2binary_8h.html#a70228731d29946574b238d21fb4b360c">op</a>.apply(dst[i * dst_ld + j]);</div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> <a class="code hl_variable" href="structmlx_1_1steel_1_1_block_loader.html#af1c6c35a42e9da4408c1013ff1741bc2">dst</a>[i * dst_ld + j] = op.apply(<a class="code hl_variable" href="structmlx_1_1steel_1_1_block_loader.html#af1c6c35a42e9da4408c1013ff1741bc2">dst</a>[i * dst_ld + j]);</div>
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> }</div>
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> }</div>
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> }</div>
@@ -170,8 +184,8 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_block_loader.html#a6c9e27f11f48b34580ed2c7e9cad9a27"> 74</a></span> METAL_FUNC <span class="keywordtype">void</span> <a class="code hl_function" href="structmlx_1_1steel_1_1_block_loader.html#a6c9e27f11f48b34580ed2c7e9cad9a27">load_unsafe</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> <a class="code hl_define" href="steel_2defines_8h.html#a5a5c3095b132a7589bc19cd5cb80e2c6">STEEL_PRAGMA_UNROLL</a></div>
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> <span class="keywordflow">for</span> (<span class="keywordtype">short</span> i = 0; i &lt; BROWS; i += TROWS) {</div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> *((threadgroup <a class="code hl_struct" href="structmlx_1_1steel_1_1_block_loader_1_1_read_vector.html">ReadVector</a>*)(&amp;dst[i * dst_ld])) =</div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> *((<span class="keyword">const</span> device <a class="code hl_struct" href="structmlx_1_1steel_1_1_block_loader_1_1_read_vector.html">ReadVector</a>*)(&amp;<a class="code hl_variable" href="structmlx_1_1steel_1_1_block_loader.html#ad1db14517568ae9eddfb6986ef31c7aa">src</a>[i * <a class="code hl_variable" href="structmlx_1_1steel_1_1_block_loader.html#aadafc50f7f06af434149d7469df4714d">src_ld</a>]));</div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> *((threadgroup ReadVector*)(&amp;<a class="code hl_variable" href="structmlx_1_1steel_1_1_block_loader.html#af1c6c35a42e9da4408c1013ff1741bc2">dst</a>[i * dst_ld])) =</div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> *((<span class="keyword">const</span> device ReadVector*)(&amp;<a class="code hl_variable" href="structmlx_1_1steel_1_1_block_loader.html#ad1db14517568ae9eddfb6986ef31c7aa">src</a>[i * <a class="code hl_variable" href="structmlx_1_1steel_1_1_block_loader.html#aadafc50f7f06af434149d7469df4714d">src_ld</a>]));</div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> }</div>
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> }</div>
</div>
@@ -187,7 +201,7 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> <span class="keywordflow">for</span> (<span class="keywordtype">short</span> i = 0; i &lt; BROWS; i += TROWS) {</div>
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> <a class="code hl_define" href="steel_2defines_8h.html#a5a5c3095b132a7589bc19cd5cb80e2c6">STEEL_PRAGMA_UNROLL</a></div>
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> <span class="keywordflow">for</span> (<span class="keywordtype">short</span> j = 0; j &lt; <a class="code hl_variable" href="structmlx_1_1steel_1_1_block_loader.html#a58bdf9b9c81962733e22ecdeae28c092">vec_size</a>; j++) {</div>
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> dst[i * dst_ld + j] = T(0);</div>
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> <a class="code hl_variable" href="structmlx_1_1steel_1_1_block_loader.html#af1c6c35a42e9da4408c1013ff1741bc2">dst</a>[i * dst_ld + j] = T(0);</div>
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> }</div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> }</div>
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> <span class="keywordflow">return</span>;</div>
@@ -220,7 +234,7 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> <span class="comment">// Copy values to threadgroup memory</span></div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> <a class="code hl_define" href="steel_2defines_8h.html#a5a5c3095b132a7589bc19cd5cb80e2c6">STEEL_PRAGMA_UNROLL</a></div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> <span class="keywordflow">for</span> (<span class="keywordtype">short</span> j = 0; j &lt; <a class="code hl_variable" href="structmlx_1_1steel_1_1_block_loader.html#a58bdf9b9c81962733e22ecdeae28c092">vec_size</a>; j++) {</div>
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> dst[i * dst_ld + j] = tmp_val[j];</div>
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> <a class="code hl_variable" href="structmlx_1_1steel_1_1_block_loader.html#af1c6c35a42e9da4408c1013ff1741bc2">dst</a>[i * dst_ld + j] = tmp_val[j];</div>
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> }</div>
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> }</div>
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> }</div>
@@ -254,7 +268,7 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> <span class="keywordtype">short</span> TCOLS = BCOLS / n_reads,</div>
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> <span class="keywordtype">short</span> TROWS = tgp_size / TCOLS&gt;</div>
<div class="foldopen" id="foldopen00153" data-start="{" data-end="};">
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_block_loader_t.html"> 153</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structmlx_1_1steel_1_1_block_loader_t.html">BlockLoaderT</a> {</div>
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_block_loader_t.html"> 153</a></span><span class="keyword">struct </span><a class="code hl_function" href="structmlx_1_1steel_1_1_block_loader_t.html#a076616a7c67ad1b847e0e6b046077ee2">BlockLoaderT</a> {</div>
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_block_loader_t.html#a0ccc7caa93e6e709981a1a08159d41dc"> 154</a></span> <a class="code hl_define" href="steel_2defines_8h.html#a90b91c866313ffa46eff6d9cc944ad2b">STEEL_CONST</a> <span class="keywordtype">short</span> <a class="code hl_variable" href="structmlx_1_1steel_1_1_block_loader_t.html#a0ccc7caa93e6e709981a1a08159d41dc">n_rows</a> = (BROWS + TROWS - 1) / TROWS;</div>
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_block_loader_t.html#a9ac651d9e5097507c57b10dfeb40bfe5"> 155</a></span> <a class="code hl_define" href="steel_2defines_8h.html#a90b91c866313ffa46eff6d9cc944ad2b">STEEL_CONST</a> <span class="keywordtype">short</span> <a class="code hl_variable" href="structmlx_1_1steel_1_1_block_loader_t.html#a9ac651d9e5097507c57b10dfeb40bfe5">vec_size</a> = n_reads;</div>
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> </div>
@@ -284,20 +298,20 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> <a class="code hl_variable" href="structmlx_1_1steel_1_1_block_loader_t.html#af2838998a02866f22b525f9b6ae004da">thread_idx</a>(simd_group_id * 32 + simd_lane_id),</div>
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> <a class="code hl_variable" href="structmlx_1_1steel_1_1_block_loader_t.html#a6964273994b06d6cf8ef7e59fb10bb35">bi</a>(<a class="code hl_variable" href="structmlx_1_1steel_1_1_block_loader_t.html#af2838998a02866f22b525f9b6ae004da">thread_idx</a> / TCOLS),</div>
<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> <a class="code hl_variable" href="structmlx_1_1steel_1_1_block_loader_t.html#aca83e49c31095badc8a46eb3c8e00957">bj</a>(<a class="code hl_variable" href="structmlx_1_1steel_1_1_block_loader_t.html#a9ac651d9e5097507c57b10dfeb40bfe5">vec_size</a> * (<a class="code hl_variable" href="structmlx_1_1steel_1_1_block_loader_t.html#af2838998a02866f22b525f9b6ae004da">thread_idx</a> % TCOLS)),</div>
<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> dst(dst_ + <a class="code hl_variable" href="structmlx_1_1steel_1_1_block_loader_t.html#a6964273994b06d6cf8ef7e59fb10bb35">bi</a> * kDstStrRow + <a class="code hl_variable" href="structmlx_1_1steel_1_1_block_loader_t.html#aca83e49c31095badc8a46eb3c8e00957">bj</a> * kDstStrCol),</div>
<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> <a class="code hl_variable" href="structmlx_1_1steel_1_1_block_loader_t.html#a6eb4e566b687395e27f290da288362db">dst</a>(dst_ + <a class="code hl_variable" href="structmlx_1_1steel_1_1_block_loader_t.html#a6964273994b06d6cf8ef7e59fb10bb35">bi</a> * kDstStrRow + <a class="code hl_variable" href="structmlx_1_1steel_1_1_block_loader_t.html#aca83e49c31095badc8a46eb3c8e00957">bj</a> * kDstStrCol),</div>
<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> <a class="code hl_variable" href="structmlx_1_1steel_1_1_block_loader_t.html#a7004a4efaa483cc79b8b79810a17c777">src</a>(src_ + <a class="code hl_variable" href="structmlx_1_1steel_1_1_block_loader_t.html#a6964273994b06d6cf8ef7e59fb10bb35">bi</a> * <a class="code hl_variable" href="structmlx_1_1steel_1_1_block_loader_t.html#aeba87e81185da6b20a092c5d240d3321">src_ld</a> + <a class="code hl_variable" href="structmlx_1_1steel_1_1_block_loader_t.html#aca83e49c31095badc8a46eb3c8e00957">bj</a>) {}</div>
</div>
<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> </div>
<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> <span class="comment">/* Apply operation to threadgroup without bound checking */</span></div>
<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> <span class="keyword">template</span> &lt;<span class="keyword">typename</span> UnaryOp&gt;</div>
<div class="foldopen" id="foldopen00187" data-start="{" data-end="}">
<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_block_loader_t.html#a2b136fad00dc54300e68aa6b905eff97"> 187</a></span> METAL_FUNC <span class="keywordtype">void</span> <a class="code hl_function" href="structmlx_1_1steel_1_1_block_loader_t.html#a2b136fad00dc54300e68aa6b905eff97">apply_inplace_op</a>(thread <span class="keyword">const</span> UnaryOp&amp; <a class="code hl_variable" href="common_2binary_8h.html#a70228731d29946574b238d21fb4b360c">op</a>)<span class="keyword"> const </span>{</div>
<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_block_loader_t.html#a2b136fad00dc54300e68aa6b905eff97"> 187</a></span> METAL_FUNC <span class="keywordtype">void</span> <a class="code hl_function" href="structmlx_1_1steel_1_1_block_loader_t.html#a2b136fad00dc54300e68aa6b905eff97">apply_inplace_op</a>(thread <span class="keyword">const</span> UnaryOp&amp; op)<span class="keyword"> const </span>{</div>
<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> <a class="code hl_define" href="steel_2defines_8h.html#a5a5c3095b132a7589bc19cd5cb80e2c6">STEEL_PRAGMA_UNROLL</a></div>
<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> <span class="keywordflow">for</span> (<span class="keywordtype">short</span> i = 0; i &lt; BROWS; i += TROWS) {</div>
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> <a class="code hl_define" href="steel_2defines_8h.html#a5a5c3095b132a7589bc19cd5cb80e2c6">STEEL_PRAGMA_UNROLL</a></div>
<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> <span class="keywordflow">for</span> (<span class="keywordtype">short</span> j = 0; j &lt; <a class="code hl_variable" href="structmlx_1_1steel_1_1_block_loader_t.html#a9ac651d9e5097507c57b10dfeb40bfe5">vec_size</a>; j++) {</div>
<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> dst[i * kDstStrRow + j * kDstStrCol] =</div>
<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> <a class="code hl_variable" href="common_2binary_8h.html#a70228731d29946574b238d21fb4b360c">op</a>.apply(dst[i * kDstStrRow + j * kDstStrCol]);</div>
<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> <a class="code hl_variable" href="structmlx_1_1steel_1_1_block_loader_t.html#a6eb4e566b687395e27f290da288362db">dst</a>[i * kDstStrRow + j * kDstStrCol] =</div>
<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> op.apply(<a class="code hl_variable" href="structmlx_1_1steel_1_1_block_loader_t.html#a6eb4e566b687395e27f290da288362db">dst</a>[i * kDstStrRow + j * kDstStrCol]);</div>
<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> }</div>
<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> }</div>
<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> }</div>
@@ -310,7 +324,7 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> <span class="keywordflow">for</span> (<span class="keywordtype">short</span> i = 0; i &lt; BROWS; i += TROWS) {</div>
<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> <a class="code hl_define" href="steel_2defines_8h.html#a5a5c3095b132a7589bc19cd5cb80e2c6">STEEL_PRAGMA_UNROLL</a></div>
<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> <span class="keywordflow">for</span> (<span class="keywordtype">short</span> j = 0; j &lt; <a class="code hl_variable" href="structmlx_1_1steel_1_1_block_loader_t.html#a9ac651d9e5097507c57b10dfeb40bfe5">vec_size</a>; j++) {</div>
<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> dst[i * kDstStrRow + j * kDstStrCol] = <a class="code hl_variable" href="structmlx_1_1steel_1_1_block_loader_t.html#a7004a4efaa483cc79b8b79810a17c777">src</a>[i * <a class="code hl_variable" href="structmlx_1_1steel_1_1_block_loader_t.html#aeba87e81185da6b20a092c5d240d3321">src_ld</a> + j];</div>
<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> <a class="code hl_variable" href="structmlx_1_1steel_1_1_block_loader_t.html#a6eb4e566b687395e27f290da288362db">dst</a>[i * kDstStrRow + j * kDstStrCol] = <a class="code hl_variable" href="structmlx_1_1steel_1_1_block_loader_t.html#a7004a4efaa483cc79b8b79810a17c777">src</a>[i * <a class="code hl_variable" href="structmlx_1_1steel_1_1_block_loader_t.html#aeba87e81185da6b20a092c5d240d3321">src_ld</a> + j];</div>
<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> }</div>
<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> }</div>
<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> }</div>
@@ -327,7 +341,7 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> <span class="keywordflow">for</span> (<span class="keywordtype">short</span> i = 0; i &lt; BROWS; i += TROWS) {</div>
<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span> <a class="code hl_define" href="steel_2defines_8h.html#a5a5c3095b132a7589bc19cd5cb80e2c6">STEEL_PRAGMA_UNROLL</a></div>
<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span> <span class="keywordflow">for</span> (<span class="keywordtype">short</span> j = 0; j &lt; <a class="code hl_variable" href="structmlx_1_1steel_1_1_block_loader_t.html#a9ac651d9e5097507c57b10dfeb40bfe5">vec_size</a>; j++) {</div>
<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> dst[i * kDstStrRow + j * kDstStrCol] = T(0);</div>
<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> <a class="code hl_variable" href="structmlx_1_1steel_1_1_block_loader_t.html#a6eb4e566b687395e27f290da288362db">dst</a>[i * kDstStrRow + j * kDstStrCol] = T(0);</div>
<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> }</div>
<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> }</div>
<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span> <span class="keywordflow">return</span>;</div>
@@ -360,7 +374,7 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"> 249</span> <span class="comment">// Copy values to threadgroup memory</span></div>
<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span> <a class="code hl_define" href="steel_2defines_8h.html#a5a5c3095b132a7589bc19cd5cb80e2c6">STEEL_PRAGMA_UNROLL</a></div>
<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span> <span class="keywordflow">for</span> (<span class="keywordtype">short</span> j = 0; j &lt; <a class="code hl_variable" href="structmlx_1_1steel_1_1_block_loader_t.html#a9ac651d9e5097507c57b10dfeb40bfe5">vec_size</a>; j++) {</div>
<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span> dst[i * kDstStrRow + j * kDstStrCol] = tmp_val[j];</div>
<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span> <a class="code hl_variable" href="structmlx_1_1steel_1_1_block_loader_t.html#a6eb4e566b687395e27f290da288362db">dst</a>[i * kDstStrRow + j * kDstStrCol] = tmp_val[j];</div>
<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"> 253</span> }</div>
<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span> }</div>
<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span> }</div>
@@ -377,28 +391,27 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"> 262</span> </div>
<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span>} <span class="comment">// namespace steel</span></div>
<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"> 264</span>} <span class="comment">// namespace mlx</span></div>
<div class="ttc" id="acommon_2binary_8h_html_a70228731d29946574b238d21fb4b360c"><div class="ttname"><a href="common_2binary_8h.html#a70228731d29946574b238d21fb4b360c">op</a></div><div class="ttdeci">Op op</div><div class="ttdef"><b>Definition</b> binary.h:129</div></div>
<div class="ttc" id="anamespacemlx_1_1steel_html"><div class="ttname"><a href="namespacemlx_1_1steel.html">mlx::steel</a></div><div class="ttdef"><b>Definition</b> attn.h:19</div></div>
<div class="ttc" id="anamespacemlx_html"><div class="ttname"><a href="namespacemlx.html">mlx</a></div><div class="ttdef"><b>Definition</b> allocator.h:7</div></div>
<div class="ttc" id="asteel_2defines_8h_html"><div class="ttname"><a href="steel_2defines_8h.html">defines.h</a></div></div>
<div class="ttc" id="asteel_2defines_8h_html_a5a5c3095b132a7589bc19cd5cb80e2c6"><div class="ttname"><a href="steel_2defines_8h.html#a5a5c3095b132a7589bc19cd5cb80e2c6">STEEL_PRAGMA_UNROLL</a></div><div class="ttdeci">#define STEEL_PRAGMA_UNROLL</div><div class="ttdef"><b>Definition</b> defines.h:4</div></div>
<div class="ttc" id="asteel_2defines_8h_html_a90b91c866313ffa46eff6d9cc944ad2b"><div class="ttname"><a href="steel_2defines_8h.html#a90b91c866313ffa46eff6d9cc944ad2b">STEEL_CONST</a></div><div class="ttdeci">#define STEEL_CONST</div><div class="ttdef"><b>Definition</b> defines.h:3</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_loader_1_1_read_vector_html"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_loader_1_1_read_vector.html">mlx::steel::BlockLoader::ReadVector</a></div><div class="ttdef"><b>Definition</b> loader.h:42</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_loader_1_1_read_vector_html_a20963f7191251defca48bf8a843d019d"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_loader_1_1_read_vector.html#a20963f7191251defca48bf8a843d019d">mlx::steel::BlockLoader::ReadVector::v</a></div><div class="ttdeci">uint8_t v[sizeof(T) *vec_size]</div><div class="ttdef"><b>Definition</b> loader.h:43</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_loader_html_a064e2cc77e0b1cf0f8027929e031775b"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_loader.html#a064e2cc77e0b1cf0f8027929e031775b">mlx::steel::BlockLoader::thread_idx</a></div><div class="ttdeci">const short thread_idx</div><div class="ttdef"><b>Definition</b> loader.h:34</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_loader_html"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_loader.html">mlx::steel::BlockLoader</a></div><div class="ttdef"><b>Definition</b> loader.h:25</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_loader_html_a064e2cc77e0b1cf0f8027929e031775b"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_loader.html#a064e2cc77e0b1cf0f8027929e031775b">mlx::steel::BlockLoader&lt; T, transpose_a ? BK :BM, transpose_a ? BM :BK, transpose_a ? BM+tgp_padding_a :BK+tgp_padding_a, !transpose_a, tgp_size &gt;::thread_idx</a></div><div class="ttdeci">const short thread_idx</div><div class="ttdef"><b>Definition</b> loader.h:34</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_loader_html_a37aca066e63dff238865b5923a2d4335"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_loader.html#a37aca066e63dff238865b5923a2d4335">mlx::steel::BlockLoader::BlockLoader</a></div><div class="ttdeci">METAL_FUNC BlockLoader(const device T *src_, const int src_ld_, threadgroup T *dst_, ushort simd_group_id, ushort simd_lane_id)</div><div class="ttdef"><b>Definition</b> loader.h:47</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_loader_html_a58bdf9b9c81962733e22ecdeae28c092"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_loader.html#a58bdf9b9c81962733e22ecdeae28c092">mlx::steel::BlockLoader::vec_size</a></div><div class="ttdeci">STEEL_CONST short vec_size</div><div class="ttdef"><b>Definition</b> loader.h:27</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_loader_html_a58bdf9b9c81962733e22ecdeae28c092"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_loader.html#a58bdf9b9c81962733e22ecdeae28c092">mlx::steel::BlockLoader&lt; T, transpose_a ? BK :BM, transpose_a ? BM :BK, transpose_a ? BM+tgp_padding_a :BK+tgp_padding_a, !transpose_a, tgp_size &gt;::vec_size</a></div><div class="ttdeci">STEEL_CONST short vec_size</div><div class="ttdef"><b>Definition</b> loader.h:27</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_loader_html_a6af21428f0e7c17b48ddedf4dd20a1e8"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_loader.html#a6af21428f0e7c17b48ddedf4dd20a1e8">mlx::steel::BlockLoader::next</a></div><div class="ttdeci">METAL_FUNC void next()</div><div class="ttdef"><b>Definition</b> loader.h:131</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_loader_html_a6c9e27f11f48b34580ed2c7e9cad9a27"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_loader.html#a6c9e27f11f48b34580ed2c7e9cad9a27">mlx::steel::BlockLoader::load_unsafe</a></div><div class="ttdeci">METAL_FUNC void load_unsafe() const</div><div class="ttdef"><b>Definition</b> loader.h:74</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_loader_html_a78c326e75ee35a484685771143047cd4"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_loader.html#a78c326e75ee35a484685771143047cd4">mlx::steel::BlockLoader::bj</a></div><div class="ttdeci">const short bj</div><div class="ttdef"><b>Definition</b> loader.h:36</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_loader_html_a973804e5b1d418c98c90861cda1a6fb5"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_loader.html#a973804e5b1d418c98c90861cda1a6fb5">mlx::steel::BlockLoader::n_rows</a></div><div class="ttdeci">STEEL_CONST short n_rows</div><div class="ttdef"><b>Definition</b> loader.h:26</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_loader_html_a9ef13742bcdf07532d8f09394928a8af"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_loader.html#a9ef13742bcdf07532d8f09394928a8af">mlx::steel::BlockLoader::bi</a></div><div class="ttdeci">const short bi</div><div class="ttdef"><b>Definition</b> loader.h:35</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_loader_html_aadafc50f7f06af434149d7469df4714d"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_loader.html#aadafc50f7f06af434149d7469df4714d">mlx::steel::BlockLoader::src_ld</a></div><div class="ttdeci">const int src_ld</div><div class="ttdef"><b>Definition</b> loader.h:30</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_loader_html_ab87876699d55473620c7ea99f9da911d"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_loader.html#ab87876699d55473620c7ea99f9da911d">mlx::steel::BlockLoader::tile_stride</a></div><div class="ttdeci">const int tile_stride</div><div class="ttdef"><b>Definition</b> loader.h:31</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_loader_html_a78c326e75ee35a484685771143047cd4"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_loader.html#a78c326e75ee35a484685771143047cd4">mlx::steel::BlockLoader&lt; T, transpose_a ? BK :BM, transpose_a ? BM :BK, transpose_a ? BM+tgp_padding_a :BK+tgp_padding_a, !transpose_a, tgp_size &gt;::bj</a></div><div class="ttdeci">const short bj</div><div class="ttdef"><b>Definition</b> loader.h:36</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_loader_html_a973804e5b1d418c98c90861cda1a6fb5"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_loader.html#a973804e5b1d418c98c90861cda1a6fb5">mlx::steel::BlockLoader&lt; T, transpose_a ? BK :BM, transpose_a ? BM :BK, transpose_a ? BM+tgp_padding_a :BK+tgp_padding_a, !transpose_a, tgp_size &gt;::n_rows</a></div><div class="ttdeci">STEEL_CONST short n_rows</div><div class="ttdef"><b>Definition</b> loader.h:26</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_loader_html_a9ef13742bcdf07532d8f09394928a8af"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_loader.html#a9ef13742bcdf07532d8f09394928a8af">mlx::steel::BlockLoader&lt; T, transpose_a ? BK :BM, transpose_a ? BM :BK, transpose_a ? BM+tgp_padding_a :BK+tgp_padding_a, !transpose_a, tgp_size &gt;::bi</a></div><div class="ttdeci">const short bi</div><div class="ttdef"><b>Definition</b> loader.h:35</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_loader_html_aadafc50f7f06af434149d7469df4714d"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_loader.html#aadafc50f7f06af434149d7469df4714d">mlx::steel::BlockLoader&lt; T, transpose_a ? BK :BM, transpose_a ? BM :BK, transpose_a ? BM+tgp_padding_a :BK+tgp_padding_a, !transpose_a, tgp_size &gt;::src_ld</a></div><div class="ttdeci">const int src_ld</div><div class="ttdef"><b>Definition</b> loader.h:30</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_loader_html_ab87876699d55473620c7ea99f9da911d"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_loader.html#ab87876699d55473620c7ea99f9da911d">mlx::steel::BlockLoader&lt; T, transpose_a ? BK :BM, transpose_a ? BM :BK, transpose_a ? BM+tgp_padding_a :BK+tgp_padding_a, !transpose_a, tgp_size &gt;::tile_stride</a></div><div class="ttdeci">const int tile_stride</div><div class="ttdef"><b>Definition</b> loader.h:31</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_loader_html_abb0f4f66ec8b123627beb8eb4fbb609d"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_loader.html#abb0f4f66ec8b123627beb8eb4fbb609d">mlx::steel::BlockLoader::load_safe</a></div><div class="ttdeci">METAL_FUNC void load_safe(short2 src_tile_dim) const</div><div class="ttdef"><b>Definition</b> loader.h:83</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_loader_html_ad1db14517568ae9eddfb6986ef31c7aa"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_loader.html#ad1db14517568ae9eddfb6986ef31c7aa">mlx::steel::BlockLoader::src</a></div><div class="ttdeci">const device T * src</div><div class="ttdef"><b>Definition</b> loader.h:40</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_loader_html_ad1db14517568ae9eddfb6986ef31c7aa"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_loader.html#ad1db14517568ae9eddfb6986ef31c7aa">mlx::steel::BlockLoader&lt; T, transpose_a ? BK :BM, transpose_a ? BM :BK, transpose_a ? BM+tgp_padding_a :BK+tgp_padding_a, !transpose_a, tgp_size &gt;::src</a></div><div class="ttdeci">const device T * src</div><div class="ttdef"><b>Definition</b> loader.h:40</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_loader_html_adb4ca2cc193630a779de552fa8847ddf"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_loader.html#adb4ca2cc193630a779de552fa8847ddf">mlx::steel::BlockLoader::apply_inplace_op</a></div><div class="ttdeci">METAL_FUNC void apply_inplace_op(thread const UnaryOp &amp;op) const</div><div class="ttdef"><b>Definition</b> loader.h:63</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_loader_html_af1c6c35a42e9da4408c1013ff1741bc2"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_loader.html#af1c6c35a42e9da4408c1013ff1741bc2">mlx::steel::BlockLoader::dst</a></div><div class="ttdeci">threadgroup T * dst</div><div class="ttdef"><b>Definition</b> loader.h:39</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_loader_t_html"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_loader_t.html">mlx::steel::BlockLoaderT</a></div><div class="ttdef"><b>Definition</b> loader.h:153</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_loader_html_af1c6c35a42e9da4408c1013ff1741bc2"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_loader.html#af1c6c35a42e9da4408c1013ff1741bc2">mlx::steel::BlockLoader&lt; T, transpose_a ? BK :BM, transpose_a ? BM :BK, transpose_a ? BM+tgp_padding_a :BK+tgp_padding_a, !transpose_a, tgp_size &gt;::dst</a></div><div class="ttdeci">threadgroup T * dst</div><div class="ttdef"><b>Definition</b> loader.h:39</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_loader_t_html_a076616a7c67ad1b847e0e6b046077ee2"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_loader_t.html#a076616a7c67ad1b847e0e6b046077ee2">mlx::steel::BlockLoaderT::BlockLoaderT</a></div><div class="ttdeci">METAL_FUNC BlockLoaderT(const device T *src_, const int src_ld_, threadgroup T *dst_, ushort simd_group_id, ushort simd_lane_id)</div><div class="ttdef"><b>Definition</b> loader.h:171</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_loader_t_html_a0ccc7caa93e6e709981a1a08159d41dc"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_loader_t.html#a0ccc7caa93e6e709981a1a08159d41dc">mlx::steel::BlockLoaderT::n_rows</a></div><div class="ttdeci">STEEL_CONST short n_rows</div><div class="ttdef"><b>Definition</b> loader.h:154</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_loader_t_html_a2b136fad00dc54300e68aa6b905eff97"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_loader_t.html#a2b136fad00dc54300e68aa6b905eff97">mlx::steel::BlockLoaderT::apply_inplace_op</a></div><div class="ttdeci">METAL_FUNC void apply_inplace_op(thread const UnaryOp &amp;op) const</div><div class="ttdef"><b>Definition</b> loader.h:187</div></div>
@@ -417,10 +430,13 @@ $(function(){ initResizable(false); });
<div class="ttc" id="astructmlx_1_1steel_1_1_c_shape_html_a01b09227356b6a682a0694523a8e6901"><div class="ttname"><a href="structmlx_1_1steel_1_1_c_shape.html#a01b09227356b6a682a0694523a8e6901">mlx::steel::CShape::kCols</a></div><div class="ttdeci">STEEL_CONST int kCols</div><div class="ttdef"><b>Definition</b> loader.h:139</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_c_shape_html_a5caf36cb9acf9f90ba59a9b0b4197993"><div class="ttname"><a href="structmlx_1_1steel_1_1_c_shape.html#a5caf36cb9acf9f90ba59a9b0b4197993">mlx::steel::CShape::kRows</a></div><div class="ttdeci">STEEL_CONST int kRows</div><div class="ttdef"><b>Definition</b> loader.h:138</div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0
</small></address>
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_d0c977ea65824390717cdb7efc36c157.html">metal</a></li><li class="navelem"><a class="el" href="dir_70a37effa88bcbd6b791977fa1e64356.html">kernels</a></li><li class="navelem"><a class="el" href="dir_76215a6c54e2b67053e723fc2395583c.html">steel</a></li><li class="navelem"><a class="el" href="dir_e1756c7634b0c14aead026895ad71c6d.html">attn</a></li><li class="navelem"><a class="el" href="attn_2loader_8h.html">loader.h</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.1 </li>
</ul>
</div>
</body>
</html>
+43 -26
View File
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.12.0"/>
<meta name="generator" content="Doxygen 1.13.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MLX: mlx/backend/metal/kernels/steel/attn/mma.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -11,11 +11,18 @@
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
@@ -28,12 +35,24 @@
<div id="projectname">MLX
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.12.0 -->
<!-- Generated by Doxygen 1.13.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
@@ -44,22 +63,23 @@ var searchBox = new SearchBox("searchBox", "search/",'.html');
$(function() { codefold.init(0); });
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search',false);
$(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){ initResizable(false); });
$(function(){initNavTree('attn_2mma_8h.html',''); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
@@ -81,12 +101,6 @@ $(function(){ initResizable(false); });
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_d0c977ea65824390717cdb7efc36c157.html">metal</a></li><li class="navelem"><a class="el" href="dir_70a37effa88bcbd6b791977fa1e64356.html">kernels</a></li><li class="navelem"><a class="el" href="dir_76215a6c54e2b67053e723fc2395583c.html">steel</a></li><li class="navelem"><a class="el" href="dir_e1756c7634b0c14aead026895ad71c6d.html">attn</a></li> </ul>
</div>
</div><!-- top -->
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#nested-classes">Classes</a> &#124;
@@ -112,7 +126,7 @@ Classes</h2></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html">mlx::steel::BaseMMAFrag&lt; T, kFragRows_, kFragCols_ &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html">mlx::steel::BaseMMAFrag&lt; T, 8, 8 &gt;</a></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html">mlx::steel::BaseMMAFrag&lt; T, 8, 8 &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structmlx_1_1steel_1_1_m_m_a_tile.html">mlx::steel::MMATile&lt; T, kTileRows_, kTileCols_, MMAFrag_ &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -128,15 +142,18 @@ Namespaces</h2></td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:ad583e6038efc119542410f43b603d4ad" id="r_ad583e6038efc119542410f43b603d4ad"><td class="memTemplParams" colspan="2">template&lt;typename T , typename U , int M, int N, int K&gt; </td></tr>
<tr class="memitem:ad583e6038efc119542410f43b603d4ad" id="r_ad583e6038efc119542410f43b603d4ad"><td class="memTemplParams" colspan="2">template&lt;typename T, typename U, int M, int N, int K&gt; </td></tr>
<tr class="memitem:ad583e6038efc119542410f43b603d4ad"><td class="memTemplItemLeft" align="right" valign="top">METAL_FUNC void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacemlx_1_1steel.html#ad583e6038efc119542410f43b603d4ad">mlx::steel::tile_matmad</a> (thread <a class="el" href="structmlx_1_1steel_1_1_m_m_a_tile.html">MMATile</a>&lt; T, M, N &gt; &amp;D, thread <a class="el" href="structmlx_1_1steel_1_1_m_m_a_tile.html">MMATile</a>&lt; U, M, K &gt; &amp;A, thread <a class="el" href="structmlx_1_1steel_1_1_m_m_a_tile.html">MMATile</a>&lt; U, K, N &gt; &amp;B, thread <a class="el" href="structmlx_1_1steel_1_1_m_m_a_tile.html">MMATile</a>&lt; T, M, N &gt; &amp;C)</td></tr>
<tr class="separator:ad583e6038efc119542410f43b603d4ad"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0
</small></address>
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_d0c977ea65824390717cdb7efc36c157.html">metal</a></li><li class="navelem"><a class="el" href="dir_70a37effa88bcbd6b791977fa1e64356.html">kernels</a></li><li class="navelem"><a class="el" href="dir_76215a6c54e2b67053e723fc2395583c.html">steel</a></li><li class="navelem"><a class="el" href="dir_e1756c7634b0c14aead026895ad71c6d.html">attn</a></li><li class="navelem"><a class="el" href="attn_2mma_8h.html">mma.h</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.1 </li>
</ul>
</div>
</body>
</html>
+10
View File
@@ -0,0 +1,10 @@
var attn_2mma_8h =
[
[ "mlx::steel::Shape2D< RInt, CInt >", "structmlx_1_1steel_1_1_shape2_d.html", "structmlx_1_1steel_1_1_shape2_d" ],
[ "mlx::steel::Layout2D< Shape, Layout >", "structmlx_1_1steel_1_1_layout2_d.html", "structmlx_1_1steel_1_1_layout2_d" ],
[ "mlx::steel::BaseMMAFrag< T, kFragRows_, kFragCols_ >", "structmlx_1_1steel_1_1_base_m_m_a_frag.html", null ],
[ "mlx::steel::BaseMMAFrag< T, 8, 8 >", "structmlx_1_1steel_1_1_base_m_m_a_frag.html", "structmlx_1_1steel_1_1_base_m_m_a_frag" ],
[ "mlx::steel::MMATile< T, kTileRows_, kTileCols_, MMAFrag_ >", "structmlx_1_1steel_1_1_m_m_a_tile.html", "structmlx_1_1steel_1_1_m_m_a_tile" ],
[ "mlx::steel::BlockMMA< T, U, BM, BN, BK, WM, WN, transpose_a, transpose_b, lda_tgp, ldb_tgp, AccumType, Epilogue >", "structmlx_1_1steel_1_1_block_m_m_a.html", "structmlx_1_1steel_1_1_block_m_m_a" ],
[ "mlx::steel::tile_matmad", "namespacemlx_1_1steel.html#ad583e6038efc119542410f43b603d4ad", null ]
];
+154 -131
View File
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.12.0"/>
<meta name="generator" content="Doxygen 1.13.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MLX: mlx/backend/metal/kernels/steel/attn/mma.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -11,11 +11,18 @@
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
@@ -28,12 +35,24 @@
<div id="projectname">MLX
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.12.0 -->
<!-- Generated by Doxygen 1.13.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
@@ -44,22 +63,23 @@ var searchBox = new SearchBox("searchBox", "search/",'.html');
$(function() { codefold.init(0); });
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search',false);
$(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){ initResizable(false); });
$(function(){initNavTree('attn_2mma_8h_source.html',''); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
@@ -81,12 +101,6 @@ $(function(){ initResizable(false); });
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_d0c977ea65824390717cdb7efc36c157.html">metal</a></li><li class="navelem"><a class="el" href="dir_70a37effa88bcbd6b791977fa1e64356.html">kernels</a></li><li class="navelem"><a class="el" href="dir_76215a6c54e2b67053e723fc2395583c.html">steel</a></li><li class="navelem"><a class="el" href="dir_e1756c7634b0c14aead026895ad71c6d.html">attn</a></li> </ul>
</div>
</div><!-- top -->
<div id="doc-content">
<div class="header">
<div class="headertitle"><div class="title">mma.h</div></div>
</div><!--header-->
@@ -104,15 +118,15 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="preprocessor">#include &quot;<a class="code" href="integral__constant_8h.html">mlx/backend/metal/kernels/steel/utils/integral_constant.h</a>&quot;</span></div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span> </div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="keyword">using namespace </span><a class="code hl_namespace" href="namespacemetal.html">metal</a>;</div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span> </div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span></div>
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="comment">// MMA helper</span></div>
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> </div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacemlx.html">mlx</a> {</div>
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="keyword">namespace </span>steel {</div>
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacemlx_1_1steel.html">steel</a> {</div>
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> </div>
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> RInt, <span class="keyword">typename</span> CInt&gt;</div>
<div class="foldopen" id="foldopen00023" data-start="{" data-end="};">
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_shape2_d.html"> 23</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structmlx_1_1steel_1_1_shape2_d.html">Shape2D</a> {</div>
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_shape2_d.html"> 23</a></span><span class="keyword">struct </span><a class="code hl_function" href="structmlx_1_1steel_1_1_shape2_d.html#a070ce70eb6d84361c7f313159c438a5c">Shape2D</a> {</div>
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_shape2_d.html#a6e9e8d56782fc8772bc432c7f58393fe"> 24</a></span> RInt <a class="code hl_variable" href="structmlx_1_1steel_1_1_shape2_d.html#a6e9e8d56782fc8772bc432c7f58393fe">r</a>;</div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_shape2_d.html#ae51347b2131647f2ed735ed43840d26e"> 25</a></span> CInt <a class="code hl_variable" href="structmlx_1_1steel_1_1_shape2_d.html#ae51347b2131647f2ed735ed43840d26e">c</a>;</div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> </div>
@@ -140,25 +154,25 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> </div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span><span class="keyword">struct </span>BaseMMAFrag&lt;T, 8, 8&gt; {</div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html#a2fe53db449c692226f23f6b99fb2c0d4"> 48</a></span> <a class="code hl_define" href="steel_2defines_8h.html#a90b91c866313ffa46eff6d9cc944ad2b">STEEL_CONST</a> <span class="keywordtype">int</span> kFragRows = 8;</div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html#a211102315e2afbcfcd2e2c201b638e9f"> 49</a></span> <a class="code hl_define" href="steel_2defines_8h.html#a90b91c866313ffa46eff6d9cc944ad2b">STEEL_CONST</a> <span class="keywordtype">int</span> kFragCols = 8;</div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a2fe53db449c692226f23f6b99fb2c0d4"> 48</a></span> <a class="code hl_define" href="steel_2defines_8h.html#a90b91c866313ffa46eff6d9cc944ad2b">STEEL_CONST</a> <span class="keywordtype">int</span> <a class="code hl_variable" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a2fe53db449c692226f23f6b99fb2c0d4">kFragRows</a> = 8;</div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a211102315e2afbcfcd2e2c201b638e9f"> 49</a></span> <a class="code hl_define" href="steel_2defines_8h.html#a90b91c866313ffa46eff6d9cc944ad2b">STEEL_CONST</a> <span class="keywordtype">int</span> <a class="code hl_variable" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a211102315e2afbcfcd2e2c201b638e9f">kFragCols</a> = 8;</div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> </div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html#a3c34dfdc944db110f4735f1b25307cf0"> 51</a></span> <a class="code hl_define" href="steel_2defines_8h.html#a90b91c866313ffa46eff6d9cc944ad2b">STEEL_CONST</a> <span class="keywordtype">int</span> kElemsPerFrag = (kFragRows * kFragCols) / 32;</div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a3c34dfdc944db110f4735f1b25307cf0"> 51</a></span> <a class="code hl_define" href="steel_2defines_8h.html#a90b91c866313ffa46eff6d9cc944ad2b">STEEL_CONST</a> <span class="keywordtype">int</span> <a class="code hl_variable" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a3c34dfdc944db110f4735f1b25307cf0">kElemsPerFrag</a> = (<a class="code hl_variable" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a2fe53db449c692226f23f6b99fb2c0d4">kFragRows</a> * <a class="code hl_variable" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a211102315e2afbcfcd2e2c201b638e9f">kFragCols</a>) / 32;</div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> </div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html#a76aa5aa690dbcc954e957d767fad661f"> 53</a></span> <a class="code hl_define" href="steel_2defines_8h.html#a90b91c866313ffa46eff6d9cc944ad2b">STEEL_CONST</a> <span class="keywordtype">int</span> kElemRows = 1;</div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html#a7c212200d86b4e93f274d99addf668bd"> 54</a></span> <a class="code hl_define" href="steel_2defines_8h.html#a90b91c866313ffa46eff6d9cc944ad2b">STEEL_CONST</a> <span class="keywordtype">int</span> kElemCols = 2;</div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a76aa5aa690dbcc954e957d767fad661f"> 53</a></span> <a class="code hl_define" href="steel_2defines_8h.html#a90b91c866313ffa46eff6d9cc944ad2b">STEEL_CONST</a> <span class="keywordtype">int</span> <a class="code hl_variable" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a76aa5aa690dbcc954e957d767fad661f">kElemRows</a> = 1;</div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a7c212200d86b4e93f274d99addf668bd"> 54</a></span> <a class="code hl_define" href="steel_2defines_8h.html#a90b91c866313ffa46eff6d9cc944ad2b">STEEL_CONST</a> <span class="keywordtype">int</span> <a class="code hl_variable" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a7c212200d86b4e93f274d99addf668bd">kElemCols</a> = 2;</div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> </div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> <span class="keyword">static_assert</span>(</div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> kElemRows * kElemCols == kElemsPerFrag,</div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> <a class="code hl_variable" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a76aa5aa690dbcc954e957d767fad661f">kElemRows</a> * <a class="code hl_variable" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a7c212200d86b4e93f274d99addf668bd">kElemCols</a> == <a class="code hl_variable" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a3c34dfdc944db110f4735f1b25307cf0">kElemsPerFrag</a>,</div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> <span class="stringliteral">&quot;MMAFrag shape is not consistent with MMAFrag size&quot;</span>);</div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> </div>
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html#a958b6952cbd9462d7ae9f6e029631887"> 60</a></span> <span class="keyword">typedef</span> metal::simdgroup_matrix&lt;T, kFragRows, kFragCols&gt; <a class="code hl_typedef" href="structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html#a958b6952cbd9462d7ae9f6e029631887">mat_type</a>;</div>
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html#a9f53a5e9b046b4f217e782b733941b0c"> 61</a></span> <span class="keyword">typedef</span> metal::vec&lt;T, kElemsPerFrag&gt; <a class="code hl_typedef" href="structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html#a9f53a5e9b046b4f217e782b733941b0c">frag_type</a>;</div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html#a5ec2e40a8f5ad98c71b825544cdd878b"> 62</a></span> <span class="keyword">typedef</span> metal::vec&lt;T, kElemRows&gt; <a class="code hl_typedef" href="structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html#a5ec2e40a8f5ad98c71b825544cdd878b">row_frag_type</a>;</div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html#aab8dd1c6917247da41dd3a31139a665f"> 63</a></span> <span class="keyword">typedef</span> metal::vec&lt;T, kElemCols&gt; <a class="code hl_typedef" href="structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html#aab8dd1c6917247da41dd3a31139a665f">col_frag_type</a>;</div>
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a25675ae18947a97c6e04157b540103a9"> 60</a></span> <span class="keyword">typedef</span> metal::simdgroup_matrix&lt;T, kFragRows, kFragCols&gt; <a class="code hl_typedef" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a25675ae18947a97c6e04157b540103a9">mat_type</a>;</div>
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a8536bfaa108031c2ea3e9ccdc766ee5b"> 61</a></span> <span class="keyword">typedef</span> metal::vec&lt;T, kElemsPerFrag&gt; <a class="code hl_typedef" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a8536bfaa108031c2ea3e9ccdc766ee5b">frag_type</a>;</div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a3dcd4301390937f89ed1dde6d28e341f"> 62</a></span> <span class="keyword">typedef</span> metal::vec&lt;T, kElemRows&gt; <a class="code hl_typedef" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a3dcd4301390937f89ed1dde6d28e341f">row_frag_type</a>;</div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#adbb262a3c872e26533b68a39db16459e"> 63</a></span> <span class="keyword">typedef</span> metal::vec&lt;T, kElemCols&gt; <a class="code hl_typedef" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#adbb262a3c872e26533b68a39db16459e">col_frag_type</a>;</div>
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> </div>
<div class="foldopen" id="foldopen00065" data-start="{" data-end="}">
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html#a7331fff1d12f2f8b72b0006a3ad0dd83"> 65</a></span> METAL_FUNC <span class="keyword">static</span> <span class="keyword">constexpr</span> short2 <a class="code hl_function" href="structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html#a7331fff1d12f2f8b72b0006a3ad0dd83">get_coord</a>(ushort simd_lane_id</div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a7331fff1d12f2f8b72b0006a3ad0dd83"> 65</a></span> METAL_FUNC <span class="keyword">static</span> <span class="keyword">constexpr</span> short2 <a class="code hl_function" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a7331fff1d12f2f8b72b0006a3ad0dd83">get_coord</a>(ushort simd_lane_id</div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> [[thread_index_in_simdgroup]]) {</div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> <span class="keyword">const</span> <span class="keywordtype">short</span> qid = simd_lane_id / 4;</div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> <span class="keyword">const</span> <span class="keywordtype">short</span> fm = (qid &amp; 4) + ((simd_lane_id / 2) % 4);</div>
@@ -170,12 +184,12 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> <span class="keyword">template</span> &lt;<span class="keyword">typename</span> SrcPtrType, <span class="keyword">typename</span> StrX, <span class="keyword">typename</span> StrY&gt;</div>
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> METAL_FUNC <span class="keyword">static</span> <span class="keyword">constexpr</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen00075" data-start="{" data-end="}">
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html#ac73006b36fc710feda3a7c796e21415c"> 75</a></span> <a class="code hl_function" href="structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html#ac73006b36fc710feda3a7c796e21415c">load</a>(thread <a class="code hl_typedef" href="structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html#a9f53a5e9b046b4f217e782b733941b0c">frag_type</a>&amp; dst, SrcPtrType src, StrX str_x, StrY str_y) {</div>
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#ac73006b36fc710feda3a7c796e21415c"> 75</a></span> <a class="code hl_function" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#ac73006b36fc710feda3a7c796e21415c">load</a>(thread <a class="code hl_typedef" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a8536bfaa108031c2ea3e9ccdc766ee5b">frag_type</a>&amp; dst, SrcPtrType src, StrX str_x, StrY str_y) {</div>
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> <a class="code hl_define" href="steel_2defines_8h.html#a5a5c3095b132a7589bc19cd5cb80e2c6">STEEL_PRAGMA_UNROLL</a></div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> <span class="keywordflow">for</span> (<span class="keywordtype">short</span> i = 0; i &lt; kElemRows; i++) {</div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> <span class="keywordflow">for</span> (<span class="keywordtype">short</span> i = 0; i &lt; <a class="code hl_variable" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a76aa5aa690dbcc954e957d767fad661f">kElemRows</a>; i++) {</div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> <a class="code hl_define" href="steel_2defines_8h.html#a5a5c3095b132a7589bc19cd5cb80e2c6">STEEL_PRAGMA_UNROLL</a></div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> <span class="keywordflow">for</span> (<span class="keywordtype">short</span> j = 0; j &lt; kElemCols; j++) {</div>
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> dst[i * kElemCols + j] = <span class="keyword">static_cast&lt;</span>T<span class="keyword">&gt;</span>(src[i * str_x + j * str_y]);</div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> <span class="keywordflow">for</span> (<span class="keywordtype">short</span> j = 0; j &lt; <a class="code hl_variable" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a7c212200d86b4e93f274d99addf668bd">kElemCols</a>; j++) {</div>
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> dst[i * <a class="code hl_variable" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a7c212200d86b4e93f274d99addf668bd">kElemCols</a> + j] = <span class="keyword">static_cast&lt;</span>T<span class="keyword">&gt;</span>(src[i * str_x + j * str_y]);</div>
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> }</div>
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> }</div>
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> }</div>
@@ -190,15 +204,15 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> <span class="keyword">typename</span> OffX,</div>
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> <span class="keyword">typename</span> OffY&gt;</div>
<div class="foldopen" id="foldopen00093" data-start="{" data-end="}">
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html#ad22aaee4a2938cbdd315b39eda84e07d"> 93</a></span> METAL_FUNC <span class="keyword">static</span> <span class="keyword">constexpr</span> <span class="keywordtype">void</span> <a class="code hl_function" href="structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html#ad22aaee4a2938cbdd315b39eda84e07d">load_safe</a>(</div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> thread <a class="code hl_typedef" href="structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html#a9f53a5e9b046b4f217e782b733941b0c">frag_type</a>&amp; dst,</div>
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#ad22aaee4a2938cbdd315b39eda84e07d"> 93</a></span> METAL_FUNC <span class="keyword">static</span> <span class="keyword">constexpr</span> <span class="keywordtype">void</span> <a class="code hl_function" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#ad22aaee4a2938cbdd315b39eda84e07d">load_safe</a>(</div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> thread <a class="code hl_typedef" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a8536bfaa108031c2ea3e9ccdc766ee5b">frag_type</a>&amp; dst,</div>
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> SrcPtrType src,</div>
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> StrX str_x,</div>
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> StrY str_y,</div>
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> LimX lim_x,</div>
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> LimY lim_y,</div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> OffX off_x = <a class="code hl_struct" href="structmlx_1_1steel_1_1integral__constant.html">Int&lt;0&gt;</a>{},</div>
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> OffY off_y = <a class="code hl_struct" href="structmlx_1_1steel_1_1integral__constant.html">Int&lt;0&gt;</a>{}) {</div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> OffX off_x = <a class="code hl_typedef" href="namespacemlx_1_1steel.html#afe36ddf6725498d273e5eef4f1579891">Int&lt;0&gt;</a>{},</div>
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> OffY off_y = <a class="code hl_typedef" href="namespacemlx_1_1steel.html#afe36ddf6725498d273e5eef4f1579891">Int&lt;0&gt;</a>{}) {</div>
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> <a class="code hl_define" href="steel_2defines_8h.html#a5a5c3095b132a7589bc19cd5cb80e2c6">STEEL_PRAGMA_UNROLL</a></div>
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> <span class="keywordflow">for</span> (<span class="keywordtype">short</span> i = 0; i &lt; kElemRows; i++) {</div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> <a class="code hl_define" href="steel_2defines_8h.html#a5a5c3095b132a7589bc19cd5cb80e2c6">STEEL_PRAGMA_UNROLL</a></div>
@@ -217,14 +231,14 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> <span class="keyword">template</span> &lt;<span class="keyword">typename</span> DstPtrType, <span class="keyword">typename</span> StrX, <span class="keyword">typename</span> StrY&gt;</div>
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> METAL_FUNC <span class="keyword">static</span> <span class="keyword">constexpr</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen00118" data-start="{" data-end="}">
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html#aa8f50ea8961ec5b35c1b81366d64f2cb"> 118</a></span> <a class="code hl_function" href="structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html#aa8f50ea8961ec5b35c1b81366d64f2cb">store</a>(<span class="keyword">const</span> thread <a class="code hl_typedef" href="structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html#a9f53a5e9b046b4f217e782b733941b0c">frag_type</a>&amp; src, DstPtrType dst, StrX str_x, StrY str_y) {</div>
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#aa8f50ea8961ec5b35c1b81366d64f2cb"> 118</a></span> <a class="code hl_function" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#aa8f50ea8961ec5b35c1b81366d64f2cb">store</a>(<span class="keyword">const</span> thread <a class="code hl_typedef" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a8536bfaa108031c2ea3e9ccdc766ee5b">frag_type</a>&amp; src, DstPtrType dst, StrX str_x, StrY str_y) {</div>
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> <span class="keyword">using </span>U = <a class="code hl_typedef" href="namespacemetal.html#ac82ee6c3fbe9ec5c78c07329424aaec9">pointer_element_t&lt;DstPtrType&gt;</a>;</div>
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> </div>
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> <a class="code hl_define" href="steel_2defines_8h.html#a5a5c3095b132a7589bc19cd5cb80e2c6">STEEL_PRAGMA_UNROLL</a></div>
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> <span class="keywordflow">for</span> (<span class="keywordtype">short</span> i = 0; i &lt; kElemRows; i++) {</div>
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> <span class="keywordflow">for</span> (<span class="keywordtype">short</span> i = 0; i &lt; <a class="code hl_variable" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a76aa5aa690dbcc954e957d767fad661f">kElemRows</a>; i++) {</div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> <a class="code hl_define" href="steel_2defines_8h.html#a5a5c3095b132a7589bc19cd5cb80e2c6">STEEL_PRAGMA_UNROLL</a></div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> <span class="keywordflow">for</span> (<span class="keywordtype">short</span> j = 0; j &lt; kElemCols; j++) {</div>
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> dst[i * str_x + j * str_y] = <span class="keyword">static_cast&lt;</span>U<span class="keyword">&gt;</span>(src[i * kElemCols + j]);</div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> <span class="keywordflow">for</span> (<span class="keywordtype">short</span> j = 0; j &lt; <a class="code hl_variable" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a7c212200d86b4e93f274d99addf668bd">kElemCols</a>; j++) {</div>
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> dst[i * str_x + j * str_y] = <span class="keyword">static_cast&lt;</span>U<span class="keyword">&gt;</span>(src[i * <a class="code hl_variable" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a7c212200d86b4e93f274d99addf668bd">kElemCols</a> + j]);</div>
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> }</div>
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> }</div>
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> }</div>
@@ -239,15 +253,15 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> <span class="keyword">typename</span> OffX,</div>
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> <span class="keyword">typename</span> OffY&gt;</div>
<div class="foldopen" id="foldopen00138" data-start="{" data-end="}">
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html#a1f0b00daad8eba2f855bb306e70d2328"> 138</a></span> METAL_FUNC <span class="keyword">static</span> <span class="keyword">constexpr</span> <span class="keywordtype">void</span> <a class="code hl_function" href="structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html#a1f0b00daad8eba2f855bb306e70d2328">store_safe</a>(</div>
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> <span class="keyword">const</span> thread <a class="code hl_typedef" href="structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html#a9f53a5e9b046b4f217e782b733941b0c">frag_type</a>&amp; src,</div>
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a1f0b00daad8eba2f855bb306e70d2328"> 138</a></span> METAL_FUNC <span class="keyword">static</span> <span class="keyword">constexpr</span> <span class="keywordtype">void</span> <a class="code hl_function" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a1f0b00daad8eba2f855bb306e70d2328">store_safe</a>(</div>
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> <span class="keyword">const</span> thread <a class="code hl_typedef" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a8536bfaa108031c2ea3e9ccdc766ee5b">frag_type</a>&amp; src,</div>
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> DstPtrType dst,</div>
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> StrX str_x,</div>
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> StrY str_y,</div>
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> LimX lim_x,</div>
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> LimY lim_y,</div>
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> OffX off_x = <a class="code hl_struct" href="structmlx_1_1steel_1_1integral__constant.html">Int&lt;0&gt;</a>{},</div>
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> OffY off_y = <a class="code hl_struct" href="structmlx_1_1steel_1_1integral__constant.html">Int&lt;0&gt;</a>{}) {</div>
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> OffX off_x = <a class="code hl_typedef" href="namespacemlx_1_1steel.html#afe36ddf6725498d273e5eef4f1579891">Int&lt;0&gt;</a>{},</div>
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> OffY off_y = <a class="code hl_typedef" href="namespacemlx_1_1steel.html#afe36ddf6725498d273e5eef4f1579891">Int&lt;0&gt;</a>{}) {</div>
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> <span class="keyword">using </span>U = <a class="code hl_typedef" href="namespacemetal.html#ac82ee6c3fbe9ec5c78c07329424aaec9">pointer_element_t&lt;DstPtrType&gt;</a>;</div>
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> </div>
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> <a class="code hl_define" href="steel_2defines_8h.html#a5a5c3095b132a7589bc19cd5cb80e2c6">STEEL_PRAGMA_UNROLL</a></div>
@@ -264,40 +278,40 @@ $(function(){ initResizable(false); });
</div>
<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> </div>
<div class="foldopen" id="foldopen00161" data-start="{" data-end="}">
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html#a8028512f5a3d2b6acaf966be529627a3"> 161</a></span> METAL_FUNC <span class="keyword">static</span> <span class="keyword">constexpr</span> <span class="keywordtype">void</span> <a class="code hl_function" href="structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html#a8028512f5a3d2b6acaf966be529627a3">mma</a>(</div>
<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> thread <a class="code hl_typedef" href="structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html#a9f53a5e9b046b4f217e782b733941b0c">frag_type</a>&amp; D,</div>
<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> thread <a class="code hl_typedef" href="structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html#a9f53a5e9b046b4f217e782b733941b0c">frag_type</a>&amp; A,</div>
<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> thread <a class="code hl_typedef" href="structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html#a9f53a5e9b046b4f217e782b733941b0c">frag_type</a>&amp; B,</div>
<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> thread <a class="code hl_typedef" href="structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html#a9f53a5e9b046b4f217e782b733941b0c">frag_type</a>&amp; C) {</div>
<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> <a class="code hl_typedef" href="structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html#a958b6952cbd9462d7ae9f6e029631887">mat_type</a> D_mat;</div>
<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> <a class="code hl_typedef" href="structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html#a958b6952cbd9462d7ae9f6e029631887">mat_type</a> A_mat;</div>
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> <a class="code hl_typedef" href="structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html#a958b6952cbd9462d7ae9f6e029631887">mat_type</a> B_mat;</div>
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> <a class="code hl_typedef" href="structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html#a958b6952cbd9462d7ae9f6e029631887">mat_type</a> C_mat;</div>
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a8028512f5a3d2b6acaf966be529627a3"> 161</a></span> METAL_FUNC <span class="keyword">static</span> <span class="keyword">constexpr</span> <span class="keywordtype">void</span> <a class="code hl_function" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a8028512f5a3d2b6acaf966be529627a3">mma</a>(</div>
<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> thread <a class="code hl_typedef" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a8536bfaa108031c2ea3e9ccdc766ee5b">frag_type</a>&amp; D,</div>
<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> thread <a class="code hl_typedef" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a8536bfaa108031c2ea3e9ccdc766ee5b">frag_type</a>&amp; A,</div>
<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> thread <a class="code hl_typedef" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a8536bfaa108031c2ea3e9ccdc766ee5b">frag_type</a>&amp; B,</div>
<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> thread <a class="code hl_typedef" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a8536bfaa108031c2ea3e9ccdc766ee5b">frag_type</a>&amp; C) {</div>
<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> <a class="code hl_typedef" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a25675ae18947a97c6e04157b540103a9">mat_type</a> D_mat;</div>
<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> <a class="code hl_typedef" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a25675ae18947a97c6e04157b540103a9">mat_type</a> A_mat;</div>
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> <a class="code hl_typedef" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a25675ae18947a97c6e04157b540103a9">mat_type</a> B_mat;</div>
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> <a class="code hl_typedef" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a25675ae18947a97c6e04157b540103a9">mat_type</a> C_mat;</div>
<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> </div>
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> <span class="keyword">reinterpret_cast&lt;</span>thread <a class="code hl_typedef" href="structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html#a9f53a5e9b046b4f217e782b733941b0c">frag_type</a>&amp;<span class="keyword">&gt;</span>(A_mat.thread_elements()) = A;</div>
<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> <span class="keyword">reinterpret_cast&lt;</span>thread <a class="code hl_typedef" href="structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html#a9f53a5e9b046b4f217e782b733941b0c">frag_type</a>&amp;<span class="keyword">&gt;</span>(B_mat.thread_elements()) = B;</div>
<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> <span class="keyword">reinterpret_cast&lt;</span>thread <a class="code hl_typedef" href="structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html#a9f53a5e9b046b4f217e782b733941b0c">frag_type</a>&amp;<span class="keyword">&gt;</span>(C_mat.thread_elements()) = C;</div>
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> <span class="keyword">reinterpret_cast&lt;</span>thread <a class="code hl_typedef" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a8536bfaa108031c2ea3e9ccdc766ee5b">frag_type</a>&amp;<span class="keyword">&gt;</span>(A_mat.thread_elements()) = A;</div>
<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> <span class="keyword">reinterpret_cast&lt;</span>thread <a class="code hl_typedef" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a8536bfaa108031c2ea3e9ccdc766ee5b">frag_type</a>&amp;<span class="keyword">&gt;</span>(B_mat.thread_elements()) = B;</div>
<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> <span class="keyword">reinterpret_cast&lt;</span>thread <a class="code hl_typedef" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a8536bfaa108031c2ea3e9ccdc766ee5b">frag_type</a>&amp;<span class="keyword">&gt;</span>(C_mat.thread_elements()) = C;</div>
<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> </div>
<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> mma(D_mat, A_mat, B_mat, C_mat);</div>
<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> <a class="code hl_function" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a8028512f5a3d2b6acaf966be529627a3">mma</a>(D_mat, A_mat, B_mat, C_mat);</div>
<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> </div>
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> D = <span class="keyword">reinterpret_cast&lt;</span>thread <a class="code hl_typedef" href="structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html#a9f53a5e9b046b4f217e782b733941b0c">frag_type</a>&amp;<span class="keyword">&gt;</span>(D_mat.thread_elements());</div>
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> D = <span class="keyword">reinterpret_cast&lt;</span>thread <a class="code hl_typedef" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a8536bfaa108031c2ea3e9ccdc766ee5b">frag_type</a>&amp;<span class="keyword">&gt;</span>(D_mat.thread_elements());</div>
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> }</div>
</div>
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> </div>
<div class="foldopen" id="foldopen00180" data-start="{" data-end="}">
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html#a1868f57d57c8adedab2c58492ec76946"> 180</a></span> METAL_FUNC <span class="keyword">static</span> <span class="keyword">constexpr</span> <span class="keywordtype">void</span> <a class="code hl_function" href="structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html#a1868f57d57c8adedab2c58492ec76946">mma</a>(</div>
<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> thread <a class="code hl_typedef" href="structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html#a958b6952cbd9462d7ae9f6e029631887">mat_type</a>&amp; D,</div>
<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> thread <a class="code hl_typedef" href="structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html#a958b6952cbd9462d7ae9f6e029631887">mat_type</a>&amp; A,</div>
<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> thread <a class="code hl_typedef" href="structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html#a958b6952cbd9462d7ae9f6e029631887">mat_type</a>&amp; B,</div>
<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> thread <a class="code hl_typedef" href="structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html#a958b6952cbd9462d7ae9f6e029631887">mat_type</a>&amp; C) {</div>
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a1868f57d57c8adedab2c58492ec76946"> 180</a></span> METAL_FUNC <span class="keyword">static</span> <span class="keyword">constexpr</span> <span class="keywordtype">void</span> <a class="code hl_function" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a1868f57d57c8adedab2c58492ec76946">mma</a>(</div>
<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> thread <a class="code hl_typedef" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a25675ae18947a97c6e04157b540103a9">mat_type</a>&amp; D,</div>
<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> thread <a class="code hl_typedef" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a25675ae18947a97c6e04157b540103a9">mat_type</a>&amp; A,</div>
<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> thread <a class="code hl_typedef" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a25675ae18947a97c6e04157b540103a9">mat_type</a>&amp; B,</div>
<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> thread <a class="code hl_typedef" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a25675ae18947a97c6e04157b540103a9">mat_type</a>&amp; C) {</div>
<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> simdgroup_multiply_accumulate(D, A, B, C);</div>
<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> }</div>
</div>
<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> </div>
<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> <span class="keyword">template</span> &lt;<span class="keyword">typename</span> Op&gt;</div>
<div class="foldopen" id="foldopen00189" data-start="{" data-end="}">
<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html#a51d662e4cff88b5ad17d7c44bb6b6970"> 189</a></span> METAL_FUNC <span class="keyword">static</span> <span class="keyword">constexpr</span> <span class="keywordtype">void</span> <a class="code hl_function" href="structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html#a51d662e4cff88b5ad17d7c44bb6b6970">row_reduce</a>(</div>
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> thread <span class="keyword">const</span> <a class="code hl_typedef" href="structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html#a9f53a5e9b046b4f217e782b733941b0c">frag_type</a>&amp; inp_vals,</div>
<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a51d662e4cff88b5ad17d7c44bb6b6970"> 189</a></span> METAL_FUNC <span class="keyword">static</span> <span class="keyword">constexpr</span> <span class="keywordtype">void</span> <a class="code hl_function" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a51d662e4cff88b5ad17d7c44bb6b6970">row_reduce</a>(</div>
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> thread <span class="keyword">const</span> <a class="code hl_typedef" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a8536bfaa108031c2ea3e9ccdc766ee5b">frag_type</a>&amp; inp_vals,</div>
<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> thread T* reduced_vals) {</div>
<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> T thr_reduce = Op::apply(inp_vals.x, inp_vals.y);</div>
<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> </div>
@@ -313,15 +327,15 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> </div>
<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> <span class="keyword">template</span> &lt;<span class="keyword">typename</span> Op&gt;</div>
<div class="foldopen" id="foldopen00204" data-start="{" data-end="}">
<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html#a318c4279bdc7b39b7919f108b1cd8010"> 204</a></span> METAL_FUNC <span class="keyword">static</span> <span class="keyword">constexpr</span> <span class="keywordtype">void</span> <a class="code hl_function" href="structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html#a318c4279bdc7b39b7919f108b1cd8010">row_bin_op</a>(</div>
<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> thread <a class="code hl_typedef" href="structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html#a9f53a5e9b046b4f217e782b733941b0c">frag_type</a>&amp; inp_vals,</div>
<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a318c4279bdc7b39b7919f108b1cd8010"> 204</a></span> METAL_FUNC <span class="keyword">static</span> <span class="keyword">constexpr</span> <span class="keywordtype">void</span> <a class="code hl_function" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a318c4279bdc7b39b7919f108b1cd8010">row_bin_op</a>(</div>
<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> thread <a class="code hl_typedef" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a8536bfaa108031c2ea3e9ccdc766ee5b">frag_type</a>&amp; inp_vals,</div>
<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> thread T* row_vals) {</div>
<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> <a class="code hl_define" href="steel_2defines_8h.html#a5a5c3095b132a7589bc19cd5cb80e2c6">STEEL_PRAGMA_UNROLL</a></div>
<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> <span class="keywordflow">for</span> (<span class="keywordtype">short</span> i = 0; i &lt; kElemRows; i++) {</div>
<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> <span class="keywordflow">for</span> (<span class="keywordtype">short</span> i = 0; i &lt; <a class="code hl_variable" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a76aa5aa690dbcc954e957d767fad661f">kElemRows</a>; i++) {</div>
<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span> <a class="code hl_define" href="steel_2defines_8h.html#a5a5c3095b132a7589bc19cd5cb80e2c6">STEEL_PRAGMA_UNROLL</a></div>
<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> <span class="keywordflow">for</span> (<span class="keywordtype">short</span> j = 0; j &lt; kElemCols; j++) {</div>
<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> inp_vals[i * kElemCols + j] =</div>
<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span> Op::apply(inp_vals[i * kElemCols + j], row_vals[i]);</div>
<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> <span class="keywordflow">for</span> (<span class="keywordtype">short</span> j = 0; j &lt; <a class="code hl_variable" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a7c212200d86b4e93f274d99addf668bd">kElemCols</a>; j++) {</div>
<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> inp_vals[i * <a class="code hl_variable" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a7c212200d86b4e93f274d99addf668bd">kElemCols</a> + j] =</div>
<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span> Op::apply(inp_vals[i * <a class="code hl_variable" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a7c212200d86b4e93f274d99addf668bd">kElemCols</a> + j], row_vals[i]);</div>
<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> }</div>
<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> }</div>
<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> }</div>
@@ -334,8 +348,8 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> <span class="keywordtype">int</span> kTileCols_,</div>
<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span> <span class="keyword">class </span>MMAFrag_ = BaseMMAFrag&lt;T, 8, 8&gt;&gt;</div>
<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span><span class="keyword">struct </span>MMATile {</div>
<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_m_m_a_tile.html#a6dadcd666afb3759a11094e754560dd4"> 224</a></span> <span class="keyword">using </span><a class="code hl_typedef" href="structmlx_1_1steel_1_1_m_m_a_tile.html#a6dadcd666afb3759a11094e754560dd4">MMAFrag_t</a> = MMAFrag_;</div>
<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_m_m_a_tile.html#a824409bc107330805853f932e80a7628"> 225</a></span> <span class="keyword">using </span><a class="code hl_typedef" href="structmlx_1_1steel_1_1_m_m_a_tile.html#a824409bc107330805853f932e80a7628">elem_type</a> = T;</div>
<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_m_m_a_tile.html#abe33de70e34300745bad9aa822fd0382"> 224</a></span> <span class="keyword">using </span><a class="code hl_typedef" href="structmlx_1_1steel_1_1_m_m_a_tile.html#abe33de70e34300745bad9aa822fd0382">MMAFrag_t</a> = MMAFrag_;</div>
<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_m_m_a_tile.html#a80078f0dfa4c225e79d9b460202d5e2c"> 225</a></span> <span class="keyword">using </span><a class="code hl_typedef" href="structmlx_1_1steel_1_1_m_m_a_tile.html#a80078f0dfa4c225e79d9b460202d5e2c">elem_type</a> = T;</div>
<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_m_m_a_tile.html#a594142f957ffb99296a243f7af7b59e7"> 226</a></span> <a class="code hl_define" href="steel_2defines_8h.html#a90b91c866313ffa46eff6d9cc944ad2b">STEEL_CONST</a> <span class="keywordtype">int</span> <a class="code hl_variable" href="structmlx_1_1steel_1_1_m_m_a_tile.html#a594142f957ffb99296a243f7af7b59e7">kFragRows</a> = MMAFrag_t::kFragRows;</div>
<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_m_m_a_tile.html#ad095371db98e7c335ec41ca77c10f906"> 227</a></span> <a class="code hl_define" href="steel_2defines_8h.html#a90b91c866313ffa46eff6d9cc944ad2b">STEEL_CONST</a> <span class="keywordtype">int</span> <a class="code hl_variable" href="structmlx_1_1steel_1_1_m_m_a_tile.html#ad095371db98e7c335ec41ca77c10f906">kFragCols</a> = MMAFrag_t::kFragCols;</div>
<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_m_m_a_tile.html#aef0ea2387e1ff5767bff8563b2d36bd6"> 228</a></span> <a class="code hl_define" href="steel_2defines_8h.html#a90b91c866313ffa46eff6d9cc944ad2b">STEEL_CONST</a> <span class="keywordtype">int</span> <a class="code hl_variable" href="structmlx_1_1steel_1_1_m_m_a_tile.html#aef0ea2387e1ff5767bff8563b2d36bd6">kElemsPerFrag</a> = MMAFrag_t::kElemsPerFrag;</div>
@@ -394,14 +408,14 @@ $(function(){ initResizable(false); });
</div>
<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"> 274</span> </div>
<div class="foldopen" id="foldopen00275" data-start="{" data-end="}">
<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_m_m_a_tile.html#a865ece5ad0b9a56937b6d77a18b5a1dc"> 275</a></span> METAL_FUNC thread <a class="code hl_typedef" href="structmlx_1_1steel_1_1_m_m_a_tile.html#a824409bc107330805853f932e80a7628">elem_type</a>* <a class="code hl_function" href="structmlx_1_1steel_1_1_m_m_a_tile.html#a865ece5ad0b9a56937b6d77a18b5a1dc">elems</a>() {</div>
<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</span> <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast&lt;</span>thread <a class="code hl_typedef" href="structmlx_1_1steel_1_1_m_m_a_tile.html#a824409bc107330805853f932e80a7628">elem_type</a>*<span class="keyword">&gt;</span>(<a class="code hl_variable" href="structmlx_1_1steel_1_1_m_m_a_tile.html#a684e6c6d9f00f583994285b60aaa3b62">val_frags</a>);</div>
<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_m_m_a_tile.html#a865ece5ad0b9a56937b6d77a18b5a1dc"> 275</a></span> METAL_FUNC thread <a class="code hl_typedef" href="structmlx_1_1steel_1_1_m_m_a_tile.html#a80078f0dfa4c225e79d9b460202d5e2c">elem_type</a>* <a class="code hl_function" href="structmlx_1_1steel_1_1_m_m_a_tile.html#a865ece5ad0b9a56937b6d77a18b5a1dc">elems</a>() {</div>
<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</span> <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast&lt;</span>thread <a class="code hl_typedef" href="structmlx_1_1steel_1_1_m_m_a_tile.html#a80078f0dfa4c225e79d9b460202d5e2c">elem_type</a>*<span class="keyword">&gt;</span>(<a class="code hl_variable" href="structmlx_1_1steel_1_1_m_m_a_tile.html#a684e6c6d9f00f583994285b60aaa3b62">val_frags</a>);</div>
<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"> 277</span> }</div>
</div>
<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"> 278</span> </div>
<div class="foldopen" id="foldopen00279" data-start="{" data-end="}">
<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_m_m_a_tile.html#ae21bb7cce701290de84c6015e064d8a1"> 279</a></span> METAL_FUNC <span class="keyword">const</span> thread <a class="code hl_typedef" href="structmlx_1_1steel_1_1_m_m_a_tile.html#a824409bc107330805853f932e80a7628">elem_type</a>* <a class="code hl_function" href="structmlx_1_1steel_1_1_m_m_a_tile.html#ae21bb7cce701290de84c6015e064d8a1">elems</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a id="l00280" name="l00280"></a><span class="lineno"> 280</span> <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span>thread <a class="code hl_typedef" href="structmlx_1_1steel_1_1_m_m_a_tile.html#a824409bc107330805853f932e80a7628">elem_type</a>*<span class="keyword">&gt;</span>(<a class="code hl_variable" href="structmlx_1_1steel_1_1_m_m_a_tile.html#a684e6c6d9f00f583994285b60aaa3b62">val_frags</a>);</div>
<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_m_m_a_tile.html#ae21bb7cce701290de84c6015e064d8a1"> 279</a></span> METAL_FUNC <span class="keyword">const</span> thread <a class="code hl_typedef" href="structmlx_1_1steel_1_1_m_m_a_tile.html#a80078f0dfa4c225e79d9b460202d5e2c">elem_type</a>* <a class="code hl_function" href="structmlx_1_1steel_1_1_m_m_a_tile.html#ae21bb7cce701290de84c6015e064d8a1">elems</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a id="l00280" name="l00280"></a><span class="lineno"> 280</span> <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast&lt;</span><span class="keyword">const </span>thread <a class="code hl_typedef" href="structmlx_1_1steel_1_1_m_m_a_tile.html#a80078f0dfa4c225e79d9b460202d5e2c">elem_type</a>*<span class="keyword">&gt;</span>(<a class="code hl_variable" href="structmlx_1_1steel_1_1_m_m_a_tile.html#a684e6c6d9f00f583994285b60aaa3b62">val_frags</a>);</div>
<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"> 281</span> }</div>
</div>
<div class="line"><a id="l00282" name="l00282"></a><span class="lineno"> 282</span> </div>
@@ -445,8 +459,8 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00315" name="l00315"></a><span class="lineno"> 315</span> &amp;(</div>
<div class="line"><a id="l00316" name="l00316"></a><span class="lineno"> 316</span> src[(i * <a class="code hl_variable" href="structmlx_1_1steel_1_1_m_m_a_tile.html#a594142f957ffb99296a243f7af7b59e7">kFragRows</a>) * w_x * str_x +</div>
<div class="line"><a id="l00317" name="l00317"></a><span class="lineno"> 317</span> (j * <a class="code hl_variable" href="structmlx_1_1steel_1_1_m_m_a_tile.html#ad095371db98e7c335ec41ca77c10f906">kFragCols</a>) * w_y * str_y]),</div>
<div class="line"><a id="l00318" name="l00318"></a><span class="lineno"> 318</span> <a class="code hl_struct" href="structmlx_1_1steel_1_1integral__constant.html">Int&lt;str_x&gt;</a>{},</div>
<div class="line"><a id="l00319" name="l00319"></a><span class="lineno"> 319</span> <a class="code hl_struct" href="structmlx_1_1steel_1_1integral__constant.html">Int&lt;str_y&gt;</a>{});</div>
<div class="line"><a id="l00318" name="l00318"></a><span class="lineno"> 318</span> <a class="code hl_typedef" href="namespacemlx_1_1steel.html#afe36ddf6725498d273e5eef4f1579891">Int&lt;str_x&gt;</a>{},</div>
<div class="line"><a id="l00319" name="l00319"></a><span class="lineno"> 319</span> <a class="code hl_typedef" href="namespacemlx_1_1steel.html#afe36ddf6725498d273e5eef4f1579891">Int&lt;str_y&gt;</a>{});</div>
<div class="line"><a id="l00320" name="l00320"></a><span class="lineno"> 320</span> }</div>
<div class="line"><a id="l00321" name="l00321"></a><span class="lineno"> 321</span> }</div>
<div class="line"><a id="l00322" name="l00322"></a><span class="lineno"> 322</span> }</div>
@@ -464,8 +478,8 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00332" name="l00332"></a><span class="lineno"> 332</span> &amp;(</div>
<div class="line"><a id="l00333" name="l00333"></a><span class="lineno"> 333</span> dst[(i * <a class="code hl_variable" href="structmlx_1_1steel_1_1_m_m_a_tile.html#a594142f957ffb99296a243f7af7b59e7">kFragRows</a>) * w_x * str_x +</div>
<div class="line"><a id="l00334" name="l00334"></a><span class="lineno"> 334</span> (j * <a class="code hl_variable" href="structmlx_1_1steel_1_1_m_m_a_tile.html#ad095371db98e7c335ec41ca77c10f906">kFragCols</a>) * w_y * str_y]),</div>
<div class="line"><a id="l00335" name="l00335"></a><span class="lineno"> 335</span> <a class="code hl_struct" href="structmlx_1_1steel_1_1integral__constant.html">Int&lt;str_x&gt;</a>{},</div>
<div class="line"><a id="l00336" name="l00336"></a><span class="lineno"> 336</span> <a class="code hl_struct" href="structmlx_1_1steel_1_1integral__constant.html">Int&lt;str_y&gt;</a>{});</div>
<div class="line"><a id="l00335" name="l00335"></a><span class="lineno"> 335</span> <a class="code hl_typedef" href="namespacemlx_1_1steel.html#afe36ddf6725498d273e5eef4f1579891">Int&lt;str_x&gt;</a>{},</div>
<div class="line"><a id="l00336" name="l00336"></a><span class="lineno"> 336</span> <a class="code hl_typedef" href="namespacemlx_1_1steel.html#afe36ddf6725498d273e5eef4f1579891">Int&lt;str_y&gt;</a>{});</div>
<div class="line"><a id="l00337" name="l00337"></a><span class="lineno"> 337</span> }</div>
<div class="line"><a id="l00338" name="l00338"></a><span class="lineno"> 338</span> }</div>
<div class="line"><a id="l00339" name="l00339"></a><span class="lineno"> 339</span> }</div>
@@ -482,7 +496,7 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00348" name="l00348"></a><span class="lineno"> 348</span> <a class="code hl_function" href="structmlx_1_1steel_1_1_m_m_a_tile.html#a1a6b1446e8c8da46885bbaa8e8fdc7e4">frag_at</a>(i, j),</div>
<div class="line"><a id="l00349" name="l00349"></a><span class="lineno"> 349</span> &amp;(src[(i * <a class="code hl_variable" href="structmlx_1_1steel_1_1_m_m_a_tile.html#a594142f957ffb99296a243f7af7b59e7">kFragRows</a>) * w_x * ld + (j * <a class="code hl_variable" href="structmlx_1_1steel_1_1_m_m_a_tile.html#ad095371db98e7c335ec41ca77c10f906">kFragCols</a>) * w_y]),</div>
<div class="line"><a id="l00350" name="l00350"></a><span class="lineno"> 350</span> ld,</div>
<div class="line"><a id="l00351" name="l00351"></a><span class="lineno"> 351</span> <a class="code hl_struct" href="structmlx_1_1steel_1_1integral__constant.html">Int&lt;1&gt;</a>{});</div>
<div class="line"><a id="l00351" name="l00351"></a><span class="lineno"> 351</span> <a class="code hl_typedef" href="namespacemlx_1_1steel.html#afe36ddf6725498d273e5eef4f1579891">Int&lt;1&gt;</a>{});</div>
<div class="line"><a id="l00352" name="l00352"></a><span class="lineno"> 352</span> }</div>
<div class="line"><a id="l00353" name="l00353"></a><span class="lineno"> 353</span> }</div>
<div class="line"><a id="l00354" name="l00354"></a><span class="lineno"> 354</span> }</div>
@@ -499,7 +513,7 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00363" name="l00363"></a><span class="lineno"> 363</span> <a class="code hl_function" href="structmlx_1_1steel_1_1_m_m_a_tile.html#a1a6b1446e8c8da46885bbaa8e8fdc7e4">frag_at</a>(i, j),</div>
<div class="line"><a id="l00364" name="l00364"></a><span class="lineno"> 364</span> &amp;(dst[(i * <a class="code hl_variable" href="structmlx_1_1steel_1_1_m_m_a_tile.html#a594142f957ffb99296a243f7af7b59e7">kFragRows</a>) * w_x * ld + (j * <a class="code hl_variable" href="structmlx_1_1steel_1_1_m_m_a_tile.html#ad095371db98e7c335ec41ca77c10f906">kFragCols</a>) * w_y]),</div>
<div class="line"><a id="l00365" name="l00365"></a><span class="lineno"> 365</span> ld,</div>
<div class="line"><a id="l00366" name="l00366"></a><span class="lineno"> 366</span> <a class="code hl_struct" href="structmlx_1_1steel_1_1integral__constant.html">Int&lt;1&gt;</a>{});</div>
<div class="line"><a id="l00366" name="l00366"></a><span class="lineno"> 366</span> <a class="code hl_typedef" href="namespacemlx_1_1steel.html#afe36ddf6725498d273e5eef4f1579891">Int&lt;1&gt;</a>{});</div>
<div class="line"><a id="l00367" name="l00367"></a><span class="lineno"> 367</span> }</div>
<div class="line"><a id="l00368" name="l00368"></a><span class="lineno"> 368</span> }</div>
<div class="line"><a id="l00369" name="l00369"></a><span class="lineno"> 369</span> }</div>
@@ -517,7 +531,7 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00379" name="l00379"></a><span class="lineno"> 379</span> <a class="code hl_function" href="structmlx_1_1steel_1_1_m_m_a_tile.html#a1a6b1446e8c8da46885bbaa8e8fdc7e4">frag_at</a>(i, j),</div>
<div class="line"><a id="l00380" name="l00380"></a><span class="lineno"> 380</span> src,</div>
<div class="line"><a id="l00381" name="l00381"></a><span class="lineno"> 381</span> ld,</div>
<div class="line"><a id="l00382" name="l00382"></a><span class="lineno"> 382</span> <a class="code hl_struct" href="structmlx_1_1steel_1_1integral__constant.html">Int&lt;1&gt;</a>{},</div>
<div class="line"><a id="l00382" name="l00382"></a><span class="lineno"> 382</span> <a class="code hl_typedef" href="namespacemlx_1_1steel.html#afe36ddf6725498d273e5eef4f1579891">Int&lt;1&gt;</a>{},</div>
<div class="line"><a id="l00383" name="l00383"></a><span class="lineno"> 383</span> src_tile_dims.y,</div>
<div class="line"><a id="l00384" name="l00384"></a><span class="lineno"> 384</span> src_tile_dims.x,</div>
<div class="line"><a id="l00385" name="l00385"></a><span class="lineno"> 385</span> (i * <a class="code hl_variable" href="structmlx_1_1steel_1_1_m_m_a_tile.html#a594142f957ffb99296a243f7af7b59e7">kFragRows</a>) * w_x,</div>
@@ -539,7 +553,7 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00399" name="l00399"></a><span class="lineno"> 399</span> <a class="code hl_function" href="structmlx_1_1steel_1_1_m_m_a_tile.html#a1a6b1446e8c8da46885bbaa8e8fdc7e4">frag_at</a>(i, j),</div>
<div class="line"><a id="l00400" name="l00400"></a><span class="lineno"> 400</span> dst,</div>
<div class="line"><a id="l00401" name="l00401"></a><span class="lineno"> 401</span> ld,</div>
<div class="line"><a id="l00402" name="l00402"></a><span class="lineno"> 402</span> <a class="code hl_struct" href="structmlx_1_1steel_1_1integral__constant.html">Int&lt;1&gt;</a>{},</div>
<div class="line"><a id="l00402" name="l00402"></a><span class="lineno"> 402</span> <a class="code hl_typedef" href="namespacemlx_1_1steel.html#afe36ddf6725498d273e5eef4f1579891">Int&lt;1&gt;</a>{},</div>
<div class="line"><a id="l00403" name="l00403"></a><span class="lineno"> 403</span> dst_tile_dims.y,</div>
<div class="line"><a id="l00404" name="l00404"></a><span class="lineno"> 404</span> dst_tile_dims.x,</div>
<div class="line"><a id="l00405" name="l00405"></a><span class="lineno"> 405</span> (i * <a class="code hl_variable" href="structmlx_1_1steel_1_1_m_m_a_tile.html#a594142f957ffb99296a243f7af7b59e7">kFragRows</a>) * w_x,</div>
@@ -592,7 +606,7 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00449" name="l00449"></a><span class="lineno"> 449</span><span class="keyword">struct </span>BlockMMA {</div>
<div class="line"><a id="l00450" name="l00450"></a><span class="lineno"> 450</span> <span class="comment">// MMAFrag size</span></div>
<div class="line"><a id="l00451" name="l00451"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_block_m_m_a.html#aee8caec45c1f9e4428586effbfe6137d"> 451</a></span> <a class="code hl_define" href="steel_2defines_8h.html#a90b91c866313ffa46eff6d9cc944ad2b">STEEL_CONST</a> <span class="keywordtype">short</span> <a class="code hl_variable" href="structmlx_1_1steel_1_1_block_m_m_a.html#aee8caec45c1f9e4428586effbfe6137d">kFragSize</a> = 8;</div>
<div class="line"><a id="l00452" name="l00452"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_block_m_m_a.html#a8231b0e3475077c1381eb8f5daf62e35"> 452</a></span> <span class="keyword">using </span><a class="code hl_struct" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html">MMAFrag_acc_t</a> = <a class="code hl_struct" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html">BaseMMAFrag&lt;AccumType, kFragSize, kFragSize&gt;</a>;</div>
<div class="line"><a id="l00452" name="l00452"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_block_m_m_a.html#ae2c42cb6d0dde785859164c195f4d13c"> 452</a></span> <span class="keyword">using </span><a class="code hl_typedef" href="structmlx_1_1steel_1_1_block_m_m_a.html#ae2c42cb6d0dde785859164c195f4d13c">MMAFrag_acc_t</a> = <a class="code hl_struct" href="structmlx_1_1steel_1_1_base_m_m_a_frag.html">BaseMMAFrag&lt;AccumType, kFragSize, kFragSize&gt;</a>;</div>
<div class="line"><a id="l00453" name="l00453"></a><span class="lineno"> 453</span> </div>
<div class="line"><a id="l00454" name="l00454"></a><span class="lineno"> 454</span> <span class="comment">// Warp tile simdgroup matrix strides along M</span></div>
<div class="line"><a id="l00455" name="l00455"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_block_m_m_a.html#a5b0029866f493363942133b55bff7307"> 455</a></span> <a class="code hl_define" href="steel_2defines_8h.html#a90b91c866313ffa46eff6d9cc944ad2b">STEEL_CONST</a> <span class="keywordtype">short</span> <a class="code hl_variable" href="structmlx_1_1steel_1_1_block_m_m_a.html#a5b0029866f493363942133b55bff7307">TM_stride</a> = <a class="code hl_variable" href="structmlx_1_1steel_1_1_block_m_m_a.html#aee8caec45c1f9e4428586effbfe6137d">kFragSize</a> * WM;</div>
@@ -890,51 +904,59 @@ $(function(){ initResizable(false); });
<div class="ttc" id="anamespacemetal_html"><div class="ttname"><a href="namespacemetal.html">metal</a></div><div class="ttdef"><b>Definition</b> bf16_math.h:226</div></div>
<div class="ttc" id="anamespacemetal_html_a5017efc9605e069cfb507137cd1a1852"><div class="ttname"><a href="namespacemetal.html#a5017efc9605e069cfb507137cd1a1852">metal::simd_shuffle_xor</a></div><div class="ttdeci">METAL_FUNC bfloat16_t simd_shuffle_xor(bfloat16_t data, ushort mask)</div><div class="ttdef"><b>Definition</b> bf16_math.h:377</div></div>
<div class="ttc" id="anamespacemetal_html_ac82ee6c3fbe9ec5c78c07329424aaec9"><div class="ttname"><a href="namespacemetal.html#ac82ee6c3fbe9ec5c78c07329424aaec9">metal::pointer_element_t</a></div><div class="ttdeci">typename pointer_element&lt; remove_cv_t&lt; T &gt; &gt;::type pointer_element_t</div><div class="ttdef"><b>Definition</b> type_traits.h:51</div></div>
<div class="ttc" id="anamespacemlx_1_1steel_html"><div class="ttname"><a href="namespacemlx_1_1steel.html">mlx::steel</a></div><div class="ttdef"><b>Definition</b> attn.h:19</div></div>
<div class="ttc" id="anamespacemlx_1_1steel_html_ad583e6038efc119542410f43b603d4ad"><div class="ttname"><a href="namespacemlx_1_1steel.html#ad583e6038efc119542410f43b603d4ad">mlx::steel::tile_matmad</a></div><div class="ttdeci">METAL_FUNC void tile_matmad(thread MMATile&lt; T, M, N &gt; &amp;D, thread MMATile&lt; U, M, K &gt; &amp;A, thread MMATile&lt; U, K, N &gt; &amp;B, thread MMATile&lt; T, M, N &gt; &amp;C)</div><div class="ttdef"><b>Definition</b> mma.h:413</div></div>
<div class="ttc" id="anamespacemlx_1_1steel_html_afe36ddf6725498d273e5eef4f1579891"><div class="ttname"><a href="namespacemlx_1_1steel.html#afe36ddf6725498d273e5eef4f1579891">mlx::steel::Int</a></div><div class="ttdeci">integral_constant&lt; int, val &gt; Int</div><div class="ttdef"><b>Definition</b> integral_constant.h:48</div></div>
<div class="ttc" id="anamespacemlx_html"><div class="ttname"><a href="namespacemlx.html">mlx</a></div><div class="ttdef"><b>Definition</b> allocator.h:7</div></div>
<div class="ttc" id="asteel_2defines_8h_html"><div class="ttname"><a href="steel_2defines_8h.html">defines.h</a></div></div>
<div class="ttc" id="asteel_2defines_8h_html_a5a5c3095b132a7589bc19cd5cb80e2c6"><div class="ttname"><a href="steel_2defines_8h.html#a5a5c3095b132a7589bc19cd5cb80e2c6">STEEL_PRAGMA_UNROLL</a></div><div class="ttdeci">#define STEEL_PRAGMA_UNROLL</div><div class="ttdef"><b>Definition</b> defines.h:4</div></div>
<div class="ttc" id="asteel_2defines_8h_html_a90b91c866313ffa46eff6d9cc944ad2b"><div class="ttname"><a href="steel_2defines_8h.html#a90b91c866313ffa46eff6d9cc944ad2b">STEEL_CONST</a></div><div class="ttdeci">#define STEEL_CONST</div><div class="ttdef"><b>Definition</b> defines.h:3</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4_html_a1868f57d57c8adedab2c58492ec76946"><div class="ttname"><a href="structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html#a1868f57d57c8adedab2c58492ec76946">mlx::steel::BaseMMAFrag&lt; T, 8, 8 &gt;::mma</a></div><div class="ttdeci">static METAL_FUNC constexpr void mma(thread mat_type &amp;D, thread mat_type &amp;A, thread mat_type &amp;B, thread mat_type &amp;C)</div><div class="ttdef"><b>Definition</b> mma.h:180</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4_html_a1f0b00daad8eba2f855bb306e70d2328"><div class="ttname"><a href="structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html#a1f0b00daad8eba2f855bb306e70d2328">mlx::steel::BaseMMAFrag&lt; T, 8, 8 &gt;::store_safe</a></div><div class="ttdeci">static METAL_FUNC constexpr void store_safe(const thread frag_type &amp;src, DstPtrType dst, StrX str_x, StrY str_y, LimX lim_x, LimY lim_y, OffX off_x=Int&lt; 0 &gt;{}, OffY off_y=Int&lt; 0 &gt;{})</div><div class="ttdef"><b>Definition</b> mma.h:138</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4_html_a318c4279bdc7b39b7919f108b1cd8010"><div class="ttname"><a href="structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html#a318c4279bdc7b39b7919f108b1cd8010">mlx::steel::BaseMMAFrag&lt; T, 8, 8 &gt;::row_bin_op</a></div><div class="ttdeci">static METAL_FUNC constexpr void row_bin_op(thread frag_type &amp;inp_vals, thread T *row_vals)</div><div class="ttdef"><b>Definition</b> mma.h:204</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4_html_a51d662e4cff88b5ad17d7c44bb6b6970"><div class="ttname"><a href="structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html#a51d662e4cff88b5ad17d7c44bb6b6970">mlx::steel::BaseMMAFrag&lt; T, 8, 8 &gt;::row_reduce</a></div><div class="ttdeci">static METAL_FUNC constexpr void row_reduce(thread const frag_type &amp;inp_vals, thread T *reduced_vals)</div><div class="ttdef"><b>Definition</b> mma.h:189</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4_html_a5ec2e40a8f5ad98c71b825544cdd878b"><div class="ttname"><a href="structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html#a5ec2e40a8f5ad98c71b825544cdd878b">mlx::steel::BaseMMAFrag&lt; T, 8, 8 &gt;::row_frag_type</a></div><div class="ttdeci">metal::vec&lt; T, kElemRows &gt; row_frag_type</div><div class="ttdef"><b>Definition</b> mma.h:62</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4_html_a7331fff1d12f2f8b72b0006a3ad0dd83"><div class="ttname"><a href="structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html#a7331fff1d12f2f8b72b0006a3ad0dd83">mlx::steel::BaseMMAFrag&lt; T, 8, 8 &gt;::get_coord</a></div><div class="ttdeci">static METAL_FUNC constexpr short2 get_coord(ushort simd_lane_id)</div><div class="ttdef"><b>Definition</b> mma.h:65</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4_html_a8028512f5a3d2b6acaf966be529627a3"><div class="ttname"><a href="structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html#a8028512f5a3d2b6acaf966be529627a3">mlx::steel::BaseMMAFrag&lt; T, 8, 8 &gt;::mma</a></div><div class="ttdeci">static METAL_FUNC constexpr void mma(thread frag_type &amp;D, thread frag_type &amp;A, thread frag_type &amp;B, thread frag_type &amp;C)</div><div class="ttdef"><b>Definition</b> mma.h:161</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4_html_a958b6952cbd9462d7ae9f6e029631887"><div class="ttname"><a href="structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html#a958b6952cbd9462d7ae9f6e029631887">mlx::steel::BaseMMAFrag&lt; T, 8, 8 &gt;::mat_type</a></div><div class="ttdeci">metal::simdgroup_matrix&lt; T, kFragRows, kFragCols &gt; mat_type</div><div class="ttdef"><b>Definition</b> mma.h:60</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4_html_a9f53a5e9b046b4f217e782b733941b0c"><div class="ttname"><a href="structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html#a9f53a5e9b046b4f217e782b733941b0c">mlx::steel::BaseMMAFrag&lt; T, 8, 8 &gt;::frag_type</a></div><div class="ttdeci">metal::vec&lt; T, kElemsPerFrag &gt; frag_type</div><div class="ttdef"><b>Definition</b> mma.h:61</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4_html_aa8f50ea8961ec5b35c1b81366d64f2cb"><div class="ttname"><a href="structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html#aa8f50ea8961ec5b35c1b81366d64f2cb">mlx::steel::BaseMMAFrag&lt; T, 8, 8 &gt;::store</a></div><div class="ttdeci">static METAL_FUNC constexpr void store(const thread frag_type &amp;src, DstPtrType dst, StrX str_x, StrY str_y)</div><div class="ttdef"><b>Definition</b> mma.h:118</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4_html_aab8dd1c6917247da41dd3a31139a665f"><div class="ttname"><a href="structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html#aab8dd1c6917247da41dd3a31139a665f">mlx::steel::BaseMMAFrag&lt; T, 8, 8 &gt;::col_frag_type</a></div><div class="ttdeci">metal::vec&lt; T, kElemCols &gt; col_frag_type</div><div class="ttdef"><b>Definition</b> mma.h:63</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4_html_ac73006b36fc710feda3a7c796e21415c"><div class="ttname"><a href="structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html#ac73006b36fc710feda3a7c796e21415c">mlx::steel::BaseMMAFrag&lt; T, 8, 8 &gt;::load</a></div><div class="ttdeci">static METAL_FUNC constexpr void load(thread frag_type &amp;dst, SrcPtrType src, StrX str_x, StrY str_y)</div><div class="ttdef"><b>Definition</b> mma.h:75</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4_html_ad22aaee4a2938cbdd315b39eda84e07d"><div class="ttname"><a href="structmlx_1_1steel_1_1_base_m_m_a_frag_3_01_t_00_018_00_018_01_4.html#ad22aaee4a2938cbdd315b39eda84e07d">mlx::steel::BaseMMAFrag&lt; T, 8, 8 &gt;::load_safe</a></div><div class="ttdeci">static METAL_FUNC constexpr void load_safe(thread frag_type &amp;dst, SrcPtrType src, StrX str_x, StrY str_y, LimX lim_x, LimY lim_y, OffX off_x=Int&lt; 0 &gt;{}, OffY off_y=Int&lt; 0 &gt;{})</div><div class="ttdef"><b>Definition</b> mma.h:93</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_base_m_m_a_frag_html"><div class="ttname"><a href="structmlx_1_1steel_1_1_base_m_m_a_frag.html">mlx::steel::BaseMMAFrag</a></div><div class="ttdef"><b>Definition</b> mma.h:23</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_base_m_m_a_frag_html_a1868f57d57c8adedab2c58492ec76946"><div class="ttname"><a href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a1868f57d57c8adedab2c58492ec76946">mlx::steel::BaseMMAFrag&lt; T, 8, 8 &gt;::mma</a></div><div class="ttdeci">static METAL_FUNC constexpr void mma(thread mat_type &amp;D, thread mat_type &amp;A, thread mat_type &amp;B, thread mat_type &amp;C)</div><div class="ttdef"><b>Definition</b> mma.h:180</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_base_m_m_a_frag_html_a1f0b00daad8eba2f855bb306e70d2328"><div class="ttname"><a href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a1f0b00daad8eba2f855bb306e70d2328">mlx::steel::BaseMMAFrag&lt; T, 8, 8 &gt;::store_safe</a></div><div class="ttdeci">static METAL_FUNC constexpr void store_safe(const thread frag_type &amp;src, DstPtrType dst, StrX str_x, StrY str_y, LimX lim_x, LimY lim_y, OffX off_x=Int&lt; 0 &gt;{}, OffY off_y=Int&lt; 0 &gt;{})</div><div class="ttdef"><b>Definition</b> mma.h:138</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_base_m_m_a_frag_html_a211102315e2afbcfcd2e2c201b638e9f"><div class="ttname"><a href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a211102315e2afbcfcd2e2c201b638e9f">mlx::steel::BaseMMAFrag&lt; T, 8, 8 &gt;::kFragCols</a></div><div class="ttdeci">STEEL_CONST int kFragCols</div><div class="ttdef"><b>Definition</b> mma.h:49</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_base_m_m_a_frag_html_a25675ae18947a97c6e04157b540103a9"><div class="ttname"><a href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a25675ae18947a97c6e04157b540103a9">mlx::steel::BaseMMAFrag&lt; T, 8, 8 &gt;::mat_type</a></div><div class="ttdeci">metal::simdgroup_matrix&lt; T, kFragRows, kFragCols &gt; mat_type</div><div class="ttdef"><b>Definition</b> mma.h:60</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_base_m_m_a_frag_html_a2fe53db449c692226f23f6b99fb2c0d4"><div class="ttname"><a href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a2fe53db449c692226f23f6b99fb2c0d4">mlx::steel::BaseMMAFrag&lt; T, 8, 8 &gt;::kFragRows</a></div><div class="ttdeci">STEEL_CONST int kFragRows</div><div class="ttdef"><b>Definition</b> mma.h:48</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_base_m_m_a_frag_html_a318c4279bdc7b39b7919f108b1cd8010"><div class="ttname"><a href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a318c4279bdc7b39b7919f108b1cd8010">mlx::steel::BaseMMAFrag&lt; T, 8, 8 &gt;::row_bin_op</a></div><div class="ttdeci">static METAL_FUNC constexpr void row_bin_op(thread frag_type &amp;inp_vals, thread T *row_vals)</div><div class="ttdef"><b>Definition</b> mma.h:204</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_base_m_m_a_frag_html_a3c34dfdc944db110f4735f1b25307cf0"><div class="ttname"><a href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a3c34dfdc944db110f4735f1b25307cf0">mlx::steel::BaseMMAFrag&lt; T, 8, 8 &gt;::kElemsPerFrag</a></div><div class="ttdeci">STEEL_CONST int kElemsPerFrag</div><div class="ttdef"><b>Definition</b> mma.h:51</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_base_m_m_a_frag_html_a3dcd4301390937f89ed1dde6d28e341f"><div class="ttname"><a href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a3dcd4301390937f89ed1dde6d28e341f">mlx::steel::BaseMMAFrag&lt; T, 8, 8 &gt;::row_frag_type</a></div><div class="ttdeci">metal::vec&lt; T, kElemRows &gt; row_frag_type</div><div class="ttdef"><b>Definition</b> mma.h:62</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_base_m_m_a_frag_html_a51d662e4cff88b5ad17d7c44bb6b6970"><div class="ttname"><a href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a51d662e4cff88b5ad17d7c44bb6b6970">mlx::steel::BaseMMAFrag&lt; T, 8, 8 &gt;::row_reduce</a></div><div class="ttdeci">static METAL_FUNC constexpr void row_reduce(thread const frag_type &amp;inp_vals, thread T *reduced_vals)</div><div class="ttdef"><b>Definition</b> mma.h:189</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_base_m_m_a_frag_html_a7331fff1d12f2f8b72b0006a3ad0dd83"><div class="ttname"><a href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a7331fff1d12f2f8b72b0006a3ad0dd83">mlx::steel::BaseMMAFrag&lt; T, 8, 8 &gt;::get_coord</a></div><div class="ttdeci">static METAL_FUNC constexpr short2 get_coord(ushort simd_lane_id)</div><div class="ttdef"><b>Definition</b> mma.h:65</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_base_m_m_a_frag_html_a76aa5aa690dbcc954e957d767fad661f"><div class="ttname"><a href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a76aa5aa690dbcc954e957d767fad661f">mlx::steel::BaseMMAFrag&lt; T, 8, 8 &gt;::kElemRows</a></div><div class="ttdeci">STEEL_CONST int kElemRows</div><div class="ttdef"><b>Definition</b> mma.h:53</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_base_m_m_a_frag_html_a7c212200d86b4e93f274d99addf668bd"><div class="ttname"><a href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a7c212200d86b4e93f274d99addf668bd">mlx::steel::BaseMMAFrag&lt; T, 8, 8 &gt;::kElemCols</a></div><div class="ttdeci">STEEL_CONST int kElemCols</div><div class="ttdef"><b>Definition</b> mma.h:54</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_base_m_m_a_frag_html_a8028512f5a3d2b6acaf966be529627a3"><div class="ttname"><a href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a8028512f5a3d2b6acaf966be529627a3">mlx::steel::BaseMMAFrag&lt; T, 8, 8 &gt;::mma</a></div><div class="ttdeci">static METAL_FUNC constexpr void mma(thread frag_type &amp;D, thread frag_type &amp;A, thread frag_type &amp;B, thread frag_type &amp;C)</div><div class="ttdef"><b>Definition</b> mma.h:161</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_base_m_m_a_frag_html_a8536bfaa108031c2ea3e9ccdc766ee5b"><div class="ttname"><a href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#a8536bfaa108031c2ea3e9ccdc766ee5b">mlx::steel::BaseMMAFrag&lt; T, 8, 8 &gt;::frag_type</a></div><div class="ttdeci">metal::vec&lt; T, kElemsPerFrag &gt; frag_type</div><div class="ttdef"><b>Definition</b> mma.h:61</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_base_m_m_a_frag_html_aa8f50ea8961ec5b35c1b81366d64f2cb"><div class="ttname"><a href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#aa8f50ea8961ec5b35c1b81366d64f2cb">mlx::steel::BaseMMAFrag&lt; T, 8, 8 &gt;::store</a></div><div class="ttdeci">static METAL_FUNC constexpr void store(const thread frag_type &amp;src, DstPtrType dst, StrX str_x, StrY str_y)</div><div class="ttdef"><b>Definition</b> mma.h:118</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_base_m_m_a_frag_html_ac73006b36fc710feda3a7c796e21415c"><div class="ttname"><a href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#ac73006b36fc710feda3a7c796e21415c">mlx::steel::BaseMMAFrag&lt; T, 8, 8 &gt;::load</a></div><div class="ttdeci">static METAL_FUNC constexpr void load(thread frag_type &amp;dst, SrcPtrType src, StrX str_x, StrY str_y)</div><div class="ttdef"><b>Definition</b> mma.h:75</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_base_m_m_a_frag_html_ad22aaee4a2938cbdd315b39eda84e07d"><div class="ttname"><a href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#ad22aaee4a2938cbdd315b39eda84e07d">mlx::steel::BaseMMAFrag&lt; T, 8, 8 &gt;::load_safe</a></div><div class="ttdeci">static METAL_FUNC constexpr void load_safe(thread frag_type &amp;dst, SrcPtrType src, StrX str_x, StrY str_y, LimX lim_x, LimY lim_y, OffX off_x=Int&lt; 0 &gt;{}, OffY off_y=Int&lt; 0 &gt;{})</div><div class="ttdef"><b>Definition</b> mma.h:93</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_base_m_m_a_frag_html_adbb262a3c872e26533b68a39db16459e"><div class="ttname"><a href="structmlx_1_1steel_1_1_base_m_m_a_frag.html#adbb262a3c872e26533b68a39db16459e">mlx::steel::BaseMMAFrag&lt; T, 8, 8 &gt;::col_frag_type</a></div><div class="ttdeci">metal::vec&lt; T, kElemCols &gt; col_frag_type</div><div class="ttdef"><b>Definition</b> mma.h:63</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_m_m_a_html_a0461451ffb5041b6a916ea17ed34288b"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_m_m_a.html#a0461451ffb5041b6a916ea17ed34288b">mlx::steel::BlockMMA::store_result</a></div><div class="ttdeci">METAL_FUNC void store_result(device U *D, const int ldd)</div><div class="ttdef"><b>Definition</b> mma.h:536</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_m_m_a_html_a081ba538d30d1d02498a7f341e6bd611"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_m_m_a.html#a081ba538d30d1d02498a7f341e6bd611">mlx::steel::BlockMMA::store_result_safe</a></div><div class="ttdeci">METAL_FUNC void store_result_safe(device U *D, const int ldd, short2 dst_tile_dims)</div><div class="ttdef"><b>Definition</b> mma.h:550</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_m_m_a_html_a138ed1bbad2ca88d3a3c7d162cd36562"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_m_m_a.html#a138ed1bbad2ca88d3a3c7d162cd36562">mlx::steel::BlockMMA::As_offset</a></div><div class="ttdeci">short As_offset</div><div class="ttdef"><b>Definition</b> mma.h:485</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_m_m_a_html_a21b0c40d16eced109bd3196186170bc6"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_m_m_a.html#a21b0c40d16eced109bd3196186170bc6">mlx::steel::BlockMMA::Ctile</a></div><div class="ttdeci">MMATile&lt; AccumType, TM, TN, MMAFrag_acc_t &gt; Ctile</div><div class="ttdef"><b>Definition</b> mma.h:479</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_m_m_a_html_a257287702dc849d0d8a078fced453142"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_m_m_a.html#a257287702dc849d0d8a078fced453142">mlx::steel::BlockMMA::A_str_k</a></div><div class="ttdeci">STEEL_CONST short A_str_k</div><div class="ttdef"><b>Definition</b> mma.h:466</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_m_m_a_html_a44fca27c821764317263047a780977b0"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_m_m_a.html#a44fca27c821764317263047a780977b0">mlx::steel::BlockMMA::Btile</a></div><div class="ttdeci">MMATile&lt; AccumType, 1, TN, MMAFrag_acc_t &gt; Btile</div><div class="ttdef"><b>Definition</b> mma.h:478</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_m_m_a_html_a47e614120c650f7479db79f23a0df586"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_m_m_a.html#a47e614120c650f7479db79f23a0df586">mlx::steel::BlockMMA::Atile</a></div><div class="ttdeci">MMATile&lt; AccumType, TM, 1, MMAFrag_acc_t &gt; Atile</div><div class="ttdef"><b>Definition</b> mma.h:477</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_m_m_a_html_a49538190209e522ddbef45fe95563d17"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_m_m_a.html#a49538190209e522ddbef45fe95563d17">mlx::steel::BlockMMA::B_str_n</a></div><div class="ttdeci">STEEL_CONST short B_str_n</div><div class="ttdef"><b>Definition</b> mma.h:470</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_m_m_a_html_a5b0029866f493363942133b55bff7307"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_m_m_a.html#a5b0029866f493363942133b55bff7307">mlx::steel::BlockMMA::TM_stride</a></div><div class="ttdeci">STEEL_CONST short TM_stride</div><div class="ttdef"><b>Definition</b> mma.h:455</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_m_m_a_html_a138ed1bbad2ca88d3a3c7d162cd36562"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_m_m_a.html#a138ed1bbad2ca88d3a3c7d162cd36562">mlx::steel::BlockMMA&lt; T, U, BM, BN, BK, WM, WN, transpose_a, transpose_b, transpose_a ? BM+tgp_padding_a :BK+tgp_padding_a, transpose_b ? BK+tgp_padding_b :BN+tgp_padding_b, AccumType, Epilogue &gt;::As_offset</a></div><div class="ttdeci">short As_offset</div><div class="ttdef"><b>Definition</b> mma.h:485</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_m_m_a_html_a21b0c40d16eced109bd3196186170bc6"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_m_m_a.html#a21b0c40d16eced109bd3196186170bc6">mlx::steel::BlockMMA&lt; T, U, BM, BN, BK, WM, WN, transpose_a, transpose_b, transpose_a ? BM+tgp_padding_a :BK+tgp_padding_a, transpose_b ? BK+tgp_padding_b :BN+tgp_padding_b, AccumType, Epilogue &gt;::Ctile</a></div><div class="ttdeci">MMATile&lt; AccumType, TM, TN, MMAFrag_acc_t &gt; Ctile</div><div class="ttdef"><b>Definition</b> mma.h:479</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_m_m_a_html_a257287702dc849d0d8a078fced453142"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_m_m_a.html#a257287702dc849d0d8a078fced453142">mlx::steel::BlockMMA&lt; T, U, BM, BN, BK, WM, WN, transpose_a, transpose_b, transpose_a ? BM+tgp_padding_a :BK+tgp_padding_a, transpose_b ? BK+tgp_padding_b :BN+tgp_padding_b, AccumType, Epilogue &gt;::A_str_k</a></div><div class="ttdeci">STEEL_CONST short A_str_k</div><div class="ttdef"><b>Definition</b> mma.h:466</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_m_m_a_html_a44fca27c821764317263047a780977b0"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_m_m_a.html#a44fca27c821764317263047a780977b0">mlx::steel::BlockMMA&lt; T, U, BM, BN, BK, WM, WN, transpose_a, transpose_b, transpose_a ? BM+tgp_padding_a :BK+tgp_padding_a, transpose_b ? BK+tgp_padding_b :BN+tgp_padding_b, AccumType, Epilogue &gt;::Btile</a></div><div class="ttdeci">MMATile&lt; AccumType, 1, TN, MMAFrag_acc_t &gt; Btile</div><div class="ttdef"><b>Definition</b> mma.h:478</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_m_m_a_html_a47e614120c650f7479db79f23a0df586"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_m_m_a.html#a47e614120c650f7479db79f23a0df586">mlx::steel::BlockMMA&lt; T, U, BM, BN, BK, WM, WN, transpose_a, transpose_b, transpose_a ? BM+tgp_padding_a :BK+tgp_padding_a, transpose_b ? BK+tgp_padding_b :BN+tgp_padding_b, AccumType, Epilogue &gt;::Atile</a></div><div class="ttdeci">MMATile&lt; AccumType, TM, 1, MMAFrag_acc_t &gt; Atile</div><div class="ttdef"><b>Definition</b> mma.h:477</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_m_m_a_html_a49538190209e522ddbef45fe95563d17"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_m_m_a.html#a49538190209e522ddbef45fe95563d17">mlx::steel::BlockMMA&lt; T, U, BM, BN, BK, WM, WN, transpose_a, transpose_b, transpose_a ? BM+tgp_padding_a :BK+tgp_padding_a, transpose_b ? BK+tgp_padding_b :BN+tgp_padding_b, AccumType, Epilogue &gt;::B_str_n</a></div><div class="ttdeci">STEEL_CONST short B_str_n</div><div class="ttdef"><b>Definition</b> mma.h:470</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_m_m_a_html_a5b0029866f493363942133b55bff7307"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_m_m_a.html#a5b0029866f493363942133b55bff7307">mlx::steel::BlockMMA&lt; T, U, BM, BN, BK, WM, WN, transpose_a, transpose_b, transpose_a ? BM+tgp_padding_a :BK+tgp_padding_a, transpose_b ? BK+tgp_padding_b :BN+tgp_padding_b, AccumType, Epilogue &gt;::TM_stride</a></div><div class="ttdeci">STEEL_CONST short TM_stride</div><div class="ttdef"><b>Definition</b> mma.h:455</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_m_m_a_html_a6a2c2a6d5e767d52c41b42a9d36086b0"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_m_m_a.html#a6a2c2a6d5e767d52c41b42a9d36086b0">mlx::steel::BlockMMA::mma</a></div><div class="ttdeci">METAL_FUNC void mma(const threadgroup T *As, const threadgroup T *Bs)</div><div class="ttdef"><b>Definition</b> mma.h:509</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_m_m_a_html_a706ae779c1f8d2eb18f19c248567d424"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_m_m_a.html#a706ae779c1f8d2eb18f19c248567d424">mlx::steel::BlockMMA::TN</a></div><div class="ttdeci">STEEL_CONST short TN</div><div class="ttdef"><b>Definition</b> mma.h:462</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_m_m_a_html_a706ae779c1f8d2eb18f19c248567d424"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_m_m_a.html#a706ae779c1f8d2eb18f19c248567d424">mlx::steel::BlockMMA&lt; T, U, BM, BN, BK, WM, WN, transpose_a, transpose_b, transpose_a ? BM+tgp_padding_a :BK+tgp_padding_a, transpose_b ? BK+tgp_padding_b :BN+tgp_padding_b, AccumType, Epilogue &gt;::TN</a></div><div class="ttdeci">STEEL_CONST short TN</div><div class="ttdef"><b>Definition</b> mma.h:462</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_m_m_a_html_a7b324c992750ed3aaa4c485f15b2f391"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_m_m_a.html#a7b324c992750ed3aaa4c485f15b2f391">mlx::steel::BlockMMA::store_result_safe</a></div><div class="ttdeci">METAL_FUNC void store_result_safe(device U *D, const int ldd, const device U *C, const int ldc, const int fdc, short2 dst_tile_dims, thread const Epilogue &amp;epilogue_op) const</div><div class="ttdef"><b>Definition</b> mma.h:683</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_m_m_a_html_a7cf757e9785e23997b1417e024559ed3"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_m_m_a.html#a7cf757e9785e23997b1417e024559ed3">mlx::steel::BlockMMA::store_result</a></div><div class="ttdeci">METAL_FUNC void store_result(device U *D, const int ldd, const device U *C, const int ldc, const int fdc, thread const Epilogue &amp;epilogue_op) const</div><div class="ttdef"><b>Definition</b> mma.h:651</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_m_m_a_html_a823c56cbd2086f10272df7284a5247ae"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_m_m_a.html#a823c56cbd2086f10272df7284a5247ae">mlx::steel::BlockMMA::apply_epilogue</a></div><div class="ttdeci">METAL_FUNC void apply_epilogue(const device U *C, const int ldc, const int fdc, thread const BinaryEpilogue &amp;epilogue_op)</div><div class="ttdef"><b>Definition</b> mma.h:579</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_m_m_a_html_a8b3690b383afd26563efb38f9c375e50"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_m_m_a.html#a8b3690b383afd26563efb38f9c375e50">mlx::steel::BlockMMA::TN_stride</a></div><div class="ttdeci">STEEL_CONST short TN_stride</div><div class="ttdef"><b>Definition</b> mma.h:457</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_m_m_a_html_a8fddaa78913cdc8eea5e1cf7d2776330"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_m_m_a.html#a8fddaa78913cdc8eea5e1cf7d2776330">mlx::steel::BlockMMA::tile_stride_a</a></div><div class="ttdeci">STEEL_CONST short tile_stride_a</div><div class="ttdef"><b>Definition</b> mma.h:473</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_m_m_a_html_a92f6aeee432f53638447eac842f43eca"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_m_m_a.html#a92f6aeee432f53638447eac842f43eca">mlx::steel::BlockMMA::Bs_offset</a></div><div class="ttdeci">short Bs_offset</div><div class="ttdef"><b>Definition</b> mma.h:486</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_m_m_a_html_a8b3690b383afd26563efb38f9c375e50"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_m_m_a.html#a8b3690b383afd26563efb38f9c375e50">mlx::steel::BlockMMA&lt; T, U, BM, BN, BK, WM, WN, transpose_a, transpose_b, transpose_a ? BM+tgp_padding_a :BK+tgp_padding_a, transpose_b ? BK+tgp_padding_b :BN+tgp_padding_b, AccumType, Epilogue &gt;::TN_stride</a></div><div class="ttdeci">STEEL_CONST short TN_stride</div><div class="ttdef"><b>Definition</b> mma.h:457</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_m_m_a_html_a8fddaa78913cdc8eea5e1cf7d2776330"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_m_m_a.html#a8fddaa78913cdc8eea5e1cf7d2776330">mlx::steel::BlockMMA&lt; T, U, BM, BN, BK, WM, WN, transpose_a, transpose_b, transpose_a ? BM+tgp_padding_a :BK+tgp_padding_a, transpose_b ? BK+tgp_padding_b :BN+tgp_padding_b, AccumType, Epilogue &gt;::tile_stride_a</a></div><div class="ttdeci">STEEL_CONST short tile_stride_a</div><div class="ttdef"><b>Definition</b> mma.h:473</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_m_m_a_html_a92f6aeee432f53638447eac842f43eca"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_m_m_a.html#a92f6aeee432f53638447eac842f43eca">mlx::steel::BlockMMA&lt; T, U, BM, BN, BK, WM, WN, transpose_a, transpose_b, transpose_a ? BM+tgp_padding_a :BK+tgp_padding_a, transpose_b ? BK+tgp_padding_b :BN+tgp_padding_b, AccumType, Epilogue &gt;::Bs_offset</a></div><div class="ttdeci">short Bs_offset</div><div class="ttdef"><b>Definition</b> mma.h:486</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_m_m_a_html_a9e48f2d51099ec00171506724faab54a"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_m_m_a.html#a9e48f2d51099ec00171506724faab54a">mlx::steel::BlockMMA::apply_epilogue_safe</a></div><div class="ttdeci">METAL_FUNC void apply_epilogue_safe(const device U *C, const int ldc, const int fdc, short2 dst_tile_dims, thread const BinaryEpilogue &amp;epilogue_op)</div><div class="ttdef"><b>Definition</b> mma.h:607</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_m_m_a_html_aa14406b7298456ac45d23dd3c4642dd8"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_m_m_a.html#aa14406b7298456ac45d23dd3c4642dd8">mlx::steel::BlockMMA::BlockMMA</a></div><div class="ttdeci">METAL_FUNC BlockMMA(ushort simd_group_id, ushort simd_lane_id)</div><div class="ttdef"><b>Definition</b> mma.h:489</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_m_m_a_html_aa71400922babd388177f228c2c82b211"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_m_m_a.html#aa71400922babd388177f228c2c82b211">mlx::steel::BlockMMA::B_str_k</a></div><div class="ttdeci">STEEL_CONST short B_str_k</div><div class="ttdef"><b>Definition</b> mma.h:469</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_m_m_a_html_aa85451edf6900fd6af164d4d50889ae3"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_m_m_a.html#aa85451edf6900fd6af164d4d50889ae3">mlx::steel::BlockMMA::sm</a></div><div class="ttdeci">short sm</div><div class="ttdef"><b>Definition</b> mma.h:482</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_m_m_a_html_ab9c7f5386594497f5f4df7e59670b877"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_m_m_a.html#ab9c7f5386594497f5f4df7e59670b877">mlx::steel::BlockMMA::A_str_m</a></div><div class="ttdeci">STEEL_CONST short A_str_m</div><div class="ttdef"><b>Definition</b> mma.h:465</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_m_m_a_html_aba5f749fdf32d8bd9d9e29f2a9ae4591"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_m_m_a.html#aba5f749fdf32d8bd9d9e29f2a9ae4591">mlx::steel::BlockMMA::TM</a></div><div class="ttdeci">STEEL_CONST short TM</div><div class="ttdef"><b>Definition</b> mma.h:460</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_m_m_a_html_ade420e8b811d597345783c324c23a34a"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_m_m_a.html#ade420e8b811d597345783c324c23a34a">mlx::steel::BlockMMA::sn</a></div><div class="ttdeci">short sn</div><div class="ttdef"><b>Definition</b> mma.h:483</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_m_m_a_html_ae3f35453b3afbaac9df64ad5966b34a4"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_m_m_a.html#ae3f35453b3afbaac9df64ad5966b34a4">mlx::steel::BlockMMA::tile_stride_b</a></div><div class="ttdeci">STEEL_CONST short tile_stride_b</div><div class="ttdef"><b>Definition</b> mma.h:474</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_m_m_a_html_aee8caec45c1f9e4428586effbfe6137d"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_m_m_a.html#aee8caec45c1f9e4428586effbfe6137d">mlx::steel::BlockMMA::kFragSize</a></div><div class="ttdeci">STEEL_CONST short kFragSize</div><div class="ttdef"><b>Definition</b> mma.h:451</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_m_m_a_html_aa71400922babd388177f228c2c82b211"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_m_m_a.html#aa71400922babd388177f228c2c82b211">mlx::steel::BlockMMA&lt; T, U, BM, BN, BK, WM, WN, transpose_a, transpose_b, transpose_a ? BM+tgp_padding_a :BK+tgp_padding_a, transpose_b ? BK+tgp_padding_b :BN+tgp_padding_b, AccumType, Epilogue &gt;::B_str_k</a></div><div class="ttdeci">STEEL_CONST short B_str_k</div><div class="ttdef"><b>Definition</b> mma.h:469</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_m_m_a_html_aa85451edf6900fd6af164d4d50889ae3"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_m_m_a.html#aa85451edf6900fd6af164d4d50889ae3">mlx::steel::BlockMMA&lt; T, U, BM, BN, BK, WM, WN, transpose_a, transpose_b, transpose_a ? BM+tgp_padding_a :BK+tgp_padding_a, transpose_b ? BK+tgp_padding_b :BN+tgp_padding_b, AccumType, Epilogue &gt;::sm</a></div><div class="ttdeci">short sm</div><div class="ttdef"><b>Definition</b> mma.h:482</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_m_m_a_html_ab9c7f5386594497f5f4df7e59670b877"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_m_m_a.html#ab9c7f5386594497f5f4df7e59670b877">mlx::steel::BlockMMA&lt; T, U, BM, BN, BK, WM, WN, transpose_a, transpose_b, transpose_a ? BM+tgp_padding_a :BK+tgp_padding_a, transpose_b ? BK+tgp_padding_b :BN+tgp_padding_b, AccumType, Epilogue &gt;::A_str_m</a></div><div class="ttdeci">STEEL_CONST short A_str_m</div><div class="ttdef"><b>Definition</b> mma.h:465</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_m_m_a_html_aba5f749fdf32d8bd9d9e29f2a9ae4591"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_m_m_a.html#aba5f749fdf32d8bd9d9e29f2a9ae4591">mlx::steel::BlockMMA&lt; T, U, BM, BN, BK, WM, WN, transpose_a, transpose_b, transpose_a ? BM+tgp_padding_a :BK+tgp_padding_a, transpose_b ? BK+tgp_padding_b :BN+tgp_padding_b, AccumType, Epilogue &gt;::TM</a></div><div class="ttdeci">STEEL_CONST short TM</div><div class="ttdef"><b>Definition</b> mma.h:460</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_m_m_a_html_ade420e8b811d597345783c324c23a34a"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_m_m_a.html#ade420e8b811d597345783c324c23a34a">mlx::steel::BlockMMA&lt; T, U, BM, BN, BK, WM, WN, transpose_a, transpose_b, transpose_a ? BM+tgp_padding_a :BK+tgp_padding_a, transpose_b ? BK+tgp_padding_b :BN+tgp_padding_b, AccumType, Epilogue &gt;::sn</a></div><div class="ttdeci">short sn</div><div class="ttdef"><b>Definition</b> mma.h:483</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_m_m_a_html_ae2c42cb6d0dde785859164c195f4d13c"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_m_m_a.html#ae2c42cb6d0dde785859164c195f4d13c">mlx::steel::BlockMMA&lt; T, U, BM, BN, BK, WM, WN, transpose_a, transpose_b, transpose_a ? BM+tgp_padding_a :BK+tgp_padding_a, transpose_b ? BK+tgp_padding_b :BN+tgp_padding_b, AccumType, Epilogue &gt;::MMAFrag_acc_t</a></div><div class="ttdeci">BaseMMAFrag&lt; AccumType, kFragSize, kFragSize &gt; MMAFrag_acc_t</div><div class="ttdef"><b>Definition</b> mma.h:452</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_m_m_a_html_ae3f35453b3afbaac9df64ad5966b34a4"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_m_m_a.html#ae3f35453b3afbaac9df64ad5966b34a4">mlx::steel::BlockMMA&lt; T, U, BM, BN, BK, WM, WN, transpose_a, transpose_b, transpose_a ? BM+tgp_padding_a :BK+tgp_padding_a, transpose_b ? BK+tgp_padding_b :BN+tgp_padding_b, AccumType, Epilogue &gt;::tile_stride_b</a></div><div class="ttdeci">STEEL_CONST short tile_stride_b</div><div class="ttdef"><b>Definition</b> mma.h:474</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_m_m_a_html_aee8caec45c1f9e4428586effbfe6137d"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_m_m_a.html#aee8caec45c1f9e4428586effbfe6137d">mlx::steel::BlockMMA&lt; T, U, BM, BN, BK, WM, WN, transpose_a, transpose_b, transpose_a ? BM+tgp_padding_a :BK+tgp_padding_a, transpose_b ? BK+tgp_padding_b :BN+tgp_padding_b, AccumType, Epilogue &gt;::kFragSize</a></div><div class="ttdeci">STEEL_CONST short kFragSize</div><div class="ttdef"><b>Definition</b> mma.h:451</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_m_m_a_html_af653c0808ba4fa9a25286f1febb7baff"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_m_m_a.html#af653c0808ba4fa9a25286f1febb7baff">mlx::steel::BlockMMA::apply_epilogue</a></div><div class="ttdeci">METAL_FUNC void apply_epilogue(thread const UnaryEpilogue &amp;epilogue_op)</div><div class="ttdef"><b>Definition</b> mma.h:569</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_layout2_d_html"><div class="ttname"><a href="structmlx_1_1steel_1_1_layout2_d.html">mlx::steel::Layout2D</a></div><div class="ttdef"><b>Definition</b> mma.h:31</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_layout2_d_html_a23183747ab1ddbdd3f1fcac6d0faa2cd"><div class="ttname"><a href="structmlx_1_1steel_1_1_layout2_d.html#a23183747ab1ddbdd3f1fcac6d0faa2cd">mlx::steel::Layout2D::shape</a></div><div class="ttdeci">Shape shape</div><div class="ttdef"><b>Definition</b> mma.h:32</div></div>
@@ -953,9 +975,8 @@ $(function(){ initResizable(false); });
<div class="ttc" id="astructmlx_1_1steel_1_1_m_m_a_tile_html_a5b1d1c85a5046108a4e38bdc5a0ea74e"><div class="ttname"><a href="structmlx_1_1steel_1_1_m_m_a_tile.html#a5b1d1c85a5046108a4e38bdc5a0ea74e">mlx::steel::MMATile::kRowsPerThread</a></div><div class="ttdeci">STEEL_CONST int kRowsPerThread</div><div class="ttdef"><b>Definition</b> mma.h:239</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_m_m_a_tile_html_a60ea6b8ff2923b7fe6f598e74ac54323"><div class="ttname"><a href="structmlx_1_1steel_1_1_m_m_a_tile.html#a60ea6b8ff2923b7fe6f598e74ac54323">mlx::steel::MMATile::kRows</a></div><div class="ttdeci">STEEL_CONST int kRows</div><div class="ttdef"><b>Definition</b> mma.h:233</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_m_m_a_tile_html_a684e6c6d9f00f583994285b60aaa3b62"><div class="ttname"><a href="structmlx_1_1steel_1_1_m_m_a_tile.html#a684e6c6d9f00f583994285b60aaa3b62">mlx::steel::MMATile::val_frags</a></div><div class="ttdeci">frag_type val_frags[kNumFrags]</div><div class="ttdef"><b>Definition</b> mma.h:245</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_m_m_a_tile_html_a6dadcd666afb3759a11094e754560dd4"><div class="ttname"><a href="structmlx_1_1steel_1_1_m_m_a_tile.html#a6dadcd666afb3759a11094e754560dd4">mlx::steel::MMATile::MMAFrag_t</a></div><div class="ttdeci">MMAFrag_ MMAFrag_t</div><div class="ttdef"><b>Definition</b> mma.h:224</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_m_m_a_tile_html_a752f708e4fe5ef37fdd902dae153179f"><div class="ttname"><a href="structmlx_1_1steel_1_1_m_m_a_tile.html#a752f708e4fe5ef37fdd902dae153179f">mlx::steel::MMATile::store</a></div><div class="ttdeci">METAL_FUNC void store(device U *dst, const int ld) const</div><div class="ttdef"><b>Definition</b> mma.h:357</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_m_m_a_tile_html_a824409bc107330805853f932e80a7628"><div class="ttname"><a href="structmlx_1_1steel_1_1_m_m_a_tile.html#a824409bc107330805853f932e80a7628">mlx::steel::MMATile::elem_type</a></div><div class="ttdeci">T elem_type</div><div class="ttdef"><b>Definition</b> mma.h:225</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_m_m_a_tile_html_a80078f0dfa4c225e79d9b460202d5e2c"><div class="ttname"><a href="structmlx_1_1steel_1_1_m_m_a_tile.html#a80078f0dfa4c225e79d9b460202d5e2c">mlx::steel::MMATile::elem_type</a></div><div class="ttdeci">T elem_type</div><div class="ttdef"><b>Definition</b> mma.h:225</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_m_m_a_tile_html_a865ece5ad0b9a56937b6d77a18b5a1dc"><div class="ttname"><a href="structmlx_1_1steel_1_1_m_m_a_tile.html#a865ece5ad0b9a56937b6d77a18b5a1dc">mlx::steel::MMATile::elems</a></div><div class="ttdeci">METAL_FUNC thread elem_type * elems()</div><div class="ttdef"><b>Definition</b> mma.h:275</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_m_m_a_tile_html_a948784652e93830887ee8ad506ec3257"><div class="ttname"><a href="structmlx_1_1steel_1_1_m_m_a_tile.html#a948784652e93830887ee8ad506ec3257">mlx::steel::MMATile::kCols</a></div><div class="ttdeci">STEEL_CONST int kCols</div><div class="ttdef"><b>Definition</b> mma.h:234</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_m_m_a_tile_html_a98357339ec98f804a1b12597937b318f"><div class="ttname"><a href="structmlx_1_1steel_1_1_m_m_a_tile.html#a98357339ec98f804a1b12597937b318f">mlx::steel::MMATile::kElemsPerTile</a></div><div class="ttdeci">STEEL_CONST int kElemsPerTile</div><div class="ttdef"><b>Definition</b> mma.h:237</div></div>
@@ -966,21 +987,23 @@ $(function(){ initResizable(false); });
<div class="ttc" id="astructmlx_1_1steel_1_1_m_m_a_tile_html_aa97a98e423827a889c13a92217626ec7"><div class="ttname"><a href="structmlx_1_1steel_1_1_m_m_a_tile.html#aa97a98e423827a889c13a92217626ec7">mlx::steel::MMATile::clear</a></div><div class="ttdeci">METAL_FUNC constexpr void clear()</div><div class="ttdef"><b>Definition</b> mma.h:249</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_m_m_a_tile_html_aa9e484d8cae936503898d5b772c573f9"><div class="ttname"><a href="structmlx_1_1steel_1_1_m_m_a_tile.html#aa9e484d8cae936503898d5b772c573f9">mlx::steel::MMATile::load</a></div><div class="ttdeci">METAL_FUNC void load(const device U *src, const int ld)</div><div class="ttdef"><b>Definition</b> mma.h:342</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_m_m_a_tile_html_aac25cd0a9bdf24aa2af809c95f0bd171"><div class="ttname"><a href="structmlx_1_1steel_1_1_m_m_a_tile.html#aac25cd0a9bdf24aa2af809c95f0bd171">mlx::steel::MMATile::frag_type</a></div><div class="ttdeci">MMAFrag_t::frag_type frag_type</div><div class="ttdef"><b>Definition</b> mma.h:243</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_m_m_a_tile_html_abe33de70e34300745bad9aa822fd0382"><div class="ttname"><a href="structmlx_1_1steel_1_1_m_m_a_tile.html#abe33de70e34300745bad9aa822fd0382">mlx::steel::MMATile::MMAFrag_t</a></div><div class="ttdeci">MMAFrag_ MMAFrag_t</div><div class="ttdef"><b>Definition</b> mma.h:224</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_m_m_a_tile_html_ad095371db98e7c335ec41ca77c10f906"><div class="ttname"><a href="structmlx_1_1steel_1_1_m_m_a_tile.html#ad095371db98e7c335ec41ca77c10f906">mlx::steel::MMATile::kFragCols</a></div><div class="ttdeci">STEEL_CONST int kFragCols</div><div class="ttdef"><b>Definition</b> mma.h:227</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_m_m_a_tile_html_ad476e1d9a12178fb35c207312339e485"><div class="ttname"><a href="structmlx_1_1steel_1_1_m_m_a_tile.html#ad476e1d9a12178fb35c207312339e485">mlx::steel::MMATile::frag_at</a></div><div class="ttdeci">METAL_FUNC constexpr const thread frag_type &amp; frag_at(const short i, const short j) const</div><div class="ttdef"><b>Definition</b> mma.h:260</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_m_m_a_tile_html_ae21bb7cce701290de84c6015e064d8a1"><div class="ttname"><a href="structmlx_1_1steel_1_1_m_m_a_tile.html#ae21bb7cce701290de84c6015e064d8a1">mlx::steel::MMATile::elems</a></div><div class="ttdeci">METAL_FUNC const thread elem_type * elems() const</div><div class="ttdef"><b>Definition</b> mma.h:279</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_m_m_a_tile_html_ae326e7693eb77c22d5a6e3e9219019d3"><div class="ttname"><a href="structmlx_1_1steel_1_1_m_m_a_tile.html#ae326e7693eb77c22d5a6e3e9219019d3">mlx::steel::MMATile::kNumFrags</a></div><div class="ttdeci">STEEL_CONST int kNumFrags</div><div class="ttdef"><b>Definition</b> mma.h:236</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_m_m_a_tile_html_aef0ea2387e1ff5767bff8563b2d36bd6"><div class="ttname"><a href="structmlx_1_1steel_1_1_m_m_a_tile.html#aef0ea2387e1ff5767bff8563b2d36bd6">mlx::steel::MMATile::kElemsPerFrag</a></div><div class="ttdeci">STEEL_CONST int kElemsPerFrag</div><div class="ttdef"><b>Definition</b> mma.h:228</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_shape2_d_html"><div class="ttname"><a href="structmlx_1_1steel_1_1_shape2_d.html">mlx::steel::Shape2D</a></div><div class="ttdef"><b>Definition</b> mma.h:23</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_shape2_d_html_a070ce70eb6d84361c7f313159c438a5c"><div class="ttname"><a href="structmlx_1_1steel_1_1_shape2_d.html#a070ce70eb6d84361c7f313159c438a5c">mlx::steel::Shape2D::Shape2D</a></div><div class="ttdeci">Shape2D(RInt r_, CInt c_)</div><div class="ttdef"><b>Definition</b> mma.h:27</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_shape2_d_html_a6e9e8d56782fc8772bc432c7f58393fe"><div class="ttname"><a href="structmlx_1_1steel_1_1_shape2_d.html#a6e9e8d56782fc8772bc432c7f58393fe">mlx::steel::Shape2D::r</a></div><div class="ttdeci">RInt r</div><div class="ttdef"><b>Definition</b> mma.h:24</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_shape2_d_html_ae51347b2131647f2ed735ed43840d26e"><div class="ttname"><a href="structmlx_1_1steel_1_1_shape2_d.html#ae51347b2131647f2ed735ed43840d26e">mlx::steel::Shape2D::c</a></div><div class="ttdeci">CInt c</div><div class="ttdef"><b>Definition</b> mma.h:25</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1integral__constant_html"><div class="ttname"><a href="structmlx_1_1steel_1_1integral__constant.html">mlx::steel::integral_constant</a></div><div class="ttdef"><b>Definition</b> integral_constant.h:18</div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0
</small></address>
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_d0c977ea65824390717cdb7efc36c157.html">metal</a></li><li class="navelem"><a class="el" href="dir_70a37effa88bcbd6b791977fa1e64356.html">kernels</a></li><li class="navelem"><a class="el" href="dir_76215a6c54e2b67053e723fc2395583c.html">steel</a></li><li class="navelem"><a class="el" href="dir_e1756c7634b0c14aead026895ad71c6d.html">attn</a></li><li class="navelem"><a class="el" href="attn_2mma_8h.html">mma.h</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.1 </li>
</ul>
</div>
</body>
</html>
+41 -24
View File
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.12.0"/>
<meta name="generator" content="Doxygen 1.13.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MLX: mlx/backend/metal/kernels/steel/attn/params.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -11,11 +11,18 @@
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
@@ -28,12 +35,24 @@
<div id="projectname">MLX
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.12.0 -->
<!-- Generated by Doxygen 1.13.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
@@ -44,22 +63,23 @@ var searchBox = new SearchBox("searchBox", "search/",'.html');
$(function() { codefold.init(0); });
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search',false);
$(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){ initResizable(false); });
$(function(){initNavTree('attn_2params_8h.html',''); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
@@ -81,12 +101,6 @@ $(function(){ initResizable(false); });
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_d0c977ea65824390717cdb7efc36c157.html">metal</a></li><li class="navelem"><a class="el" href="dir_70a37effa88bcbd6b791977fa1e64356.html">kernels</a></li><li class="navelem"><a class="el" href="dir_76215a6c54e2b67053e723fc2395583c.html">steel</a></li><li class="navelem"><a class="el" href="dir_e1756c7634b0c14aead026895ad71c6d.html">attn</a></li> </ul>
</div>
</div><!-- top -->
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#nested-classes">Classes</a> &#124;
@@ -110,10 +124,13 @@ Namespaces</h2></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0
</small></address>
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_d0c977ea65824390717cdb7efc36c157.html">metal</a></li><li class="navelem"><a class="el" href="dir_70a37effa88bcbd6b791977fa1e64356.html">kernels</a></li><li class="navelem"><a class="el" href="dir_76215a6c54e2b67053e723fc2395583c.html">steel</a></li><li class="navelem"><a class="el" href="dir_e1756c7634b0c14aead026895ad71c6d.html">attn</a></li><li class="navelem"><a class="el" href="attn_2params_8h.html">params.h</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.1 </li>
</ul>
</div>
</body>
</html>
+4
View File
@@ -0,0 +1,4 @@
var attn_2params_8h =
[
[ "mlx::steel::AttnParams", "structmlx_1_1steel_1_1_attn_params.html", "structmlx_1_1steel_1_1_attn_params" ]
];
+52 -34
View File
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.12.0"/>
<meta name="generator" content="Doxygen 1.13.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MLX: mlx/backend/metal/kernels/steel/attn/params.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -11,11 +11,18 @@
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
@@ -28,12 +35,24 @@
<div id="projectname">MLX
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.12.0 -->
<!-- Generated by Doxygen 1.13.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
@@ -44,22 +63,23 @@ var searchBox = new SearchBox("searchBox", "search/",'.html');
$(function() { codefold.init(0); });
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search',false);
$(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){ initResizable(false); });
$(function(){initNavTree('attn_2params_8h_source.html',''); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
@@ -81,12 +101,6 @@ $(function(){ initResizable(false); });
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_d0c977ea65824390717cdb7efc36c157.html">metal</a></li><li class="navelem"><a class="el" href="dir_70a37effa88bcbd6b791977fa1e64356.html">kernels</a></li><li class="navelem"><a class="el" href="dir_76215a6c54e2b67053e723fc2395583c.html">steel</a></li><li class="navelem"><a class="el" href="dir_e1756c7634b0c14aead026895ad71c6d.html">attn</a></li> </ul>
</div>
</div><!-- top -->
<div id="doc-content">
<div class="header">
<div class="headertitle"><div class="title">params.h</div></div>
</div><!--header-->
@@ -94,11 +108,11 @@ $(function(){ initResizable(false); });
<a href="attn_2params_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">// Copyright © 2024 Apple Inc.</span></div>
<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span> </div>
<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="preprocessor">#pragma once</span></div>
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span> </div>
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span></div>
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment">// Attn param classes</span></div>
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span> </div>
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacemlx.html">mlx</a> {</div>
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="keyword">namespace </span>steel {</div>
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacemlx_1_1steel.html">steel</a> {</div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span> </div>
<div class="foldopen" id="foldopen00012" data-start="{" data-end="};">
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_attn_params.html"> 12</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structmlx_1_1steel_1_1_attn_params.html">AttnParams</a> {</div>
@@ -118,21 +132,20 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_attn_params.html#a4cfd2ccb0fd7eb81c2a781a0614fdcbe"> 26</a></span> <span class="keywordtype">int</span> <a class="code hl_variable" href="structmlx_1_1steel_1_1_attn_params.html#a4cfd2ccb0fd7eb81c2a781a0614fdcbe">NQ_aligned</a>; </div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_attn_params.html#aaf953954274794cfcb4e35e82d681b58"> 27</a></span> <span class="keywordtype">int</span> <a class="code hl_variable" href="structmlx_1_1steel_1_1_attn_params.html#aaf953954274794cfcb4e35e82d681b58">NK_aligned</a>; </div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> </div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_attn_params.html#a90bba215328201a37eb1c430ce9f8563"> 29</a></span> <span class="keywordtype">size_t</span> <a class="code hl_variable" href="structmlx_1_1steel_1_1_attn_params.html#a90bba215328201a37eb1c430ce9f8563">Q_strides</a>[3]; </div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_attn_params.html#a03e5480d1cca6af541be54a8720e9974"> 30</a></span> <span class="keywordtype">size_t</span> <a class="code hl_variable" href="structmlx_1_1steel_1_1_attn_params.html#a03e5480d1cca6af541be54a8720e9974">K_strides</a>[3]; </div>
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_attn_params.html#acc4860c3ce09c7230b470182ed002d3c"> 31</a></span> <span class="keywordtype">size_t</span> <a class="code hl_variable" href="structmlx_1_1steel_1_1_attn_params.html#acc4860c3ce09c7230b470182ed002d3c">V_strides</a>[3]; </div>
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_attn_params.html#a33dc7fc22d2604a73af9f94eeea45bb4"> 32</a></span> <span class="keywordtype">size_t</span> <a class="code hl_variable" href="structmlx_1_1steel_1_1_attn_params.html#a33dc7fc22d2604a73af9f94eeea45bb4">O_strides</a>[3]; </div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_attn_params.html#a9150df3fb79de521bbccf57c43f6b092"> 29</a></span> int64_t <a class="code hl_variable" href="structmlx_1_1steel_1_1_attn_params.html#a9150df3fb79de521bbccf57c43f6b092">Q_strides</a>[3]; </div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_attn_params.html#af71b762aa702a3ee592d2098a14b74a9"> 30</a></span> int64_t <a class="code hl_variable" href="structmlx_1_1steel_1_1_attn_params.html#af71b762aa702a3ee592d2098a14b74a9">K_strides</a>[3]; </div>
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_attn_params.html#ad1495980297901b8ded1fb6dd73979b1"> 31</a></span> int64_t <a class="code hl_variable" href="structmlx_1_1steel_1_1_attn_params.html#ad1495980297901b8ded1fb6dd73979b1">V_strides</a>[3]; </div>
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_attn_params.html#ab210f29dcc3a732aba34894cd5a42cf7"> 32</a></span> int64_t <a class="code hl_variable" href="structmlx_1_1steel_1_1_attn_params.html#ab210f29dcc3a732aba34894cd5a42cf7">O_strides</a>[3]; </div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span>};</div>
</div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> </div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span>} <span class="comment">// namespace steel</span></div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span>} <span class="comment">// namespace mlx</span></div>
<div class="ttc" id="anamespacemlx_1_1steel_html"><div class="ttname"><a href="namespacemlx_1_1steel.html">mlx::steel</a></div><div class="ttdef"><b>Definition</b> attn.h:19</div></div>
<div class="ttc" id="anamespacemlx_html"><div class="ttname"><a href="namespacemlx.html">mlx</a></div><div class="ttdef"><b>Definition</b> allocator.h:7</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_attn_params_html"><div class="ttname"><a href="structmlx_1_1steel_1_1_attn_params.html">mlx::steel::AttnParams</a></div><div class="ttdef"><b>Definition</b> params.h:12</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_attn_params_html_a03e5480d1cca6af541be54a8720e9974"><div class="ttname"><a href="structmlx_1_1steel_1_1_attn_params.html#a03e5480d1cca6af541be54a8720e9974">mlx::steel::AttnParams::K_strides</a></div><div class="ttdeci">size_t K_strides[3]</div><div class="ttdoc">Key strides (B, H, L, D = 1)</div><div class="ttdef"><b>Definition</b> params.h:30</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_attn_params_html_a07ae31628e43e09bce533c7682c8dae3"><div class="ttname"><a href="structmlx_1_1steel_1_1_attn_params.html#a07ae31628e43e09bce533c7682c8dae3">mlx::steel::AttnParams::D</a></div><div class="ttdeci">int D</div><div class="ttdoc">Head Dim.</div><div class="ttdef"><b>Definition</b> params.h:15</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_attn_params_html_a1cba7fedbd02e157922619195997cf4f"><div class="ttname"><a href="structmlx_1_1steel_1_1_attn_params.html#a1cba7fedbd02e157922619195997cf4f">mlx::steel::AttnParams::B</a></div><div class="ttdeci">int B</div><div class="ttdoc">Batch Size.</div><div class="ttdef"><b>Definition</b> params.h:13</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_attn_params_html_a33dc7fc22d2604a73af9f94eeea45bb4"><div class="ttname"><a href="structmlx_1_1steel_1_1_attn_params.html#a33dc7fc22d2604a73af9f94eeea45bb4">mlx::steel::AttnParams::O_strides</a></div><div class="ttdeci">size_t O_strides[3]</div><div class="ttdoc">Output strides (B, H, L, D = 1)</div><div class="ttdef"><b>Definition</b> params.h:32</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_attn_params_html_a3b3e18cb993ab24819c852bc64288841"><div class="ttname"><a href="structmlx_1_1steel_1_1_attn_params.html#a3b3e18cb993ab24819c852bc64288841">mlx::steel::AttnParams::gqa_factor</a></div><div class="ttdeci">int gqa_factor</div><div class="ttdoc">Group Query factor.</div><div class="ttdef"><b>Definition</b> params.h:20</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_attn_params_html_a3d286a0c27bace6016ed7a87f43291b7"><div class="ttname"><a href="structmlx_1_1steel_1_1_attn_params.html#a3d286a0c27bace6016ed7a87f43291b7">mlx::steel::AttnParams::H</a></div><div class="ttdeci">int H</div><div class="ttdoc">Heads.</div><div class="ttdef"><b>Definition</b> params.h:14</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_attn_params_html_a48575afc94ab9ff74deaba61464e57a1"><div class="ttname"><a href="structmlx_1_1steel_1_1_attn_params.html#a48575afc94ab9ff74deaba61464e57a1">mlx::steel::AttnParams::NQ</a></div><div class="ttdeci">int NQ</div><div class="ttdoc">Number of query blocks.</div><div class="ttdef"><b>Definition</b> params.h:23</div></div>
@@ -140,15 +153,20 @@ $(function(){ initResizable(false); });
<div class="ttc" id="astructmlx_1_1steel_1_1_attn_params_html_a4cfd2ccb0fd7eb81c2a781a0614fdcbe"><div class="ttname"><a href="structmlx_1_1steel_1_1_attn_params.html#a4cfd2ccb0fd7eb81c2a781a0614fdcbe">mlx::steel::AttnParams::NQ_aligned</a></div><div class="ttdeci">int NQ_aligned</div><div class="ttdoc">Number of full query blocks.</div><div class="ttdef"><b>Definition</b> params.h:26</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_attn_params_html_a59255882cbd78bb6f15e704e3a356a7f"><div class="ttname"><a href="structmlx_1_1steel_1_1_attn_params.html#a59255882cbd78bb6f15e704e3a356a7f">mlx::steel::AttnParams::qL</a></div><div class="ttdeci">int qL</div><div class="ttdoc">Query Sequence Length.</div><div class="ttdef"><b>Definition</b> params.h:17</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_attn_params_html_a68a66e3fafa922dcfd1ab1f6bdc2375e"><div class="ttname"><a href="structmlx_1_1steel_1_1_attn_params.html#a68a66e3fafa922dcfd1ab1f6bdc2375e">mlx::steel::AttnParams::NK</a></div><div class="ttdeci">int NK</div><div class="ttdoc">Number of key/value blocks.</div><div class="ttdef"><b>Definition</b> params.h:24</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_attn_params_html_a90bba215328201a37eb1c430ce9f8563"><div class="ttname"><a href="structmlx_1_1steel_1_1_attn_params.html#a90bba215328201a37eb1c430ce9f8563">mlx::steel::AttnParams::Q_strides</a></div><div class="ttdeci">size_t Q_strides[3]</div><div class="ttdoc">Query strides (B, H, L, D = 1)</div><div class="ttdef"><b>Definition</b> params.h:29</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_attn_params_html_a9150df3fb79de521bbccf57c43f6b092"><div class="ttname"><a href="structmlx_1_1steel_1_1_attn_params.html#a9150df3fb79de521bbccf57c43f6b092">mlx::steel::AttnParams::Q_strides</a></div><div class="ttdeci">int64_t Q_strides[3]</div><div class="ttdoc">Query strides (B, H, L, D = 1)</div><div class="ttdef"><b>Definition</b> params.h:29</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_attn_params_html_aaf953954274794cfcb4e35e82d681b58"><div class="ttname"><a href="structmlx_1_1steel_1_1_attn_params.html#aaf953954274794cfcb4e35e82d681b58">mlx::steel::AttnParams::NK_aligned</a></div><div class="ttdeci">int NK_aligned</div><div class="ttdoc">Number of full key/value blocks.</div><div class="ttdef"><b>Definition</b> params.h:27</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_attn_params_html_acc4860c3ce09c7230b470182ed002d3c"><div class="ttname"><a href="structmlx_1_1steel_1_1_attn_params.html#acc4860c3ce09c7230b470182ed002d3c">mlx::steel::AttnParams::V_strides</a></div><div class="ttdeci">size_t V_strides[3]</div><div class="ttdoc">Value strides (B, H, L, D = 1)</div><div class="ttdef"><b>Definition</b> params.h:31</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_attn_params_html_ab210f29dcc3a732aba34894cd5a42cf7"><div class="ttname"><a href="structmlx_1_1steel_1_1_attn_params.html#ab210f29dcc3a732aba34894cd5a42cf7">mlx::steel::AttnParams::O_strides</a></div><div class="ttdeci">int64_t O_strides[3]</div><div class="ttdoc">Output strides (B, H, L, D = 1)</div><div class="ttdef"><b>Definition</b> params.h:32</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_attn_params_html_ad1495980297901b8ded1fb6dd73979b1"><div class="ttname"><a href="structmlx_1_1steel_1_1_attn_params.html#ad1495980297901b8ded1fb6dd73979b1">mlx::steel::AttnParams::V_strides</a></div><div class="ttdeci">int64_t V_strides[3]</div><div class="ttdoc">Value strides (B, H, L, D = 1)</div><div class="ttdef"><b>Definition</b> params.h:31</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_attn_params_html_ad81bcd32e6ff8fec0000eca505fb6826"><div class="ttname"><a href="structmlx_1_1steel_1_1_attn_params.html#ad81bcd32e6ff8fec0000eca505fb6826">mlx::steel::AttnParams::scale</a></div><div class="ttdeci">float scale</div><div class="ttdoc">Attention scale.</div><div class="ttdef"><b>Definition</b> params.h:21</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_attn_params_html_af71b762aa702a3ee592d2098a14b74a9"><div class="ttname"><a href="structmlx_1_1steel_1_1_attn_params.html#af71b762aa702a3ee592d2098a14b74a9">mlx::steel::AttnParams::K_strides</a></div><div class="ttdeci">int64_t K_strides[3]</div><div class="ttdoc">Key strides (B, H, L, D = 1)</div><div class="ttdef"><b>Definition</b> params.h:30</div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0
</small></address>
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_d0c977ea65824390717cdb7efc36c157.html">metal</a></li><li class="navelem"><a class="el" href="dir_70a37effa88bcbd6b791977fa1e64356.html">kernels</a></li><li class="navelem"><a class="el" href="dir_76215a6c54e2b67053e723fc2395583c.html">steel</a></li><li class="navelem"><a class="el" href="dir_e1756c7634b0c14aead026895ad71c6d.html">attn</a></li><li class="navelem"><a class="el" href="attn_2params_8h.html">params.h</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.1 </li>
</ul>
</div>
</body>
</html>
+41 -24
View File
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.12.0"/>
<meta name="generator" content="Doxygen 1.13.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MLX: mlx/backend/metal/kernels/steel/attn/attn.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -11,11 +11,18 @@
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
@@ -28,12 +35,24 @@
<div id="projectname">MLX
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.12.0 -->
<!-- Generated by Doxygen 1.13.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
@@ -44,22 +63,23 @@ var searchBox = new SearchBox("searchBox", "search/",'.html');
$(function() { codefold.init(0); });
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search',false);
$(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){ initResizable(false); });
$(function(){initNavTree('attn_8h.html',''); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
@@ -81,12 +101,6 @@ $(function(){ initResizable(false); });
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_d0c977ea65824390717cdb7efc36c157.html">metal</a></li><li class="navelem"><a class="el" href="dir_70a37effa88bcbd6b791977fa1e64356.html">kernels</a></li><li class="navelem"><a class="el" href="dir_76215a6c54e2b67053e723fc2395583c.html">steel</a></li><li class="navelem"><a class="el" href="dir_e1756c7634b0c14aead026895ad71c6d.html">attn</a></li> </ul>
</div>
</div><!-- top -->
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#nested-classes">Classes</a> &#124;
@@ -118,10 +132,13 @@ Namespaces</h2></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0
</small></address>
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_d0c977ea65824390717cdb7efc36c157.html">metal</a></li><li class="navelem"><a class="el" href="dir_70a37effa88bcbd6b791977fa1e64356.html">kernels</a></li><li class="navelem"><a class="el" href="dir_76215a6c54e2b67053e723fc2395583c.html">steel</a></li><li class="navelem"><a class="el" href="dir_e1756c7634b0c14aead026895ad71c6d.html">attn</a></li><li class="navelem"><a class="el" href="attn_8h.html">attn.h</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.1 </li>
</ul>
</div>
</body>
</html>
+5
View File
@@ -0,0 +1,5 @@
var attn_8h =
[
[ "mlx::steel::LoopAlignment< M_aligned, N_aligned, K_aligned >", "structmlx_1_1steel_1_1_loop_alignment.html", null ],
[ "mlx::steel::GEMMKernel< T, U, BM, BN, BK, WM, WN, transpose_a, transpose_b, MN_aligned, K_aligned, AccumType, Epilogue >", "structmlx_1_1steel_1_1_g_e_m_m_kernel.html", "structmlx_1_1steel_1_1_g_e_m_m_kernel" ]
];
+57 -36
View File
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.12.0"/>
<meta name="generator" content="Doxygen 1.13.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MLX: mlx/backend/metal/kernels/steel/attn/attn.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -11,11 +11,18 @@
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
@@ -28,12 +35,24 @@
<div id="projectname">MLX
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.12.0 -->
<!-- Generated by Doxygen 1.13.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
@@ -44,22 +63,23 @@ var searchBox = new SearchBox("searchBox", "search/",'.html');
$(function() { codefold.init(0); });
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search',false);
$(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){ initResizable(false); });
$(function(){initNavTree('attn_8h_source.html',''); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
@@ -81,12 +101,6 @@ $(function(){ initResizable(false); });
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_d0c977ea65824390717cdb7efc36c157.html">metal</a></li><li class="navelem"><a class="el" href="dir_70a37effa88bcbd6b791977fa1e64356.html">kernels</a></li><li class="navelem"><a class="el" href="dir_76215a6c54e2b67053e723fc2395583c.html">steel</a></li><li class="navelem"><a class="el" href="dir_e1756c7634b0c14aead026895ad71c6d.html">attn</a></li> </ul>
</div>
</div><!-- top -->
<div id="doc-content">
<div class="header">
<div class="headertitle"><div class="title">attn.h</div></div>
</div><!--header-->
@@ -103,12 +117,12 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="preprocessor">#include &quot;<a class="code" href="backend_2metal_2kernels_2steel_2utils_8h.html">mlx/backend/metal/kernels/steel/utils.h</a>&quot;</span></div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span> </div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="keyword">using namespace </span><a class="code hl_namespace" href="namespacemetal.html">metal</a>;</div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span> </div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span></div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="comment">// GEMM kernel class</span></div>
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span> </div>
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacemlx.html">mlx</a> {</div>
<div class="foldopen" id="foldopen00019" data-start="{" data-end="}">
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"><a class="line" href="namespacemlx_1_1steel.html"> 19</a></span><span class="keyword">namespace </span>steel {</div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"><a class="line" href="namespacemlx_1_1steel.html"> 19</a></span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacemlx_1_1steel.html">steel</a> {</div>
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> </div>
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="keyword">template</span> &lt;<span class="keywordtype">bool</span> M_aligned, <span class="keywordtype">bool</span> N_aligned, <span class="keywordtype">bool</span> K_aligned&gt;</div>
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="keyword">struct </span><a class="code hl_struct" href="structmlx_1_1steel_1_1_loop_alignment.html">LoopAlignment</a> {};</div>
@@ -138,21 +152,21 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> </div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_g_e_m_m_kernel.html#a9058ddb73e30e83fb9c548ba22817d64"> 47</a></span> <a class="code hl_define" href="steel_2defines_8h.html#a90b91c866313ffa46eff6d9cc944ad2b">STEEL_CONST</a> <span class="keywordtype">short</span> <a class="code hl_variable" href="structmlx_1_1steel_1_1_g_e_m_m_kernel.html#a9058ddb73e30e83fb9c548ba22817d64">tgp_size</a> = WM * WN * 32;</div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> </div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_g_e_m_m_kernel.html#a98b6ec692580510081e2aa887a61944b"> 49</a></span> <span class="keyword">using </span><a class="code hl_struct" href="structmlx_1_1steel_1_1_block_loader.html">loader_a_t</a> = <a class="code hl_struct" href="structmlx_1_1steel_1_1_block_loader.html">BlockLoader</a>&lt;</div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_g_e_m_m_kernel.html#aa8a04ed74d2259f99b337d4662c64d83"> 49</a></span> <span class="keyword">using </span><a class="code hl_typedef" href="structmlx_1_1steel_1_1_g_e_m_m_kernel.html#aa8a04ed74d2259f99b337d4662c64d83">loader_a_t</a> = <a class="code hl_struct" href="structmlx_1_1steel_1_1_block_loader.html">BlockLoader</a>&lt;</div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> T,</div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> transpose_a ? BK : BM,</div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> transpose_a ? BM : BK,</div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> transpose_a ? BM + <a class="code hl_variable" href="structmlx_1_1steel_1_1_g_e_m_m_kernel.html#ad547704ccbff6c2076abeffa6628c5a0">tgp_padding_a</a> : BK + <a class="code hl_variable" href="structmlx_1_1steel_1_1_g_e_m_m_kernel.html#ad547704ccbff6c2076abeffa6628c5a0">tgp_padding_a</a>,</div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> !transpose_a,</div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> <a class="code hl_variable" href="structmlx_1_1steel_1_1_g_e_m_m_kernel.html#a9058ddb73e30e83fb9c548ba22817d64">tgp_size</a>&gt;;</div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_g_e_m_m_kernel.html#a1a115d5af0fb6e260165adba2e377635"> 56</a></span> <span class="keyword">using </span><a class="code hl_struct" href="structmlx_1_1steel_1_1_block_loader.html">loader_b_t</a> = <a class="code hl_struct" href="structmlx_1_1steel_1_1_block_loader.html">BlockLoader</a>&lt;</div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_g_e_m_m_kernel.html#aa98f32278b5fd98c93ae5483c3596395"> 56</a></span> <span class="keyword">using </span><a class="code hl_typedef" href="structmlx_1_1steel_1_1_g_e_m_m_kernel.html#aa98f32278b5fd98c93ae5483c3596395">loader_b_t</a> = <a class="code hl_struct" href="structmlx_1_1steel_1_1_block_loader.html">BlockLoader</a>&lt;</div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> T,</div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> transpose_b ? BN : BK,</div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> transpose_b ? BK : BN,</div>
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> transpose_b ? BK + <a class="code hl_variable" href="structmlx_1_1steel_1_1_g_e_m_m_kernel.html#ad1b03941e869017558423c08b08bc094">tgp_padding_b</a> : BN + <a class="code hl_variable" href="structmlx_1_1steel_1_1_g_e_m_m_kernel.html#ad1b03941e869017558423c08b08bc094">tgp_padding_b</a>,</div>
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> transpose_b,</div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> <a class="code hl_variable" href="structmlx_1_1steel_1_1_g_e_m_m_kernel.html#a9058ddb73e30e83fb9c548ba22817d64">tgp_size</a>&gt;;</div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_g_e_m_m_kernel.html#ae52eb09c9478cd4f199662346ac0c83e"> 63</a></span> <span class="keyword">using </span><a class="code hl_struct" href="structmlx_1_1steel_1_1_block_m_m_a.html">mma_t</a> = <a class="code hl_struct" href="structmlx_1_1steel_1_1_block_m_m_a.html">BlockMMA</a>&lt;</div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_g_e_m_m_kernel.html#add8c6a31011a4895667c2a94a5af3782"> 63</a></span> <span class="keyword">using </span><a class="code hl_typedef" href="structmlx_1_1steel_1_1_g_e_m_m_kernel.html#add8c6a31011a4895667c2a94a5af3782">mma_t</a> = <a class="code hl_struct" href="structmlx_1_1steel_1_1_block_m_m_a.html">BlockMMA</a>&lt;</div>
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> T,</div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> U,</div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> BM,</div>
@@ -174,9 +188,9 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> threadgroup T* As [[threadgroup(0)]],</div>
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> threadgroup T* Bs [[threadgroup(1)]],</div>
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> <span class="keyword">const</span> <span class="keywordtype">int</span> gemm_k_iterations,</div>
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> thread <a class="code hl_struct" href="structmlx_1_1steel_1_1_block_loader.html">loader_a_t</a>&amp; loader_a,</div>
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> thread <a class="code hl_struct" href="structmlx_1_1steel_1_1_block_loader.html">loader_b_t</a>&amp; loader_b,</div>
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> thread <a class="code hl_struct" href="structmlx_1_1steel_1_1_block_m_m_a.html">mma_t</a>&amp; mma_op,</div>
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> thread <a class="code hl_typedef" href="structmlx_1_1steel_1_1_g_e_m_m_kernel.html#aa8a04ed74d2259f99b337d4662c64d83">loader_a_t</a>&amp; loader_a,</div>
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> thread <a class="code hl_typedef" href="structmlx_1_1steel_1_1_g_e_m_m_kernel.html#aa98f32278b5fd98c93ae5483c3596395">loader_b_t</a>&amp; loader_b,</div>
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> thread <a class="code hl_typedef" href="structmlx_1_1steel_1_1_g_e_m_m_kernel.html#add8c6a31011a4895667c2a94a5af3782">mma_t</a>&amp; mma_op,</div>
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> thread <span class="keyword">const</span> <span class="keywordtype">short</span>&amp; tgp_bm,</div>
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> thread <span class="keyword">const</span> <span class="keywordtype">short</span>&amp; tgp_bn,</div>
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> thread <span class="keyword">const</span> <span class="keywordtype">short</span>&amp; lbk,</div>
@@ -268,14 +282,14 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> D += c_row_long * params-&gt;ldd + c_col_long;</div>
<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> </div>
<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> <span class="comment">// Prepare threadgroup loading operations</span></div>
<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> thread <a class="code hl_struct" href="structmlx_1_1steel_1_1_block_loader.html">loader_a_t</a> loader_a(A, params-&gt;lda, As, simd_group_id, simd_lane_id);</div>
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> thread <a class="code hl_struct" href="structmlx_1_1steel_1_1_block_loader.html">loader_b_t</a> loader_b(B, params-&gt;ldb, Bs, simd_group_id, simd_lane_id);</div>
<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> thread <a class="code hl_typedef" href="structmlx_1_1steel_1_1_g_e_m_m_kernel.html#aa8a04ed74d2259f99b337d4662c64d83">loader_a_t</a> loader_a(A, params-&gt;lda, As, simd_group_id, simd_lane_id);</div>
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> thread <a class="code hl_typedef" href="structmlx_1_1steel_1_1_g_e_m_m_kernel.html#aa98f32278b5fd98c93ae5483c3596395">loader_b_t</a> loader_b(B, params-&gt;ldb, Bs, simd_group_id, simd_lane_id);</div>
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> </div>
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> <span class="comment">// Prepare threadgroup mma operation</span></div>
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> thread <a class="code hl_struct" href="structmlx_1_1steel_1_1_block_m_m_a.html">mma_t</a> mma_op(simd_group_id, simd_lane_id);</div>
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> thread <a class="code hl_typedef" href="structmlx_1_1steel_1_1_g_e_m_m_kernel.html#add8c6a31011a4895667c2a94a5af3782">mma_t</a> mma_op(simd_group_id, simd_lane_id);</div>
<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> </div>
<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> <span class="keywordtype">int</span> gemm_k_iterations = params-&gt;gemm_k_iterations_aligned;</div>
<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> </div>
<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span></div>
<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> <span class="comment">// MNK aligned loop</span></div>
<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> <span class="keywordflow">if</span> (MN_aligned) {</div>
<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> k = 0; k &lt; gemm_k_iterations; k++) {</div>
@@ -397,6 +411,7 @@ $(function(){ initResizable(false); });
<div class="ttc" id="agemm_2params_8h_html"><div class="ttname"><a href="gemm_2params_8h.html">params.h</a></div></div>
<div class="ttc" id="anamespacemetal_html"><div class="ttname"><a href="namespacemetal.html">metal</a></div><div class="ttdef"><b>Definition</b> bf16_math.h:226</div></div>
<div class="ttc" id="anamespacemetal_html_a6653b28c9473087141eddce39878d4d3"><div class="ttname"><a href="namespacemetal.html#a6653b28c9473087141eddce39878d4d3">metal::min</a></div><div class="ttdeci">METAL_FUNC bfloat16_t min(bfloat16_t x, bfloat16_t y)</div><div class="ttdef"><b>Definition</b> bf16_math.h:232</div></div>
<div class="ttc" id="anamespacemlx_1_1steel_html"><div class="ttname"><a href="namespacemlx_1_1steel.html">mlx::steel</a></div><div class="ttdef"><b>Definition</b> attn.h:19</div></div>
<div class="ttc" id="anamespacemlx_html"><div class="ttname"><a href="namespacemlx.html">mlx</a></div><div class="ttdef"><b>Definition</b> allocator.h:7</div></div>
<div class="ttc" id="asteel_2defines_8h_html_a90b91c866313ffa46eff6d9cc944ad2b"><div class="ttname"><a href="steel_2defines_8h.html#a90b91c866313ffa46eff6d9cc944ad2b">STEEL_CONST</a></div><div class="ttdeci">#define STEEL_CONST</div><div class="ttdef"><b>Definition</b> defines.h:3</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_accum_helper_html_ae52abf69e7ba6af1a73d65d57182ed26"><div class="ttname"><a href="structmlx_1_1steel_1_1_accum_helper.html#ae52abf69e7ba6af1a73d65d57182ed26">mlx::steel::AccumHelper::accum_type</a></div><div class="ttdeci">float accum_type</div><div class="ttdef"><b>Definition</b> transforms.h:57</div></div>
@@ -408,17 +423,23 @@ $(function(){ initResizable(false); });
<div class="ttc" id="astructmlx_1_1steel_1_1_g_e_m_m_kernel_html_a1ec583584e69dcbbb72106390a4fc5da"><div class="ttname"><a href="structmlx_1_1steel_1_1_g_e_m_m_kernel.html#a1ec583584e69dcbbb72106390a4fc5da">mlx::steel::GEMMKernel::tgp_mem_size</a></div><div class="ttdeci">STEEL_CONST short tgp_mem_size</div><div class="ttdef"><b>Definition</b> attn.h:45</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_g_e_m_m_kernel_html_a756d7bbcc96e2919cd65eec4bc135780"><div class="ttname"><a href="structmlx_1_1steel_1_1_g_e_m_m_kernel.html#a756d7bbcc96e2919cd65eec4bc135780">mlx::steel::GEMMKernel::gemm_loop</a></div><div class="ttdeci">static METAL_FUNC void gemm_loop(threadgroup T *As, threadgroup T *Bs, const int gemm_k_iterations, thread loader_a_t &amp;loader_a, thread loader_b_t &amp;loader_b, thread mma_t &amp;mma_op, thread const short &amp;tgp_bm, thread const short &amp;tgp_bn, thread const short &amp;lbk, LoopAlignment&lt; M_aligned, N_aligned, K_aligned_ &gt; l={})</div><div class="ttdef"><b>Definition</b> attn.h:80</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_g_e_m_m_kernel_html_a9058ddb73e30e83fb9c548ba22817d64"><div class="ttname"><a href="structmlx_1_1steel_1_1_g_e_m_m_kernel.html#a9058ddb73e30e83fb9c548ba22817d64">mlx::steel::GEMMKernel::tgp_size</a></div><div class="ttdeci">STEEL_CONST short tgp_size</div><div class="ttdef"><b>Definition</b> attn.h:47</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_g_e_m_m_kernel_html_aa8a04ed74d2259f99b337d4662c64d83"><div class="ttname"><a href="structmlx_1_1steel_1_1_g_e_m_m_kernel.html#aa8a04ed74d2259f99b337d4662c64d83">mlx::steel::GEMMKernel::loader_a_t</a></div><div class="ttdeci">BlockLoader&lt; T, transpose_a ? BK :BM, transpose_a ? BM :BK, transpose_a ? BM+tgp_padding_a :BK+tgp_padding_a, !transpose_a, tgp_size &gt; loader_a_t</div><div class="ttdef"><b>Definition</b> attn.h:49</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_g_e_m_m_kernel_html_aa98f32278b5fd98c93ae5483c3596395"><div class="ttname"><a href="structmlx_1_1steel_1_1_g_e_m_m_kernel.html#aa98f32278b5fd98c93ae5483c3596395">mlx::steel::GEMMKernel::loader_b_t</a></div><div class="ttdeci">BlockLoader&lt; T, transpose_b ? BN :BK, transpose_b ? BK :BN, transpose_b ? BK+tgp_padding_b :BN+tgp_padding_b, transpose_b, tgp_size &gt; loader_b_t</div><div class="ttdef"><b>Definition</b> attn.h:56</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_g_e_m_m_kernel_html_ac00b149d76a903c2f91b0f477dc5037f"><div class="ttname"><a href="structmlx_1_1steel_1_1_g_e_m_m_kernel.html#ac00b149d76a903c2f91b0f477dc5037f">mlx::steel::GEMMKernel::tgp_mem_size_a</a></div><div class="ttdeci">STEEL_CONST short tgp_mem_size_a</div><div class="ttdef"><b>Definition</b> attn.h:41</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_g_e_m_m_kernel_html_ad1b03941e869017558423c08b08bc094"><div class="ttname"><a href="structmlx_1_1steel_1_1_g_e_m_m_kernel.html#ad1b03941e869017558423c08b08bc094">mlx::steel::GEMMKernel::tgp_padding_b</a></div><div class="ttdeci">STEEL_CONST short tgp_padding_b</div><div class="ttdef"><b>Definition</b> attn.h:40</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_g_e_m_m_kernel_html_ad547704ccbff6c2076abeffa6628c5a0"><div class="ttname"><a href="structmlx_1_1steel_1_1_g_e_m_m_kernel.html#ad547704ccbff6c2076abeffa6628c5a0">mlx::steel::GEMMKernel::tgp_padding_a</a></div><div class="ttdeci">STEEL_CONST short tgp_padding_a</div><div class="ttdef"><b>Definition</b> attn.h:39</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_g_e_m_m_kernel_html_add8c6a31011a4895667c2a94a5af3782"><div class="ttname"><a href="structmlx_1_1steel_1_1_g_e_m_m_kernel.html#add8c6a31011a4895667c2a94a5af3782">mlx::steel::GEMMKernel::mma_t</a></div><div class="ttdeci">BlockMMA&lt; T, U, BM, BN, BK, WM, WN, transpose_a, transpose_b, transpose_a ? BM+tgp_padding_a :BK+tgp_padding_a, transpose_b ? BK+tgp_padding_b :BN+tgp_padding_b, AccumType, Epilogue &gt; mma_t</div><div class="ttdef"><b>Definition</b> attn.h:63</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_g_e_m_m_params_html"><div class="ttname"><a href="structmlx_1_1steel_1_1_g_e_m_m_params.html">mlx::steel::GEMMParams</a></div><div class="ttdef"><b>Definition</b> params.h:12</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_loop_alignment_html"><div class="ttname"><a href="structmlx_1_1steel_1_1_loop_alignment.html">mlx::steel::LoopAlignment</a></div><div class="ttdef"><b>Definition</b> gemm.h:21</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_transform_none_html"><div class="ttname"><a href="structmlx_1_1steel_1_1_transform_none.html">mlx::steel::TransformNone</a></div><div class="ttdef"><b>Definition</b> transforms.h:15</div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0
</small></address>
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_d0c977ea65824390717cdb7efc36c157.html">metal</a></li><li class="navelem"><a class="el" href="dir_70a37effa88bcbd6b791977fa1e64356.html">kernels</a></li><li class="navelem"><a class="el" href="dir_76215a6c54e2b67053e723fc2395583c.html">steel</a></li><li class="navelem"><a class="el" href="dir_e1756c7634b0c14aead026895ad71c6d.html">attn</a></li><li class="navelem"><a class="el" href="attn_8h.html">attn.h</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.1 </li>
</ul>
</div>
</body>
</html>
+41 -24
View File
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.12.0"/>
<meta name="generator" content="Doxygen 1.13.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MLX: mlx/backend/accelerate/utils.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -11,11 +11,18 @@
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
@@ -28,12 +35,24 @@
<div id="projectname">MLX
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.12.0 -->
<!-- Generated by Doxygen 1.13.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
@@ -44,22 +63,23 @@ var searchBox = new SearchBox("searchBox", "search/",'.html');
$(function() { codefold.init(0); });
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search',false);
$(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){ initResizable(false); });
$(function(){initNavTree('backend_2accelerate_2utils_8h.html',''); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
@@ -81,12 +101,6 @@ $(function(){ initResizable(false); });
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_86b95e7b1d0d6e25466bb9213752d32f.html">accelerate</a></li> </ul>
</div>
</div><!-- top -->
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#namespaces">Namespaces</a> &#124;
@@ -112,10 +126,13 @@ Functions</h2></td></tr>
<tr class="separator:a7a4193f37b1de9c33c31d1da09c77edb"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0
</small></address>
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_86b95e7b1d0d6e25466bb9213752d32f.html">accelerate</a></li><li class="navelem"><a class="el" href="backend_2accelerate_2utils_8h.html">utils.h</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.1 </li>
</ul>
</div>
</body>
</html>
+4
View File
@@ -0,0 +1,4 @@
var backend_2accelerate_2utils_8h =
[
[ "mlx::core::to_bnns_dtype", "namespacemlx_1_1core.html#a7a4193f37b1de9c33c31d1da09c77edb", null ]
];
+47 -30
View File
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.12.0"/>
<meta name="generator" content="Doxygen 1.13.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MLX: mlx/backend/accelerate/utils.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -11,11 +11,18 @@
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
@@ -28,12 +35,24 @@
<div id="projectname">MLX
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.12.0 -->
<!-- Generated by Doxygen 1.13.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
@@ -44,22 +63,23 @@ var searchBox = new SearchBox("searchBox", "search/",'.html');
$(function() { codefold.init(0); });
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search',false);
$(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){ initResizable(false); });
$(function(){initNavTree('backend_2accelerate_2utils_8h_source.html',''); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
@@ -81,12 +101,6 @@ $(function(){ initResizable(false); });
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_86b95e7b1d0d6e25466bb9213752d32f.html">accelerate</a></li> </ul>
</div>
</div><!-- top -->
<div id="doc-content">
<div class="header">
<div class="headertitle"><div class="title">utils.h</div></div>
</div><!--header-->
@@ -127,17 +141,20 @@ $(function(){ initResizable(false); });
<div class="ttc" id="anamespacemlx_1_1core_html_ad527b86818823db040195785efd7d724"><div class="ttname"><a href="namespacemlx_1_1core.html#ad527b86818823db040195785efd7d724">mlx::core::kindof</a></div><div class="ttdeci">Dtype::Kind kindof(const Dtype &amp;t)</div></div>
<div class="ttc" id="anamespacemlx_1_1core_html_add4794cc0ffe5d717fc146084a235d95"><div class="ttname"><a href="namespacemlx_1_1core.html#add4794cc0ffe5d717fc146084a235d95">mlx::core::size_of</a></div><div class="ttdeci">uint8_t size_of(const Dtype &amp;t)</div><div class="ttdef"><b>Definition</b> dtype.h:102</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1_dtype_html"><div class="ttname"><a href="structmlx_1_1core_1_1_dtype.html">mlx::core::Dtype</a></div><div class="ttdef"><b>Definition</b> dtype.h:13</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1_dtype_html_adb1ea8b45a0c53e04a0e73b168702715a4a8a08f09d37b73795649038408b5f33"><div class="ttname"><a href="structmlx_1_1core_1_1_dtype.html#adb1ea8b45a0c53e04a0e73b168702715a4a8a08f09d37b73795649038408b5f33">mlx::core::Dtype::Kind::c</a></div><div class="ttdeci">@ c</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1_dtype_html_adb1ea8b45a0c53e04a0e73b168702715a5206560a306a2e085a437fd258eb57ce"><div class="ttname"><a href="structmlx_1_1core_1_1_dtype.html#adb1ea8b45a0c53e04a0e73b168702715a5206560a306a2e085a437fd258eb57ce">mlx::core::Dtype::Kind::V</a></div><div class="ttdeci">@ V</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1_dtype_html_adb1ea8b45a0c53e04a0e73b168702715a7b774effe4a349c6dd82ad4f4f21d34c"><div class="ttname"><a href="structmlx_1_1core_1_1_dtype.html#adb1ea8b45a0c53e04a0e73b168702715a7b774effe4a349c6dd82ad4f4f21d34c">mlx::core::Dtype::Kind::u</a></div><div class="ttdeci">@ u</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1_dtype_html_adb1ea8b45a0c53e04a0e73b168702715a865c0c0b4ab0e063e5caa3387c1a8741"><div class="ttname"><a href="structmlx_1_1core_1_1_dtype.html#adb1ea8b45a0c53e04a0e73b168702715a865c0c0b4ab0e063e5caa3387c1a8741">mlx::core::Dtype::Kind::i</a></div><div class="ttdeci">@ i</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1_dtype_html_adb1ea8b45a0c53e04a0e73b168702715a8fa14cdd754f91cc6554c9e71929cce7"><div class="ttname"><a href="structmlx_1_1core_1_1_dtype.html#adb1ea8b45a0c53e04a0e73b168702715a8fa14cdd754f91cc6554c9e71929cce7">mlx::core::Dtype::Kind::f</a></div><div class="ttdeci">@ f</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1_dtype_html_adb1ea8b45a0c53e04a0e73b168702715a92eb5ffee6ae2fec3ad71c777531578f"><div class="ttname"><a href="structmlx_1_1core_1_1_dtype.html#adb1ea8b45a0c53e04a0e73b168702715a92eb5ffee6ae2fec3ad71c777531578f">mlx::core::Dtype::Kind::b</a></div><div class="ttdeci">@ b</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1_dtype_html_adb1ea8b45a0c53e04a0e73b168702715a4a8a08f09d37b73795649038408b5f33"><div class="ttname"><a href="structmlx_1_1core_1_1_dtype.html#adb1ea8b45a0c53e04a0e73b168702715a4a8a08f09d37b73795649038408b5f33">mlx::core::Dtype::Kind::c</a></div><div class="ttdeci">@ c</div><div class="ttdef"><b>Definition</b> dtype.h:35</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1_dtype_html_adb1ea8b45a0c53e04a0e73b168702715a5206560a306a2e085a437fd258eb57ce"><div class="ttname"><a href="structmlx_1_1core_1_1_dtype.html#adb1ea8b45a0c53e04a0e73b168702715a5206560a306a2e085a437fd258eb57ce">mlx::core::Dtype::Kind::V</a></div><div class="ttdeci">@ V</div><div class="ttdef"><b>Definition</b> dtype.h:36</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1_dtype_html_adb1ea8b45a0c53e04a0e73b168702715a7b774effe4a349c6dd82ad4f4f21d34c"><div class="ttname"><a href="structmlx_1_1core_1_1_dtype.html#adb1ea8b45a0c53e04a0e73b168702715a7b774effe4a349c6dd82ad4f4f21d34c">mlx::core::Dtype::Kind::u</a></div><div class="ttdeci">@ u</div><div class="ttdef"><b>Definition</b> dtype.h:32</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1_dtype_html_adb1ea8b45a0c53e04a0e73b168702715a865c0c0b4ab0e063e5caa3387c1a8741"><div class="ttname"><a href="structmlx_1_1core_1_1_dtype.html#adb1ea8b45a0c53e04a0e73b168702715a865c0c0b4ab0e063e5caa3387c1a8741">mlx::core::Dtype::Kind::i</a></div><div class="ttdeci">@ i</div><div class="ttdef"><b>Definition</b> dtype.h:33</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1_dtype_html_adb1ea8b45a0c53e04a0e73b168702715a8fa14cdd754f91cc6554c9e71929cce7"><div class="ttname"><a href="structmlx_1_1core_1_1_dtype.html#adb1ea8b45a0c53e04a0e73b168702715a8fa14cdd754f91cc6554c9e71929cce7">mlx::core::Dtype::Kind::f</a></div><div class="ttdeci">@ f</div><div class="ttdef"><b>Definition</b> dtype.h:34</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1_dtype_html_adb1ea8b45a0c53e04a0e73b168702715a92eb5ffee6ae2fec3ad71c777531578f"><div class="ttname"><a href="structmlx_1_1core_1_1_dtype.html#adb1ea8b45a0c53e04a0e73b168702715a92eb5ffee6ae2fec3ad71c777531578f">mlx::core::Dtype::Kind::b</a></div><div class="ttdeci">@ b</div><div class="ttdef"><b>Definition</b> dtype.h:31</div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0
</small></address>
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_86b95e7b1d0d6e25466bb9213752d32f.html">accelerate</a></li><li class="navelem"><a class="el" href="backend_2accelerate_2utils_8h.html">utils.h</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.1 </li>
</ul>
</div>
</body>
</html>
+41 -24
View File
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.12.0"/>
<meta name="generator" content="Doxygen 1.13.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MLX: mlx/backend/common/load.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -11,11 +11,18 @@
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
@@ -28,12 +35,24 @@
<div id="projectname">MLX
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.12.0 -->
<!-- Generated by Doxygen 1.13.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
@@ -44,22 +63,23 @@ var searchBox = new SearchBox("searchBox", "search/",'.html');
$(function() { codefold.init(0); });
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search',false);
$(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){ initResizable(false); });
$(function(){initNavTree('backend_2common_2load_8h.html',''); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
@@ -81,12 +101,6 @@ $(function(){ initResizable(false); });
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_f149b24a1b5be11cd70151abe517e3f8.html">common</a></li> </ul>
</div>
</div><!-- top -->
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#namespaces">Namespaces</a> &#124;
@@ -112,10 +126,13 @@ Functions</h2></td></tr>
<tr class="separator:a954de19249da7c1fa39b89bdc47368aa"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0
</small></address>
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_f149b24a1b5be11cd70151abe517e3f8.html">common</a></li><li class="navelem"><a class="el" href="backend_2common_2load_8h.html">load.h</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.1 </li>
</ul>
</div>
</body>
</html>
+4
View File
@@ -0,0 +1,4 @@
var backend_2common_2load_8h =
[
[ "mlx::core::load", "namespacemlx_1_1core.html#a954de19249da7c1fa39b89bdc47368aa", null ]
];
+42 -25
View File
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.12.0"/>
<meta name="generator" content="Doxygen 1.13.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MLX: mlx/backend/common/load.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -11,11 +11,18 @@
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
@@ -28,12 +35,24 @@
<div id="projectname">MLX
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.12.0 -->
<!-- Generated by Doxygen 1.13.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
@@ -44,22 +63,23 @@ var searchBox = new SearchBox("searchBox", "search/",'.html');
$(function() { codefold.init(0); });
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search',false);
$(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){ initResizable(false); });
$(function(){initNavTree('backend_2common_2load_8h_source.html',''); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
@@ -81,12 +101,6 @@ $(function(){ initResizable(false); });
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_f149b24a1b5be11cd70151abe517e3f8.html">common</a></li> </ul>
</div>
</div><!-- top -->
<div id="doc-content">
<div class="header">
<div class="headertitle"><div class="title">load.h</div></div>
</div><!--header-->
@@ -106,15 +120,18 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span> </div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span>} <span class="comment">// namespace mlx::core</span></div>
<div class="ttc" id="aarray_8h_html"><div class="ttname"><a href="array_8h.html">array.h</a></div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1array_html"><div class="ttname"><a href="classmlx_1_1core_1_1array.html">mlx::core::array</a></div><div class="ttdef"><b>Definition</b> array.h:23</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1array_html"><div class="ttname"><a href="classmlx_1_1core_1_1array.html">mlx::core::array</a></div><div class="ttdef"><b>Definition</b> array.h:24</div></div>
<div class="ttc" id="aio_2load_8h_html"><div class="ttname"><a href="io_2load_8h.html">load.h</a></div></div>
<div class="ttc" id="anamespacemlx_1_1core_html"><div class="ttname"><a href="namespacemlx_1_1core.html">mlx::core</a></div><div class="ttdef"><b>Definition</b> allocator.h:7</div></div>
<div class="ttc" id="anamespacemlx_1_1core_html_a954de19249da7c1fa39b89bdc47368aa"><div class="ttname"><a href="namespacemlx_1_1core.html#a954de19249da7c1fa39b89bdc47368aa">mlx::core::load</a></div><div class="ttdeci">void load(array &amp;out, size_t offset, const std::shared_ptr&lt; io::Reader &gt; &amp;reader, bool swap_endianess)</div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0
</small></address>
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_f149b24a1b5be11cd70151abe517e3f8.html">common</a></li><li class="navelem"><a class="el" href="backend_2common_2load_8h.html">load.h</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.1 </li>
</ul>
</div>
</body>
</html>
+41 -24
View File
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.12.0"/>
<meta name="generator" content="Doxygen 1.13.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MLX: mlx/backend/common/ops.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -11,11 +11,18 @@
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
@@ -28,12 +35,24 @@
<div id="projectname">MLX
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.12.0 -->
<!-- Generated by Doxygen 1.13.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
@@ -44,22 +63,23 @@ var searchBox = new SearchBox("searchBox", "search/",'.html');
$(function() { codefold.init(0); });
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search',false);
$(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){ initResizable(false); });
$(function(){initNavTree('backend_2common_2ops_8h.html',''); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
@@ -81,12 +101,6 @@ $(function(){ initResizable(false); });
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_f149b24a1b5be11cd70151abe517e3f8.html">common</a></li> </ul>
</div>
</div><!-- top -->
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#nested-classes">Classes</a> &#124;
@@ -243,10 +257,13 @@ Functions</h2></td></tr>
<tr class="separator:ad0ff3975e4c96317df1a2de0f7a30c1d"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0
</small></address>
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_f149b24a1b5be11cd70151abe517e3f8.html">common</a></li><li class="navelem"><a class="el" href="backend_2common_2ops_8h.html">ops.h</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.1 </li>
</ul>
</div>
</body>
</html>
+66
View File
@@ -0,0 +1,66 @@
var backend_2common_2ops_8h =
[
[ "mlx::core::detail::IntOrFloat", "unionmlx_1_1core_1_1detail_1_1_int_or_float.html", "unionmlx_1_1core_1_1detail_1_1_int_or_float" ],
[ "mlx::core::detail::Abs", "structmlx_1_1core_1_1detail_1_1_abs.html", "structmlx_1_1core_1_1detail_1_1_abs" ],
[ "mlx::core::detail::ArcCos", "structmlx_1_1core_1_1detail_1_1_arc_cos.html", "structmlx_1_1core_1_1detail_1_1_arc_cos" ],
[ "mlx::core::detail::ArcCosh", "structmlx_1_1core_1_1detail_1_1_arc_cosh.html", "structmlx_1_1core_1_1detail_1_1_arc_cosh" ],
[ "mlx::core::detail::ArcSin", "structmlx_1_1core_1_1detail_1_1_arc_sin.html", "structmlx_1_1core_1_1detail_1_1_arc_sin" ],
[ "mlx::core::detail::ArcSinh", "structmlx_1_1core_1_1detail_1_1_arc_sinh.html", "structmlx_1_1core_1_1detail_1_1_arc_sinh" ],
[ "mlx::core::detail::ArcTan", "structmlx_1_1core_1_1detail_1_1_arc_tan.html", "structmlx_1_1core_1_1detail_1_1_arc_tan" ],
[ "mlx::core::detail::ArcTan2", "structmlx_1_1core_1_1detail_1_1_arc_tan2.html", "structmlx_1_1core_1_1detail_1_1_arc_tan2" ],
[ "mlx::core::detail::ArcTanh", "structmlx_1_1core_1_1detail_1_1_arc_tanh.html", "structmlx_1_1core_1_1detail_1_1_arc_tanh" ],
[ "mlx::core::detail::Ceil", "structmlx_1_1core_1_1detail_1_1_ceil.html", "structmlx_1_1core_1_1detail_1_1_ceil" ],
[ "mlx::core::detail::Conjugate", "structmlx_1_1core_1_1detail_1_1_conjugate.html", "structmlx_1_1core_1_1detail_1_1_conjugate" ],
[ "mlx::core::detail::Cos", "structmlx_1_1core_1_1detail_1_1_cos.html", "structmlx_1_1core_1_1detail_1_1_cos" ],
[ "mlx::core::detail::Cosh", "structmlx_1_1core_1_1detail_1_1_cosh.html", "structmlx_1_1core_1_1detail_1_1_cosh" ],
[ "mlx::core::detail::Erf", "structmlx_1_1core_1_1detail_1_1_erf.html", "structmlx_1_1core_1_1detail_1_1_erf" ],
[ "mlx::core::detail::ErfInv", "structmlx_1_1core_1_1detail_1_1_erf_inv.html", "structmlx_1_1core_1_1detail_1_1_erf_inv" ],
[ "mlx::core::detail::Exp", "structmlx_1_1core_1_1detail_1_1_exp.html", "structmlx_1_1core_1_1detail_1_1_exp" ],
[ "mlx::core::detail::Expm1", "structmlx_1_1core_1_1detail_1_1_expm1.html", "structmlx_1_1core_1_1detail_1_1_expm1" ],
[ "mlx::core::detail::Floor", "structmlx_1_1core_1_1detail_1_1_floor.html", "structmlx_1_1core_1_1detail_1_1_floor" ],
[ "mlx::core::detail::Imag", "structmlx_1_1core_1_1detail_1_1_imag.html", "structmlx_1_1core_1_1detail_1_1_imag" ],
[ "mlx::core::detail::Log", "structmlx_1_1core_1_1detail_1_1_log.html", "structmlx_1_1core_1_1detail_1_1_log" ],
[ "mlx::core::detail::Log2", "structmlx_1_1core_1_1detail_1_1_log2.html", "structmlx_1_1core_1_1detail_1_1_log2" ],
[ "mlx::core::detail::Log10", "structmlx_1_1core_1_1detail_1_1_log10.html", "structmlx_1_1core_1_1detail_1_1_log10" ],
[ "mlx::core::detail::Log1p", "structmlx_1_1core_1_1detail_1_1_log1p.html", "structmlx_1_1core_1_1detail_1_1_log1p" ],
[ "mlx::core::detail::LogicalNot", "structmlx_1_1core_1_1detail_1_1_logical_not.html", "structmlx_1_1core_1_1detail_1_1_logical_not" ],
[ "mlx::core::detail::Negative", "structmlx_1_1core_1_1detail_1_1_negative.html", "structmlx_1_1core_1_1detail_1_1_negative" ],
[ "mlx::core::detail::Real", "structmlx_1_1core_1_1detail_1_1_real.html", "structmlx_1_1core_1_1detail_1_1_real" ],
[ "mlx::core::detail::Round", "structmlx_1_1core_1_1detail_1_1_round.html", "structmlx_1_1core_1_1detail_1_1_round" ],
[ "mlx::core::detail::Sigmoid", "structmlx_1_1core_1_1detail_1_1_sigmoid.html", "structmlx_1_1core_1_1detail_1_1_sigmoid" ],
[ "mlx::core::detail::Sign", "structmlx_1_1core_1_1detail_1_1_sign.html", "structmlx_1_1core_1_1detail_1_1_sign" ],
[ "mlx::core::detail::Sin", "structmlx_1_1core_1_1detail_1_1_sin.html", "structmlx_1_1core_1_1detail_1_1_sin" ],
[ "mlx::core::detail::Sinh", "structmlx_1_1core_1_1detail_1_1_sinh.html", "structmlx_1_1core_1_1detail_1_1_sinh" ],
[ "mlx::core::detail::Square", "structmlx_1_1core_1_1detail_1_1_square.html", "structmlx_1_1core_1_1detail_1_1_square" ],
[ "mlx::core::detail::Sqrt", "structmlx_1_1core_1_1detail_1_1_sqrt.html", "structmlx_1_1core_1_1detail_1_1_sqrt" ],
[ "mlx::core::detail::Rsqrt", "structmlx_1_1core_1_1detail_1_1_rsqrt.html", "structmlx_1_1core_1_1detail_1_1_rsqrt" ],
[ "mlx::core::detail::Tan", "structmlx_1_1core_1_1detail_1_1_tan.html", "structmlx_1_1core_1_1detail_1_1_tan" ],
[ "mlx::core::detail::Tanh", "structmlx_1_1core_1_1detail_1_1_tanh.html", "structmlx_1_1core_1_1detail_1_1_tanh" ],
[ "mlx::core::detail::Add", "structmlx_1_1core_1_1detail_1_1_add.html", "structmlx_1_1core_1_1detail_1_1_add" ],
[ "mlx::core::detail::Divide", "structmlx_1_1core_1_1detail_1_1_divide.html", "structmlx_1_1core_1_1detail_1_1_divide" ],
[ "mlx::core::detail::Remainder", "structmlx_1_1core_1_1detail_1_1_remainder.html", "structmlx_1_1core_1_1detail_1_1_remainder" ],
[ "mlx::core::detail::Equal", "structmlx_1_1core_1_1detail_1_1_equal.html", "structmlx_1_1core_1_1detail_1_1_equal" ],
[ "mlx::core::detail::NaNEqual", "structmlx_1_1core_1_1detail_1_1_na_n_equal.html", "structmlx_1_1core_1_1detail_1_1_na_n_equal" ],
[ "mlx::core::detail::Greater", "structmlx_1_1core_1_1detail_1_1_greater.html", "structmlx_1_1core_1_1detail_1_1_greater" ],
[ "mlx::core::detail::GreaterEqual", "structmlx_1_1core_1_1detail_1_1_greater_equal.html", "structmlx_1_1core_1_1detail_1_1_greater_equal" ],
[ "mlx::core::detail::Less", "structmlx_1_1core_1_1detail_1_1_less.html", "structmlx_1_1core_1_1detail_1_1_less" ],
[ "mlx::core::detail::LessEqual", "structmlx_1_1core_1_1detail_1_1_less_equal.html", "structmlx_1_1core_1_1detail_1_1_less_equal" ],
[ "mlx::core::detail::Maximum", "structmlx_1_1core_1_1detail_1_1_maximum.html", "structmlx_1_1core_1_1detail_1_1_maximum" ],
[ "mlx::core::detail::Minimum", "structmlx_1_1core_1_1detail_1_1_minimum.html", "structmlx_1_1core_1_1detail_1_1_minimum" ],
[ "mlx::core::detail::LogAddExp", "structmlx_1_1core_1_1detail_1_1_log_add_exp.html", "structmlx_1_1core_1_1detail_1_1_log_add_exp" ],
[ "mlx::core::detail::Multiply", "structmlx_1_1core_1_1detail_1_1_multiply.html", "structmlx_1_1core_1_1detail_1_1_multiply" ],
[ "mlx::core::detail::NotEqual", "structmlx_1_1core_1_1detail_1_1_not_equal.html", "structmlx_1_1core_1_1detail_1_1_not_equal" ],
[ "mlx::core::detail::Power", "structmlx_1_1core_1_1detail_1_1_power.html", "structmlx_1_1core_1_1detail_1_1_power" ],
[ "mlx::core::detail::Subtract", "structmlx_1_1core_1_1detail_1_1_subtract.html", "structmlx_1_1core_1_1detail_1_1_subtract" ],
[ "mlx::core::detail::LogicalAnd", "structmlx_1_1core_1_1detail_1_1_logical_and.html", "structmlx_1_1core_1_1detail_1_1_logical_and" ],
[ "mlx::core::detail::LogicalOr", "structmlx_1_1core_1_1detail_1_1_logical_or.html", "structmlx_1_1core_1_1detail_1_1_logical_or" ],
[ "mlx::core::detail::Select", "structmlx_1_1core_1_1detail_1_1_select.html", "structmlx_1_1core_1_1detail_1_1_select" ],
[ "mlx::core::detail::BitwiseAnd", "structmlx_1_1core_1_1detail_1_1_bitwise_and.html", "structmlx_1_1core_1_1detail_1_1_bitwise_and" ],
[ "mlx::core::detail::BitwiseOr", "structmlx_1_1core_1_1detail_1_1_bitwise_or.html", "structmlx_1_1core_1_1detail_1_1_bitwise_or" ],
[ "mlx::core::detail::BitwiseXor", "structmlx_1_1core_1_1detail_1_1_bitwise_xor.html", "structmlx_1_1core_1_1detail_1_1_bitwise_xor" ],
[ "mlx::core::detail::LeftShift", "structmlx_1_1core_1_1detail_1_1_left_shift.html", "structmlx_1_1core_1_1detail_1_1_left_shift" ],
[ "mlx::core::detail::RightShift", "structmlx_1_1core_1_1detail_1_1_right_shift.html", "structmlx_1_1core_1_1detail_1_1_right_shift" ],
[ "mlx::core::detail::fast_erf", "namespacemlx_1_1core_1_1detail.html#a90c9f6149af5adf4e2a95608d5f7b790", null ],
[ "mlx::core::detail::fast_erfinv", "namespacemlx_1_1core_1_1detail.html#ad0ff3975e4c96317df1a2de0f7a30c1d", null ],
[ "mlx::core::detail::fast_exp", "namespacemlx_1_1core_1_1detail.html#a2726436fc72d4a3f0030c89579b4d374", null ]
];
+299 -278
View File
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.12.0"/>
<meta name="generator" content="Doxygen 1.13.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MLX: mlx/backend/common/ops.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -11,11 +11,18 @@
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
@@ -28,12 +35,24 @@
<div id="projectname">MLX
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.12.0 -->
<!-- Generated by Doxygen 1.13.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
@@ -44,22 +63,23 @@ var searchBox = new SearchBox("searchBox", "search/",'.html');
$(function() { codefold.init(0); });
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search',false);
$(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){ initResizable(false); });
$(function(){initNavTree('backend_2common_2ops_8h_source.html',''); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
@@ -81,12 +101,6 @@ $(function(){ initResizable(false); });
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_f149b24a1b5be11cd70151abe517e3f8.html">common</a></li> </ul>
</div>
</div><!-- top -->
<div id="doc-content">
<div class="header">
<div class="headertitle"><div class="title">ops.h</div></div>
</div><!--header-->
@@ -144,16 +158,16 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> </div>
<div class="foldopen" id="foldopen00047" data-start="{" data-end="}">
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"><a class="line" href="namespacemlx_1_1core_1_1detail.html#a90c9f6149af5adf4e2a95608d5f7b790"> 47</a></span><span class="keyword">inline</span> <span class="keywordtype">float</span> <a class="code hl_function" href="namespacemlx_1_1core_1_1detail.html#a90c9f6149af5adf4e2a95608d5f7b790">fast_erf</a>(<span class="keywordtype">float</span> a) {</div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> <span class="keywordtype">float</span> r, s, t, <a class="code hl_variable" href="types_2bf16_8h.html#aa21e554721eddcf127b7fcfa7fdc56bd">u</a>;</div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> <span class="keywordtype">float</span> r, s, t, u;</div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> t = std::abs(a);</div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> s = a * a;</div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> <span class="keywordflow">if</span> (t &gt; 0.927734375f) {</div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> <span class="comment">// maximum error 0.99527 ulp</span></div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> r = std::fma(</div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> -1.72853470e-5f, t, 3.83197126e-4f); <span class="comment">// -0x1.220000p-16,0x1.91cfb2p-12</span></div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> <a class="code hl_variable" href="types_2bf16_8h.html#aa21e554721eddcf127b7fcfa7fdc56bd">u</a> = std::fma(</div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> u = std::fma(</div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> -3.88396438e-3f, t, 2.42546219e-2f); <span class="comment">// -0x1.fd1438p-9, 0x1.8d6342p-6</span></div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> r = std::fma(r, s, <a class="code hl_variable" href="types_2bf16_8h.html#aa21e554721eddcf127b7fcfa7fdc56bd">u</a>);</div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> r = std::fma(r, s, u);</div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> r = std::fma(r, t, -1.06777877e-1f); <span class="comment">// -0x1.b55cb8p-4</span></div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> r = std::fma(r, t, -6.34846687e-1f); <span class="comment">// -0x1.450aa0p-1</span></div>
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> r = std::fma(r, t, -1.28717512e-1f); <span class="comment">// -0x1.079d0cp-3</span></div>
@@ -826,263 +840,268 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00501" name="l00501"></a><span class="lineno"> 501</span> <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="foldopen" id="foldopen00502" data-start="{" data-end="}">
<div class="line"><a id="l00502" name="l00502"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_na_n_equal.html#a073b20b0d8d41ec8364b7c477421b9bf"> 502</a></span> <span class="keywordtype">bool</span> <a class="code hl_function" href="structmlx_1_1core_1_1detail_1_1_na_n_equal.html#a073b20b0d8d41ec8364b7c477421b9bf">operator()</a>(T x, T y) {</div>
<div class="line"><a id="l00503" name="l00503"></a><span class="lineno"> 503</span> <span class="keywordflow">return</span> x == y || (std::isnan(x) &amp;&amp; std::isnan(y));</div>
<div class="line"><a id="l00504" name="l00504"></a><span class="lineno"> 504</span> }</div>
<div class="line"><a id="l00503" name="l00503"></a><span class="lineno"> 503</span> <span class="keywordflow">if</span> <span class="keyword">constexpr</span> (std::is_integral_v&lt;T&gt;) {</div>
<div class="line"><a id="l00504" name="l00504"></a><span class="lineno"> 504</span> <span class="comment">// isnan always returns false for integers, and MSVC refuses to compile.</span></div>
<div class="line"><a id="l00505" name="l00505"></a><span class="lineno"> 505</span> <span class="keywordflow">return</span> x == y;</div>
<div class="line"><a id="l00506" name="l00506"></a><span class="lineno"> 506</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00507" name="l00507"></a><span class="lineno"> 507</span> <span class="keywordflow">return</span> x == y || (std::isnan(x) &amp;&amp; std::isnan(y));</div>
<div class="line"><a id="l00508" name="l00508"></a><span class="lineno"> 508</span> }</div>
<div class="line"><a id="l00509" name="l00509"></a><span class="lineno"> 509</span> }</div>
</div>
<div class="line"><a id="l00505" name="l00505"></a><span class="lineno"> 505</span>};</div>
<div class="line"><a id="l00510" name="l00510"></a><span class="lineno"> 510</span>};</div>
</div>
<div class="line"><a id="l00506" name="l00506"></a><span class="lineno"> 506</span> </div>
<div class="foldopen" id="foldopen00507" data-start="{" data-end="};">
<div class="line"><a id="l00507" name="l00507"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_greater.html"> 507</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structmlx_1_1core_1_1detail_1_1_greater.html">Greater</a> {</div>
<div class="line"><a id="l00508" name="l00508"></a><span class="lineno"> 508</span> <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="foldopen" id="foldopen00509" data-start="{" data-end="}">
<div class="line"><a id="l00509" name="l00509"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_greater.html#aa3844c2bae3c7a981739f642aa0dd094"> 509</a></span> <span class="keywordtype">bool</span> <a class="code hl_function" href="structmlx_1_1core_1_1detail_1_1_greater.html#aa3844c2bae3c7a981739f642aa0dd094">operator()</a>(T x, T y) {</div>
<div class="line"><a id="l00510" name="l00510"></a><span class="lineno"> 510</span> <span class="keywordflow">return</span> x &gt; y;</div>
<div class="line"><a id="l00511" name="l00511"></a><span class="lineno"> 511</span> }</div>
<div class="line"><a id="l00511" name="l00511"></a><span class="lineno"> 511</span> </div>
<div class="foldopen" id="foldopen00512" data-start="{" data-end="};">
<div class="line"><a id="l00512" name="l00512"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_greater.html"> 512</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structmlx_1_1core_1_1detail_1_1_greater.html">Greater</a> {</div>
<div class="line"><a id="l00513" name="l00513"></a><span class="lineno"> 513</span> <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="foldopen" id="foldopen00514" data-start="{" data-end="}">
<div class="line"><a id="l00514" name="l00514"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_greater.html#aa3844c2bae3c7a981739f642aa0dd094"> 514</a></span> <span class="keywordtype">bool</span> <a class="code hl_function" href="structmlx_1_1core_1_1detail_1_1_greater.html#aa3844c2bae3c7a981739f642aa0dd094">operator()</a>(T x, T y) {</div>
<div class="line"><a id="l00515" name="l00515"></a><span class="lineno"> 515</span> <span class="keywordflow">return</span> x &gt; y;</div>
<div class="line"><a id="l00516" name="l00516"></a><span class="lineno"> 516</span> }</div>
</div>
<div class="line"><a id="l00512" name="l00512"></a><span class="lineno"> 512</span>};</div>
<div class="line"><a id="l00517" name="l00517"></a><span class="lineno"> 517</span>};</div>
</div>
<div class="line"><a id="l00513" name="l00513"></a><span class="lineno"> 513</span> </div>
<div class="foldopen" id="foldopen00514" data-start="{" data-end="};">
<div class="line"><a id="l00514" name="l00514"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_greater_equal.html"> 514</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structmlx_1_1core_1_1detail_1_1_greater_equal.html">GreaterEqual</a> {</div>
<div class="line"><a id="l00515" name="l00515"></a><span class="lineno"> 515</span> <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="foldopen" id="foldopen00516" data-start="{" data-end="}">
<div class="line"><a id="l00516" name="l00516"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_greater_equal.html#a3b005f85522ad0e4b57044eed930ac30"> 516</a></span> <span class="keywordtype">bool</span> <a class="code hl_function" href="structmlx_1_1core_1_1detail_1_1_greater_equal.html#a3b005f85522ad0e4b57044eed930ac30">operator()</a>(T x, T y) {</div>
<div class="line"><a id="l00517" name="l00517"></a><span class="lineno"> 517</span> <span class="keywordflow">return</span> x &gt;= y;</div>
<div class="line"><a id="l00518" name="l00518"></a><span class="lineno"> 518</span> }</div>
<div class="line"><a id="l00518" name="l00518"></a><span class="lineno"> 518</span> </div>
<div class="foldopen" id="foldopen00519" data-start="{" data-end="};">
<div class="line"><a id="l00519" name="l00519"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_greater_equal.html"> 519</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structmlx_1_1core_1_1detail_1_1_greater_equal.html">GreaterEqual</a> {</div>
<div class="line"><a id="l00520" name="l00520"></a><span class="lineno"> 520</span> <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="foldopen" id="foldopen00521" data-start="{" data-end="}">
<div class="line"><a id="l00521" name="l00521"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_greater_equal.html#a3b005f85522ad0e4b57044eed930ac30"> 521</a></span> <span class="keywordtype">bool</span> <a class="code hl_function" href="structmlx_1_1core_1_1detail_1_1_greater_equal.html#a3b005f85522ad0e4b57044eed930ac30">operator()</a>(T x, T y) {</div>
<div class="line"><a id="l00522" name="l00522"></a><span class="lineno"> 522</span> <span class="keywordflow">return</span> x &gt;= y;</div>
<div class="line"><a id="l00523" name="l00523"></a><span class="lineno"> 523</span> }</div>
</div>
<div class="line"><a id="l00519" name="l00519"></a><span class="lineno"> 519</span>};</div>
<div class="line"><a id="l00524" name="l00524"></a><span class="lineno"> 524</span>};</div>
</div>
<div class="line"><a id="l00520" name="l00520"></a><span class="lineno"> 520</span> </div>
<div class="foldopen" id="foldopen00521" data-start="{" data-end="};">
<div class="line"><a id="l00521" name="l00521"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_less.html"> 521</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structmlx_1_1core_1_1detail_1_1_less.html">Less</a> {</div>
<div class="line"><a id="l00522" name="l00522"></a><span class="lineno"> 522</span> <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="foldopen" id="foldopen00523" data-start="{" data-end="}">
<div class="line"><a id="l00523" name="l00523"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_less.html#a0b4032dff1ad2b387745cb000aabdcbb"> 523</a></span> <span class="keywordtype">bool</span> <a class="code hl_function" href="structmlx_1_1core_1_1detail_1_1_less.html#a0b4032dff1ad2b387745cb000aabdcbb">operator()</a>(T x, T y) {</div>
<div class="line"><a id="l00524" name="l00524"></a><span class="lineno"> 524</span> <span class="keywordflow">return</span> x &lt; y;</div>
<div class="line"><a id="l00525" name="l00525"></a><span class="lineno"> 525</span> }</div>
<div class="line"><a id="l00525" name="l00525"></a><span class="lineno"> 525</span> </div>
<div class="foldopen" id="foldopen00526" data-start="{" data-end="};">
<div class="line"><a id="l00526" name="l00526"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_less.html"> 526</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structmlx_1_1core_1_1detail_1_1_less.html">Less</a> {</div>
<div class="line"><a id="l00527" name="l00527"></a><span class="lineno"> 527</span> <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="foldopen" id="foldopen00528" data-start="{" data-end="}">
<div class="line"><a id="l00528" name="l00528"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_less.html#a0b4032dff1ad2b387745cb000aabdcbb"> 528</a></span> <span class="keywordtype">bool</span> <a class="code hl_function" href="structmlx_1_1core_1_1detail_1_1_less.html#a0b4032dff1ad2b387745cb000aabdcbb">operator()</a>(T x, T y) {</div>
<div class="line"><a id="l00529" name="l00529"></a><span class="lineno"> 529</span> <span class="keywordflow">return</span> x &lt; y;</div>
<div class="line"><a id="l00530" name="l00530"></a><span class="lineno"> 530</span> }</div>
</div>
<div class="line"><a id="l00526" name="l00526"></a><span class="lineno"> 526</span>};</div>
<div class="line"><a id="l00531" name="l00531"></a><span class="lineno"> 531</span>};</div>
</div>
<div class="line"><a id="l00527" name="l00527"></a><span class="lineno"> 527</span> </div>
<div class="foldopen" id="foldopen00528" data-start="{" data-end="};">
<div class="line"><a id="l00528" name="l00528"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_less_equal.html"> 528</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structmlx_1_1core_1_1detail_1_1_less_equal.html">LessEqual</a> {</div>
<div class="line"><a id="l00529" name="l00529"></a><span class="lineno"> 529</span> <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="foldopen" id="foldopen00530" data-start="{" data-end="}">
<div class="line"><a id="l00530" name="l00530"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_less_equal.html#a31e70f8830a07557697541301555a7a7"> 530</a></span> <span class="keywordtype">bool</span> <a class="code hl_function" href="structmlx_1_1core_1_1detail_1_1_less_equal.html#a31e70f8830a07557697541301555a7a7">operator()</a>(T x, T y) {</div>
<div class="line"><a id="l00531" name="l00531"></a><span class="lineno"> 531</span> <span class="keywordflow">return</span> x &lt;= y;</div>
<div class="line"><a id="l00532" name="l00532"></a><span class="lineno"> 532</span> }</div>
<div class="line"><a id="l00532" name="l00532"></a><span class="lineno"> 532</span> </div>
<div class="foldopen" id="foldopen00533" data-start="{" data-end="};">
<div class="line"><a id="l00533" name="l00533"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_less_equal.html"> 533</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structmlx_1_1core_1_1detail_1_1_less_equal.html">LessEqual</a> {</div>
<div class="line"><a id="l00534" name="l00534"></a><span class="lineno"> 534</span> <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="foldopen" id="foldopen00535" data-start="{" data-end="}">
<div class="line"><a id="l00535" name="l00535"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_less_equal.html#a31e70f8830a07557697541301555a7a7"> 535</a></span> <span class="keywordtype">bool</span> <a class="code hl_function" href="structmlx_1_1core_1_1detail_1_1_less_equal.html#a31e70f8830a07557697541301555a7a7">operator()</a>(T x, T y) {</div>
<div class="line"><a id="l00536" name="l00536"></a><span class="lineno"> 536</span> <span class="keywordflow">return</span> x &lt;= y;</div>
<div class="line"><a id="l00537" name="l00537"></a><span class="lineno"> 537</span> }</div>
</div>
<div class="line"><a id="l00533" name="l00533"></a><span class="lineno"> 533</span>};</div>
<div class="line"><a id="l00538" name="l00538"></a><span class="lineno"> 538</span>};</div>
</div>
<div class="line"><a id="l00534" name="l00534"></a><span class="lineno"> 534</span> </div>
<div class="foldopen" id="foldopen00535" data-start="{" data-end="};">
<div class="line"><a id="l00535" name="l00535"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_maximum.html"> 535</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structmlx_1_1core_1_1detail_1_1_maximum.html">Maximum</a> {</div>
<div class="line"><a id="l00536" name="l00536"></a><span class="lineno"> 536</span> <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="foldopen" id="foldopen00537" data-start="{" data-end="}">
<div class="line"><a id="l00537" name="l00537"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_maximum.html#a3eb37abec8426ebc42b8c685075c523a"> 537</a></span> std::enable_if_t&lt;std::is_integral_v&lt;T&gt;, T&gt; <a class="code hl_function" href="structmlx_1_1core_1_1detail_1_1_maximum.html#a3eb37abec8426ebc42b8c685075c523a">operator()</a>(T x, T y) {</div>
<div class="line"><a id="l00538" name="l00538"></a><span class="lineno"> 538</span> <span class="keywordflow">return</span> (x &gt; y) ? x : y;</div>
<div class="line"><a id="l00539" name="l00539"></a><span class="lineno"> 539</span> }</div>
</div>
<div class="line"><a id="l00540" name="l00540"></a><span class="lineno"> 540</span> </div>
<div class="line"><a id="l00539" name="l00539"></a><span class="lineno"> 539</span> </div>
<div class="foldopen" id="foldopen00540" data-start="{" data-end="};">
<div class="line"><a id="l00540" name="l00540"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_maximum.html"> 540</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structmlx_1_1core_1_1detail_1_1_maximum.html">Maximum</a> {</div>
<div class="line"><a id="l00541" name="l00541"></a><span class="lineno"> 541</span> <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="foldopen" id="foldopen00542" data-start="{" data-end="}">
<div class="line"><a id="l00542" name="l00542"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_maximum.html#af99345c7c8bc95ccab1b22c0792ac6fd"> 542</a></span> std::enable_if_t&lt;!std::is_integral_v&lt;T&gt;, T&gt; <a class="code hl_function" href="structmlx_1_1core_1_1detail_1_1_maximum.html#af99345c7c8bc95ccab1b22c0792ac6fd">operator()</a>(T x, T y) {</div>
<div class="line"><a id="l00543" name="l00543"></a><span class="lineno"> 543</span> <span class="keywordflow">if</span> (std::isnan(x)) {</div>
<div class="line"><a id="l00544" name="l00544"></a><span class="lineno"> 544</span> <span class="keywordflow">return</span> x;</div>
<div class="line"><a id="l00545" name="l00545"></a><span class="lineno"> 545</span> }</div>
<div class="line"><a id="l00546" name="l00546"></a><span class="lineno"> 546</span> <span class="keywordflow">return</span> (x &gt; y) ? x : y;</div>
<div class="line"><a id="l00547" name="l00547"></a><span class="lineno"> 547</span> }</div>
<div class="line"><a id="l00542" name="l00542"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_maximum.html#a3eb37abec8426ebc42b8c685075c523a"> 542</a></span> std::enable_if_t&lt;std::is_integral_v&lt;T&gt;, T&gt; <a class="code hl_function" href="structmlx_1_1core_1_1detail_1_1_maximum.html#a3eb37abec8426ebc42b8c685075c523a">operator()</a>(T x, T y) {</div>
<div class="line"><a id="l00543" name="l00543"></a><span class="lineno"> 543</span> <span class="keywordflow">return</span> (x &gt; y) ? x : y;</div>
<div class="line"><a id="l00544" name="l00544"></a><span class="lineno"> 544</span> }</div>
</div>
<div class="line"><a id="l00548" name="l00548"></a><span class="lineno"> 548</span>};</div>
<div class="line"><a id="l00545" name="l00545"></a><span class="lineno"> 545</span> </div>
<div class="line"><a id="l00546" name="l00546"></a><span class="lineno"> 546</span> <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="foldopen" id="foldopen00547" data-start="{" data-end="}">
<div class="line"><a id="l00547" name="l00547"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_maximum.html#af99345c7c8bc95ccab1b22c0792ac6fd"> 547</a></span> std::enable_if_t&lt;!std::is_integral_v&lt;T&gt;, T&gt; <a class="code hl_function" href="structmlx_1_1core_1_1detail_1_1_maximum.html#af99345c7c8bc95ccab1b22c0792ac6fd">operator()</a>(T x, T y) {</div>
<div class="line"><a id="l00548" name="l00548"></a><span class="lineno"> 548</span> <span class="keywordflow">if</span> (std::isnan(x)) {</div>
<div class="line"><a id="l00549" name="l00549"></a><span class="lineno"> 549</span> <span class="keywordflow">return</span> x;</div>
<div class="line"><a id="l00550" name="l00550"></a><span class="lineno"> 550</span> }</div>
<div class="line"><a id="l00551" name="l00551"></a><span class="lineno"> 551</span> <span class="keywordflow">return</span> (x &gt; y) ? x : y;</div>
<div class="line"><a id="l00552" name="l00552"></a><span class="lineno"> 552</span> }</div>
</div>
<div class="line"><a id="l00549" name="l00549"></a><span class="lineno"> 549</span> </div>
<div class="foldopen" id="foldopen00550" data-start="{" data-end="};">
<div class="line"><a id="l00550" name="l00550"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_minimum.html"> 550</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structmlx_1_1core_1_1detail_1_1_minimum.html">Minimum</a> {</div>
<div class="line"><a id="l00551" name="l00551"></a><span class="lineno"> 551</span> <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="foldopen" id="foldopen00552" data-start="{" data-end="}">
<div class="line"><a id="l00552" name="l00552"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_minimum.html#afca0861556416a8547dd8574528feb69"> 552</a></span> std::enable_if_t&lt;std::is_integral_v&lt;T&gt;, T&gt; <a class="code hl_function" href="structmlx_1_1core_1_1detail_1_1_minimum.html#afca0861556416a8547dd8574528feb69">operator()</a>(T x, T y) {</div>
<div class="line"><a id="l00553" name="l00553"></a><span class="lineno"> 553</span> <span class="keywordflow">return</span> x &lt; y ? x : y;</div>
<div class="line"><a id="l00554" name="l00554"></a><span class="lineno"> 554</span> }</div>
<div class="line"><a id="l00553" name="l00553"></a><span class="lineno"> 553</span>};</div>
</div>
<div class="line"><a id="l00555" name="l00555"></a><span class="lineno"> 555</span> </div>
<div class="line"><a id="l00554" name="l00554"></a><span class="lineno"> 554</span> </div>
<div class="foldopen" id="foldopen00555" data-start="{" data-end="};">
<div class="line"><a id="l00555" name="l00555"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_minimum.html"> 555</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structmlx_1_1core_1_1detail_1_1_minimum.html">Minimum</a> {</div>
<div class="line"><a id="l00556" name="l00556"></a><span class="lineno"> 556</span> <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="foldopen" id="foldopen00557" data-start="{" data-end="}">
<div class="line"><a id="l00557" name="l00557"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_minimum.html#a64b2eecfbc56aaef7deb939423bac3f8"> 557</a></span> std::enable_if_t&lt;!std::is_integral_v&lt;T&gt;, T&gt; <a class="code hl_function" href="structmlx_1_1core_1_1detail_1_1_minimum.html#a64b2eecfbc56aaef7deb939423bac3f8">operator()</a>(T x, T y) {</div>
<div class="line"><a id="l00558" name="l00558"></a><span class="lineno"> 558</span> <span class="keywordflow">if</span> (std::isnan(x)) {</div>
<div class="line"><a id="l00559" name="l00559"></a><span class="lineno"> 559</span> <span class="keywordflow">return</span> x;</div>
<div class="line"><a id="l00560" name="l00560"></a><span class="lineno"> 560</span> }</div>
<div class="line"><a id="l00561" name="l00561"></a><span class="lineno"> 561</span> <span class="keywordflow">return</span> x &lt; y ? x : y;</div>
<div class="line"><a id="l00562" name="l00562"></a><span class="lineno"> 562</span> }</div>
<div class="line"><a id="l00557" name="l00557"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_minimum.html#afca0861556416a8547dd8574528feb69"> 557</a></span> std::enable_if_t&lt;std::is_integral_v&lt;T&gt;, T&gt; <a class="code hl_function" href="structmlx_1_1core_1_1detail_1_1_minimum.html#afca0861556416a8547dd8574528feb69">operator()</a>(T x, T y) {</div>
<div class="line"><a id="l00558" name="l00558"></a><span class="lineno"> 558</span> <span class="keywordflow">return</span> x &lt; y ? x : y;</div>
<div class="line"><a id="l00559" name="l00559"></a><span class="lineno"> 559</span> }</div>
</div>
<div class="line"><a id="l00563" name="l00563"></a><span class="lineno"> 563</span>};</div>
<div class="line"><a id="l00560" name="l00560"></a><span class="lineno"> 560</span> </div>
<div class="line"><a id="l00561" name="l00561"></a><span class="lineno"> 561</span> <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="foldopen" id="foldopen00562" data-start="{" data-end="}">
<div class="line"><a id="l00562" name="l00562"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_minimum.html#a64b2eecfbc56aaef7deb939423bac3f8"> 562</a></span> std::enable_if_t&lt;!std::is_integral_v&lt;T&gt;, T&gt; <a class="code hl_function" href="structmlx_1_1core_1_1detail_1_1_minimum.html#a64b2eecfbc56aaef7deb939423bac3f8">operator()</a>(T x, T y) {</div>
<div class="line"><a id="l00563" name="l00563"></a><span class="lineno"> 563</span> <span class="keywordflow">if</span> (std::isnan(x)) {</div>
<div class="line"><a id="l00564" name="l00564"></a><span class="lineno"> 564</span> <span class="keywordflow">return</span> x;</div>
<div class="line"><a id="l00565" name="l00565"></a><span class="lineno"> 565</span> }</div>
<div class="line"><a id="l00566" name="l00566"></a><span class="lineno"> 566</span> <span class="keywordflow">return</span> x &lt; y ? x : y;</div>
<div class="line"><a id="l00567" name="l00567"></a><span class="lineno"> 567</span> }</div>
</div>
<div class="line"><a id="l00564" name="l00564"></a><span class="lineno"> 564</span> </div>
<div class="foldopen" id="foldopen00565" data-start="{" data-end="};">
<div class="line"><a id="l00565" name="l00565"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_log_add_exp.html"> 565</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structmlx_1_1core_1_1detail_1_1_log_add_exp.html">LogAddExp</a> {</div>
<div class="line"><a id="l00566" name="l00566"></a><span class="lineno"> 566</span> <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="foldopen" id="foldopen00567" data-start="{" data-end="}">
<div class="line"><a id="l00567" name="l00567"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_log_add_exp.html#ad1663fd809acaa4038f90666436599e5"> 567</a></span> T <a class="code hl_function" href="structmlx_1_1core_1_1detail_1_1_log_add_exp.html#ad1663fd809acaa4038f90666436599e5">operator()</a>(T x, T y) {</div>
<div class="line"><a id="l00568" name="l00568"></a><span class="lineno"> 568</span> <span class="keyword">constexpr</span> <span class="keywordtype">float</span> inf = std::numeric_limits&lt;float&gt;::infinity();</div>
<div class="line"><a id="l00569" name="l00569"></a><span class="lineno"> 569</span> <span class="keyword">auto</span> maxval = <a class="code hl_struct" href="structmlx_1_1core_1_1detail_1_1_maximum.html">Maximum</a>()(x, y);</div>
<div class="line"><a id="l00570" name="l00570"></a><span class="lineno"> 570</span> <span class="keyword">auto</span> minval = <a class="code hl_struct" href="structmlx_1_1core_1_1detail_1_1_minimum.html">Minimum</a>()(x, y);</div>
<div class="line"><a id="l00571" name="l00571"></a><span class="lineno"> 571</span> <span class="keywordflow">return</span> (minval == -inf || maxval == inf)</div>
<div class="line"><a id="l00572" name="l00572"></a><span class="lineno"> 572</span> ? maxval</div>
<div class="line"><a id="l00573" name="l00573"></a><span class="lineno"> 573</span> : <span class="keyword">static_cast&lt;</span>decltype(x)<span class="keyword">&gt;</span>(</div>
<div class="line"><a id="l00574" name="l00574"></a><span class="lineno"> 574</span> maxval + std::log1p(<a class="code hl_function" href="namespacemlx_1_1core_1_1detail.html#a2726436fc72d4a3f0030c89579b4d374">fast_exp</a>(minval - maxval)));</div>
<div class="line"><a id="l00575" name="l00575"></a><span class="lineno"> 575</span> }</div>
<div class="line"><a id="l00568" name="l00568"></a><span class="lineno"> 568</span>};</div>
</div>
<div class="line"><a id="l00576" name="l00576"></a><span class="lineno"> 576</span>};</div>
<div class="line"><a id="l00569" name="l00569"></a><span class="lineno"> 569</span> </div>
<div class="foldopen" id="foldopen00570" data-start="{" data-end="};">
<div class="line"><a id="l00570" name="l00570"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_log_add_exp.html"> 570</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structmlx_1_1core_1_1detail_1_1_log_add_exp.html">LogAddExp</a> {</div>
<div class="line"><a id="l00571" name="l00571"></a><span class="lineno"> 571</span> <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="foldopen" id="foldopen00572" data-start="{" data-end="}">
<div class="line"><a id="l00572" name="l00572"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_log_add_exp.html#ad1663fd809acaa4038f90666436599e5"> 572</a></span> T <a class="code hl_function" href="structmlx_1_1core_1_1detail_1_1_log_add_exp.html#ad1663fd809acaa4038f90666436599e5">operator()</a>(T x, T y) {</div>
<div class="line"><a id="l00573" name="l00573"></a><span class="lineno"> 573</span> <span class="keyword">constexpr</span> <span class="keywordtype">float</span> inf = std::numeric_limits&lt;float&gt;::infinity();</div>
<div class="line"><a id="l00574" name="l00574"></a><span class="lineno"> 574</span> <span class="keyword">auto</span> maxval = <a class="code hl_struct" href="structmlx_1_1core_1_1detail_1_1_maximum.html">Maximum</a>()(x, y);</div>
<div class="line"><a id="l00575" name="l00575"></a><span class="lineno"> 575</span> <span class="keyword">auto</span> minval = <a class="code hl_struct" href="structmlx_1_1core_1_1detail_1_1_minimum.html">Minimum</a>()(x, y);</div>
<div class="line"><a id="l00576" name="l00576"></a><span class="lineno"> 576</span> <span class="keywordflow">return</span> (minval == -inf || maxval == inf)</div>
<div class="line"><a id="l00577" name="l00577"></a><span class="lineno"> 577</span> ? maxval</div>
<div class="line"><a id="l00578" name="l00578"></a><span class="lineno"> 578</span> : <span class="keyword">static_cast&lt;</span>decltype(x)<span class="keyword">&gt;</span>(</div>
<div class="line"><a id="l00579" name="l00579"></a><span class="lineno"> 579</span> maxval + std::log1p(<a class="code hl_function" href="namespacemlx_1_1core_1_1detail.html#a2726436fc72d4a3f0030c89579b4d374">fast_exp</a>(minval - maxval)));</div>
<div class="line"><a id="l00580" name="l00580"></a><span class="lineno"> 580</span> }</div>
</div>
<div class="line"><a id="l00577" name="l00577"></a><span class="lineno"> 577</span> </div>
<div class="foldopen" id="foldopen00578" data-start="{" data-end="};">
<div class="line"><a id="l00578" name="l00578"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_multiply.html"> 578</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structmlx_1_1core_1_1detail_1_1_multiply.html">Multiply</a> {</div>
<div class="line"><a id="l00579" name="l00579"></a><span class="lineno"> 579</span> <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="foldopen" id="foldopen00580" data-start="{" data-end="}">
<div class="line"><a id="l00580" name="l00580"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_multiply.html#a898b090966b047723513224b8d3b22f1"> 580</a></span> T <a class="code hl_function" href="structmlx_1_1core_1_1detail_1_1_multiply.html#a898b090966b047723513224b8d3b22f1">operator()</a>(T x, T y) {</div>
<div class="line"><a id="l00581" name="l00581"></a><span class="lineno"> 581</span> <span class="keywordflow">return</span> x * y;</div>
<div class="line"><a id="l00582" name="l00582"></a><span class="lineno"> 582</span> }</div>
<div class="line"><a id="l00581" name="l00581"></a><span class="lineno"> 581</span>};</div>
</div>
<div class="line"><a id="l00583" name="l00583"></a><span class="lineno"> 583</span>};</div>
<div class="line"><a id="l00582" name="l00582"></a><span class="lineno"> 582</span> </div>
<div class="foldopen" id="foldopen00583" data-start="{" data-end="};">
<div class="line"><a id="l00583" name="l00583"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_multiply.html"> 583</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structmlx_1_1core_1_1detail_1_1_multiply.html">Multiply</a> {</div>
<div class="line"><a id="l00584" name="l00584"></a><span class="lineno"> 584</span> <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="foldopen" id="foldopen00585" data-start="{" data-end="}">
<div class="line"><a id="l00585" name="l00585"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_multiply.html#a898b090966b047723513224b8d3b22f1"> 585</a></span> T <a class="code hl_function" href="structmlx_1_1core_1_1detail_1_1_multiply.html#a898b090966b047723513224b8d3b22f1">operator()</a>(T x, T y) {</div>
<div class="line"><a id="l00586" name="l00586"></a><span class="lineno"> 586</span> <span class="keywordflow">return</span> x * y;</div>
<div class="line"><a id="l00587" name="l00587"></a><span class="lineno"> 587</span> }</div>
</div>
<div class="line"><a id="l00584" name="l00584"></a><span class="lineno"> 584</span> </div>
<div class="foldopen" id="foldopen00585" data-start="{" data-end="};">
<div class="line"><a id="l00585" name="l00585"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_not_equal.html"> 585</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structmlx_1_1core_1_1detail_1_1_not_equal.html">NotEqual</a> {</div>
<div class="line"><a id="l00586" name="l00586"></a><span class="lineno"> 586</span> <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="foldopen" id="foldopen00587" data-start="{" data-end="}">
<div class="line"><a id="l00587" name="l00587"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_not_equal.html#a23d662b5fd968dc17d3bee2595b5f99d"> 587</a></span> <span class="keywordtype">bool</span> <a class="code hl_function" href="structmlx_1_1core_1_1detail_1_1_not_equal.html#a23d662b5fd968dc17d3bee2595b5f99d">operator()</a>(T x, T y) {</div>
<div class="line"><a id="l00588" name="l00588"></a><span class="lineno"> 588</span> <span class="keywordflow">return</span> x != y;</div>
<div class="line"><a id="l00589" name="l00589"></a><span class="lineno"> 589</span> }</div>
<div class="line"><a id="l00588" name="l00588"></a><span class="lineno"> 588</span>};</div>
</div>
<div class="line"><a id="l00590" name="l00590"></a><span class="lineno"> 590</span>};</div>
<div class="line"><a id="l00589" name="l00589"></a><span class="lineno"> 589</span> </div>
<div class="foldopen" id="foldopen00590" data-start="{" data-end="};">
<div class="line"><a id="l00590" name="l00590"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_not_equal.html"> 590</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structmlx_1_1core_1_1detail_1_1_not_equal.html">NotEqual</a> {</div>
<div class="line"><a id="l00591" name="l00591"></a><span class="lineno"> 591</span> <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="foldopen" id="foldopen00592" data-start="{" data-end="}">
<div class="line"><a id="l00592" name="l00592"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_not_equal.html#a23d662b5fd968dc17d3bee2595b5f99d"> 592</a></span> <span class="keywordtype">bool</span> <a class="code hl_function" href="structmlx_1_1core_1_1detail_1_1_not_equal.html#a23d662b5fd968dc17d3bee2595b5f99d">operator()</a>(T x, T y) {</div>
<div class="line"><a id="l00593" name="l00593"></a><span class="lineno"> 593</span> <span class="keywordflow">return</span> x != y;</div>
<div class="line"><a id="l00594" name="l00594"></a><span class="lineno"> 594</span> }</div>
</div>
<div class="line"><a id="l00591" name="l00591"></a><span class="lineno"> 591</span> </div>
<div class="foldopen" id="foldopen00592" data-start="{" data-end="};">
<div class="line"><a id="l00592" name="l00592"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_power.html"> 592</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structmlx_1_1core_1_1detail_1_1_power.html">Power</a> {</div>
<div class="line"><a id="l00593" name="l00593"></a><span class="lineno"> 593</span> <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="foldopen" id="foldopen00594" data-start="{" data-end="}">
<div class="line"><a id="l00594" name="l00594"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_power.html#a2c047e1b488e6525447a224975a75db8"> 594</a></span> std::enable_if_t&lt;!std::is_integral_v&lt;T&gt;, T&gt; <a class="code hl_function" href="structmlx_1_1core_1_1detail_1_1_power.html#a2c047e1b488e6525447a224975a75db8">operator()</a>(T base, T <a class="code hl_function" href="group__ops.html#ga8a3b04e23e347d99ecf411fd6f4e5125">exp</a>) {</div>
<div class="line"><a id="l00595" name="l00595"></a><span class="lineno"> 595</span> <span class="keywordflow">return</span> std::pow(base, <a class="code hl_function" href="group__ops.html#ga8a3b04e23e347d99ecf411fd6f4e5125">exp</a>);</div>
<div class="line"><a id="l00596" name="l00596"></a><span class="lineno"> 596</span> }</div>
<div class="line"><a id="l00595" name="l00595"></a><span class="lineno"> 595</span>};</div>
</div>
<div class="line"><a id="l00597" name="l00597"></a><span class="lineno"> 597</span> </div>
<div class="line"><a id="l00596" name="l00596"></a><span class="lineno"> 596</span> </div>
<div class="foldopen" id="foldopen00597" data-start="{" data-end="};">
<div class="line"><a id="l00597" name="l00597"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_power.html"> 597</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structmlx_1_1core_1_1detail_1_1_power.html">Power</a> {</div>
<div class="line"><a id="l00598" name="l00598"></a><span class="lineno"> 598</span> <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="foldopen" id="foldopen00599" data-start="{" data-end="}">
<div class="line"><a id="l00599" name="l00599"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_power.html#a9967db24b8f67d54b6aa3810e274f28c"> 599</a></span> std::enable_if_t&lt;std::is_integral_v&lt;T&gt;, T&gt; <a class="code hl_function" href="structmlx_1_1core_1_1detail_1_1_power.html#a9967db24b8f67d54b6aa3810e274f28c">operator()</a>(T base, T <a class="code hl_function" href="group__ops.html#ga8a3b04e23e347d99ecf411fd6f4e5125">exp</a>) {</div>
<div class="line"><a id="l00600" name="l00600"></a><span class="lineno"> 600</span> T res = 1;</div>
<div class="line"><a id="l00601" name="l00601"></a><span class="lineno"> 601</span> <span class="keywordflow">while</span> (<a class="code hl_function" href="group__ops.html#ga8a3b04e23e347d99ecf411fd6f4e5125">exp</a>) {</div>
<div class="line"><a id="l00602" name="l00602"></a><span class="lineno"> 602</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="group__ops.html#ga8a3b04e23e347d99ecf411fd6f4e5125">exp</a> &amp; 1) {</div>
<div class="line"><a id="l00603" name="l00603"></a><span class="lineno"> 603</span> res *= base;</div>
<div class="line"><a id="l00604" name="l00604"></a><span class="lineno"> 604</span> }</div>
<div class="line"><a id="l00605" name="l00605"></a><span class="lineno"> 605</span> <a class="code hl_function" href="group__ops.html#ga8a3b04e23e347d99ecf411fd6f4e5125">exp</a> &gt;&gt;= 1;</div>
<div class="line"><a id="l00606" name="l00606"></a><span class="lineno"> 606</span> base *= base;</div>
<div class="line"><a id="l00607" name="l00607"></a><span class="lineno"> 607</span> }</div>
<div class="line"><a id="l00608" name="l00608"></a><span class="lineno"> 608</span> <span class="keywordflow">return</span> res;</div>
<div class="line"><a id="l00609" name="l00609"></a><span class="lineno"> 609</span> }</div>
<div class="line"><a id="l00599" name="l00599"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_power.html#a2c047e1b488e6525447a224975a75db8"> 599</a></span> std::enable_if_t&lt;!std::is_integral_v&lt;T&gt;, T&gt; <a class="code hl_function" href="structmlx_1_1core_1_1detail_1_1_power.html#a2c047e1b488e6525447a224975a75db8">operator()</a>(T base, T <a class="code hl_function" href="group__ops.html#ga8a3b04e23e347d99ecf411fd6f4e5125">exp</a>) {</div>
<div class="line"><a id="l00600" name="l00600"></a><span class="lineno"> 600</span> <span class="keywordflow">return</span> std::pow(base, <a class="code hl_function" href="group__ops.html#ga8a3b04e23e347d99ecf411fd6f4e5125">exp</a>);</div>
<div class="line"><a id="l00601" name="l00601"></a><span class="lineno"> 601</span> }</div>
</div>
<div class="line"><a id="l00610" name="l00610"></a><span class="lineno"> 610</span>};</div>
<div class="line"><a id="l00602" name="l00602"></a><span class="lineno"> 602</span> </div>
<div class="line"><a id="l00603" name="l00603"></a><span class="lineno"> 603</span> <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="foldopen" id="foldopen00604" data-start="{" data-end="}">
<div class="line"><a id="l00604" name="l00604"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_power.html#a9967db24b8f67d54b6aa3810e274f28c"> 604</a></span> std::enable_if_t&lt;std::is_integral_v&lt;T&gt;, T&gt; <a class="code hl_function" href="structmlx_1_1core_1_1detail_1_1_power.html#a9967db24b8f67d54b6aa3810e274f28c">operator()</a>(T base, T <a class="code hl_function" href="group__ops.html#ga8a3b04e23e347d99ecf411fd6f4e5125">exp</a>) {</div>
<div class="line"><a id="l00605" name="l00605"></a><span class="lineno"> 605</span> T res = 1;</div>
<div class="line"><a id="l00606" name="l00606"></a><span class="lineno"> 606</span> <span class="keywordflow">while</span> (<a class="code hl_function" href="group__ops.html#ga8a3b04e23e347d99ecf411fd6f4e5125">exp</a>) {</div>
<div class="line"><a id="l00607" name="l00607"></a><span class="lineno"> 607</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="group__ops.html#ga8a3b04e23e347d99ecf411fd6f4e5125">exp</a> &amp; 1) {</div>
<div class="line"><a id="l00608" name="l00608"></a><span class="lineno"> 608</span> res *= base;</div>
<div class="line"><a id="l00609" name="l00609"></a><span class="lineno"> 609</span> }</div>
<div class="line"><a id="l00610" name="l00610"></a><span class="lineno"> 610</span> <a class="code hl_function" href="group__ops.html#ga8a3b04e23e347d99ecf411fd6f4e5125">exp</a> &gt;&gt;= 1;</div>
<div class="line"><a id="l00611" name="l00611"></a><span class="lineno"> 611</span> base *= base;</div>
<div class="line"><a id="l00612" name="l00612"></a><span class="lineno"> 612</span> }</div>
<div class="line"><a id="l00613" name="l00613"></a><span class="lineno"> 613</span> <span class="keywordflow">return</span> res;</div>
<div class="line"><a id="l00614" name="l00614"></a><span class="lineno"> 614</span> }</div>
</div>
<div class="line"><a id="l00611" name="l00611"></a><span class="lineno"> 611</span> </div>
<div class="foldopen" id="foldopen00612" data-start="{" data-end="};">
<div class="line"><a id="l00612" name="l00612"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_subtract.html"> 612</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structmlx_1_1core_1_1detail_1_1_subtract.html">Subtract</a> {</div>
<div class="line"><a id="l00613" name="l00613"></a><span class="lineno"> 613</span> <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="foldopen" id="foldopen00614" data-start="{" data-end="}">
<div class="line"><a id="l00614" name="l00614"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_subtract.html#a72ef05830615a2d5d9662926ed82672a"> 614</a></span> T <a class="code hl_function" href="structmlx_1_1core_1_1detail_1_1_subtract.html#a72ef05830615a2d5d9662926ed82672a">operator()</a>(T x, T y) {</div>
<div class="line"><a id="l00615" name="l00615"></a><span class="lineno"> 615</span> <span class="keywordflow">return</span> x - y;</div>
<div class="line"><a id="l00616" name="l00616"></a><span class="lineno"> 616</span> }</div>
<div class="line"><a id="l00615" name="l00615"></a><span class="lineno"> 615</span>};</div>
</div>
<div class="line"><a id="l00617" name="l00617"></a><span class="lineno"> 617</span>};</div>
<div class="line"><a id="l00616" name="l00616"></a><span class="lineno"> 616</span> </div>
<div class="foldopen" id="foldopen00617" data-start="{" data-end="};">
<div class="line"><a id="l00617" name="l00617"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_subtract.html"> 617</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structmlx_1_1core_1_1detail_1_1_subtract.html">Subtract</a> {</div>
<div class="line"><a id="l00618" name="l00618"></a><span class="lineno"> 618</span> <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="foldopen" id="foldopen00619" data-start="{" data-end="}">
<div class="line"><a id="l00619" name="l00619"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_subtract.html#a72ef05830615a2d5d9662926ed82672a"> 619</a></span> T <a class="code hl_function" href="structmlx_1_1core_1_1detail_1_1_subtract.html#a72ef05830615a2d5d9662926ed82672a">operator()</a>(T x, T y) {</div>
<div class="line"><a id="l00620" name="l00620"></a><span class="lineno"> 620</span> <span class="keywordflow">return</span> x - y;</div>
<div class="line"><a id="l00621" name="l00621"></a><span class="lineno"> 621</span> }</div>
</div>
<div class="line"><a id="l00618" name="l00618"></a><span class="lineno"> 618</span> </div>
<div class="foldopen" id="foldopen00619" data-start="{" data-end="};">
<div class="line"><a id="l00619" name="l00619"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_logical_and.html"> 619</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structmlx_1_1core_1_1detail_1_1_logical_and.html">LogicalAnd</a> {</div>
<div class="line"><a id="l00620" name="l00620"></a><span class="lineno"> 620</span> <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="foldopen" id="foldopen00621" data-start="{" data-end="}">
<div class="line"><a id="l00621" name="l00621"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_logical_and.html#a046536c1f2f9367983f052a213d7b7d8"> 621</a></span> T <a class="code hl_function" href="structmlx_1_1core_1_1detail_1_1_logical_and.html#a046536c1f2f9367983f052a213d7b7d8">operator()</a>(T x, T y) {</div>
<div class="line"><a id="l00622" name="l00622"></a><span class="lineno"> 622</span> <span class="keywordflow">return</span> x &amp;&amp; y;</div>
<div class="line"><a id="l00623" name="l00623"></a><span class="lineno"> 623</span> }</div>
<div class="line"><a id="l00622" name="l00622"></a><span class="lineno"> 622</span>};</div>
</div>
<div class="line"><a id="l00624" name="l00624"></a><span class="lineno"> 624</span>};</div>
<div class="line"><a id="l00623" name="l00623"></a><span class="lineno"> 623</span> </div>
<div class="foldopen" id="foldopen00624" data-start="{" data-end="};">
<div class="line"><a id="l00624" name="l00624"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_logical_and.html"> 624</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structmlx_1_1core_1_1detail_1_1_logical_and.html">LogicalAnd</a> {</div>
<div class="line"><a id="l00625" name="l00625"></a><span class="lineno"> 625</span> <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="foldopen" id="foldopen00626" data-start="{" data-end="}">
<div class="line"><a id="l00626" name="l00626"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_logical_and.html#a046536c1f2f9367983f052a213d7b7d8"> 626</a></span> T <a class="code hl_function" href="structmlx_1_1core_1_1detail_1_1_logical_and.html#a046536c1f2f9367983f052a213d7b7d8">operator()</a>(T x, T y) {</div>
<div class="line"><a id="l00627" name="l00627"></a><span class="lineno"> 627</span> <span class="keywordflow">return</span> x &amp;&amp; y;</div>
<div class="line"><a id="l00628" name="l00628"></a><span class="lineno"> 628</span> }</div>
</div>
<div class="line"><a id="l00625" name="l00625"></a><span class="lineno"> 625</span> </div>
<div class="foldopen" id="foldopen00626" data-start="{" data-end="};">
<div class="line"><a id="l00626" name="l00626"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_logical_or.html"> 626</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structmlx_1_1core_1_1detail_1_1_logical_or.html">LogicalOr</a> {</div>
<div class="line"><a id="l00627" name="l00627"></a><span class="lineno"> 627</span> <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="foldopen" id="foldopen00628" data-start="{" data-end="}">
<div class="line"><a id="l00628" name="l00628"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_logical_or.html#afb134dbab79307d4ba597843c61d0b1a"> 628</a></span> T <a class="code hl_function" href="structmlx_1_1core_1_1detail_1_1_logical_or.html#afb134dbab79307d4ba597843c61d0b1a">operator()</a>(T x, T y) {</div>
<div class="line"><a id="l00629" name="l00629"></a><span class="lineno"> 629</span> <span class="keywordflow">return</span> x || y;</div>
<div class="line"><a id="l00630" name="l00630"></a><span class="lineno"> 630</span> }</div>
<div class="line"><a id="l00629" name="l00629"></a><span class="lineno"> 629</span>};</div>
</div>
<div class="line"><a id="l00631" name="l00631"></a><span class="lineno"> 631</span>};</div>
<div class="line"><a id="l00630" name="l00630"></a><span class="lineno"> 630</span> </div>
<div class="foldopen" id="foldopen00631" data-start="{" data-end="};">
<div class="line"><a id="l00631" name="l00631"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_logical_or.html"> 631</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structmlx_1_1core_1_1detail_1_1_logical_or.html">LogicalOr</a> {</div>
<div class="line"><a id="l00632" name="l00632"></a><span class="lineno"> 632</span> <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="foldopen" id="foldopen00633" data-start="{" data-end="}">
<div class="line"><a id="l00633" name="l00633"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_logical_or.html#afb134dbab79307d4ba597843c61d0b1a"> 633</a></span> T <a class="code hl_function" href="structmlx_1_1core_1_1detail_1_1_logical_or.html#afb134dbab79307d4ba597843c61d0b1a">operator()</a>(T x, T y) {</div>
<div class="line"><a id="l00634" name="l00634"></a><span class="lineno"> 634</span> <span class="keywordflow">return</span> x || y;</div>
<div class="line"><a id="l00635" name="l00635"></a><span class="lineno"> 635</span> }</div>
</div>
<div class="line"><a id="l00632" name="l00632"></a><span class="lineno"> 632</span> </div>
<div class="foldopen" id="foldopen00633" data-start="{" data-end="};">
<div class="line"><a id="l00633" name="l00633"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_select.html"> 633</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structmlx_1_1core_1_1detail_1_1_select.html">Select</a> {</div>
<div class="line"><a id="l00634" name="l00634"></a><span class="lineno"> 634</span> <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="foldopen" id="foldopen00635" data-start="{" data-end="}">
<div class="line"><a id="l00635" name="l00635"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_select.html#a930f9da2e6b3453e04f21382435a2cfb"> 635</a></span> T <a class="code hl_function" href="structmlx_1_1core_1_1detail_1_1_select.html#a930f9da2e6b3453e04f21382435a2cfb">operator()</a>(<span class="keywordtype">bool</span> condition, T x, T y) {</div>
<div class="line"><a id="l00636" name="l00636"></a><span class="lineno"> 636</span> <span class="keywordflow">return</span> condition ? x : y;</div>
<div class="line"><a id="l00637" name="l00637"></a><span class="lineno"> 637</span> }</div>
<div class="line"><a id="l00636" name="l00636"></a><span class="lineno"> 636</span>};</div>
</div>
<div class="line"><a id="l00638" name="l00638"></a><span class="lineno"> 638</span>};</div>
<div class="line"><a id="l00637" name="l00637"></a><span class="lineno"> 637</span> </div>
<div class="foldopen" id="foldopen00638" data-start="{" data-end="};">
<div class="line"><a id="l00638" name="l00638"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_select.html"> 638</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structmlx_1_1core_1_1detail_1_1_select.html">Select</a> {</div>
<div class="line"><a id="l00639" name="l00639"></a><span class="lineno"> 639</span> <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="foldopen" id="foldopen00640" data-start="{" data-end="}">
<div class="line"><a id="l00640" name="l00640"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_select.html#a930f9da2e6b3453e04f21382435a2cfb"> 640</a></span> T <a class="code hl_function" href="structmlx_1_1core_1_1detail_1_1_select.html#a930f9da2e6b3453e04f21382435a2cfb">operator()</a>(<span class="keywordtype">bool</span> condition, T x, T y) {</div>
<div class="line"><a id="l00641" name="l00641"></a><span class="lineno"> 641</span> <span class="keywordflow">return</span> condition ? x : y;</div>
<div class="line"><a id="l00642" name="l00642"></a><span class="lineno"> 642</span> }</div>
</div>
<div class="line"><a id="l00639" name="l00639"></a><span class="lineno"> 639</span> </div>
<div class="foldopen" id="foldopen00640" data-start="{" data-end="};">
<div class="line"><a id="l00640" name="l00640"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_bitwise_and.html"> 640</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structmlx_1_1core_1_1detail_1_1_bitwise_and.html">BitwiseAnd</a> {</div>
<div class="line"><a id="l00641" name="l00641"></a><span class="lineno"> 641</span> <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="foldopen" id="foldopen00642" data-start="{" data-end="}">
<div class="line"><a id="l00642" name="l00642"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_bitwise_and.html#ae0bed77f95fe2b2f0b594addddd04700"> 642</a></span> T <a class="code hl_function" href="structmlx_1_1core_1_1detail_1_1_bitwise_and.html#ae0bed77f95fe2b2f0b594addddd04700">operator()</a>(T x, T y) {</div>
<div class="line"><a id="l00643" name="l00643"></a><span class="lineno"> 643</span> <span class="keywordflow">return</span> x &amp; y;</div>
<div class="line"><a id="l00644" name="l00644"></a><span class="lineno"> 644</span> }</div>
<div class="line"><a id="l00643" name="l00643"></a><span class="lineno"> 643</span>};</div>
</div>
<div class="line"><a id="l00645" name="l00645"></a><span class="lineno"> 645</span>};</div>
<div class="line"><a id="l00644" name="l00644"></a><span class="lineno"> 644</span> </div>
<div class="foldopen" id="foldopen00645" data-start="{" data-end="};">
<div class="line"><a id="l00645" name="l00645"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_bitwise_and.html"> 645</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structmlx_1_1core_1_1detail_1_1_bitwise_and.html">BitwiseAnd</a> {</div>
<div class="line"><a id="l00646" name="l00646"></a><span class="lineno"> 646</span> <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="foldopen" id="foldopen00647" data-start="{" data-end="}">
<div class="line"><a id="l00647" name="l00647"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_bitwise_and.html#ae0bed77f95fe2b2f0b594addddd04700"> 647</a></span> T <a class="code hl_function" href="structmlx_1_1core_1_1detail_1_1_bitwise_and.html#ae0bed77f95fe2b2f0b594addddd04700">operator()</a>(T x, T y) {</div>
<div class="line"><a id="l00648" name="l00648"></a><span class="lineno"> 648</span> <span class="keywordflow">return</span> x &amp; y;</div>
<div class="line"><a id="l00649" name="l00649"></a><span class="lineno"> 649</span> }</div>
</div>
<div class="line"><a id="l00646" name="l00646"></a><span class="lineno"> 646</span> </div>
<div class="foldopen" id="foldopen00647" data-start="{" data-end="};">
<div class="line"><a id="l00647" name="l00647"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_bitwise_or.html"> 647</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structmlx_1_1core_1_1detail_1_1_bitwise_or.html">BitwiseOr</a> {</div>
<div class="line"><a id="l00648" name="l00648"></a><span class="lineno"> 648</span> <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="foldopen" id="foldopen00649" data-start="{" data-end="}">
<div class="line"><a id="l00649" name="l00649"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_bitwise_or.html#a5ab05734c5000b454975de6647a08d20"> 649</a></span> T <a class="code hl_function" href="structmlx_1_1core_1_1detail_1_1_bitwise_or.html#a5ab05734c5000b454975de6647a08d20">operator()</a>(T x, T y) {</div>
<div class="line"><a id="l00650" name="l00650"></a><span class="lineno"> 650</span> <span class="keywordflow">return</span> x | y;</div>
<div class="line"><a id="l00651" name="l00651"></a><span class="lineno"> 651</span> }</div>
<div class="line"><a id="l00650" name="l00650"></a><span class="lineno"> 650</span>};</div>
</div>
<div class="line"><a id="l00652" name="l00652"></a><span class="lineno"> 652</span>};</div>
<div class="line"><a id="l00651" name="l00651"></a><span class="lineno"> 651</span> </div>
<div class="foldopen" id="foldopen00652" data-start="{" data-end="};">
<div class="line"><a id="l00652" name="l00652"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_bitwise_or.html"> 652</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structmlx_1_1core_1_1detail_1_1_bitwise_or.html">BitwiseOr</a> {</div>
<div class="line"><a id="l00653" name="l00653"></a><span class="lineno"> 653</span> <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="foldopen" id="foldopen00654" data-start="{" data-end="}">
<div class="line"><a id="l00654" name="l00654"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_bitwise_or.html#a5ab05734c5000b454975de6647a08d20"> 654</a></span> T <a class="code hl_function" href="structmlx_1_1core_1_1detail_1_1_bitwise_or.html#a5ab05734c5000b454975de6647a08d20">operator()</a>(T x, T y) {</div>
<div class="line"><a id="l00655" name="l00655"></a><span class="lineno"> 655</span> <span class="keywordflow">return</span> x | y;</div>
<div class="line"><a id="l00656" name="l00656"></a><span class="lineno"> 656</span> }</div>
</div>
<div class="line"><a id="l00653" name="l00653"></a><span class="lineno"> 653</span> </div>
<div class="foldopen" id="foldopen00654" data-start="{" data-end="};">
<div class="line"><a id="l00654" name="l00654"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_bitwise_xor.html"> 654</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structmlx_1_1core_1_1detail_1_1_bitwise_xor.html">BitwiseXor</a> {</div>
<div class="line"><a id="l00655" name="l00655"></a><span class="lineno"> 655</span> <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="foldopen" id="foldopen00656" data-start="{" data-end="}">
<div class="line"><a id="l00656" name="l00656"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_bitwise_xor.html#a0989e3bcd064ae06c33f660696a869a0"> 656</a></span> T <a class="code hl_function" href="structmlx_1_1core_1_1detail_1_1_bitwise_xor.html#a0989e3bcd064ae06c33f660696a869a0">operator()</a>(T x, T y) {</div>
<div class="line"><a id="l00657" name="l00657"></a><span class="lineno"> 657</span> <span class="keywordflow">return</span> x ^ y;</div>
<div class="line"><a id="l00658" name="l00658"></a><span class="lineno"> 658</span> }</div>
<div class="line"><a id="l00657" name="l00657"></a><span class="lineno"> 657</span>};</div>
</div>
<div class="line"><a id="l00659" name="l00659"></a><span class="lineno"> 659</span>};</div>
<div class="line"><a id="l00658" name="l00658"></a><span class="lineno"> 658</span> </div>
<div class="foldopen" id="foldopen00659" data-start="{" data-end="};">
<div class="line"><a id="l00659" name="l00659"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_bitwise_xor.html"> 659</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structmlx_1_1core_1_1detail_1_1_bitwise_xor.html">BitwiseXor</a> {</div>
<div class="line"><a id="l00660" name="l00660"></a><span class="lineno"> 660</span> <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="foldopen" id="foldopen00661" data-start="{" data-end="}">
<div class="line"><a id="l00661" name="l00661"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_bitwise_xor.html#a0989e3bcd064ae06c33f660696a869a0"> 661</a></span> T <a class="code hl_function" href="structmlx_1_1core_1_1detail_1_1_bitwise_xor.html#a0989e3bcd064ae06c33f660696a869a0">operator()</a>(T x, T y) {</div>
<div class="line"><a id="l00662" name="l00662"></a><span class="lineno"> 662</span> <span class="keywordflow">return</span> x ^ y;</div>
<div class="line"><a id="l00663" name="l00663"></a><span class="lineno"> 663</span> }</div>
</div>
<div class="line"><a id="l00660" name="l00660"></a><span class="lineno"> 660</span> </div>
<div class="foldopen" id="foldopen00661" data-start="{" data-end="};">
<div class="line"><a id="l00661" name="l00661"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_left_shift.html"> 661</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structmlx_1_1core_1_1detail_1_1_left_shift.html">LeftShift</a> {</div>
<div class="line"><a id="l00662" name="l00662"></a><span class="lineno"> 662</span> <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="foldopen" id="foldopen00663" data-start="{" data-end="}">
<div class="line"><a id="l00663" name="l00663"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_left_shift.html#a9385f580830a6ad163dd9bb8c4905e7a"> 663</a></span> T <a class="code hl_function" href="structmlx_1_1core_1_1detail_1_1_left_shift.html#a9385f580830a6ad163dd9bb8c4905e7a">operator()</a>(T x, T y) {</div>
<div class="line"><a id="l00664" name="l00664"></a><span class="lineno"> 664</span> <span class="keywordflow">return</span> x &lt;&lt; y;</div>
<div class="line"><a id="l00665" name="l00665"></a><span class="lineno"> 665</span> }</div>
<div class="line"><a id="l00664" name="l00664"></a><span class="lineno"> 664</span>};</div>
</div>
<div class="line"><a id="l00666" name="l00666"></a><span class="lineno"> 666</span>};</div>
<div class="line"><a id="l00665" name="l00665"></a><span class="lineno"> 665</span> </div>
<div class="foldopen" id="foldopen00666" data-start="{" data-end="};">
<div class="line"><a id="l00666" name="l00666"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_left_shift.html"> 666</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structmlx_1_1core_1_1detail_1_1_left_shift.html">LeftShift</a> {</div>
<div class="line"><a id="l00667" name="l00667"></a><span class="lineno"> 667</span> <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="foldopen" id="foldopen00668" data-start="{" data-end="}">
<div class="line"><a id="l00668" name="l00668"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_left_shift.html#a9385f580830a6ad163dd9bb8c4905e7a"> 668</a></span> T <a class="code hl_function" href="structmlx_1_1core_1_1detail_1_1_left_shift.html#a9385f580830a6ad163dd9bb8c4905e7a">operator()</a>(T x, T y) {</div>
<div class="line"><a id="l00669" name="l00669"></a><span class="lineno"> 669</span> <span class="keywordflow">return</span> x &lt;&lt; y;</div>
<div class="line"><a id="l00670" name="l00670"></a><span class="lineno"> 670</span> }</div>
</div>
<div class="line"><a id="l00667" name="l00667"></a><span class="lineno"> 667</span> </div>
<div class="foldopen" id="foldopen00668" data-start="{" data-end="};">
<div class="line"><a id="l00668" name="l00668"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_right_shift.html"> 668</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structmlx_1_1core_1_1detail_1_1_right_shift.html">RightShift</a> {</div>
<div class="line"><a id="l00669" name="l00669"></a><span class="lineno"> 669</span> <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="foldopen" id="foldopen00670" data-start="{" data-end="}">
<div class="line"><a id="l00670" name="l00670"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_right_shift.html#a154528ba50e89a4c532a181f135b1620"> 670</a></span> T <a class="code hl_function" href="structmlx_1_1core_1_1detail_1_1_right_shift.html#a154528ba50e89a4c532a181f135b1620">operator()</a>(T x, T y) {</div>
<div class="line"><a id="l00671" name="l00671"></a><span class="lineno"> 671</span> <span class="keywordflow">return</span> x &gt;&gt; y;</div>
<div class="line"><a id="l00672" name="l00672"></a><span class="lineno"> 672</span> }</div>
<div class="line"><a id="l00671" name="l00671"></a><span class="lineno"> 671</span>};</div>
</div>
<div class="line"><a id="l00673" name="l00673"></a><span class="lineno"> 673</span>};</div>
<div class="line"><a id="l00672" name="l00672"></a><span class="lineno"> 672</span> </div>
<div class="foldopen" id="foldopen00673" data-start="{" data-end="};">
<div class="line"><a id="l00673" name="l00673"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_right_shift.html"> 673</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structmlx_1_1core_1_1detail_1_1_right_shift.html">RightShift</a> {</div>
<div class="line"><a id="l00674" name="l00674"></a><span class="lineno"> 674</span> <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="foldopen" id="foldopen00675" data-start="{" data-end="}">
<div class="line"><a id="l00675" name="l00675"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1detail_1_1_right_shift.html#a154528ba50e89a4c532a181f135b1620"> 675</a></span> T <a class="code hl_function" href="structmlx_1_1core_1_1detail_1_1_right_shift.html#a154528ba50e89a4c532a181f135b1620">operator()</a>(T x, T y) {</div>
<div class="line"><a id="l00676" name="l00676"></a><span class="lineno"> 676</span> <span class="keywordflow">return</span> x &gt;&gt; y;</div>
<div class="line"><a id="l00677" name="l00677"></a><span class="lineno"> 677</span> }</div>
</div>
<div class="line"><a id="l00674" name="l00674"></a><span class="lineno"> 674</span> </div>
<div class="line"><a id="l00675" name="l00675"></a><span class="lineno"> 675</span>} <span class="comment">// namespace mlx::core::detail</span></div>
<div class="line"><a id="l00678" name="l00678"></a><span class="lineno"> 678</span>};</div>
</div>
<div class="line"><a id="l00679" name="l00679"></a><span class="lineno"> 679</span> </div>
<div class="line"><a id="l00680" name="l00680"></a><span class="lineno"> 680</span>} <span class="comment">// namespace mlx::core::detail</span></div>
</div>
<div class="ttc" id="agroup__ops_html_ga20a1f4270c35b0fa544f5105a87a1604"><div class="ttname"><a href="group__ops.html#ga20a1f4270c35b0fa544f5105a87a1604">mlx::core::log1p</a></div><div class="ttdeci">array log1p(const array &amp;a, StreamOrDevice s={})</div><div class="ttdoc">Natural logarithm of one plus elements in the array: log(1 + a).</div></div>
<div class="ttc" id="agroup__ops_html_ga54ca54f06bfb2be15b163a5209e2a0f0"><div class="ttname"><a href="group__ops.html#ga54ca54f06bfb2be15b163a5209e2a0f0">mlx::core::expm1</a></div><div class="ttdeci">array expm1(const array &amp;a, StreamOrDevice s={})</div><div class="ttdoc">Computes the expm1 function of the elements of an array.</div></div>
@@ -1115,12 +1134,12 @@ $(function(){ initResizable(false); });
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_arc_tan_html_aee87bf10c278a70ca788085d1b499afe"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_arc_tan.html#aee87bf10c278a70ca788085d1b499afe">mlx::core::detail::ArcTan::operator()</a></div><div class="ttdeci">T operator()(T x)</div><div class="ttdef"><b>Definition</b> ops.h:159</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_arc_tanh_html"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_arc_tanh.html">mlx::core::detail::ArcTanh</a></div><div class="ttdef"><b>Definition</b> ops.h:171</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_arc_tanh_html_a601e8c52bb938eb3a616756a35419e8b"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_arc_tanh.html#a601e8c52bb938eb3a616756a35419e8b">mlx::core::detail::ArcTanh::operator()</a></div><div class="ttdeci">T operator()(T x)</div><div class="ttdef"><b>Definition</b> ops.h:173</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_bitwise_and_html"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_bitwise_and.html">mlx::core::detail::BitwiseAnd</a></div><div class="ttdef"><b>Definition</b> ops.h:640</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_bitwise_and_html_ae0bed77f95fe2b2f0b594addddd04700"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_bitwise_and.html#ae0bed77f95fe2b2f0b594addddd04700">mlx::core::detail::BitwiseAnd::operator()</a></div><div class="ttdeci">T operator()(T x, T y)</div><div class="ttdef"><b>Definition</b> ops.h:642</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_bitwise_or_html"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_bitwise_or.html">mlx::core::detail::BitwiseOr</a></div><div class="ttdef"><b>Definition</b> ops.h:647</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_bitwise_or_html_a5ab05734c5000b454975de6647a08d20"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_bitwise_or.html#a5ab05734c5000b454975de6647a08d20">mlx::core::detail::BitwiseOr::operator()</a></div><div class="ttdeci">T operator()(T x, T y)</div><div class="ttdef"><b>Definition</b> ops.h:649</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_bitwise_xor_html"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_bitwise_xor.html">mlx::core::detail::BitwiseXor</a></div><div class="ttdef"><b>Definition</b> ops.h:654</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_bitwise_xor_html_a0989e3bcd064ae06c33f660696a869a0"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_bitwise_xor.html#a0989e3bcd064ae06c33f660696a869a0">mlx::core::detail::BitwiseXor::operator()</a></div><div class="ttdeci">T operator()(T x, T y)</div><div class="ttdef"><b>Definition</b> ops.h:656</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_bitwise_and_html"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_bitwise_and.html">mlx::core::detail::BitwiseAnd</a></div><div class="ttdef"><b>Definition</b> ops.h:645</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_bitwise_and_html_ae0bed77f95fe2b2f0b594addddd04700"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_bitwise_and.html#ae0bed77f95fe2b2f0b594addddd04700">mlx::core::detail::BitwiseAnd::operator()</a></div><div class="ttdeci">T operator()(T x, T y)</div><div class="ttdef"><b>Definition</b> ops.h:647</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_bitwise_or_html"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_bitwise_or.html">mlx::core::detail::BitwiseOr</a></div><div class="ttdef"><b>Definition</b> ops.h:652</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_bitwise_or_html_a5ab05734c5000b454975de6647a08d20"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_bitwise_or.html#a5ab05734c5000b454975de6647a08d20">mlx::core::detail::BitwiseOr::operator()</a></div><div class="ttdeci">T operator()(T x, T y)</div><div class="ttdef"><b>Definition</b> ops.h:654</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_bitwise_xor_html"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_bitwise_xor.html">mlx::core::detail::BitwiseXor</a></div><div class="ttdef"><b>Definition</b> ops.h:659</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_bitwise_xor_html_a0989e3bcd064ae06c33f660696a869a0"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_bitwise_xor.html#a0989e3bcd064ae06c33f660696a869a0">mlx::core::detail::BitwiseXor::operator()</a></div><div class="ttdeci">T operator()(T x, T y)</div><div class="ttdef"><b>Definition</b> ops.h:661</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_ceil_html"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_ceil.html">mlx::core::detail::Ceil</a></div><div class="ttdef"><b>Definition</b> ops.h:178</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_ceil_html_a48f00affcd5c2ea1f81d821e019fec29"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_ceil.html#a48f00affcd5c2ea1f81d821e019fec29">mlx::core::detail::Ceil::operator()</a></div><div class="ttdeci">uint8_t operator()(uint8_t x)</div><div class="ttdef"><b>Definition</b> ops.h:195</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_ceil_html_a672f65e47d65e4e8d88be252bce0164b"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_ceil.html#a672f65e47d65e4e8d88be252bce0164b">mlx::core::detail::Ceil::operator()</a></div><div class="ttdeci">T operator()(T x)</div><div class="ttdef"><b>Definition</b> ops.h:180</div></div>
@@ -1162,51 +1181,51 @@ $(function(){ initResizable(false); });
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_floor_html_a9b6c4c34b6594b8c413abe31f34a73df"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_floor.html#a9b6c4c34b6594b8c413abe31f34a73df">mlx::core::detail::Floor::operator()</a></div><div class="ttdeci">int8_t operator()(int8_t x)</div><div class="ttdef"><b>Definition</b> ops.h:269</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_floor_html_ac988b4f265cf46c68609c9c8787c15fb"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_floor.html#ac988b4f265cf46c68609c9c8787c15fb">mlx::core::detail::Floor::operator()</a></div><div class="ttdeci">uint64_t operator()(uint64_t x)</div><div class="ttdef"><b>Definition</b> ops.h:290</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_floor_html_aca4c71204b3ceeca6329f7ea2b041f4c"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_floor.html#aca4c71204b3ceeca6329f7ea2b041f4c">mlx::core::detail::Floor::operator()</a></div><div class="ttdeci">int16_t operator()(int16_t x)</div><div class="ttdef"><b>Definition</b> ops.h:272</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_greater_equal_html"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_greater_equal.html">mlx::core::detail::GreaterEqual</a></div><div class="ttdef"><b>Definition</b> ops.h:514</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_greater_equal_html_a3b005f85522ad0e4b57044eed930ac30"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_greater_equal.html#a3b005f85522ad0e4b57044eed930ac30">mlx::core::detail::GreaterEqual::operator()</a></div><div class="ttdeci">bool operator()(T x, T y)</div><div class="ttdef"><b>Definition</b> ops.h:516</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_greater_html"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_greater.html">mlx::core::detail::Greater</a></div><div class="ttdef"><b>Definition</b> ops.h:507</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_greater_html_aa3844c2bae3c7a981739f642aa0dd094"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_greater.html#aa3844c2bae3c7a981739f642aa0dd094">mlx::core::detail::Greater::operator()</a></div><div class="ttdeci">bool operator()(T x, T y)</div><div class="ttdef"><b>Definition</b> ops.h:509</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_greater_equal_html"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_greater_equal.html">mlx::core::detail::GreaterEqual</a></div><div class="ttdef"><b>Definition</b> ops.h:519</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_greater_equal_html_a3b005f85522ad0e4b57044eed930ac30"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_greater_equal.html#a3b005f85522ad0e4b57044eed930ac30">mlx::core::detail::GreaterEqual::operator()</a></div><div class="ttdeci">bool operator()(T x, T y)</div><div class="ttdef"><b>Definition</b> ops.h:521</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_greater_html"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_greater.html">mlx::core::detail::Greater</a></div><div class="ttdef"><b>Definition</b> ops.h:512</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_greater_html_aa3844c2bae3c7a981739f642aa0dd094"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_greater.html#aa3844c2bae3c7a981739f642aa0dd094">mlx::core::detail::Greater::operator()</a></div><div class="ttdeci">bool operator()(T x, T y)</div><div class="ttdef"><b>Definition</b> ops.h:514</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_imag_html"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_imag.html">mlx::core::detail::Imag</a></div><div class="ttdef"><b>Definition</b> ops.h:298</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_imag_html_a5bd82e2185f3779e398c179d42a3e782"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_imag.html#a5bd82e2185f3779e398c179d42a3e782">mlx::core::detail::Imag::operator()</a></div><div class="ttdeci">T operator()(T x)</div><div class="ttdef"><b>Definition</b> ops.h:300</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_left_shift_html"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_left_shift.html">mlx::core::detail::LeftShift</a></div><div class="ttdef"><b>Definition</b> ops.h:661</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_left_shift_html_a9385f580830a6ad163dd9bb8c4905e7a"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_left_shift.html#a9385f580830a6ad163dd9bb8c4905e7a">mlx::core::detail::LeftShift::operator()</a></div><div class="ttdeci">T operator()(T x, T y)</div><div class="ttdef"><b>Definition</b> ops.h:663</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_less_equal_html"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_less_equal.html">mlx::core::detail::LessEqual</a></div><div class="ttdef"><b>Definition</b> ops.h:528</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_less_equal_html_a31e70f8830a07557697541301555a7a7"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_less_equal.html#a31e70f8830a07557697541301555a7a7">mlx::core::detail::LessEqual::operator()</a></div><div class="ttdeci">bool operator()(T x, T y)</div><div class="ttdef"><b>Definition</b> ops.h:530</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_less_html"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_less.html">mlx::core::detail::Less</a></div><div class="ttdef"><b>Definition</b> ops.h:521</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_less_html_a0b4032dff1ad2b387745cb000aabdcbb"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_less.html#a0b4032dff1ad2b387745cb000aabdcbb">mlx::core::detail::Less::operator()</a></div><div class="ttdeci">bool operator()(T x, T y)</div><div class="ttdef"><b>Definition</b> ops.h:523</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_left_shift_html"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_left_shift.html">mlx::core::detail::LeftShift</a></div><div class="ttdef"><b>Definition</b> ops.h:666</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_left_shift_html_a9385f580830a6ad163dd9bb8c4905e7a"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_left_shift.html#a9385f580830a6ad163dd9bb8c4905e7a">mlx::core::detail::LeftShift::operator()</a></div><div class="ttdeci">T operator()(T x, T y)</div><div class="ttdef"><b>Definition</b> ops.h:668</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_less_equal_html"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_less_equal.html">mlx::core::detail::LessEqual</a></div><div class="ttdef"><b>Definition</b> ops.h:533</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_less_equal_html_a31e70f8830a07557697541301555a7a7"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_less_equal.html#a31e70f8830a07557697541301555a7a7">mlx::core::detail::LessEqual::operator()</a></div><div class="ttdeci">bool operator()(T x, T y)</div><div class="ttdef"><b>Definition</b> ops.h:535</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_less_html"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_less.html">mlx::core::detail::Less</a></div><div class="ttdef"><b>Definition</b> ops.h:526</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_less_html_a0b4032dff1ad2b387745cb000aabdcbb"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_less.html#a0b4032dff1ad2b387745cb000aabdcbb">mlx::core::detail::Less::operator()</a></div><div class="ttdeci">bool operator()(T x, T y)</div><div class="ttdef"><b>Definition</b> ops.h:528</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_log10_html"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_log10.html">mlx::core::detail::Log10</a></div><div class="ttdef"><b>Definition</b> ops.h:319</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_log10_html_a2633c5b772bbc9f8b66cffd4a3e01a3f"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_log10.html#a2633c5b772bbc9f8b66cffd4a3e01a3f">mlx::core::detail::Log10::operator()</a></div><div class="ttdeci">T operator()(T x)</div><div class="ttdef"><b>Definition</b> ops.h:321</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_log1p_html"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_log1p.html">mlx::core::detail::Log1p</a></div><div class="ttdef"><b>Definition</b> ops.h:326</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_log1p_html_a3220de8c6090c44aa2070b1fbb2dc340"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_log1p.html#a3220de8c6090c44aa2070b1fbb2dc340">mlx::core::detail::Log1p::operator()</a></div><div class="ttdeci">T operator()(T x)</div><div class="ttdef"><b>Definition</b> ops.h:328</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_log2_html"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_log2.html">mlx::core::detail::Log2</a></div><div class="ttdef"><b>Definition</b> ops.h:312</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_log2_html_a467bd4c995674721ff5fff6df33aead8"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_log2.html#a467bd4c995674721ff5fff6df33aead8">mlx::core::detail::Log2::operator()</a></div><div class="ttdeci">T operator()(T x)</div><div class="ttdef"><b>Definition</b> ops.h:314</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_log_add_exp_html"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_log_add_exp.html">mlx::core::detail::LogAddExp</a></div><div class="ttdef"><b>Definition</b> ops.h:565</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_log_add_exp_html_ad1663fd809acaa4038f90666436599e5"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_log_add_exp.html#ad1663fd809acaa4038f90666436599e5">mlx::core::detail::LogAddExp::operator()</a></div><div class="ttdeci">T operator()(T x, T y)</div><div class="ttdef"><b>Definition</b> ops.h:567</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_log_add_exp_html"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_log_add_exp.html">mlx::core::detail::LogAddExp</a></div><div class="ttdef"><b>Definition</b> ops.h:570</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_log_add_exp_html_ad1663fd809acaa4038f90666436599e5"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_log_add_exp.html#ad1663fd809acaa4038f90666436599e5">mlx::core::detail::LogAddExp::operator()</a></div><div class="ttdeci">T operator()(T x, T y)</div><div class="ttdef"><b>Definition</b> ops.h:572</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_log_html"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_log.html">mlx::core::detail::Log</a></div><div class="ttdef"><b>Definition</b> ops.h:305</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_log_html_a0012a4e1744dbe9a28c3b5652be6e1c6"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_log.html#a0012a4e1744dbe9a28c3b5652be6e1c6">mlx::core::detail::Log::operator()</a></div><div class="ttdeci">T operator()(T x)</div><div class="ttdef"><b>Definition</b> ops.h:307</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_logical_and_html"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_logical_and.html">mlx::core::detail::LogicalAnd</a></div><div class="ttdef"><b>Definition</b> ops.h:619</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_logical_and_html_a046536c1f2f9367983f052a213d7b7d8"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_logical_and.html#a046536c1f2f9367983f052a213d7b7d8">mlx::core::detail::LogicalAnd::operator()</a></div><div class="ttdeci">T operator()(T x, T y)</div><div class="ttdef"><b>Definition</b> ops.h:621</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_logical_and_html"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_logical_and.html">mlx::core::detail::LogicalAnd</a></div><div class="ttdef"><b>Definition</b> ops.h:624</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_logical_and_html_a046536c1f2f9367983f052a213d7b7d8"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_logical_and.html#a046536c1f2f9367983f052a213d7b7d8">mlx::core::detail::LogicalAnd::operator()</a></div><div class="ttdeci">T operator()(T x, T y)</div><div class="ttdef"><b>Definition</b> ops.h:626</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_logical_not_html"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_logical_not.html">mlx::core::detail::LogicalNot</a></div><div class="ttdef"><b>Definition</b> ops.h:333</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_logical_not_html_a79799668ea5c364b0b4e2bc330e76253"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_logical_not.html#a79799668ea5c364b0b4e2bc330e76253">mlx::core::detail::LogicalNot::operator()</a></div><div class="ttdeci">T operator()(T x)</div><div class="ttdef"><b>Definition</b> ops.h:335</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_logical_or_html"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_logical_or.html">mlx::core::detail::LogicalOr</a></div><div class="ttdef"><b>Definition</b> ops.h:626</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_logical_or_html_afb134dbab79307d4ba597843c61d0b1a"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_logical_or.html#afb134dbab79307d4ba597843c61d0b1a">mlx::core::detail::LogicalOr::operator()</a></div><div class="ttdeci">T operator()(T x, T y)</div><div class="ttdef"><b>Definition</b> ops.h:628</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_maximum_html"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_maximum.html">mlx::core::detail::Maximum</a></div><div class="ttdef"><b>Definition</b> ops.h:535</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_maximum_html_a3eb37abec8426ebc42b8c685075c523a"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_maximum.html#a3eb37abec8426ebc42b8c685075c523a">mlx::core::detail::Maximum::operator()</a></div><div class="ttdeci">std::enable_if_t&lt; std::is_integral_v&lt; T &gt;, T &gt; operator()(T x, T y)</div><div class="ttdef"><b>Definition</b> ops.h:537</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_maximum_html_af99345c7c8bc95ccab1b22c0792ac6fd"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_maximum.html#af99345c7c8bc95ccab1b22c0792ac6fd">mlx::core::detail::Maximum::operator()</a></div><div class="ttdeci">std::enable_if_t&lt;!std::is_integral_v&lt; T &gt;, T &gt; operator()(T x, T y)</div><div class="ttdef"><b>Definition</b> ops.h:542</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_minimum_html"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_minimum.html">mlx::core::detail::Minimum</a></div><div class="ttdef"><b>Definition</b> ops.h:550</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_minimum_html_a64b2eecfbc56aaef7deb939423bac3f8"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_minimum.html#a64b2eecfbc56aaef7deb939423bac3f8">mlx::core::detail::Minimum::operator()</a></div><div class="ttdeci">std::enable_if_t&lt;!std::is_integral_v&lt; T &gt;, T &gt; operator()(T x, T y)</div><div class="ttdef"><b>Definition</b> ops.h:557</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_minimum_html_afca0861556416a8547dd8574528feb69"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_minimum.html#afca0861556416a8547dd8574528feb69">mlx::core::detail::Minimum::operator()</a></div><div class="ttdeci">std::enable_if_t&lt; std::is_integral_v&lt; T &gt;, T &gt; operator()(T x, T y)</div><div class="ttdef"><b>Definition</b> ops.h:552</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_multiply_html"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_multiply.html">mlx::core::detail::Multiply</a></div><div class="ttdef"><b>Definition</b> ops.h:578</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_multiply_html_a898b090966b047723513224b8d3b22f1"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_multiply.html#a898b090966b047723513224b8d3b22f1">mlx::core::detail::Multiply::operator()</a></div><div class="ttdeci">T operator()(T x, T y)</div><div class="ttdef"><b>Definition</b> ops.h:580</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_logical_or_html"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_logical_or.html">mlx::core::detail::LogicalOr</a></div><div class="ttdef"><b>Definition</b> ops.h:631</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_logical_or_html_afb134dbab79307d4ba597843c61d0b1a"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_logical_or.html#afb134dbab79307d4ba597843c61d0b1a">mlx::core::detail::LogicalOr::operator()</a></div><div class="ttdeci">T operator()(T x, T y)</div><div class="ttdef"><b>Definition</b> ops.h:633</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_maximum_html"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_maximum.html">mlx::core::detail::Maximum</a></div><div class="ttdef"><b>Definition</b> ops.h:540</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_maximum_html_a3eb37abec8426ebc42b8c685075c523a"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_maximum.html#a3eb37abec8426ebc42b8c685075c523a">mlx::core::detail::Maximum::operator()</a></div><div class="ttdeci">std::enable_if_t&lt; std::is_integral_v&lt; T &gt;, T &gt; operator()(T x, T y)</div><div class="ttdef"><b>Definition</b> ops.h:542</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_maximum_html_af99345c7c8bc95ccab1b22c0792ac6fd"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_maximum.html#af99345c7c8bc95ccab1b22c0792ac6fd">mlx::core::detail::Maximum::operator()</a></div><div class="ttdeci">std::enable_if_t&lt;!std::is_integral_v&lt; T &gt;, T &gt; operator()(T x, T y)</div><div class="ttdef"><b>Definition</b> ops.h:547</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_minimum_html"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_minimum.html">mlx::core::detail::Minimum</a></div><div class="ttdef"><b>Definition</b> ops.h:555</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_minimum_html_a64b2eecfbc56aaef7deb939423bac3f8"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_minimum.html#a64b2eecfbc56aaef7deb939423bac3f8">mlx::core::detail::Minimum::operator()</a></div><div class="ttdeci">std::enable_if_t&lt;!std::is_integral_v&lt; T &gt;, T &gt; operator()(T x, T y)</div><div class="ttdef"><b>Definition</b> ops.h:562</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_minimum_html_afca0861556416a8547dd8574528feb69"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_minimum.html#afca0861556416a8547dd8574528feb69">mlx::core::detail::Minimum::operator()</a></div><div class="ttdeci">std::enable_if_t&lt; std::is_integral_v&lt; T &gt;, T &gt; operator()(T x, T y)</div><div class="ttdef"><b>Definition</b> ops.h:557</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_multiply_html"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_multiply.html">mlx::core::detail::Multiply</a></div><div class="ttdef"><b>Definition</b> ops.h:583</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_multiply_html_a898b090966b047723513224b8d3b22f1"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_multiply.html#a898b090966b047723513224b8d3b22f1">mlx::core::detail::Multiply::operator()</a></div><div class="ttdeci">T operator()(T x, T y)</div><div class="ttdef"><b>Definition</b> ops.h:585</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_na_n_equal_html"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_na_n_equal.html">mlx::core::detail::NaNEqual</a></div><div class="ttdef"><b>Definition</b> ops.h:500</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_na_n_equal_html_a073b20b0d8d41ec8364b7c477421b9bf"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_na_n_equal.html#a073b20b0d8d41ec8364b7c477421b9bf">mlx::core::detail::NaNEqual::operator()</a></div><div class="ttdeci">bool operator()(T x, T y)</div><div class="ttdef"><b>Definition</b> ops.h:502</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_negative_html"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_negative.html">mlx::core::detail::Negative</a></div><div class="ttdef"><b>Definition</b> ops.h:340</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_negative_html_afc4595c70ef7196df374cf4b2cc5e526"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_negative.html#afc4595c70ef7196df374cf4b2cc5e526">mlx::core::detail::Negative::operator()</a></div><div class="ttdeci">T operator()(T x)</div><div class="ttdef"><b>Definition</b> ops.h:342</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_not_equal_html"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_not_equal.html">mlx::core::detail::NotEqual</a></div><div class="ttdef"><b>Definition</b> ops.h:585</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_not_equal_html_a23d662b5fd968dc17d3bee2595b5f99d"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_not_equal.html#a23d662b5fd968dc17d3bee2595b5f99d">mlx::core::detail::NotEqual::operator()</a></div><div class="ttdeci">bool operator()(T x, T y)</div><div class="ttdef"><b>Definition</b> ops.h:587</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_power_html"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_power.html">mlx::core::detail::Power</a></div><div class="ttdef"><b>Definition</b> ops.h:592</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_power_html_a2c047e1b488e6525447a224975a75db8"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_power.html#a2c047e1b488e6525447a224975a75db8">mlx::core::detail::Power::operator()</a></div><div class="ttdeci">std::enable_if_t&lt;!std::is_integral_v&lt; T &gt;, T &gt; operator()(T base, T exp)</div><div class="ttdef"><b>Definition</b> ops.h:594</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_power_html_a9967db24b8f67d54b6aa3810e274f28c"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_power.html#a9967db24b8f67d54b6aa3810e274f28c">mlx::core::detail::Power::operator()</a></div><div class="ttdeci">std::enable_if_t&lt; std::is_integral_v&lt; T &gt;, T &gt; operator()(T base, T exp)</div><div class="ttdef"><b>Definition</b> ops.h:599</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_not_equal_html"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_not_equal.html">mlx::core::detail::NotEqual</a></div><div class="ttdef"><b>Definition</b> ops.h:590</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_not_equal_html_a23d662b5fd968dc17d3bee2595b5f99d"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_not_equal.html#a23d662b5fd968dc17d3bee2595b5f99d">mlx::core::detail::NotEqual::operator()</a></div><div class="ttdeci">bool operator()(T x, T y)</div><div class="ttdef"><b>Definition</b> ops.h:592</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_power_html"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_power.html">mlx::core::detail::Power</a></div><div class="ttdef"><b>Definition</b> ops.h:597</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_power_html_a2c047e1b488e6525447a224975a75db8"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_power.html#a2c047e1b488e6525447a224975a75db8">mlx::core::detail::Power::operator()</a></div><div class="ttdeci">std::enable_if_t&lt;!std::is_integral_v&lt; T &gt;, T &gt; operator()(T base, T exp)</div><div class="ttdef"><b>Definition</b> ops.h:599</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_power_html_a9967db24b8f67d54b6aa3810e274f28c"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_power.html#a9967db24b8f67d54b6aa3810e274f28c">mlx::core::detail::Power::operator()</a></div><div class="ttdeci">std::enable_if_t&lt; std::is_integral_v&lt; T &gt;, T &gt; operator()(T base, T exp)</div><div class="ttdef"><b>Definition</b> ops.h:604</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_real_html"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_real.html">mlx::core::detail::Real</a></div><div class="ttdef"><b>Definition</b> ops.h:347</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_real_html_ae84a939fdb5916257a7731cda66d4d61"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_real.html#ae84a939fdb5916257a7731cda66d4d61">mlx::core::detail::Real::operator()</a></div><div class="ttdeci">T operator()(T x)</div><div class="ttdef"><b>Definition</b> ops.h:349</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_remainder_html"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_remainder.html">mlx::core::detail::Remainder</a></div><div class="ttdef"><b>Definition</b> ops.h:459</div></div>
@@ -1214,15 +1233,15 @@ $(function(){ initResizable(false); });
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_remainder_html_a3bdaf1095ad883ecc0fecc455f02cbf3"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_remainder.html#a3bdaf1095ad883ecc0fecc455f02cbf3">mlx::core::detail::Remainder::operator()</a></div><div class="ttdeci">std::enable_if_t&lt; std::is_integral_v&lt; T &gt; &amp;!std::is_signed_v&lt; T &gt;, T &gt; operator()(T numerator, T denominator)</div><div class="ttdef"><b>Definition</b> ops.h:461</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_remainder_html_a52c3a2ba86fccb24d37d218ae8328954"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_remainder.html#a52c3a2ba86fccb24d37d218ae8328954">mlx::core::detail::Remainder::operator()</a></div><div class="ttdeci">std::enable_if_t&lt; std::is_integral_v&lt; T &gt; &amp;std::is_signed_v&lt; T &gt;, T &gt; operator()(T numerator, T denominator)</div><div class="ttdef"><b>Definition</b> ops.h:468</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_remainder_html_a68fe542084fb94d9a5abd740fe07832b"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_remainder.html#a68fe542084fb94d9a5abd740fe07832b">mlx::core::detail::Remainder::operator()</a></div><div class="ttdeci">complex64_t operator()(complex64_t numerator, complex64_t denominator)</div><div class="ttdef"><b>Definition</b> ops.h:488</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_right_shift_html"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_right_shift.html">mlx::core::detail::RightShift</a></div><div class="ttdef"><b>Definition</b> ops.h:668</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_right_shift_html_a154528ba50e89a4c532a181f135b1620"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_right_shift.html#a154528ba50e89a4c532a181f135b1620">mlx::core::detail::RightShift::operator()</a></div><div class="ttdeci">T operator()(T x, T y)</div><div class="ttdef"><b>Definition</b> ops.h:670</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_right_shift_html"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_right_shift.html">mlx::core::detail::RightShift</a></div><div class="ttdef"><b>Definition</b> ops.h:673</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_right_shift_html_a154528ba50e89a4c532a181f135b1620"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_right_shift.html#a154528ba50e89a4c532a181f135b1620">mlx::core::detail::RightShift::operator()</a></div><div class="ttdeci">T operator()(T x, T y)</div><div class="ttdef"><b>Definition</b> ops.h:675</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_round_html"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_round.html">mlx::core::detail::Round</a></div><div class="ttdef"><b>Definition</b> ops.h:354</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_round_html_a653f29c059bbfa6192378732a8a23351"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_round.html#a653f29c059bbfa6192378732a8a23351">mlx::core::detail::Round::operator()</a></div><div class="ttdeci">T operator()(T x)</div><div class="ttdef"><b>Definition</b> ops.h:356</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_round_html_a82a984f13568051009e257fe85227da6"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_round.html#a82a984f13568051009e257fe85227da6">mlx::core::detail::Round::operator()</a></div><div class="ttdeci">complex64_t operator()(complex64_t x)</div><div class="ttdef"><b>Definition</b> ops.h:360</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_rsqrt_html"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_rsqrt.html">mlx::core::detail::Rsqrt</a></div><div class="ttdef"><b>Definition</b> ops.h:424</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_rsqrt_html_a9af247be16bab83243038aac54446b79"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_rsqrt.html#a9af247be16bab83243038aac54446b79">mlx::core::detail::Rsqrt::operator()</a></div><div class="ttdeci">T operator()(T x)</div><div class="ttdef"><b>Definition</b> ops.h:426</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_select_html"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_select.html">mlx::core::detail::Select</a></div><div class="ttdef"><b>Definition</b> ops.h:633</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_select_html_a930f9da2e6b3453e04f21382435a2cfb"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_select.html#a930f9da2e6b3453e04f21382435a2cfb">mlx::core::detail::Select::operator()</a></div><div class="ttdeci">T operator()(bool condition, T x, T y)</div><div class="ttdef"><b>Definition</b> ops.h:635</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_select_html"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_select.html">mlx::core::detail::Select</a></div><div class="ttdef"><b>Definition</b> ops.h:638</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_select_html_a930f9da2e6b3453e04f21382435a2cfb"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_select.html#a930f9da2e6b3453e04f21382435a2cfb">mlx::core::detail::Select::operator()</a></div><div class="ttdeci">T operator()(bool condition, T x, T y)</div><div class="ttdef"><b>Definition</b> ops.h:640</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_sigmoid_html"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_sigmoid.html">mlx::core::detail::Sigmoid</a></div><div class="ttdef"><b>Definition</b> ops.h:365</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_sigmoid_html_a64b72561bfaf758632167f00648f4c89"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_sigmoid.html#a64b72561bfaf758632167f00648f4c89">mlx::core::detail::Sigmoid::operator()</a></div><div class="ttdeci">T operator()(T x)</div><div class="ttdef"><b>Definition</b> ops.h:367</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_sign_html"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_sign.html">mlx::core::detail::Sign</a></div><div class="ttdef"><b>Definition</b> ops.h:373</div></div>
@@ -1240,21 +1259,23 @@ $(function(){ initResizable(false); });
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_sqrt_html_aa5a4830b3ef7efab20ea88a110667efd"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_sqrt.html#aa5a4830b3ef7efab20ea88a110667efd">mlx::core::detail::Sqrt::operator()</a></div><div class="ttdeci">T operator()(T x)</div><div class="ttdef"><b>Definition</b> ops.h:419</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_square_html"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_square.html">mlx::core::detail::Square</a></div><div class="ttdef"><b>Definition</b> ops.h:410</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_square_html_a54e9e3c0d0896e142289e8282eab1099"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_square.html#a54e9e3c0d0896e142289e8282eab1099">mlx::core::detail::Square::operator()</a></div><div class="ttdeci">T operator()(T x)</div><div class="ttdef"><b>Definition</b> ops.h:412</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_subtract_html"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_subtract.html">mlx::core::detail::Subtract</a></div><div class="ttdef"><b>Definition</b> ops.h:612</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_subtract_html_a72ef05830615a2d5d9662926ed82672a"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_subtract.html#a72ef05830615a2d5d9662926ed82672a">mlx::core::detail::Subtract::operator()</a></div><div class="ttdeci">T operator()(T x, T y)</div><div class="ttdef"><b>Definition</b> ops.h:614</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_subtract_html"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_subtract.html">mlx::core::detail::Subtract</a></div><div class="ttdef"><b>Definition</b> ops.h:617</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_subtract_html_a72ef05830615a2d5d9662926ed82672a"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_subtract.html#a72ef05830615a2d5d9662926ed82672a">mlx::core::detail::Subtract::operator()</a></div><div class="ttdeci">T operator()(T x, T y)</div><div class="ttdef"><b>Definition</b> ops.h:619</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_tan_html"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_tan.html">mlx::core::detail::Tan</a></div><div class="ttdef"><b>Definition</b> ops.h:431</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_tan_html_aba397cd7ac05bbe06dfa9e3a64bdb05f"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_tan.html#aba397cd7ac05bbe06dfa9e3a64bdb05f">mlx::core::detail::Tan::operator()</a></div><div class="ttdeci">T operator()(T x)</div><div class="ttdef"><b>Definition</b> ops.h:433</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_tanh_html"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_tanh.html">mlx::core::detail::Tanh</a></div><div class="ttdef"><b>Definition</b> ops.h:438</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1detail_1_1_tanh_html_a1749ba1edfd53095ed7d45c0e53bab61"><div class="ttname"><a href="structmlx_1_1core_1_1detail_1_1_tanh.html#a1749ba1edfd53095ed7d45c0e53bab61">mlx::core::detail::Tanh::operator()</a></div><div class="ttdeci">T operator()(T x)</div><div class="ttdef"><b>Definition</b> ops.h:440</div></div>
<div class="ttc" id="atypes_2bf16_8h_html_aa21e554721eddcf127b7fcfa7fdc56bd"><div class="ttname"><a href="types_2bf16_8h.html#aa21e554721eddcf127b7fcfa7fdc56bd">u</a></div><div class="ttdeci">uint32_t u</div><div class="ttdef"><b>Definition</b> bf16.h:17</div></div>
<div class="ttc" id="aunionmlx_1_1core_1_1detail_1_1_int_or_float_html"><div class="ttname"><a href="unionmlx_1_1core_1_1detail_1_1_int_or_float.html">mlx::core::detail::IntOrFloat</a></div><div class="ttdef"><b>Definition</b> ops.h:14</div></div>
<div class="ttc" id="aunionmlx_1_1core_1_1detail_1_1_int_or_float_html_a90bd738e3b6b96a1a67685e8ab75b7ec"><div class="ttname"><a href="unionmlx_1_1core_1_1detail_1_1_int_or_float.html#a90bd738e3b6b96a1a67685e8ab75b7ec">mlx::core::detail::IntOrFloat::f</a></div><div class="ttdeci">float f</div><div class="ttdef"><b>Definition</b> ops.h:16</div></div>
<div class="ttc" id="aunionmlx_1_1core_1_1detail_1_1_int_or_float_html_aa6d4b02e99df90a321e0eeeb98e71b49"><div class="ttname"><a href="unionmlx_1_1core_1_1detail_1_1_int_or_float.html#aa6d4b02e99df90a321e0eeeb98e71b49">mlx::core::detail::IntOrFloat::i</a></div><div class="ttdeci">int i</div><div class="ttdef"><b>Definition</b> ops.h:15</div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0
</small></address>
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_f149b24a1b5be11cd70151abe517e3f8.html">common</a></li><li class="navelem"><a class="el" href="backend_2common_2ops_8h.html">ops.h</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.1 </li>
</ul>
</div>
</body>
</html>
+65 -51
View File
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.12.0"/>
<meta name="generator" content="Doxygen 1.13.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MLX: mlx/backend/common/utils.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -11,11 +11,18 @@
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
@@ -28,12 +35,24 @@
<div id="projectname">MLX
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.12.0 -->
<!-- Generated by Doxygen 1.13.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
@@ -44,22 +63,23 @@ var searchBox = new SearchBox("searchBox", "search/",'.html');
$(function() { codefold.init(0); });
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search',false);
$(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){ initResizable(false); });
$(function(){initNavTree('backend_2common_2utils_8h.html',''); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
@@ -81,12 +101,6 @@ $(function(){ initResizable(false); });
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_f149b24a1b5be11cd70151abe517e3f8.html">common</a></li> </ul>
</div>
</div><!-- top -->
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#nested-classes">Classes</a> &#124;
@@ -102,7 +116,7 @@ $(function(){ initResizable(false); });
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a>
Classes</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structmlx_1_1core_1_1_contiguous_iterator.html">mlx::core::ContiguousIterator&lt; StrideT &gt;</a></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structmlx_1_1core_1_1_contiguous_iterator.html">mlx::core::ContiguousIterator</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="namespaces" name="namespaces"></a>
@@ -114,44 +128,44 @@ Namespaces</h2></td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:a77657cb50fd9392f7f4c64e43843c2b3" id="r_a77657cb50fd9392f7f4c64e43843c2b3"><td class="memTemplParams" colspan="2">template&lt;typename StrideT &gt; </td></tr>
<tr class="memitem:a77657cb50fd9392f7f4c64e43843c2b3"><td class="memTemplItemLeft" align="right" valign="top">StrideT&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacemlx_1_1core.html#a77657cb50fd9392f7f4c64e43843c2b3">mlx::core::elem_to_loc</a> (int elem, const std::vector&lt; int &gt; &amp;shape, const std::vector&lt; StrideT &gt; &amp;strides)</td></tr>
<tr class="separator:a77657cb50fd9392f7f4c64e43843c2b3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad7e4f40eb351b554bbfabb6d7d600d06" id="r_ad7e4f40eb351b554bbfabb6d7d600d06"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacemlx_1_1core.html#ad7e4f40eb351b554bbfabb6d7d600d06">mlx::core::elem_to_loc</a> (int elem, const <a class="el" href="classmlx_1_1core_1_1array.html">array</a> &amp;a)</td></tr>
<tr class="separator:ad7e4f40eb351b554bbfabb6d7d600d06"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a085379297e21d57f5b3aa38ae1c26070" id="r_a085379297e21d57f5b3aa38ae1c26070"><td class="memTemplParams" colspan="2">template&lt;typename StrideT &gt; </td></tr>
<tr class="memitem:a085379297e21d57f5b3aa38ae1c26070"><td class="memTemplItemLeft" align="right" valign="top">std::vector&lt; StrideT &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacemlx_1_1core.html#a085379297e21d57f5b3aa38ae1c26070">mlx::core::make_contiguous_strides</a> (const std::vector&lt; int &gt; &amp;shape)</td></tr>
<tr class="separator:a085379297e21d57f5b3aa38ae1c26070"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a38fe6ec5220d13d96c7dad7556d2b613" id="r_a38fe6ec5220d13d96c7dad7556d2b613"><td class="memItemLeft" align="right" valign="top">std::tuple&lt; std::vector&lt; int &gt;, std::vector&lt; std::vector&lt; int64_t &gt; &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacemlx_1_1core.html#a38fe6ec5220d13d96c7dad7556d2b613">mlx::core::collapse_contiguous_dims</a> (const std::vector&lt; int &gt; &amp;shape, const std::vector&lt; std::vector&lt; int64_t &gt; &gt; &amp;strides, int64_t size_cap=std::numeric_limits&lt; int32_t &gt;<a class="el" href="group__ops.html#ga7fed87d96cc7741d8267f4eac83f5fe7">::max</a>())</td></tr>
<tr class="separator:a38fe6ec5220d13d96c7dad7556d2b613"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af2895f9b0083efd8221275eb8cadccbe" id="r_af2895f9b0083efd8221275eb8cadccbe"><td class="memItemLeft" align="right" valign="top">std::tuple&lt; std::vector&lt; int &gt;, std::vector&lt; std::vector&lt; size_t &gt; &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacemlx_1_1core.html#af2895f9b0083efd8221275eb8cadccbe">mlx::core::collapse_contiguous_dims</a> (const std::vector&lt; int &gt; &amp;shape, const std::vector&lt; std::vector&lt; size_t &gt; &gt; &amp;strides, size_t size_cap=std::numeric_limits&lt; int32_t &gt;<a class="el" href="group__ops.html#ga7fed87d96cc7741d8267f4eac83f5fe7">::max</a>())</td></tr>
<tr class="separator:af2895f9b0083efd8221275eb8cadccbe"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a90e2b6edc0fe82230cb93f5ea39febb4" id="r_a90e2b6edc0fe82230cb93f5ea39febb4"><td class="memItemLeft" align="right" valign="top">std::tuple&lt; std::vector&lt; int &gt;, std::vector&lt; std::vector&lt; size_t &gt; &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacemlx_1_1core.html#a90e2b6edc0fe82230cb93f5ea39febb4">mlx::core::collapse_contiguous_dims</a> (const std::vector&lt; <a class="el" href="classmlx_1_1core_1_1array.html">array</a> &gt; &amp;xs, size_t size_cap=std::numeric_limits&lt; int32_t &gt;<a class="el" href="group__ops.html#ga7fed87d96cc7741d8267f4eac83f5fe7">::max</a>())</td></tr>
<tr class="separator:a90e2b6edc0fe82230cb93f5ea39febb4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac813412cce77fc1340dcfefc6e099276" id="r_ac813412cce77fc1340dcfefc6e099276"><td class="memTemplParams" colspan="2">template&lt;typename... Arrays, typename = enable_for_arrays_t&lt;Arrays...&gt;&gt; </td></tr>
<tr class="memitem:a59c0af06c5325c04ad8d69563c1c6b0a" id="r_a59c0af06c5325c04ad8d69563c1c6b0a"><td class="memItemLeft" align="right" valign="top">int64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacemlx_1_1core.html#a59c0af06c5325c04ad8d69563c1c6b0a">mlx::core::elem_to_loc</a> (int elem, const <a class="el" href="namespacemlx_1_1core.html#a694e23f2d59606643728ad443d621416">Shape</a> &amp;shape, const <a class="el" href="namespacemlx_1_1core.html#a79939016d0972ded7db37130da2a8b5c">Strides</a> &amp;strides)</td></tr>
<tr class="separator:a59c0af06c5325c04ad8d69563c1c6b0a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac9c19514210333346f02a4520641847f" id="r_ac9c19514210333346f02a4520641847f"><td class="memItemLeft" align="right" valign="top">int64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacemlx_1_1core.html#ac9c19514210333346f02a4520641847f">mlx::core::elem_to_loc</a> (int elem, const <a class="el" href="classmlx_1_1core_1_1array.html">array</a> &amp;a)</td></tr>
<tr class="separator:ac9c19514210333346f02a4520641847f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a449ef1148816a37bbc7ffd43d3c586a0" id="r_a449ef1148816a37bbc7ffd43d3c586a0"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacemlx_1_1core.html#a79939016d0972ded7db37130da2a8b5c">Strides</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacemlx_1_1core.html#a449ef1148816a37bbc7ffd43d3c586a0">mlx::core::make_contiguous_strides</a> (const <a class="el" href="namespacemlx_1_1core.html#a694e23f2d59606643728ad443d621416">Shape</a> &amp;shape)</td></tr>
<tr class="separator:a449ef1148816a37bbc7ffd43d3c586a0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4d594bb84abeff4619d1abb77b20123e" id="r_a4d594bb84abeff4619d1abb77b20123e"><td class="memItemLeft" align="right" valign="top">std::tuple&lt; <a class="el" href="namespacemlx_1_1core.html#a694e23f2d59606643728ad443d621416">Shape</a>, std::vector&lt; <a class="el" href="namespacemlx_1_1core.html#a79939016d0972ded7db37130da2a8b5c">Strides</a> &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacemlx_1_1core.html#a4d594bb84abeff4619d1abb77b20123e">mlx::core::collapse_contiguous_dims</a> (const <a class="el" href="namespacemlx_1_1core.html#a694e23f2d59606643728ad443d621416">Shape</a> &amp;shape, const std::vector&lt; <a class="el" href="namespacemlx_1_1core.html#a79939016d0972ded7db37130da2a8b5c">Strides</a> &gt; &amp;strides, int64_t size_cap=std::numeric_limits&lt; int32_t &gt;<a class="el" href="group__ops.html#ga7fed87d96cc7741d8267f4eac83f5fe7">::max</a>())</td></tr>
<tr class="separator:a4d594bb84abeff4619d1abb77b20123e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a977c7c84de79ad67055ae2a89b7f6869" id="r_a977c7c84de79ad67055ae2a89b7f6869"><td class="memItemLeft" align="right" valign="top">std::tuple&lt; <a class="el" href="namespacemlx_1_1core.html#a694e23f2d59606643728ad443d621416">Shape</a>, std::vector&lt; <a class="el" href="namespacemlx_1_1core.html#a79939016d0972ded7db37130da2a8b5c">Strides</a> &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacemlx_1_1core.html#a977c7c84de79ad67055ae2a89b7f6869">mlx::core::collapse_contiguous_dims</a> (const std::vector&lt; <a class="el" href="classmlx_1_1core_1_1array.html">array</a> &gt; &amp;xs, size_t size_cap=std::numeric_limits&lt; int32_t &gt;<a class="el" href="group__ops.html#ga7fed87d96cc7741d8267f4eac83f5fe7">::max</a>())</td></tr>
<tr class="separator:a977c7c84de79ad67055ae2a89b7f6869"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac813412cce77fc1340dcfefc6e099276" id="r_ac813412cce77fc1340dcfefc6e099276"><td class="memTemplParams" colspan="2">template&lt;typename... Arrays, typename = enable_for_arrays_t&lt;Arrays...&gt;&gt; </td></tr>
<tr class="memitem:ac813412cce77fc1340dcfefc6e099276"><td class="memTemplItemLeft" align="right" valign="top">auto&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacemlx_1_1core.html#ac813412cce77fc1340dcfefc6e099276">mlx::core::collapse_contiguous_dims</a> (Arrays &amp;&amp;... xs)</td></tr>
<tr class="separator:ac813412cce77fc1340dcfefc6e099276"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aab3cc7f3808934ae0727b920eba231bd" id="r_aab3cc7f3808934ae0727b920eba231bd"><td class="memItemLeft" align="right" valign="top">std::pair&lt; std::vector&lt; int &gt;, std::vector&lt; int64_t &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacemlx_1_1core.html#aab3cc7f3808934ae0727b920eba231bd">mlx::core::collapse_contiguous_dims</a> (const std::vector&lt; int &gt; &amp;shape, const std::vector&lt; int64_t &gt; &amp;strides, int64_t size_cap=std::numeric_limits&lt; int32_t &gt;<a class="el" href="group__ops.html#ga7fed87d96cc7741d8267f4eac83f5fe7">::max</a>())</td></tr>
<tr class="separator:aab3cc7f3808934ae0727b920eba231bd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1e0cbcf109d32794ffc8efc7302ba9b0" id="r_a1e0cbcf109d32794ffc8efc7302ba9b0"><td class="memItemLeft" align="right" valign="top">std::pair&lt; std::vector&lt; int &gt;, std::vector&lt; size_t &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacemlx_1_1core.html#a1e0cbcf109d32794ffc8efc7302ba9b0">mlx::core::collapse_contiguous_dims</a> (const std::vector&lt; int &gt; &amp;shape, const std::vector&lt; size_t &gt; &amp;strides, size_t size_cap=std::numeric_limits&lt; int32_t &gt;<a class="el" href="group__ops.html#ga7fed87d96cc7741d8267f4eac83f5fe7">::max</a>())</td></tr>
<tr class="separator:a1e0cbcf109d32794ffc8efc7302ba9b0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4ee50bfb240512d0c0ce151dfe2c74ef" id="r_a4ee50bfb240512d0c0ce151dfe2c74ef"><td class="memItemLeft" align="right" valign="top">std::pair&lt; std::vector&lt; int &gt;, std::vector&lt; size_t &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacemlx_1_1core.html#a4ee50bfb240512d0c0ce151dfe2c74ef">mlx::core::collapse_contiguous_dims</a> (const <a class="el" href="classmlx_1_1core_1_1array.html">array</a> &amp;a, size_t size_cap=std::numeric_limits&lt; int32_t &gt;<a class="el" href="group__ops.html#ga7fed87d96cc7741d8267f4eac83f5fe7">::max</a>())</td></tr>
<tr class="separator:a4ee50bfb240512d0c0ce151dfe2c74ef"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3ba20a804c306067b7023259429e0e48" id="r_a3ba20a804c306067b7023259429e0e48"><td class="memTemplParams" colspan="2">template&lt;typename StrideT &gt; </td></tr>
<tr class="memitem:a3ba20a804c306067b7023259429e0e48"><td class="memTemplItemLeft" align="right" valign="top">auto&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacemlx_1_1core.html#a3ba20a804c306067b7023259429e0e48">mlx::core::check_contiguity</a> (const std::vector&lt; int &gt; &amp;shape, const std::vector&lt; StrideT &gt; &amp;strides)</td></tr>
<tr class="separator:a3ba20a804c306067b7023259429e0e48"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a79acfa8bc30c1f213bf893b5983eb666" id="r_a79acfa8bc30c1f213bf893b5983eb666"><td class="memItemLeft" align="right" valign="top">std::pair&lt; <a class="el" href="namespacemlx_1_1core.html#a694e23f2d59606643728ad443d621416">Shape</a>, <a class="el" href="namespacemlx_1_1core.html#a79939016d0972ded7db37130da2a8b5c">Strides</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacemlx_1_1core.html#a79acfa8bc30c1f213bf893b5983eb666">mlx::core::collapse_contiguous_dims</a> (const <a class="el" href="namespacemlx_1_1core.html#a694e23f2d59606643728ad443d621416">Shape</a> &amp;shape, const <a class="el" href="namespacemlx_1_1core.html#a79939016d0972ded7db37130da2a8b5c">Strides</a> &amp;strides, int64_t size_cap=std::numeric_limits&lt; int32_t &gt;<a class="el" href="group__ops.html#ga7fed87d96cc7741d8267f4eac83f5fe7">::max</a>())</td></tr>
<tr class="separator:a79acfa8bc30c1f213bf893b5983eb666"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab607cd6974ca6606826e785807156d6a" id="r_ab607cd6974ca6606826e785807156d6a"><td class="memItemLeft" align="right" valign="top">std::pair&lt; <a class="el" href="namespacemlx_1_1core.html#a694e23f2d59606643728ad443d621416">Shape</a>, <a class="el" href="namespacemlx_1_1core.html#a79939016d0972ded7db37130da2a8b5c">Strides</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacemlx_1_1core.html#ab607cd6974ca6606826e785807156d6a">mlx::core::collapse_contiguous_dims</a> (const <a class="el" href="classmlx_1_1core_1_1array.html">array</a> &amp;a, int64_t size_cap=std::numeric_limits&lt; int32_t &gt;<a class="el" href="group__ops.html#ga7fed87d96cc7741d8267f4eac83f5fe7">::max</a>())</td></tr>
<tr class="separator:ab607cd6974ca6606826e785807156d6a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab2b50a44a9d3a06282be4611f5fc7447" id="r_ab2b50a44a9d3a06282be4611f5fc7447"><td class="memItemLeft" align="right" valign="top">auto&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacemlx_1_1core.html#ab2b50a44a9d3a06282be4611f5fc7447">mlx::core::check_contiguity</a> (const <a class="el" href="namespacemlx_1_1core.html#a694e23f2d59606643728ad443d621416">Shape</a> &amp;shape, const <a class="el" href="namespacemlx_1_1core.html#a79939016d0972ded7db37130da2a8b5c">Strides</a> &amp;strides)</td></tr>
<tr class="separator:ab2b50a44a9d3a06282be4611f5fc7447"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af650e831ce21759da1ac103037d08d84" id="r_af650e831ce21759da1ac103037d08d84"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacemlx_1_1core.html#af650e831ce21759da1ac103037d08d84">mlx::core::is_donatable</a> (const <a class="el" href="classmlx_1_1core_1_1array.html">array</a> &amp;in, const <a class="el" href="classmlx_1_1core_1_1array.html">array</a> &amp;out)</td></tr>
<tr class="separator:af650e831ce21759da1ac103037d08d84"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a830a47d8a317dffb0c88e5a7afe6aee2" id="r_a830a47d8a317dffb0c88e5a7afe6aee2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacemlx_1_1core.html#a830a47d8a317dffb0c88e5a7afe6aee2">mlx::core::move_or_copy</a> (const <a class="el" href="classmlx_1_1core_1_1array.html">array</a> &amp;in, <a class="el" href="classmlx_1_1core_1_1array.html">array</a> &amp;out)</td></tr>
<tr class="separator:a830a47d8a317dffb0c88e5a7afe6aee2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aae1e770954edf1f9a35d19e0de4d857a" id="r_aae1e770954edf1f9a35d19e0de4d857a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacemlx_1_1core.html#aae1e770954edf1f9a35d19e0de4d857a">mlx::core::move_or_copy</a> (const <a class="el" href="classmlx_1_1core_1_1array.html">array</a> &amp;in, <a class="el" href="classmlx_1_1core_1_1array.html">array</a> &amp;out, const std::vector&lt; size_t &gt; &amp;strides, <a class="el" href="structmlx_1_1core_1_1array_1_1_flags.html">array::Flags</a> flags, size_t data_size, size_t offset=0)</td></tr>
<tr class="separator:aae1e770954edf1f9a35d19e0de4d857a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9fcb3711b150cb65c7778a35c51284b2" id="r_a9fcb3711b150cb65c7778a35c51284b2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacemlx_1_1core.html#a9fcb3711b150cb65c7778a35c51284b2">mlx::core::move_or_copy</a> (const <a class="el" href="classmlx_1_1core_1_1array.html">array</a> &amp;in, <a class="el" href="classmlx_1_1core_1_1array.html">array</a> &amp;out, const <a class="el" href="namespacemlx_1_1core.html#a79939016d0972ded7db37130da2a8b5c">Strides</a> &amp;strides, <a class="el" href="structmlx_1_1core_1_1array_1_1_flags.html">array::Flags</a> flags, size_t data_size, size_t offset=0)</td></tr>
<tr class="separator:a9fcb3711b150cb65c7778a35c51284b2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6783cfc7dbe1a116ba84a3904a37145f" id="r_a6783cfc7dbe1a116ba84a3904a37145f"><td class="memItemLeft" align="right" valign="top">std::pair&lt; bool, <a class="el" href="namespacemlx_1_1core.html#a79939016d0972ded7db37130da2a8b5c">Strides</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacemlx_1_1core.html#a6783cfc7dbe1a116ba84a3904a37145f">mlx::core::prepare_reshape</a> (const <a class="el" href="classmlx_1_1core_1_1array.html">array</a> &amp;in, const <a class="el" href="classmlx_1_1core_1_1array.html">array</a> &amp;out)</td></tr>
<tr class="separator:a6783cfc7dbe1a116ba84a3904a37145f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a88d88987bd8bf3ca46bf3b5e8aacce9d" id="r_a88d88987bd8bf3ca46bf3b5e8aacce9d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacemlx_1_1core.html#a88d88987bd8bf3ca46bf3b5e8aacce9d">mlx::core::shared_buffer_reshape</a> (const <a class="el" href="classmlx_1_1core_1_1array.html">array</a> &amp;in, const <a class="el" href="namespacemlx_1_1core.html#a79939016d0972ded7db37130da2a8b5c">Strides</a> &amp;out_strides, <a class="el" href="classmlx_1_1core_1_1array.html">array</a> &amp;out)</td></tr>
<tr class="separator:a88d88987bd8bf3ca46bf3b5e8aacce9d"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0
</small></address>
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_f149b24a1b5be11cd70151abe517e3f8.html">common</a></li><li class="navelem"><a class="el" href="backend_2common_2utils_8h.html">utils.h</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.1 </li>
</ul>
</div>
</body>
</html>
+18
View File
@@ -0,0 +1,18 @@
var backend_2common_2utils_8h =
[
[ "mlx::core::ContiguousIterator", "structmlx_1_1core_1_1_contiguous_iterator.html", "structmlx_1_1core_1_1_contiguous_iterator" ],
[ "mlx::core::check_contiguity", "namespacemlx_1_1core.html#ab2b50a44a9d3a06282be4611f5fc7447", null ],
[ "mlx::core::collapse_contiguous_dims", "namespacemlx_1_1core.html#ac813412cce77fc1340dcfefc6e099276", null ],
[ "mlx::core::collapse_contiguous_dims", "namespacemlx_1_1core.html#ab607cd6974ca6606826e785807156d6a", null ],
[ "mlx::core::collapse_contiguous_dims", "namespacemlx_1_1core.html#a4d594bb84abeff4619d1abb77b20123e", null ],
[ "mlx::core::collapse_contiguous_dims", "namespacemlx_1_1core.html#a79acfa8bc30c1f213bf893b5983eb666", null ],
[ "mlx::core::collapse_contiguous_dims", "namespacemlx_1_1core.html#a977c7c84de79ad67055ae2a89b7f6869", null ],
[ "mlx::core::elem_to_loc", "namespacemlx_1_1core.html#ac9c19514210333346f02a4520641847f", null ],
[ "mlx::core::elem_to_loc", "namespacemlx_1_1core.html#a59c0af06c5325c04ad8d69563c1c6b0a", null ],
[ "mlx::core::is_donatable", "namespacemlx_1_1core.html#af650e831ce21759da1ac103037d08d84", null ],
[ "mlx::core::make_contiguous_strides", "namespacemlx_1_1core.html#a449ef1148816a37bbc7ffd43d3c586a0", null ],
[ "mlx::core::move_or_copy", "namespacemlx_1_1core.html#a830a47d8a317dffb0c88e5a7afe6aee2", null ],
[ "mlx::core::move_or_copy", "namespacemlx_1_1core.html#a9fcb3711b150cb65c7778a35c51284b2", null ],
[ "mlx::core::prepare_reshape", "namespacemlx_1_1core.html#a6783cfc7dbe1a116ba84a3904a37145f", null ],
[ "mlx::core::shared_buffer_reshape", "namespacemlx_1_1core.html#a88d88987bd8bf3ca46bf3b5e8aacce9d", null ]
];
+246 -239
View File
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.12.0"/>
<meta name="generator" content="Doxygen 1.13.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MLX: mlx/backend/common/utils.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -11,11 +11,18 @@
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
@@ -28,12 +35,24 @@
<div id="projectname">MLX
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.12.0 -->
<!-- Generated by Doxygen 1.13.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
@@ -44,22 +63,23 @@ var searchBox = new SearchBox("searchBox", "search/",'.html');
$(function() { codefold.init(0); });
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search',false);
$(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){ initResizable(false); });
$(function(){initNavTree('backend_2common_2utils_8h_source.html',''); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
@@ -81,12 +101,6 @@ $(function(){ initResizable(false); });
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_f149b24a1b5be11cd70151abe517e3f8.html">common</a></li> </ul>
</div>
</div><!-- top -->
<div id="doc-content">
<div class="header">
<div class="headertitle"><div class="title">utils.h</div></div>
</div><!--header-->
@@ -101,244 +115,237 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span> </div>
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacemlx_1_1core.html">mlx::core</a> {</div>
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span> </div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> Str<span class="keywordtype">id</span>eT&gt;</div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="keyword">inline</span> int64_t</div>
<div class="foldopen" id="foldopen00012" data-start="{" data-end="}">
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"><a class="line" href="namespacemlx_1_1core.html#a77657cb50fd9392f7f4c64e43843c2b3"> 12</a></span><span class="keyword">inline</span> StrideT <a class="code hl_function" href="namespacemlx_1_1core.html#a77657cb50fd9392f7f4c64e43843c2b3">elem_to_loc</a>(</div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span> <span class="keywordtype">int</span> elem,</div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span> <span class="keyword">const</span> std::vector&lt;int&gt;&amp; shape,</div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> <span class="keyword">const</span> std::vector&lt;StrideT&gt;&amp; strides) {</div>
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> StrideT loc = 0;</div>
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = shape.size() - 1; i &gt;= 0; --i) {</div>
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> <span class="keyword">auto</span> q_and_r = ldiv(elem, shape[i]);</div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> loc += q_and_r.rem * strides[i];</div>
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> elem = q_and_r.quot;</div>
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> }</div>
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> <span class="keywordflow">return</span> loc;</div>
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span>}</div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"><a class="line" href="namespacemlx_1_1core.html#a59c0af06c5325c04ad8d69563c1c6b0a"> 12</a></span><a class="code hl_function" href="namespacemlx_1_1core.html#a59c0af06c5325c04ad8d69563c1c6b0a">elem_to_loc</a>(<span class="keywordtype">int</span> elem, <span class="keyword">const</span> <a class="code hl_typedef" href="namespacemlx_1_1core.html#a694e23f2d59606643728ad443d621416">Shape</a>&amp; shape, <span class="keyword">const</span> <a class="code hl_typedef" href="namespacemlx_1_1core.html#a79939016d0972ded7db37130da2a8b5c">Strides</a>&amp; strides) {</div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span> int64_t loc = 0;</div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = shape.size() - 1; i &gt;= 0; --i) {</div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> <span class="keyword">auto</span> q_and_r = ldiv(elem, shape[i]);</div>
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> loc += q_and_r.rem * strides[i];</div>
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span> elem = q_and_r.quot;</div>
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> }</div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> <span class="keywordflow">return</span> loc;</div>
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span>}</div>
</div>
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> </div>
<div class="foldopen" id="foldopen00025" data-start="{" data-end="}">
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"><a class="line" href="namespacemlx_1_1core.html#ad7e4f40eb351b554bbfabb6d7d600d06"> 25</a></span><span class="keyword">inline</span> <span class="keywordtype">size_t</span> <a class="code hl_function" href="namespacemlx_1_1core.html#a77657cb50fd9392f7f4c64e43843c2b3">elem_to_loc</a>(<span class="keywordtype">int</span> elem, <span class="keyword">const</span> <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; a) {</div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> <span class="keywordflow">if</span> (a.<a class="code hl_function" href="classmlx_1_1core_1_1array.html#a0a20a6065ae71b64c1e3aa22a45fd8a1">flags</a>().<a class="code hl_variable" href="structmlx_1_1core_1_1array_1_1_flags.html#a3170fa381dc7a90f6eabcc029bdf9bfd">row_contiguous</a>) {</div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> <span class="keywordflow">return</span> elem;</div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> }</div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespacemlx_1_1core.html#a77657cb50fd9392f7f4c64e43843c2b3">elem_to_loc</a>(elem, a.<a class="code hl_function" href="classmlx_1_1core_1_1array.html#a1d06c76b0f3010a5c329d0e9e29e0597">shape</a>(), a.<a class="code hl_function" href="classmlx_1_1core_1_1array.html#a28cf1928f5ec2f972a94ff1c0e71187d">strides</a>());</div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span>}</div>
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> </div>
<div class="foldopen" id="foldopen00022" data-start="{" data-end="}">
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"><a class="line" href="namespacemlx_1_1core.html#ac9c19514210333346f02a4520641847f"> 22</a></span><span class="keyword">inline</span> int64_t <a class="code hl_function" href="namespacemlx_1_1core.html#a59c0af06c5325c04ad8d69563c1c6b0a">elem_to_loc</a>(<span class="keywordtype">int</span> elem, <span class="keyword">const</span> <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; a) {</div>
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> <span class="keywordflow">if</span> (a.<a class="code hl_function" href="classmlx_1_1core_1_1array.html#a0a20a6065ae71b64c1e3aa22a45fd8a1">flags</a>().<a class="code hl_variable" href="structmlx_1_1core_1_1array_1_1_flags.html#a3170fa381dc7a90f6eabcc029bdf9bfd">row_contiguous</a>) {</div>
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> <span class="keywordflow">return</span> elem;</div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> }</div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespacemlx_1_1core.html#a59c0af06c5325c04ad8d69563c1c6b0a">elem_to_loc</a>(elem, a.<a class="code hl_function" href="classmlx_1_1core_1_1array.html#a1d06c76b0f3010a5c329d0e9e29e0597">shape</a>(), a.<a class="code hl_function" href="classmlx_1_1core_1_1array.html#a28cf1928f5ec2f972a94ff1c0e71187d">strides</a>());</div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span>}</div>
</div>
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> </div>
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> Str<span class="keywordtype">id</span>eT&gt;</div>
<div class="foldopen" id="foldopen00033" data-start="{" data-end="}">
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"><a class="line" href="namespacemlx_1_1core.html#a085379297e21d57f5b3aa38ae1c26070"> 33</a></span>std::vector&lt;StrideT&gt; <a class="code hl_function" href="namespacemlx_1_1core.html#a085379297e21d57f5b3aa38ae1c26070">make_contiguous_strides</a>(<span class="keyword">const</span> std::vector&lt;int&gt;&amp; shape) {</div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> std::vector&lt;StrideT&gt; strides(shape.size(), 1);</div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = shape.size() - 1; i &gt; 0; i--) {</div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> strides[i - 1] = strides[i] * shape[i];</div>
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> }</div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> <span class="keywordflow">return</span> strides;</div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span>}</div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> </div>
<div class="foldopen" id="foldopen00029" data-start="{" data-end="}">
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"><a class="line" href="namespacemlx_1_1core.html#a449ef1148816a37bbc7ffd43d3c586a0"> 29</a></span><span class="keyword">inline</span> <a class="code hl_typedef" href="namespacemlx_1_1core.html#a79939016d0972ded7db37130da2a8b5c">Strides</a> <a class="code hl_function" href="namespacemlx_1_1core.html#a449ef1148816a37bbc7ffd43d3c586a0">make_contiguous_strides</a>(<span class="keyword">const</span> <a class="code hl_typedef" href="namespacemlx_1_1core.html#a694e23f2d59606643728ad443d621416">Shape</a>&amp; shape) {</div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> <a class="code hl_typedef" href="namespacemlx_1_1core.html#a79939016d0972ded7db37130da2a8b5c">Strides</a> strides(shape.size(), 1);</div>
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = shape.size() - 1; i &gt; 0; i--) {</div>
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> strides[i - 1] = strides[i] * shape[i];</div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> }</div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> <span class="keywordflow">return</span> strides;</div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span>}</div>
</div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> </div>
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span><span class="comment">// Collapse dims that are contiguous to possibly route to a better kernel</span></div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span><span class="comment">// e.g. for x = transpose(array({0, 1, 2, 3, 4, 5, 6, 7}, {2, 2, 2}), {2, 0, 1})</span></div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span><span class="comment">// should return {{2, 4}, {{1, 2}}}.</span></div>
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span><span class="comment">//</span></div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span><span class="comment">// When multiple arrays are passed they should all have the same shape. The</span></div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span><span class="comment">// collapsed axes are also the same so one shape is returned.</span></div>
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"><a class="line" href="namespacemlx_1_1core.html#a4d594bb84abeff4619d1abb77b20123e"> 43</a></span>std::tuple&lt;Shape, std::vector&lt;Strides&gt;&gt; <a class="code hl_function" href="namespacemlx_1_1core.html#a4d594bb84abeff4619d1abb77b20123e">collapse_contiguous_dims</a>(</div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> <span class="keyword">const</span> <a class="code hl_typedef" href="namespacemlx_1_1core.html#a694e23f2d59606643728ad443d621416">Shape</a>&amp; shape,</div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> <span class="keyword">const</span> std::vector&lt;Strides&gt;&amp; strides,</div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> int64_t size_cap = std::numeric_limits&lt;int32_t&gt;::max());</div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> </div>
<div class="foldopen" id="foldopen00048" data-start="{" data-end="}">
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"><a class="line" href="namespacemlx_1_1core.html#a977c7c84de79ad67055ae2a89b7f6869"> 48</a></span><span class="keyword">inline</span> std::tuple&lt;Shape, std::vector&lt;Strides&gt;&gt; <a class="code hl_function" href="namespacemlx_1_1core.html#a4d594bb84abeff4619d1abb77b20123e">collapse_contiguous_dims</a>(</div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> <span class="keyword">const</span> std::vector&lt;array&gt;&amp; xs,</div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> <span class="keywordtype">size_t</span> size_cap = std::numeric_limits&lt;int32_t&gt;::max()) {</div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> std::vector&lt;Strides&gt; strides;</div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; x : xs) {</div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> strides.emplace_back(x.strides());</div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> }</div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespacemlx_1_1core.html#a4d594bb84abeff4619d1abb77b20123e">collapse_contiguous_dims</a>(xs[0].shape(), strides, size_cap);</div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span>}</div>
</div>
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> </div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span><span class="comment">// Collapse dims that are contiguous to possibly route to a better kernel</span></div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span><span class="comment">// e.g. for x = transpose(array({0, 1, 2, 3, 4, 5, 6, 7}, {2, 2, 2}), {2, 0, 1})</span></div>
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span><span class="comment">// should return {{2, 4}, {{1, 2}}}.</span></div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span><span class="comment">//</span></div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span><span class="comment">// When multiple arrays are passed they should all have the same shape. The</span></div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span><span class="comment">// collapsed axes are also the same so one shape is returned.</span></div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span>std::tuple&lt;std::vector&lt;int&gt;, std::vector&lt;std::vector&lt;int64_t&gt;&gt;&gt;</div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"><a class="line" href="namespacemlx_1_1core.html#a38fe6ec5220d13d96c7dad7556d2b613"> 48</a></span><a class="code hl_function" href="namespacemlx_1_1core.html#a38fe6ec5220d13d96c7dad7556d2b613">collapse_contiguous_dims</a>(</div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> <span class="keyword">const</span> std::vector&lt;int&gt;&amp; shape,</div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> <span class="keyword">const</span> std::vector&lt;std::vector&lt;int64_t&gt;&gt;&amp; strides,</div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> int64_t size_cap = std::numeric_limits&lt;int32_t&gt;::max());</div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span>std::tuple&lt;std::vector&lt;int&gt;, std::vector&lt;std::vector&lt;size_t&gt;&gt;&gt;</div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"><a class="line" href="namespacemlx_1_1core.html#af2895f9b0083efd8221275eb8cadccbe"> 53</a></span><a class="code hl_function" href="namespacemlx_1_1core.html#a38fe6ec5220d13d96c7dad7556d2b613">collapse_contiguous_dims</a>(</div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> <span class="keyword">const</span> std::vector&lt;int&gt;&amp; shape,</div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> <span class="keyword">const</span> std::vector&lt;std::vector&lt;size_t&gt;&gt;&amp; strides,</div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> <span class="keywordtype">size_t</span> size_cap = std::numeric_limits&lt;int32_t&gt;::max());</div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> </div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span><span class="keyword">inline</span> std::tuple&lt;std::vector&lt;int&gt;, std::vector&lt;std::vector&lt;size_t&gt;&gt;&gt;</div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span>... Arrays, <span class="keyword">typename</span> = <a class="code hl_typedef" href="namespacemlx_1_1core.html#af89751d79339f3e4d9318ea97d64d114">enable_for_arrays_t</a>&lt;Arrays...&gt;&gt;</div>
<div class="foldopen" id="foldopen00059" data-start="{" data-end="}">
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"><a class="line" href="namespacemlx_1_1core.html#a90e2b6edc0fe82230cb93f5ea39febb4"> 59</a></span><a class="code hl_function" href="namespacemlx_1_1core.html#a38fe6ec5220d13d96c7dad7556d2b613">collapse_contiguous_dims</a>(</div>
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> <span class="keyword">const</span> std::vector&lt;array&gt;&amp; xs,</div>
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> <span class="keywordtype">size_t</span> size_cap = std::numeric_limits&lt;int32_t&gt;::max()) {</div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> std::vector&lt;std::vector&lt;size_t&gt;&gt; strides;</div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; x : xs) {</div>
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> strides.emplace_back(x.strides());</div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> }</div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespacemlx_1_1core.html#a38fe6ec5220d13d96c7dad7556d2b613">collapse_contiguous_dims</a>(xs[0].shape(), strides, size_cap);</div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span>}</div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"><a class="line" href="namespacemlx_1_1core.html#ac813412cce77fc1340dcfefc6e099276"> 59</a></span><span class="keyword">inline</span> <span class="keyword">auto</span> <a class="code hl_function" href="namespacemlx_1_1core.html#a4d594bb84abeff4619d1abb77b20123e">collapse_contiguous_dims</a>(Arrays&amp;&amp;... xs) {</div>
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespacemlx_1_1core.html#a4d594bb84abeff4619d1abb77b20123e">collapse_contiguous_dims</a>(</div>
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> std::vector&lt;array&gt;{std::forward&lt;Arrays&gt;(xs)...});</div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span>}</div>
</div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> </div>
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span>... Arrays, <span class="keyword">typename</span> = <a class="code hl_typedef" href="namespacemlx_1_1core.html#af89751d79339f3e4d9318ea97d64d114">enable_for_arrays_t</a>&lt;Arrays...&gt;&gt;</div>
<div class="foldopen" id="foldopen00070" data-start="{" data-end="}">
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"><a class="line" href="namespacemlx_1_1core.html#ac813412cce77fc1340dcfefc6e099276"> 70</a></span><span class="keyword">inline</span> <span class="keyword">auto</span> <a class="code hl_function" href="namespacemlx_1_1core.html#a38fe6ec5220d13d96c7dad7556d2b613">collapse_contiguous_dims</a>(Arrays&amp;&amp;... xs) {</div>
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespacemlx_1_1core.html#a38fe6ec5220d13d96c7dad7556d2b613">collapse_contiguous_dims</a>(</div>
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> std::vector&lt;array&gt;{std::forward&lt;Arrays&gt;(xs)...});</div>
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span>}</div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> </div>
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span><span class="comment">// The single array version of the above.</span></div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"><a class="line" href="namespacemlx_1_1core.html#a79acfa8bc30c1f213bf893b5983eb666"> 65</a></span>std::pair&lt;Shape, Strides&gt; <a class="code hl_function" href="namespacemlx_1_1core.html#a4d594bb84abeff4619d1abb77b20123e">collapse_contiguous_dims</a>(</div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> <span class="keyword">const</span> <a class="code hl_typedef" href="namespacemlx_1_1core.html#a694e23f2d59606643728ad443d621416">Shape</a>&amp; shape,</div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> <span class="keyword">const</span> <a class="code hl_typedef" href="namespacemlx_1_1core.html#a79939016d0972ded7db37130da2a8b5c">Strides</a>&amp; strides,</div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> int64_t size_cap = std::numeric_limits&lt;int32_t&gt;::max());</div>
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"><a class="line" href="namespacemlx_1_1core.html#ab607cd6974ca6606826e785807156d6a"> 69</a></span>std::pair&lt;Shape, Strides&gt; <a class="code hl_function" href="namespacemlx_1_1core.html#a4d594bb84abeff4619d1abb77b20123e">collapse_contiguous_dims</a>(</div>
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> <span class="keyword">const</span> <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; a,</div>
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> int64_t size_cap = std::numeric_limits&lt;int32_t&gt;::max());</div>
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> </div>
<div class="foldopen" id="foldopen00073" data-start="{" data-end="};">
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1_contiguous_iterator.html"> 73</a></span><span class="keyword">struct </span><a class="code hl_function" href="structmlx_1_1core_1_1_contiguous_iterator.html#a727442ddff5fd3c3ebe09b000a01c9d3">ContiguousIterator</a> {</div>
<div class="foldopen" id="foldopen00074" data-start="{" data-end="}">
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1_contiguous_iterator.html#aad921dd422adb0a0f555e19a2f42239c"> 74</a></span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code hl_function" href="structmlx_1_1core_1_1_contiguous_iterator.html#aad921dd422adb0a0f555e19a2f42239c">step</a>() {</div>
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> <span class="keywordtype">int</span> dims = shape_.size();</div>
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> <span class="keywordflow">if</span> (dims == 0) {</div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> }</div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> <span class="keywordtype">int</span> i = dims - 1;</div>
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> <span class="keywordflow">while</span> (pos_[i] == (shape_[i] - 1) &amp;&amp; i &gt; 0) {</div>
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> pos_[i] = 0;</div>
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> <a class="code hl_variable" href="structmlx_1_1core_1_1_contiguous_iterator.html#a5ea4f0e40900e8c7e0830e1fb561af1a">loc</a> -= (shape_[i] - 1) * strides_[i];</div>
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> i--;</div>
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> }</div>
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> pos_[i]++;</div>
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> <a class="code hl_variable" href="structmlx_1_1core_1_1_contiguous_iterator.html#a5ea4f0e40900e8c7e0830e1fb561af1a">loc</a> += strides_[i];</div>
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> }</div>
</div>
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> </div>
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span><span class="comment">// The single array version of the above.</span></div>
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"><a class="line" href="namespacemlx_1_1core.html#aab3cc7f3808934ae0727b920eba231bd"> 76</a></span>std::pair&lt;std::vector&lt;int&gt;, std::vector&lt;int64_t&gt;&gt; <a class="code hl_function" href="namespacemlx_1_1core.html#a38fe6ec5220d13d96c7dad7556d2b613">collapse_contiguous_dims</a>(</div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> <span class="keyword">const</span> std::vector&lt;int&gt;&amp; shape,</div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> <span class="keyword">const</span> std::vector&lt;int64_t&gt;&amp; strides,</div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> int64_t size_cap = std::numeric_limits&lt;int32_t&gt;::max());</div>
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"><a class="line" href="namespacemlx_1_1core.html#a1e0cbcf109d32794ffc8efc7302ba9b0"> 80</a></span>std::pair&lt;std::vector&lt;int&gt;, std::vector&lt;size_t&gt;&gt; <a class="code hl_function" href="namespacemlx_1_1core.html#a38fe6ec5220d13d96c7dad7556d2b613">collapse_contiguous_dims</a>(</div>
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> <span class="keyword">const</span> std::vector&lt;int&gt;&amp; shape,</div>
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> <span class="keyword">const</span> std::vector&lt;size_t&gt;&amp; strides,</div>
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> <span class="keywordtype">size_t</span> size_cap = std::numeric_limits&lt;int32_t&gt;::max());</div>
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"><a class="line" href="namespacemlx_1_1core.html#a4ee50bfb240512d0c0ce151dfe2c74ef"> 84</a></span>std::pair&lt;std::vector&lt;int&gt;, std::vector&lt;size_t&gt;&gt; <a class="code hl_function" href="namespacemlx_1_1core.html#a38fe6ec5220d13d96c7dad7556d2b613">collapse_contiguous_dims</a>(</div>
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> <span class="keyword">const</span> <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; a,</div>
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> <span class="keywordtype">size_t</span> size_cap = std::numeric_limits&lt;int32_t&gt;::max());</div>
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> </div>
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> Str<span class="keywordtype">id</span>eT&gt;</div>
<div class="foldopen" id="foldopen00089" data-start="{" data-end="};">
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1_contiguous_iterator.html"> 89</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structmlx_1_1core_1_1_contiguous_iterator.html">ContiguousIterator</a> {</div>
<div class="foldopen" id="foldopen00090" data-start="{" data-end="}">
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1_contiguous_iterator.html#ae230bd52b70a0bbdf560090f8a6589ef"> 90</a></span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code hl_function" href="structmlx_1_1core_1_1_contiguous_iterator.html#ae230bd52b70a0bbdf560090f8a6589ef">step</a>() {</div>
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> <span class="keywordtype">int</span> dims = shape_.size();</div>
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> <span class="keywordflow">if</span> (dims == 0) {</div>
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> }</div>
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> <span class="keywordtype">int</span> i = dims - 1;</div>
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> <span class="keywordflow">while</span> (pos_[i] == (shape_[i] - 1) &amp;&amp; i &gt; 0) {</div>
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> pos_[i] = 0;</div>
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> <a class="code hl_variable" href="structmlx_1_1core_1_1_contiguous_iterator.html#a027b29e06d5cb467d961c019699514b1">loc</a> -= (shape_[i] - 1) * strides_[i];</div>
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> i--;</div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> }</div>
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> pos_[i]++;</div>
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> <a class="code hl_variable" href="structmlx_1_1core_1_1_contiguous_iterator.html#a027b29e06d5cb467d961c019699514b1">loc</a> += strides_[i];</div>
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> }</div>
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> </div>
<div class="foldopen" id="foldopen00089" data-start="{" data-end="}">
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1_contiguous_iterator.html#af08f009e0a72414d274db2ff1b2c7dd5"> 89</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="structmlx_1_1core_1_1_contiguous_iterator.html#af08f009e0a72414d274db2ff1b2c7dd5">seek</a>(int64_t n) {</div>
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> <a class="code hl_variable" href="structmlx_1_1core_1_1_contiguous_iterator.html#a5ea4f0e40900e8c7e0830e1fb561af1a">loc</a> = 0;</div>
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = shape_.size() - 1; i &gt;= 0; --i) {</div>
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> <span class="keyword">auto</span> q_and_r = ldiv(n, shape_[i]);</div>
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> <a class="code hl_variable" href="structmlx_1_1core_1_1_contiguous_iterator.html#a5ea4f0e40900e8c7e0830e1fb561af1a">loc</a> += q_and_r.rem * strides_[i];</div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> pos_[i] = q_and_r.rem;</div>
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> n = q_and_r.quot;</div>
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> }</div>
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> }</div>
</div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> </div>
<div class="foldopen" id="foldopen00105" data-start="{" data-end="}">
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1_contiguous_iterator.html#a24719ee9e8667885d29c2ad74445520c"> 105</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="structmlx_1_1core_1_1_contiguous_iterator.html#a24719ee9e8667885d29c2ad74445520c">seek</a>(StrideT n) {</div>
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> <a class="code hl_variable" href="structmlx_1_1core_1_1_contiguous_iterator.html#a027b29e06d5cb467d961c019699514b1">loc</a> = 0;</div>
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = shape_.size() - 1; i &gt;= 0; --i) {</div>
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> <span class="keyword">auto</span> q_and_r = ldiv(n, shape_[i]);</div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> <a class="code hl_variable" href="structmlx_1_1core_1_1_contiguous_iterator.html#a027b29e06d5cb467d961c019699514b1">loc</a> += q_and_r.rem * strides_[i];</div>
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> pos_[i] = q_and_r.rem;</div>
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> n = q_and_r.quot;</div>
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> }</div>
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> }</div>
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> </div>
<div class="foldopen" id="foldopen00099" data-start="{" data-end="}">
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1_contiguous_iterator.html#afa2e2bde9bfa57ac759bc7f5b881262a"> 99</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="structmlx_1_1core_1_1_contiguous_iterator.html#afa2e2bde9bfa57ac759bc7f5b881262a">reset</a>() {</div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> <a class="code hl_variable" href="structmlx_1_1core_1_1_contiguous_iterator.html#a5ea4f0e40900e8c7e0830e1fb561af1a">loc</a> = 0;</div>
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> std::fill(pos_.begin(), pos_.end(), 0);</div>
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> }</div>
</div>
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> </div>
<div class="foldopen" id="foldopen00115" data-start="{" data-end="}">
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1_contiguous_iterator.html#a56336d55be846426e9522f375fc11297"> 115</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="structmlx_1_1core_1_1_contiguous_iterator.html#a56336d55be846426e9522f375fc11297">reset</a>() {</div>
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> <a class="code hl_variable" href="structmlx_1_1core_1_1_contiguous_iterator.html#a027b29e06d5cb467d961c019699514b1">loc</a> = 0;</div>
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> std::fill(pos_.begin(), pos_.end(), 0);</div>
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> }</div>
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> </div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1_contiguous_iterator.html#a727442ddff5fd3c3ebe09b000a01c9d3"> 104</a></span> <a class="code hl_function" href="structmlx_1_1core_1_1_contiguous_iterator.html#a727442ddff5fd3c3ebe09b000a01c9d3">ContiguousIterator</a>() {};</div>
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> </div>
<div class="foldopen" id="foldopen00106" data-start="{" data-end="}">
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1_contiguous_iterator.html#aa82bec516eb54656c74fdaa74de1d735"> 106</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="structmlx_1_1core_1_1_contiguous_iterator.html#aa82bec516eb54656c74fdaa74de1d735">ContiguousIterator</a>(<span class="keyword">const</span> <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; a)</div>
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> : shape_(a.shape()), strides_(a.strides()) {</div>
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> <span class="keywordflow">if</span> (!shape_.empty()) {</div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> std::tie(shape_, strides_) = collapse_contiguous_dims(shape_, strides_);</div>
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> pos_ = Shape(shape_.size(), 0);</div>
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> }</div>
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> }</div>
</div>
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> </div>
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1_contiguous_iterator.html#a68794af4a442d3d8ac4647817af8e1f6"> 120</a></span> <a class="code hl_function" href="structmlx_1_1core_1_1_contiguous_iterator.html#a68794af4a442d3d8ac4647817af8e1f6">ContiguousIterator</a>() {};</div>
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> </div>
<div class="foldopen" id="foldopen00122" data-start="{" data-end="}">
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1_contiguous_iterator.html#a6cb378408b6f546eeb6ade1a4faafe3c"> 122</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="structmlx_1_1core_1_1_contiguous_iterator.html#a6cb378408b6f546eeb6ade1a4faafe3c">ContiguousIterator</a>(<span class="keyword">const</span> <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; a)</div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> : shape_(a.shape()), strides_(a.strides()) {</div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> <span class="keywordflow">if</span> (!shape_.empty()) {</div>
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> std::tie(shape_, strides_) = collapse_contiguous_dims(shape_, strides_);</div>
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> pos_ = std::vector&lt;int&gt;(shape_.size(), 0);</div>
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> }</div>
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> }</div>
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> </div>
<div class="foldopen" id="foldopen00114" data-start="{" data-end="}">
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1_contiguous_iterator.html#a8760380bff7462a886e7a4edd2955375"> 114</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="structmlx_1_1core_1_1_contiguous_iterator.html#a8760380bff7462a886e7a4edd2955375">ContiguousIterator</a>(</div>
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> <span class="keyword">const</span> <a class="code hl_typedef" href="namespacemlx_1_1core.html#a694e23f2d59606643728ad443d621416">Shape</a>&amp; shape,</div>
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> <span class="keyword">const</span> <a class="code hl_typedef" href="namespacemlx_1_1core.html#a79939016d0972ded7db37130da2a8b5c">Strides</a>&amp; strides,</div>
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> <span class="keywordtype">int</span> dims)</div>
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> : shape_(shape.begin(), shape.begin() + dims),</div>
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> strides_(strides.begin(), strides.begin() + dims) {</div>
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> <span class="keywordflow">if</span> (!shape_.empty()) {</div>
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> std::tie(shape_, strides_) = collapse_contiguous_dims(shape_, strides_);</div>
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> pos_ = Shape(shape_.size(), 0);</div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> }</div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> }</div>
</div>
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> </div>
<div class="foldopen" id="foldopen00130" data-start="{" data-end="}">
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1_contiguous_iterator.html#a16bdacb53f65b7284068cd49d4cba292"> 130</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="structmlx_1_1core_1_1_contiguous_iterator.html#a16bdacb53f65b7284068cd49d4cba292">ContiguousIterator</a>(</div>
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> <span class="keyword">const</span> std::vector&lt;int&gt;&amp; shape,</div>
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> <span class="keyword">const</span> std::vector&lt;StrideT&gt;&amp; strides,</div>
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> <span class="keywordtype">int</span> dims)</div>
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> : shape_(shape.begin(), shape.begin() + dims),</div>
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> strides_(strides.begin(), strides.begin() + dims) {</div>
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> <span class="keywordflow">if</span> (!shape_.empty()) {</div>
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> std::tie(shape_, strides_) = collapse_contiguous_dims(shape_, strides_);</div>
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> pos_ = std::vector&lt;int&gt;(shape_.size(), 0);</div>
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> }</div>
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> }</div>
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> </div>
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1_contiguous_iterator.html#a5ea4f0e40900e8c7e0830e1fb561af1a"> 126</a></span> int64_t <a class="code hl_variable" href="structmlx_1_1core_1_1_contiguous_iterator.html#a5ea4f0e40900e8c7e0830e1fb561af1a">loc</a>{0};</div>
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> </div>
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> <span class="keyword">private</span>:</div>
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> <a class="code hl_typedef" href="namespacemlx_1_1core.html#a694e23f2d59606643728ad443d621416">Shape</a> shape_;</div>
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> <a class="code hl_typedef" href="namespacemlx_1_1core.html#a79939016d0972ded7db37130da2a8b5c">Strides</a> strides_;</div>
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> <a class="code hl_typedef" href="namespacemlx_1_1core.html#a694e23f2d59606643728ad443d621416">Shape</a> pos_;</div>
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span>};</div>
</div>
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> </div>
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1_contiguous_iterator.html#a027b29e06d5cb467d961c019699514b1"> 142</a></span> StrideT <a class="code hl_variable" href="structmlx_1_1core_1_1_contiguous_iterator.html#a027b29e06d5cb467d961c019699514b1">loc</a>{0};</div>
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> </div>
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> <span class="keyword">private</span>:</div>
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> std::vector&lt;int&gt; shape_;</div>
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> std::vector&lt;StrideT&gt; strides_;</div>
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> std::vector&lt;int&gt; pos_;</div>
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span>};</div>
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> </div>
<div class="foldopen" id="foldopen00134" data-start="{" data-end="}">
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"><a class="line" href="namespacemlx_1_1core.html#ab2b50a44a9d3a06282be4611f5fc7447"> 134</a></span><span class="keyword">inline</span> <span class="keyword">auto</span> <a class="code hl_function" href="namespacemlx_1_1core.html#ab2b50a44a9d3a06282be4611f5fc7447">check_contiguity</a>(<span class="keyword">const</span> <a class="code hl_typedef" href="namespacemlx_1_1core.html#a694e23f2d59606643728ad443d621416">Shape</a>&amp; shape, <span class="keyword">const</span> <a class="code hl_typedef" href="namespacemlx_1_1core.html#a79939016d0972ded7db37130da2a8b5c">Strides</a>&amp; strides) {</div>
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> <span class="keywordtype">size_t</span> no_broadcast_data_size = 1;</div>
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> int64_t f_stride = 1;</div>
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> int64_t b_stride = 1;</div>
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> <span class="keywordtype">bool</span> is_row_contiguous = <span class="keyword">true</span>;</div>
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> <span class="keywordtype">bool</span> is_col_contiguous = <span class="keyword">true</span>;</div>
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> </div>
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0, ri = shape.size() - 1; ri &gt;= 0; i++, ri--) {</div>
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> is_col_contiguous &amp;= strides[i] == f_stride || shape[i] == 1;</div>
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> is_row_contiguous &amp;= strides[ri] == b_stride || shape[ri] == 1;</div>
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> f_stride *= shape[i];</div>
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> b_stride *= shape[ri];</div>
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> <span class="keywordflow">if</span> (strides[i] &gt; 0) {</div>
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> no_broadcast_data_size *= shape[i];</div>
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> }</div>
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> }</div>
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> </div>
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> <span class="keywordflow">return</span> std::make_tuple(</div>
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> no_broadcast_data_size, is_row_contiguous, is_col_contiguous);</div>
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span>}</div>
</div>
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> </div>
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> Str<span class="keywordtype">id</span>eT&gt;</div>
<div class="foldopen" id="foldopen00151" data-start="{" data-end="}">
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"><a class="line" href="namespacemlx_1_1core.html#a3ba20a804c306067b7023259429e0e48"> 151</a></span><span class="keyword">inline</span> <span class="keyword">auto</span> <a class="code hl_function" href="namespacemlx_1_1core.html#a3ba20a804c306067b7023259429e0e48">check_contiguity</a>(</div>
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> <span class="keyword">const</span> std::vector&lt;int&gt;&amp; shape,</div>
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> <span class="keyword">const</span> std::vector&lt;StrideT&gt;&amp; strides) {</div>
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> <span class="keywordtype">size_t</span> no_broadcast_data_size = 1;</div>
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> <span class="keywordtype">size_t</span> f_stride = 1;</div>
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> <span class="keywordtype">size_t</span> b_stride = 1;</div>
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> <span class="keywordtype">bool</span> is_row_contiguous = <span class="keyword">true</span>;</div>
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> <span class="keywordtype">bool</span> is_col_contiguous = <span class="keyword">true</span>;</div>
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> </div>
<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0, ri = shape.size() - 1; ri &gt;= 0; i++, ri--) {</div>
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> is_col_contiguous &amp;= strides[i] == f_stride || shape[i] == 1;</div>
<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> is_row_contiguous &amp;= strides[ri] == b_stride || shape[ri] == 1;</div>
<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> f_stride *= shape[i];</div>
<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> b_stride *= shape[ri];</div>
<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> <span class="keywordflow">if</span> (strides[i] &gt; 0) {</div>
<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> no_broadcast_data_size *= shape[i];</div>
<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> }</div>
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> }</div>
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> </div>
<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> <span class="keywordflow">return</span> std::make_tuple(</div>
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> no_broadcast_data_size, is_row_contiguous, is_col_contiguous);</div>
<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span>}</div>
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> </div>
<div class="foldopen" id="foldopen00155" data-start="{" data-end="}">
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"><a class="line" href="namespacemlx_1_1core.html#af650e831ce21759da1ac103037d08d84"> 155</a></span><span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="namespacemlx_1_1core.html#af650e831ce21759da1ac103037d08d84">is_donatable</a>(<span class="keyword">const</span> <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; in, <span class="keyword">const</span> <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) {</div>
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> <span class="keyword">constexpr</span> <span class="keywordtype">size_t</span> donation_extra = 16384;</div>
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> </div>
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> <span class="keywordflow">return</span> in.<a class="code hl_function" href="classmlx_1_1core_1_1array.html#a4677a404b5d191af20b52649225de087">is_donatable</a>() &amp;&amp; in.<a class="code hl_function" href="classmlx_1_1core_1_1array.html#af329d9432c92de87cbaa2de8454eefc0">itemsize</a>() == out.<a class="code hl_function" href="classmlx_1_1core_1_1array.html#af329d9432c92de87cbaa2de8454eefc0">itemsize</a>() &amp;&amp;</div>
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> in.<a class="code hl_function" href="classmlx_1_1core_1_1array.html#a914577c63755b2e862d2da68bbf8e3dd">buffer_size</a>() &lt;= out.<a class="code hl_function" href="classmlx_1_1core_1_1array.html#a387b67cd3ef5cfc1e749c371766c4a05">nbytes</a>() + donation_extra;</div>
<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span>}</div>
</div>
<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> </div>
<div class="foldopen" id="foldopen00174" data-start="{" data-end="}">
<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"><a class="line" href="namespacemlx_1_1core.html#af650e831ce21759da1ac103037d08d84"> 174</a></span><span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="namespacemlx_1_1core.html#af650e831ce21759da1ac103037d08d84">is_donatable</a>(<span class="keyword">const</span> <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; in, <span class="keyword">const</span> <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out) {</div>
<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> <span class="keyword">constexpr</span> <span class="keywordtype">size_t</span> donation_extra = 16384;</div>
<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> </div>
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> <span class="keywordflow">return</span> in.<a class="code hl_function" href="classmlx_1_1core_1_1array.html#a4677a404b5d191af20b52649225de087">is_donatable</a>() &amp;&amp; in.<a class="code hl_function" href="classmlx_1_1core_1_1array.html#af329d9432c92de87cbaa2de8454eefc0">itemsize</a>() == out.<a class="code hl_function" href="classmlx_1_1core_1_1array.html#af329d9432c92de87cbaa2de8454eefc0">itemsize</a>() &amp;&amp;</div>
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> in.<a class="code hl_function" href="classmlx_1_1core_1_1array.html#a914577c63755b2e862d2da68bbf8e3dd">buffer_size</a>() &lt;= out.<a class="code hl_function" href="classmlx_1_1core_1_1array.html#a387b67cd3ef5cfc1e749c371766c4a05">nbytes</a>() + donation_extra;</div>
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span>}</div>
</div>
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> </div>
<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"><a class="line" href="namespacemlx_1_1core.html#a830a47d8a317dffb0c88e5a7afe6aee2"> 181</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="namespacemlx_1_1core.html#a830a47d8a317dffb0c88e5a7afe6aee2">move_or_copy</a>(<span class="keyword">const</span> <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; in, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"><a class="line" href="namespacemlx_1_1core.html#aae1e770954edf1f9a35d19e0de4d857a"> 182</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="namespacemlx_1_1core.html#a830a47d8a317dffb0c88e5a7afe6aee2">move_or_copy</a>(</div>
<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> <span class="keyword">const</span> <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; in,</div>
<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out,</div>
<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> <span class="keyword">const</span> std::vector&lt;size_t&gt;&amp; strides,</div>
<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> <a class="code hl_struct" href="structmlx_1_1core_1_1array_1_1_flags.html">array::Flags</a> flags,</div>
<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> <span class="keywordtype">size_t</span> data_size,</div>
<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> <span class="keywordtype">size_t</span> offset = 0);</div>
<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> </div>
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span>} <span class="comment">// namespace mlx::core</span></div>
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> </div>
<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"><a class="line" href="namespacemlx_1_1core.html#a830a47d8a317dffb0c88e5a7afe6aee2"> 162</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="namespacemlx_1_1core.html#a830a47d8a317dffb0c88e5a7afe6aee2">move_or_copy</a>(<span class="keyword">const</span> <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; in, <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"><a class="line" href="namespacemlx_1_1core.html#a9fcb3711b150cb65c7778a35c51284b2"> 163</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="namespacemlx_1_1core.html#a830a47d8a317dffb0c88e5a7afe6aee2">move_or_copy</a>(</div>
<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> <span class="keyword">const</span> <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; in,</div>
<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out,</div>
<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> <span class="keyword">const</span> <a class="code hl_typedef" href="namespacemlx_1_1core.html#a79939016d0972ded7db37130da2a8b5c">Strides</a>&amp; strides,</div>
<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> <a class="code hl_struct" href="structmlx_1_1core_1_1array_1_1_flags.html">array::Flags</a> flags,</div>
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> <span class="keywordtype">size_t</span> data_size,</div>
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> <span class="keywordtype">size_t</span> offset = 0);</div>
<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> </div>
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"><a class="line" href="namespacemlx_1_1core.html#a6783cfc7dbe1a116ba84a3904a37145f"> 171</a></span>std::pair&lt;bool, Strides&gt; <a class="code hl_function" href="namespacemlx_1_1core.html#a6783cfc7dbe1a116ba84a3904a37145f">prepare_reshape</a>(<span class="keyword">const</span> <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; in, <span class="keyword">const</span> <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> </div>
<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"><a class="line" href="namespacemlx_1_1core.html#a88d88987bd8bf3ca46bf3b5e8aacce9d"> 173</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="namespacemlx_1_1core.html#a88d88987bd8bf3ca46bf3b5e8aacce9d">shared_buffer_reshape</a>(</div>
<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> <span class="keyword">const</span> <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; in,</div>
<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> <span class="keyword">const</span> <a class="code hl_typedef" href="namespacemlx_1_1core.html#a79939016d0972ded7db37130da2a8b5c">Strides</a>&amp; out_strides,</div>
<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> <a class="code hl_class" href="classmlx_1_1core_1_1array.html">array</a>&amp; out);</div>
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span>} <span class="comment">// namespace mlx::core</span></div>
<div class="ttc" id="aarray_8h_html"><div class="ttname"><a href="array_8h.html">array.h</a></div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1array_html"><div class="ttname"><a href="classmlx_1_1core_1_1array.html">mlx::core::array</a></div><div class="ttdef"><b>Definition</b> array.h:23</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1array_html_a0a20a6065ae71b64c1e3aa22a45fd8a1"><div class="ttname"><a href="classmlx_1_1core_1_1array.html#a0a20a6065ae71b64c1e3aa22a45fd8a1">mlx::core::array::flags</a></div><div class="ttdeci">const Flags &amp; flags() const</div><div class="ttdoc">Get the Flags bit-field.</div><div class="ttdef"><b>Definition</b> array.h:305</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1array_html_a1d06c76b0f3010a5c329d0e9e29e0597"><div class="ttname"><a href="classmlx_1_1core_1_1array.html#a1d06c76b0f3010a5c329d0e9e29e0597">mlx::core::array::shape</a></div><div class="ttdeci">const Shape &amp; shape() const</div><div class="ttdoc">The shape of the array as a vector of integers.</div><div class="ttdef"><b>Definition</b> array.h:102</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1array_html_a28cf1928f5ec2f972a94ff1c0e71187d"><div class="ttname"><a href="classmlx_1_1core_1_1array.html#a28cf1928f5ec2f972a94ff1c0e71187d">mlx::core::array::strides</a></div><div class="ttdeci">const Strides &amp; strides() const</div><div class="ttdoc">The strides of the array.</div><div class="ttdef"><b>Definition</b> array.h:116</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1array_html_a387b67cd3ef5cfc1e749c371766c4a05"><div class="ttname"><a href="classmlx_1_1core_1_1array.html#a387b67cd3ef5cfc1e749c371766c4a05">mlx::core::array::nbytes</a></div><div class="ttdeci">size_t nbytes() const</div><div class="ttdoc">The number of bytes in the array.</div><div class="ttdef"><b>Definition</b> array.h:92</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1array_html_a4677a404b5d191af20b52649225de087"><div class="ttname"><a href="classmlx_1_1core_1_1array.html#a4677a404b5d191af20b52649225de087">mlx::core::array::is_donatable</a></div><div class="ttdeci">bool is_donatable() const</div><div class="ttdoc">True indicates the arrays buffer is safe to reuse.</div><div class="ttdef"><b>Definition</b> array.h:270</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1array_html_a914577c63755b2e862d2da68bbf8e3dd"><div class="ttname"><a href="classmlx_1_1core_1_1array.html#a914577c63755b2e862d2da68bbf8e3dd">mlx::core::array::buffer_size</a></div><div class="ttdeci">size_t buffer_size() const</div><div class="ttdef"><b>Definition</b> array.h:330</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1array_html_af329d9432c92de87cbaa2de8454eefc0"><div class="ttname"><a href="classmlx_1_1core_1_1array.html#af329d9432c92de87cbaa2de8454eefc0">mlx::core::array::itemsize</a></div><div class="ttdeci">size_t itemsize() const</div><div class="ttdoc">The size of the array's datatype in bytes.</div><div class="ttdef"><b>Definition</b> array.h:82</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1array_html"><div class="ttname"><a href="classmlx_1_1core_1_1array.html">mlx::core::array</a></div><div class="ttdef"><b>Definition</b> array.h:24</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1array_html_a0a20a6065ae71b64c1e3aa22a45fd8a1"><div class="ttname"><a href="classmlx_1_1core_1_1array.html#a0a20a6065ae71b64c1e3aa22a45fd8a1">mlx::core::array::flags</a></div><div class="ttdeci">const Flags &amp; flags() const</div><div class="ttdoc">Get the Flags bit-field.</div><div class="ttdef"><b>Definition</b> array.h:306</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1array_html_a1d06c76b0f3010a5c329d0e9e29e0597"><div class="ttname"><a href="classmlx_1_1core_1_1array.html#a1d06c76b0f3010a5c329d0e9e29e0597">mlx::core::array::shape</a></div><div class="ttdeci">const Shape &amp; shape() const</div><div class="ttdoc">The shape of the array as a vector of integers.</div><div class="ttdef"><b>Definition</b> array.h:103</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1array_html_a28cf1928f5ec2f972a94ff1c0e71187d"><div class="ttname"><a href="classmlx_1_1core_1_1array.html#a28cf1928f5ec2f972a94ff1c0e71187d">mlx::core::array::strides</a></div><div class="ttdeci">const Strides &amp; strides() const</div><div class="ttdoc">The strides of the array.</div><div class="ttdef"><b>Definition</b> array.h:117</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1array_html_a387b67cd3ef5cfc1e749c371766c4a05"><div class="ttname"><a href="classmlx_1_1core_1_1array.html#a387b67cd3ef5cfc1e749c371766c4a05">mlx::core::array::nbytes</a></div><div class="ttdeci">size_t nbytes() const</div><div class="ttdoc">The number of bytes in the array.</div><div class="ttdef"><b>Definition</b> array.h:93</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1array_html_a4677a404b5d191af20b52649225de087"><div class="ttname"><a href="classmlx_1_1core_1_1array.html#a4677a404b5d191af20b52649225de087">mlx::core::array::is_donatable</a></div><div class="ttdeci">bool is_donatable() const</div><div class="ttdoc">True indicates the arrays buffer is safe to reuse.</div><div class="ttdef"><b>Definition</b> array.h:271</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1array_html_a914577c63755b2e862d2da68bbf8e3dd"><div class="ttname"><a href="classmlx_1_1core_1_1array.html#a914577c63755b2e862d2da68bbf8e3dd">mlx::core::array::buffer_size</a></div><div class="ttdeci">size_t buffer_size() const</div><div class="ttdef"><b>Definition</b> array.h:331</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1array_html_af329d9432c92de87cbaa2de8454eefc0"><div class="ttname"><a href="classmlx_1_1core_1_1array.html#af329d9432c92de87cbaa2de8454eefc0">mlx::core::array::itemsize</a></div><div class="ttdeci">size_t itemsize() const</div><div class="ttdoc">The size of the array&#39;s datatype in bytes.</div><div class="ttdef"><b>Definition</b> array.h:83</div></div>
<div class="ttc" id="anamespacemlx_1_1core_html"><div class="ttname"><a href="namespacemlx_1_1core.html">mlx::core</a></div><div class="ttdef"><b>Definition</b> allocator.h:7</div></div>
<div class="ttc" id="anamespacemlx_1_1core_html_a085379297e21d57f5b3aa38ae1c26070"><div class="ttname"><a href="namespacemlx_1_1core.html#a085379297e21d57f5b3aa38ae1c26070">mlx::core::make_contiguous_strides</a></div><div class="ttdeci">std::vector&lt; StrideT &gt; make_contiguous_strides(const std::vector&lt; int &gt; &amp;shape)</div><div class="ttdef"><b>Definition</b> utils.h:33</div></div>
<div class="ttc" id="anamespacemlx_1_1core_html_a38fe6ec5220d13d96c7dad7556d2b613"><div class="ttname"><a href="namespacemlx_1_1core.html#a38fe6ec5220d13d96c7dad7556d2b613">mlx::core::collapse_contiguous_dims</a></div><div class="ttdeci">std::tuple&lt; std::vector&lt; int &gt;, std::vector&lt; std::vector&lt; int64_t &gt; &gt; &gt; collapse_contiguous_dims(const std::vector&lt; int &gt; &amp;shape, const std::vector&lt; std::vector&lt; int64_t &gt; &gt; &amp;strides, int64_t size_cap=std::numeric_limits&lt; int32_t &gt;::max())</div></div>
<div class="ttc" id="anamespacemlx_1_1core_html_a3ba20a804c306067b7023259429e0e48"><div class="ttname"><a href="namespacemlx_1_1core.html#a3ba20a804c306067b7023259429e0e48">mlx::core::check_contiguity</a></div><div class="ttdeci">auto check_contiguity(const std::vector&lt; int &gt; &amp;shape, const std::vector&lt; StrideT &gt; &amp;strides)</div><div class="ttdef"><b>Definition</b> utils.h:151</div></div>
<div class="ttc" id="anamespacemlx_1_1core_html_a77657cb50fd9392f7f4c64e43843c2b3"><div class="ttname"><a href="namespacemlx_1_1core.html#a77657cb50fd9392f7f4c64e43843c2b3">mlx::core::elem_to_loc</a></div><div class="ttdeci">StrideT elem_to_loc(int elem, const std::vector&lt; int &gt; &amp;shape, const std::vector&lt; StrideT &gt; &amp;strides)</div><div class="ttdef"><b>Definition</b> utils.h:12</div></div>
<div class="ttc" id="anamespacemlx_1_1core_html_a449ef1148816a37bbc7ffd43d3c586a0"><div class="ttname"><a href="namespacemlx_1_1core.html#a449ef1148816a37bbc7ffd43d3c586a0">mlx::core::make_contiguous_strides</a></div><div class="ttdeci">Strides make_contiguous_strides(const Shape &amp;shape)</div><div class="ttdef"><b>Definition</b> utils.h:29</div></div>
<div class="ttc" id="anamespacemlx_1_1core_html_a4d594bb84abeff4619d1abb77b20123e"><div class="ttname"><a href="namespacemlx_1_1core.html#a4d594bb84abeff4619d1abb77b20123e">mlx::core::collapse_contiguous_dims</a></div><div class="ttdeci">std::tuple&lt; Shape, std::vector&lt; Strides &gt; &gt; collapse_contiguous_dims(const Shape &amp;shape, const std::vector&lt; Strides &gt; &amp;strides, int64_t size_cap=std::numeric_limits&lt; int32_t &gt;::max())</div></div>
<div class="ttc" id="anamespacemlx_1_1core_html_a59c0af06c5325c04ad8d69563c1c6b0a"><div class="ttname"><a href="namespacemlx_1_1core.html#a59c0af06c5325c04ad8d69563c1c6b0a">mlx::core::elem_to_loc</a></div><div class="ttdeci">int64_t elem_to_loc(int elem, const Shape &amp;shape, const Strides &amp;strides)</div><div class="ttdef"><b>Definition</b> utils.h:12</div></div>
<div class="ttc" id="anamespacemlx_1_1core_html_a6783cfc7dbe1a116ba84a3904a37145f"><div class="ttname"><a href="namespacemlx_1_1core.html#a6783cfc7dbe1a116ba84a3904a37145f">mlx::core::prepare_reshape</a></div><div class="ttdeci">std::pair&lt; bool, Strides &gt; prepare_reshape(const array &amp;in, const array &amp;out)</div></div>
<div class="ttc" id="anamespacemlx_1_1core_html_a694e23f2d59606643728ad443d621416"><div class="ttname"><a href="namespacemlx_1_1core.html#a694e23f2d59606643728ad443d621416">mlx::core::Shape</a></div><div class="ttdeci">std::vector&lt; ShapeElem &gt; Shape</div><div class="ttdef"><b>Definition</b> array.h:21</div></div>
<div class="ttc" id="anamespacemlx_1_1core_html_a79939016d0972ded7db37130da2a8b5c"><div class="ttname"><a href="namespacemlx_1_1core.html#a79939016d0972ded7db37130da2a8b5c">mlx::core::Strides</a></div><div class="ttdeci">std::vector&lt; int64_t &gt; Strides</div><div class="ttdef"><b>Definition</b> array.h:22</div></div>
<div class="ttc" id="anamespacemlx_1_1core_html_a830a47d8a317dffb0c88e5a7afe6aee2"><div class="ttname"><a href="namespacemlx_1_1core.html#a830a47d8a317dffb0c88e5a7afe6aee2">mlx::core::move_or_copy</a></div><div class="ttdeci">void move_or_copy(const array &amp;in, array &amp;out)</div></div>
<div class="ttc" id="anamespacemlx_1_1core_html_af650e831ce21759da1ac103037d08d84"><div class="ttname"><a href="namespacemlx_1_1core.html#af650e831ce21759da1ac103037d08d84">mlx::core::is_donatable</a></div><div class="ttdeci">bool is_donatable(const array &amp;in, const array &amp;out)</div><div class="ttdef"><b>Definition</b> utils.h:174</div></div>
<div class="ttc" id="anamespacemlx_1_1core_html_af89751d79339f3e4d9318ea97d64d114"><div class="ttname"><a href="namespacemlx_1_1core.html#af89751d79339f3e4d9318ea97d64d114">mlx::core::enable_for_arrays_t</a></div><div class="ttdeci">typename std::enable_if_t&lt; is_arrays_v&lt; T... &gt; &gt; enable_for_arrays_t</div><div class="ttdef"><b>Definition</b> array.h:614</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1_contiguous_iterator_html"><div class="ttname"><a href="structmlx_1_1core_1_1_contiguous_iterator.html">mlx::core::ContiguousIterator</a></div><div class="ttdef"><b>Definition</b> utils.h:89</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1_contiguous_iterator_html_a027b29e06d5cb467d961c019699514b1"><div class="ttname"><a href="structmlx_1_1core_1_1_contiguous_iterator.html#a027b29e06d5cb467d961c019699514b1">mlx::core::ContiguousIterator::loc</a></div><div class="ttdeci">StrideT loc</div><div class="ttdef"><b>Definition</b> utils.h:142</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1_contiguous_iterator_html_a16bdacb53f65b7284068cd49d4cba292"><div class="ttname"><a href="structmlx_1_1core_1_1_contiguous_iterator.html#a16bdacb53f65b7284068cd49d4cba292">mlx::core::ContiguousIterator::ContiguousIterator</a></div><div class="ttdeci">ContiguousIterator(const std::vector&lt; int &gt; &amp;shape, const std::vector&lt; StrideT &gt; &amp;strides, int dims)</div><div class="ttdef"><b>Definition</b> utils.h:130</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1_contiguous_iterator_html_a24719ee9e8667885d29c2ad74445520c"><div class="ttname"><a href="structmlx_1_1core_1_1_contiguous_iterator.html#a24719ee9e8667885d29c2ad74445520c">mlx::core::ContiguousIterator::seek</a></div><div class="ttdeci">void seek(StrideT n)</div><div class="ttdef"><b>Definition</b> utils.h:105</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1_contiguous_iterator_html_a56336d55be846426e9522f375fc11297"><div class="ttname"><a href="structmlx_1_1core_1_1_contiguous_iterator.html#a56336d55be846426e9522f375fc11297">mlx::core::ContiguousIterator::reset</a></div><div class="ttdeci">void reset()</div><div class="ttdef"><b>Definition</b> utils.h:115</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1_contiguous_iterator_html_a68794af4a442d3d8ac4647817af8e1f6"><div class="ttname"><a href="structmlx_1_1core_1_1_contiguous_iterator.html#a68794af4a442d3d8ac4647817af8e1f6">mlx::core::ContiguousIterator::ContiguousIterator</a></div><div class="ttdeci">ContiguousIterator()</div><div class="ttdef"><b>Definition</b> utils.h:120</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1_contiguous_iterator_html_a6cb378408b6f546eeb6ade1a4faafe3c"><div class="ttname"><a href="structmlx_1_1core_1_1_contiguous_iterator.html#a6cb378408b6f546eeb6ade1a4faafe3c">mlx::core::ContiguousIterator::ContiguousIterator</a></div><div class="ttdeci">ContiguousIterator(const array &amp;a)</div><div class="ttdef"><b>Definition</b> utils.h:122</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1_contiguous_iterator_html_ae230bd52b70a0bbdf560090f8a6589ef"><div class="ttname"><a href="structmlx_1_1core_1_1_contiguous_iterator.html#ae230bd52b70a0bbdf560090f8a6589ef">mlx::core::ContiguousIterator::step</a></div><div class="ttdeci">void step()</div><div class="ttdef"><b>Definition</b> utils.h:90</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1array_1_1_flags_html"><div class="ttname"><a href="structmlx_1_1core_1_1array_1_1_flags.html">mlx::core::array::Flags</a></div><div class="ttdef"><b>Definition</b> array.h:224</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1array_1_1_flags_html_a3170fa381dc7a90f6eabcc029bdf9bfd"><div class="ttname"><a href="structmlx_1_1core_1_1array_1_1_flags.html#a3170fa381dc7a90f6eabcc029bdf9bfd">mlx::core::array::Flags::row_contiguous</a></div><div class="ttdeci">bool row_contiguous</div><div class="ttdef"><b>Definition</b> array.h:236</div></div>
<div class="ttc" id="anamespacemlx_1_1core_html_a88d88987bd8bf3ca46bf3b5e8aacce9d"><div class="ttname"><a href="namespacemlx_1_1core.html#a88d88987bd8bf3ca46bf3b5e8aacce9d">mlx::core::shared_buffer_reshape</a></div><div class="ttdeci">void shared_buffer_reshape(const array &amp;in, const Strides &amp;out_strides, array &amp;out)</div></div>
<div class="ttc" id="anamespacemlx_1_1core_html_ab2b50a44a9d3a06282be4611f5fc7447"><div class="ttname"><a href="namespacemlx_1_1core.html#ab2b50a44a9d3a06282be4611f5fc7447">mlx::core::check_contiguity</a></div><div class="ttdeci">auto check_contiguity(const Shape &amp;shape, const Strides &amp;strides)</div><div class="ttdef"><b>Definition</b> utils.h:134</div></div>
<div class="ttc" id="anamespacemlx_1_1core_html_af650e831ce21759da1ac103037d08d84"><div class="ttname"><a href="namespacemlx_1_1core.html#af650e831ce21759da1ac103037d08d84">mlx::core::is_donatable</a></div><div class="ttdeci">bool is_donatable(const array &amp;in, const array &amp;out)</div><div class="ttdef"><b>Definition</b> utils.h:155</div></div>
<div class="ttc" id="anamespacemlx_1_1core_html_af89751d79339f3e4d9318ea97d64d114"><div class="ttname"><a href="namespacemlx_1_1core.html#af89751d79339f3e4d9318ea97d64d114">mlx::core::enable_for_arrays_t</a></div><div class="ttdeci">typename std::enable_if_t&lt; is_arrays_v&lt; T... &gt; &gt; enable_for_arrays_t</div><div class="ttdef"><b>Definition</b> array.h:615</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1_contiguous_iterator_html_a5ea4f0e40900e8c7e0830e1fb561af1a"><div class="ttname"><a href="structmlx_1_1core_1_1_contiguous_iterator.html#a5ea4f0e40900e8c7e0830e1fb561af1a">mlx::core::ContiguousIterator::loc</a></div><div class="ttdeci">int64_t loc</div><div class="ttdef"><b>Definition</b> utils.h:126</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1_contiguous_iterator_html_a727442ddff5fd3c3ebe09b000a01c9d3"><div class="ttname"><a href="structmlx_1_1core_1_1_contiguous_iterator.html#a727442ddff5fd3c3ebe09b000a01c9d3">mlx::core::ContiguousIterator::ContiguousIterator</a></div><div class="ttdeci">ContiguousIterator()</div><div class="ttdef"><b>Definition</b> utils.h:104</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1_contiguous_iterator_html_a8760380bff7462a886e7a4edd2955375"><div class="ttname"><a href="structmlx_1_1core_1_1_contiguous_iterator.html#a8760380bff7462a886e7a4edd2955375">mlx::core::ContiguousIterator::ContiguousIterator</a></div><div class="ttdeci">ContiguousIterator(const Shape &amp;shape, const Strides &amp;strides, int dims)</div><div class="ttdef"><b>Definition</b> utils.h:114</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1_contiguous_iterator_html_aa82bec516eb54656c74fdaa74de1d735"><div class="ttname"><a href="structmlx_1_1core_1_1_contiguous_iterator.html#aa82bec516eb54656c74fdaa74de1d735">mlx::core::ContiguousIterator::ContiguousIterator</a></div><div class="ttdeci">ContiguousIterator(const array &amp;a)</div><div class="ttdef"><b>Definition</b> utils.h:106</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1_contiguous_iterator_html_aad921dd422adb0a0f555e19a2f42239c"><div class="ttname"><a href="structmlx_1_1core_1_1_contiguous_iterator.html#aad921dd422adb0a0f555e19a2f42239c">mlx::core::ContiguousIterator::step</a></div><div class="ttdeci">void step()</div><div class="ttdef"><b>Definition</b> utils.h:74</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1_contiguous_iterator_html_af08f009e0a72414d274db2ff1b2c7dd5"><div class="ttname"><a href="structmlx_1_1core_1_1_contiguous_iterator.html#af08f009e0a72414d274db2ff1b2c7dd5">mlx::core::ContiguousIterator::seek</a></div><div class="ttdeci">void seek(int64_t n)</div><div class="ttdef"><b>Definition</b> utils.h:89</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1_contiguous_iterator_html_afa2e2bde9bfa57ac759bc7f5b881262a"><div class="ttname"><a href="structmlx_1_1core_1_1_contiguous_iterator.html#afa2e2bde9bfa57ac759bc7f5b881262a">mlx::core::ContiguousIterator::reset</a></div><div class="ttdeci">void reset()</div><div class="ttdef"><b>Definition</b> utils.h:99</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1array_1_1_flags_html"><div class="ttname"><a href="structmlx_1_1core_1_1array_1_1_flags.html">mlx::core::array::Flags</a></div><div class="ttdef"><b>Definition</b> array.h:225</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1array_1_1_flags_html_a3170fa381dc7a90f6eabcc029bdf9bfd"><div class="ttname"><a href="structmlx_1_1core_1_1array_1_1_flags.html#a3170fa381dc7a90f6eabcc029bdf9bfd">mlx::core::array::Flags::row_contiguous</a></div><div class="ttdeci">bool row_contiguous</div><div class="ttdef"><b>Definition</b> array.h:237</div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0
</small></address>
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_f149b24a1b5be11cd70151abe517e3f8.html">common</a></li><li class="navelem"><a class="el" href="backend_2common_2utils_8h.html">utils.h</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.1 </li>
</ul>
</div>
</body>
</html>
+43 -67
View File
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.12.0"/>
<meta name="generator" content="Doxygen 1.13.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MLX: mlx/backend/metal/allocator.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -11,11 +11,18 @@
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
@@ -28,12 +35,24 @@
<div id="projectname">MLX
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.12.0 -->
<!-- Generated by Doxygen 1.13.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
@@ -44,22 +63,23 @@ var searchBox = new SearchBox("searchBox", "search/",'.html');
$(function() { codefold.init(0); });
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search',false);
$(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){ initResizable(false); });
$(function(){initNavTree('backend_2metal_2allocator_8h.html',''); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
@@ -81,12 +101,6 @@ $(function(){ initResizable(false); });
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_d0c977ea65824390717cdb7efc36c157.html">metal</a></li> </ul>
</div>
</div><!-- top -->
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#nested-classes">Classes</a> &#124;
@@ -108,6 +122,8 @@ $(function(){ initResizable(false); });
Classes</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmlx_1_1core_1_1metal_1_1_metal_allocator.html">mlx::core::metal::MetalAllocator</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classmlx_1_1core_1_1metal_1_1_buffer.html">mlx::core::metal::Buffer</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="namespaces" name="namespaces"></a>
Namespaces</h2></td></tr>
@@ -123,54 +139,14 @@ Functions</h2></td></tr>
<tr class="memitem:a74b3558bd518aecde6b14b0ba5e1a0d5" id="r_a74b3558bd518aecde6b14b0ba5e1a0d5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classmlx_1_1core_1_1metal_1_1_metal_allocator.html">MetalAllocator</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacemlx_1_1core_1_1metal.html#a74b3558bd518aecde6b14b0ba5e1a0d5">mlx::core::metal::allocator</a> ()</td></tr>
<tr class="separator:a74b3558bd518aecde6b14b0ba5e1a0d5"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<h2 class="groupheader">Variable Documentation</h2>
<a id="a15aa5cc1baf29be08d55cca88509e697" name="a15aa5cc1baf29be08d55cca88509e697"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a15aa5cc1baf29be08d55cca88509e697">&#9670;&#160;</a></span>buf</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">MTL::Buffer* buf</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="ae704ab07eac590091daa5fc4aec7bddb" name="ae704ab07eac590091daa5fc4aec7bddb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae704ab07eac590091daa5fc4aec7bddb">&#9670;&#160;</a></span>next</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">BufferHolder* next</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="aadb9e075b376adbd9ff6ba23663113bd" name="aadb9e075b376adbd9ff6ba23663113bd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aadb9e075b376adbd9ff6ba23663113bd">&#9670;&#160;</a></span>prev</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">BufferHolder* prev</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0
</small></address>
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_d0c977ea65824390717cdb7efc36c157.html">metal</a></li><li class="navelem"><a class="el" href="backend_2metal_2allocator_8h.html">allocator.h</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.1 </li>
</ul>
</div>
</body>
</html>
+6
View File
@@ -0,0 +1,6 @@
var backend_2metal_2allocator_8h =
[
[ "mlx::core::metal::MetalAllocator", "classmlx_1_1core_1_1metal_1_1_metal_allocator.html", "classmlx_1_1core_1_1metal_1_1_metal_allocator" ],
[ "mlx::core::metal::Buffer", "classmlx_1_1core_1_1metal_1_1_buffer.html", "classmlx_1_1core_1_1metal_1_1_buffer" ],
[ "mlx::core::metal::allocator", "namespacemlx_1_1core_1_1metal.html#a74b3558bd518aecde6b14b0ba5e1a0d5", null ]
];
+59 -43
View File
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.12.0"/>
<meta name="generator" content="Doxygen 1.13.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MLX: mlx/backend/metal/allocator.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -11,11 +11,18 @@
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
@@ -28,12 +35,24 @@
<div id="projectname">MLX
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.12.0 -->
<!-- Generated by Doxygen 1.13.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
@@ -44,22 +63,23 @@ var searchBox = new SearchBox("searchBox", "search/",'.html');
$(function() { codefold.init(0); });
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search',false);
$(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){ initResizable(false); });
$(function(){initNavTree('backend_2metal_2allocator_8h_source.html',''); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
@@ -81,12 +101,6 @@ $(function(){ initResizable(false); });
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_d0c977ea65824390717cdb7efc36c157.html">metal</a></li> </ul>
</div>
</div><!-- top -->
<div id="doc-content">
<div class="header">
<div class="headertitle"><div class="title">allocator.h</div></div>
</div><!--header-->
@@ -116,21 +130,21 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> ~BufferCache();</div>
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> </div>
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> MTL::Buffer* reuse_from_cache(<span class="keywordtype">size_t</span> size);</div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> <span class="keywordtype">void</span> recycle_to_cache(MTL::Buffer* <a class="code hl_variable" href="backend_2metal_2allocator_8h.html#a15aa5cc1baf29be08d55cca88509e697">buf</a>);</div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> <span class="keywordtype">void</span> release_cached_buffers(<span class="keywordtype">size_t</span> min_bytes_to_free);</div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> <span class="keywordtype">void</span> recycle_to_cache(MTL::Buffer* buf);</div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> <span class="keywordtype">int</span> release_cached_buffers(<span class="keywordtype">size_t</span> min_bytes_to_free);</div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> <span class="keywordtype">size_t</span> cache_size() {</div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> <span class="keywordflow">return</span> pool_size_;</div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> }</div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> <span class="keywordtype">void</span> clear();</div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> <span class="keywordtype">int</span> clear();</div>
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> </div>
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> <span class="keyword">private</span>:</div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> <span class="keyword">struct </span>BufferHolder {</div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> BufferHolder(MTL::Buffer* buf_) : <a class="code hl_variable" href="backend_2metal_2allocator_8h.html#a15aa5cc1baf29be08d55cca88509e697">buf</a>(buf_), <a class="code hl_variable" href="backend_2metal_2allocator_8h.html#aadb9e075b376adbd9ff6ba23663113bd">prev</a>(<span class="keyword">nullptr</span>), <a class="code hl_variable" href="backend_2metal_2allocator_8h.html#ae704ab07eac590091daa5fc4aec7bddb">next</a>(<span class="keyword">nullptr</span>) {}</div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> BufferHolder(MTL::Buffer* buf_) : buf(buf_), prev(<span class="keyword">nullptr</span>), next(<span class="keyword">nullptr</span>) {}</div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> </div>
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"><a class="line" href="backend_2metal_2allocator_8h.html#aadb9e075b376adbd9ff6ba23663113bd"> 37</a></span> BufferHolder* <a class="code hl_variable" href="backend_2metal_2allocator_8h.html#aadb9e075b376adbd9ff6ba23663113bd">prev</a>;</div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"><a class="line" href="backend_2metal_2allocator_8h.html#ae704ab07eac590091daa5fc4aec7bddb"> 38</a></span> BufferHolder* <a class="code hl_variable" href="backend_2metal_2allocator_8h.html#ae704ab07eac590091daa5fc4aec7bddb">next</a>;</div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"><a class="line" href="backend_2metal_2allocator_8h.html#a15aa5cc1baf29be08d55cca88509e697"> 39</a></span> MTL::Buffer* <a class="code hl_variable" href="backend_2metal_2allocator_8h.html#a15aa5cc1baf29be08d55cca88509e697">buf</a>;</div>
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> BufferHolder* prev;</div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> BufferHolder* next;</div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> MTL::Buffer* buf;</div>
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> };</div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> </div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> <span class="keywordtype">void</span> add_at_head(BufferHolder* to_add);</div>
@@ -147,7 +161,7 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span>} <span class="comment">// namespace</span></div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> </div>
<div class="foldopen" id="foldopen00055" data-start="{" data-end="};">
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1metal_1_1_metal_allocator.html"> 55</a></span><span class="keyword">class </span><a class="code hl_class" href="classmlx_1_1core_1_1metal_1_1_metal_allocator.html">MetalAllocator</a> : <span class="keyword">public</span> <a class="code hl_class" href="classmlx_1_1core_1_1allocator_1_1_allocator.html">allocator::Allocator</a> {</div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1metal_1_1_metal_allocator.html"> 55</a></span><span class="keyword">class </span>MetalAllocator : <span class="keyword">public</span> <a class="code hl_class" href="classmlx_1_1core_1_1allocator_1_1_allocator.html">allocator::Allocator</a> {</div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1metal_1_1_metal_allocator.html#a6c0feb9b1ff9977f76c69745393944bc"> 58</a></span> <span class="keyword">virtual</span> <a class="code hl_class" href="classmlx_1_1core_1_1allocator_1_1_buffer.html">Buffer</a> <a class="code hl_function" href="classmlx_1_1core_1_1metal_1_1_metal_allocator.html#a6c0feb9b1ff9977f76c69745393944bc">malloc</a>(<span class="keywordtype">size_t</span> <a class="code hl_function" href="classmlx_1_1core_1_1metal_1_1_metal_allocator.html#a51f6587e8065be16f0418ca42a796e05">size</a>, <span class="keywordtype">bool</span> allow_swap = <span class="keyword">false</span>) <span class="keyword">override</span>;</div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1metal_1_1_metal_allocator.html#a109a0a37fb0b3be381a62dc3b1a54bf0"> 59</a></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classmlx_1_1core_1_1metal_1_1_metal_allocator.html#a109a0a37fb0b3be381a62dc3b1a54bf0">free</a>(<a class="code hl_class" href="classmlx_1_1core_1_1allocator_1_1_buffer.html">Buffer</a> buffer) <span class="keyword">override</span>;</div>
@@ -180,8 +194,8 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> </div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> <span class="keyword">private</span>:</div>
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> MTL::Device* device_;</div>
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> <a class="code hl_class" href="classmlx_1_1core_1_1metal_1_1_metal_allocator.html">MetalAllocator</a>();</div>
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1metal_1_1_metal_allocator.html#afa1c5a725309caff163c492b5b84491e"> 82</a></span> <span class="keyword">friend</span> <a class="code hl_class" href="classmlx_1_1core_1_1metal_1_1_metal_allocator.html">MetalAllocator</a>&amp; <a class="code hl_friend" href="classmlx_1_1core_1_1metal_1_1_metal_allocator.html#afa1c5a725309caff163c492b5b84491e">allocator</a>();</div>
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> MetalAllocator();</div>
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1metal_1_1_metal_allocator.html#afa1c5a725309caff163c492b5b84491e"> 82</a></span> <span class="keyword">friend</span> MetalAllocator&amp; <a class="code hl_friend" href="classmlx_1_1core_1_1metal_1_1_metal_allocator.html#afa1c5a725309caff163c492b5b84491e">allocator</a>();</div>
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> </div>
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> <span class="comment">// Caching allocator</span></div>
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> BufferCache buffer_cache_;</div>
@@ -196,19 +210,18 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> <span class="keywordtype">size_t</span> max_pool_size_;</div>
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> <span class="keywordtype">size_t</span> wired_limit_{0};</div>
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> <span class="keywordtype">bool</span> relaxed_{<span class="keyword">true</span>};</div>
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> </div>
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> std::mutex mutex_;</div>
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span>};</div>
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> <span class="keywordtype">size_t</span> num_resources_{0};</div>
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> <span class="keywordtype">size_t</span> resource_limit_{0};</div>
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> </div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> std::mutex mutex_;</div>
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span>};</div>
</div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> </div>
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"><a class="line" href="namespacemlx_1_1core_1_1metal.html#a74b3558bd518aecde6b14b0ba5e1a0d5"> 101</a></span><a class="code hl_class" href="classmlx_1_1core_1_1metal_1_1_metal_allocator.html">MetalAllocator</a>&amp; <a class="code hl_function" href="namespacemlx_1_1core_1_1metal.html#a74b3558bd518aecde6b14b0ba5e1a0d5">allocator</a>();</div>
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> </div>
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span>} <span class="comment">// namespace mlx::core::metal</span></div>
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"><a class="line" href="namespacemlx_1_1core_1_1metal.html#a74b3558bd518aecde6b14b0ba5e1a0d5"> 103</a></span><a class="code hl_class" href="classmlx_1_1core_1_1metal_1_1_metal_allocator.html">MetalAllocator</a>&amp; <a class="code hl_function" href="namespacemlx_1_1core_1_1metal.html#a74b3558bd518aecde6b14b0ba5e1a0d5">allocator</a>();</div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> </div>
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span>} <span class="comment">// namespace mlx::core::metal</span></div>
</div>
<div class="ttc" id="aallocator_8h_html"><div class="ttname"><a href="allocator_8h.html">allocator.h</a></div></div>
<div class="ttc" id="abackend_2metal_2allocator_8h_html_a15aa5cc1baf29be08d55cca88509e697"><div class="ttname"><a href="backend_2metal_2allocator_8h.html#a15aa5cc1baf29be08d55cca88509e697">buf</a></div><div class="ttdeci">MTL::Buffer * buf</div><div class="ttdef"><b>Definition</b> allocator.h:39</div></div>
<div class="ttc" id="abackend_2metal_2allocator_8h_html_aadb9e075b376adbd9ff6ba23663113bd"><div class="ttname"><a href="backend_2metal_2allocator_8h.html#aadb9e075b376adbd9ff6ba23663113bd">prev</a></div><div class="ttdeci">BufferHolder * prev</div><div class="ttdef"><b>Definition</b> allocator.h:37</div></div>
<div class="ttc" id="abackend_2metal_2allocator_8h_html_ae704ab07eac590091daa5fc4aec7bddb"><div class="ttname"><a href="backend_2metal_2allocator_8h.html#ae704ab07eac590091daa5fc4aec7bddb">next</a></div><div class="ttdeci">BufferHolder * next</div><div class="ttdef"><b>Definition</b> allocator.h:38</div></div>
<div class="ttc" id="abackend_2metal_2device_8h_html"><div class="ttname"><a href="backend_2metal_2device_8h.html">device.h</a></div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1allocator_1_1_allocator_html"><div class="ttname"><a href="classmlx_1_1core_1_1allocator_1_1_allocator.html">mlx::core::allocator::Allocator</a></div><div class="ttdef"><b>Definition</b> allocator.h:39</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1allocator_1_1_buffer_html"><div class="ttname"><a href="classmlx_1_1core_1_1allocator_1_1_buffer.html">mlx::core::allocator::Buffer</a></div><div class="ttdef"><b>Definition</b> allocator.h:12</div></div>
@@ -231,10 +244,13 @@ $(function(){ initResizable(false); });
<div class="ttc" id="anamespacemlx_1_1core_1_1metal_html_a910797b74824e6ee576fbb533dee8b57"><div class="ttname"><a href="namespacemlx_1_1core_1_1metal.html#a910797b74824e6ee576fbb533dee8b57">mlx::core::metal::device</a></div><div class="ttdeci">Device &amp; device(mlx::core::Device)</div></div>
<div class="ttc" id="aresident_8h_html"><div class="ttname"><a href="resident_8h.html">resident.h</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0
</small></address>
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_d0c977ea65824390717cdb7efc36c157.html">metal</a></li><li class="navelem"><a class="el" href="backend_2metal_2allocator_8h.html">allocator.h</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.1 </li>
</ul>
</div>
</body>
</html>
+41 -24
View File
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.12.0"/>
<meta name="generator" content="Doxygen 1.13.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MLX: mlx/backend/metal/device.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -11,11 +11,18 @@
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
@@ -28,12 +35,24 @@
<div id="projectname">MLX
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.12.0 -->
<!-- Generated by Doxygen 1.13.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
@@ -44,22 +63,23 @@ var searchBox = new SearchBox("searchBox", "search/",'.html');
$(function() { codefold.init(0); });
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search',false);
$(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){ initResizable(false); });
$(function(){initNavTree('backend_2metal_2device_8h.html',''); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
@@ -81,12 +101,6 @@ $(function(){ initResizable(false); });
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_d0c977ea65824390717cdb7efc36c157.html">metal</a></li> </ul>
</div>
</div><!-- top -->
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#nested-classes">Classes</a> &#124;
@@ -145,10 +159,13 @@ Functions</h2></td></tr>
<tr class="separator:a910797b74824e6ee576fbb533dee8b57"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0
</small></address>
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_d0c977ea65824390717cdb7efc36c157.html">metal</a></li><li class="navelem"><a class="el" href="backend_2metal_2device_8h.html">device.h</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.1 </li>
</ul>
</div>
</body>
</html>
+11
View File
@@ -0,0 +1,11 @@
var backend_2metal_2device_8h =
[
[ "mlx::core::metal::CommandEncoder", "structmlx_1_1core_1_1metal_1_1_command_encoder.html", "structmlx_1_1core_1_1metal_1_1_command_encoder" ],
[ "mlx::core::metal::CommandEncoder::ConcurrentContext", "structmlx_1_1core_1_1metal_1_1_command_encoder_1_1_concurrent_context.html", "structmlx_1_1core_1_1metal_1_1_command_encoder_1_1_concurrent_context" ],
[ "mlx::core::metal::Fence", "structmlx_1_1core_1_1metal_1_1_fence.html", "structmlx_1_1core_1_1metal_1_1_fence" ],
[ "mlx::core::metal::DeviceStream", "structmlx_1_1core_1_1metal_1_1_device_stream.html", "structmlx_1_1core_1_1metal_1_1_device_stream" ],
[ "mlx::core::metal::Device", "classmlx_1_1core_1_1metal_1_1_device.html", "classmlx_1_1core_1_1metal_1_1_device" ],
[ "mlx::core::metal::MTLFCList", "namespacemlx_1_1core_1_1metal.html#a616e09a1ef321d527770721cef264c54", null ],
[ "mlx::core::metal::device", "namespacemlx_1_1core_1_1metal.html#a910797b74824e6ee576fbb533dee8b57", null ],
[ "mlx::core::metal::get_colocated_mtllib_path", "namespacemlx_1_1core_1_1metal.html#a5fd6ba2040e53a254b9d71ae7ebd315f", null ]
];
+53 -37
View File
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.12.0"/>
<meta name="generator" content="Doxygen 1.13.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MLX: mlx/backend/metal/device.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -11,11 +11,18 @@
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
@@ -28,12 +35,24 @@
<div id="projectname">MLX
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.12.0 -->
<!-- Generated by Doxygen 1.13.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
@@ -44,22 +63,23 @@ var searchBox = new SearchBox("searchBox", "search/",'.html');
$(function() { codefold.init(0); });
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search',false);
$(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){ initResizable(false); });
$(function(){initNavTree('backend_2metal_2device_8h_source.html',''); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
@@ -81,12 +101,6 @@ $(function(){ initResizable(false); });
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_d0c977ea65824390717cdb7efc36c157.html">metal</a></li> </ul>
</div>
</div><!-- top -->
<div id="doc-content">
<div class="header">
<div class="headertitle"><div class="title">device.h</div></div>
</div><!--header-->
@@ -134,15 +148,15 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> std::vector&lt;std::tuple&lt;const void*, MTL::DataType, NS::UInteger&gt;&gt;;</div>
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> </div>
<div class="foldopen" id="foldopen00041" data-start="{" data-end="};">
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1metal_1_1_command_encoder.html"> 41</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structmlx_1_1core_1_1metal_1_1_command_encoder.html">CommandEncoder</a> {</div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1metal_1_1_command_encoder.html"> 41</a></span><span class="keyword">struct </span><a class="code hl_function" href="structmlx_1_1core_1_1metal_1_1_command_encoder.html#a2334774486f447213ee997e55c2e52a3">CommandEncoder</a> {</div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1metal_1_1_command_encoder.html#a2334774486f447213ee997e55c2e52a3"> 42</a></span> <a class="code hl_function" href="structmlx_1_1core_1_1metal_1_1_command_encoder.html#a2334774486f447213ee997e55c2e52a3">CommandEncoder</a>(MTL::CommandBuffer* cbuf);</div>
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1metal_1_1_command_encoder.html#ac68ca977b5bde5434284ce7979647f14"> 43</a></span> <a class="code hl_function" href="structmlx_1_1core_1_1metal_1_1_command_encoder.html#ac68ca977b5bde5434284ce7979647f14">CommandEncoder</a>(<span class="keyword">const</span> <a class="code hl_struct" href="structmlx_1_1core_1_1metal_1_1_command_encoder.html">CommandEncoder</a>&amp;) = <span class="keyword">delete</span>;</div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1metal_1_1_command_encoder.html#a3f42a1362b4a513fa89e7b3dcc570a8e"> 44</a></span> <a class="code hl_struct" href="structmlx_1_1core_1_1metal_1_1_command_encoder.html">CommandEncoder</a>&amp; <a class="code hl_function" href="structmlx_1_1core_1_1metal_1_1_command_encoder.html#a3f42a1362b4a513fa89e7b3dcc570a8e">operator=</a>(<span class="keyword">const</span> <a class="code hl_struct" href="structmlx_1_1core_1_1metal_1_1_command_encoder.html">CommandEncoder</a>&amp;) = <span class="keyword">delete</span>;</div>
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1metal_1_1_command_encoder.html#ac68ca977b5bde5434284ce7979647f14"> 43</a></span> <a class="code hl_function" href="structmlx_1_1core_1_1metal_1_1_command_encoder.html#ac68ca977b5bde5434284ce7979647f14">CommandEncoder</a>(<span class="keyword">const</span> <a class="code hl_function" href="structmlx_1_1core_1_1metal_1_1_command_encoder.html#a2334774486f447213ee997e55c2e52a3">CommandEncoder</a>&amp;) = <span class="keyword">delete</span>;</div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1metal_1_1_command_encoder.html#a3f42a1362b4a513fa89e7b3dcc570a8e"> 44</a></span> <a class="code hl_function" href="structmlx_1_1core_1_1metal_1_1_command_encoder.html#a2334774486f447213ee997e55c2e52a3">CommandEncoder</a>&amp; <a class="code hl_function" href="structmlx_1_1core_1_1metal_1_1_command_encoder.html#a3f42a1362b4a513fa89e7b3dcc570a8e">operator=</a>(<span class="keyword">const</span> <a class="code hl_function" href="structmlx_1_1core_1_1metal_1_1_command_encoder.html#a2334774486f447213ee997e55c2e52a3">CommandEncoder</a>&amp;) = <span class="keyword">delete</span>;</div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> </div>
<div class="foldopen" id="foldopen00046" data-start="{" data-end="};">
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1metal_1_1_command_encoder_1_1_concurrent_context.html"> 46</a></span> <span class="keyword">struct </span><a class="code hl_struct" href="structmlx_1_1core_1_1metal_1_1_command_encoder_1_1_concurrent_context.html">ConcurrentContext</a> {</div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1metal_1_1_command_encoder_1_1_concurrent_context.html"> 46</a></span> <span class="keyword">struct </span><a class="code hl_function" href="structmlx_1_1core_1_1metal_1_1_command_encoder_1_1_concurrent_context.html#aee044d7729739c96e845823f9ecc5174">ConcurrentContext</a> {</div>
<div class="foldopen" id="foldopen00047" data-start="{" data-end="}">
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1metal_1_1_command_encoder_1_1_concurrent_context.html#aee044d7729739c96e845823f9ecc5174"> 47</a></span> <a class="code hl_function" href="structmlx_1_1core_1_1metal_1_1_command_encoder_1_1_concurrent_context.html#aee044d7729739c96e845823f9ecc5174">ConcurrentContext</a>(<a class="code hl_struct" href="structmlx_1_1core_1_1metal_1_1_command_encoder.html">CommandEncoder</a>&amp; enc) : enc(enc) {</div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1metal_1_1_command_encoder_1_1_concurrent_context.html#aee044d7729739c96e845823f9ecc5174"> 47</a></span> <a class="code hl_function" href="structmlx_1_1core_1_1metal_1_1_command_encoder_1_1_concurrent_context.html#aee044d7729739c96e845823f9ecc5174">ConcurrentContext</a>(<a class="code hl_function" href="structmlx_1_1core_1_1metal_1_1_command_encoder.html#a2334774486f447213ee997e55c2e52a3">CommandEncoder</a>&amp; enc) : enc(enc) {</div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> enc.concurrent_ = <span class="keyword">true</span>;</div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> }</div>
</div>
@@ -156,7 +170,7 @@ $(function(){ initResizable(false); });
</div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> </div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> <span class="keyword">private</span>:</div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> <a class="code hl_struct" href="structmlx_1_1core_1_1metal_1_1_command_encoder.html">CommandEncoder</a>&amp; enc;</div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> <a class="code hl_function" href="structmlx_1_1core_1_1metal_1_1_command_encoder.html#a2334774486f447213ee997e55c2e52a3">CommandEncoder</a>&amp; enc;</div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> };</div>
</div>
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> </div>
@@ -245,7 +259,7 @@ $(function(){ initResizable(false); });
</div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> </div>
<div class="foldopen" id="foldopen00124" data-start="{" data-end="};">
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1metal_1_1_fence.html"> 124</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structmlx_1_1core_1_1metal_1_1_fence.html">Fence</a> {</div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1metal_1_1_fence.html"> 124</a></span><span class="keyword">struct </span><a class="code hl_function" href="structmlx_1_1core_1_1metal_1_1_fence.html#a30bee4957ae595e04922952a8010fc79">Fence</a> {</div>
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1metal_1_1_fence.html#a30bee4957ae595e04922952a8010fc79"> 125</a></span> <a class="code hl_function" href="structmlx_1_1core_1_1metal_1_1_fence.html#a30bee4957ae595e04922952a8010fc79">Fence</a>(MTL::Fence* <a class="code hl_variable" href="structmlx_1_1core_1_1metal_1_1_fence.html#aeccd8f2b81418ae9fc446ae2b6e15b87">fence</a>) : <a class="code hl_variable" href="structmlx_1_1core_1_1metal_1_1_fence.html#aeccd8f2b81418ae9fc446ae2b6e15b87">fence</a>(<a class="code hl_variable" href="structmlx_1_1core_1_1metal_1_1_fence.html#aeccd8f2b81418ae9fc446ae2b6e15b87">fence</a>) {}</div>
<div class="foldopen" id="foldopen00126" data-start="{" data-end="}">
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1metal_1_1_fence.html#a4940c1aece13814af7727de9abb511f2"> 126</a></span> <a class="code hl_function" href="structmlx_1_1core_1_1metal_1_1_fence.html#a4940c1aece13814af7727de9abb511f2">~Fence</a>() {</div>
@@ -257,7 +271,7 @@ $(function(){ initResizable(false); });
</div>
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> </div>
<div class="foldopen" id="foldopen00132" data-start="{" data-end="};">
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1metal_1_1_device_stream.html"> 132</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structmlx_1_1core_1_1metal_1_1_device_stream.html">DeviceStream</a> {</div>
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1metal_1_1_device_stream.html"> 132</a></span><span class="keyword">struct </span><a class="code hl_function" href="structmlx_1_1core_1_1metal_1_1_device_stream.html#a573326bc8b48e39076850c7bf52ad0d7">DeviceStream</a> {</div>
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1metal_1_1_device_stream.html#a573326bc8b48e39076850c7bf52ad0d7"> 133</a></span> <a class="code hl_function" href="structmlx_1_1core_1_1metal_1_1_device_stream.html#a573326bc8b48e39076850c7bf52ad0d7">DeviceStream</a>(MTL::CommandQueue* <a class="code hl_variable" href="structmlx_1_1core_1_1metal_1_1_device_stream.html#a77c75a63c51ea56815a86bd882ed190d">queue</a>) : <a class="code hl_variable" href="structmlx_1_1core_1_1metal_1_1_device_stream.html#a77c75a63c51ea56815a86bd882ed190d">queue</a>(<a class="code hl_variable" href="structmlx_1_1core_1_1metal_1_1_device_stream.html#a77c75a63c51ea56815a86bd882ed190d">queue</a>) {};</div>
<div class="foldopen" id="foldopen00134" data-start="{" data-end="}">
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"><a class="line" href="structmlx_1_1core_1_1metal_1_1_device_stream.html#a1c4397732f64f5811381dd01e30e020e"> 134</a></span> <a class="code hl_function" href="structmlx_1_1core_1_1metal_1_1_device_stream.html#a1c4397732f64f5811381dd01e30e020e">~DeviceStream</a>() {</div>
@@ -287,11 +301,11 @@ $(function(){ initResizable(false); });
</div>
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> </div>
<div class="foldopen" id="foldopen00158" data-start="{" data-end="};">
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1metal_1_1_device.html"> 158</a></span><span class="keyword">class </span><a class="code hl_class" href="classmlx_1_1core_1_1metal_1_1_device.html">Device</a> {</div>
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1metal_1_1_device.html"> 158</a></span><span class="keyword">class </span><a class="code hl_function" href="classmlx_1_1core_1_1metal_1_1_device.html#ae0db74570eb4b19d8cf19774db91bfd6">Device</a> {</div>
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1metal_1_1_device.html#ae0db74570eb4b19d8cf19774db91bfd6"> 160</a></span> <a class="code hl_function" href="classmlx_1_1core_1_1metal_1_1_device.html#ae0db74570eb4b19d8cf19774db91bfd6">Device</a>();</div>
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1metal_1_1_device.html#abf59a4addb5473f9e814e3651ba85f06"> 161</a></span> <a class="code hl_function" href="classmlx_1_1core_1_1metal_1_1_device.html#abf59a4addb5473f9e814e3651ba85f06">Device</a>(<span class="keyword">const</span> <a class="code hl_class" href="classmlx_1_1core_1_1metal_1_1_device.html">Device</a>&amp;) = <span class="keyword">delete</span>;</div>
<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1metal_1_1_device.html#ad1d6382fd18a46b1906e1b43e0bd2e73"> 162</a></span> <a class="code hl_class" href="classmlx_1_1core_1_1metal_1_1_device.html">Device</a>&amp; <a class="code hl_function" href="classmlx_1_1core_1_1metal_1_1_device.html#ad1d6382fd18a46b1906e1b43e0bd2e73">operator=</a>(<span class="keyword">const</span> <a class="code hl_class" href="classmlx_1_1core_1_1metal_1_1_device.html">Device</a>&amp;) = <span class="keyword">delete</span>;</div>
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1metal_1_1_device.html#abf59a4addb5473f9e814e3651ba85f06"> 161</a></span> <a class="code hl_function" href="classmlx_1_1core_1_1metal_1_1_device.html#abf59a4addb5473f9e814e3651ba85f06">Device</a>(<span class="keyword">const</span> <a class="code hl_function" href="classmlx_1_1core_1_1metal_1_1_device.html#ae0db74570eb4b19d8cf19774db91bfd6">Device</a>&amp;) = <span class="keyword">delete</span>;</div>
<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1metal_1_1_device.html#ad1d6382fd18a46b1906e1b43e0bd2e73"> 162</a></span> <a class="code hl_function" href="classmlx_1_1core_1_1metal_1_1_device.html#ae0db74570eb4b19d8cf19774db91bfd6">Device</a>&amp; <a class="code hl_function" href="classmlx_1_1core_1_1metal_1_1_device.html#ad1d6382fd18a46b1906e1b43e0bd2e73">operator=</a>(<span class="keyword">const</span> <a class="code hl_function" href="classmlx_1_1core_1_1metal_1_1_device.html#ae0db74570eb4b19d8cf19774db91bfd6">Device</a>&amp;) = <span class="keyword">delete</span>;</div>
<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"><a class="line" href="classmlx_1_1core_1_1metal_1_1_device.html#a4f39c28c6cdd1d2da1918f5871bcba6e"> 163</a></span> <a class="code hl_function" href="classmlx_1_1core_1_1metal_1_1_device.html#a4f39c28c6cdd1d2da1918f5871bcba6e">~Device</a>();</div>
<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> </div>
<div class="foldopen" id="foldopen00165" data-start="{" data-end="}">
@@ -408,7 +422,7 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"> 269</span> </div>
<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"> 270</span>} <span class="comment">// namespace mlx::core::metal</span></div>
<div class="ttc" id="aarray_8h_html"><div class="ttname"><a href="array_8h.html">array.h</a></div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1array_html"><div class="ttname"><a href="classmlx_1_1core_1_1array.html">mlx::core::array</a></div><div class="ttdef"><b>Definition</b> array.h:23</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1array_html"><div class="ttname"><a href="classmlx_1_1core_1_1array.html">mlx::core::array</a></div><div class="ttdef"><b>Definition</b> array.h:24</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1metal_1_1_device_html"><div class="ttname"><a href="classmlx_1_1core_1_1metal_1_1_device.html">mlx::core::metal::Device</a></div><div class="ttdef"><b>Definition</b> device.h:158</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1metal_1_1_device_html_a03a2f0c712660a1bd437cb16e4aba79f"><div class="ttname"><a href="classmlx_1_1core_1_1metal_1_1_device.html#a03a2f0c712660a1bd437cb16e4aba79f">mlx::core::metal::Device::set_residency_set</a></div><div class="ttdeci">void set_residency_set(const MTL::ResidencySet *residency_set)</div></div>
<div class="ttc" id="aclassmlx_1_1core_1_1metal_1_1_device_html_a064e1cb6a16de7a0619f6447622350f8"><div class="ttname"><a href="classmlx_1_1core_1_1metal_1_1_device.html#a064e1cb6a16de7a0619f6447622350f8">mlx::core::metal::Device::get_command_buffer_ops</a></div><div class="ttdeci">int get_command_buffer_ops(int index)</div></div>
@@ -472,15 +486,17 @@ $(function(){ initResizable(false); });
<div class="ttc" id="astructmlx_1_1core_1_1metal_1_1_device_stream_html_a99183c92599edfeb75f7fa0f37e1d9eb"><div class="ttname"><a href="structmlx_1_1core_1_1metal_1_1_device_stream.html#a99183c92599edfeb75f7fa0f37e1d9eb">mlx::core::metal::DeviceStream::buffer</a></div><div class="ttdeci">MTL::CommandBuffer * buffer</div><div class="ttdef"><b>Definition</b> device.h:148</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1metal_1_1_device_stream_html_ab6048b329e65a59033834f3bdd351782"><div class="ttname"><a href="structmlx_1_1core_1_1metal_1_1_device_stream.html#ab6048b329e65a59033834f3bdd351782">mlx::core::metal::DeviceStream::buffer_ops</a></div><div class="ttdeci">int buffer_ops</div><div class="ttdef"><b>Definition</b> device.h:149</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1metal_1_1_device_stream_html_aee88009117dfff1ad121eabe28d5f3de"><div class="ttname"><a href="structmlx_1_1core_1_1metal_1_1_device_stream.html#aee88009117dfff1ad121eabe28d5f3de">mlx::core::metal::DeviceStream::temporaries</a></div><div class="ttdeci">std::vector&lt; array &gt; temporaries</div><div class="ttdef"><b>Definition</b> device.h:155</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1metal_1_1_fence_html"><div class="ttname"><a href="structmlx_1_1core_1_1metal_1_1_fence.html">mlx::core::metal::Fence</a></div><div class="ttdef"><b>Definition</b> device.h:124</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1metal_1_1_fence_html_a30bee4957ae595e04922952a8010fc79"><div class="ttname"><a href="structmlx_1_1core_1_1metal_1_1_fence.html#a30bee4957ae595e04922952a8010fc79">mlx::core::metal::Fence::Fence</a></div><div class="ttdeci">Fence(MTL::Fence *fence)</div><div class="ttdef"><b>Definition</b> device.h:125</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1metal_1_1_fence_html_a4940c1aece13814af7727de9abb511f2"><div class="ttname"><a href="structmlx_1_1core_1_1metal_1_1_fence.html#a4940c1aece13814af7727de9abb511f2">mlx::core::metal::Fence::~Fence</a></div><div class="ttdeci">~Fence()</div><div class="ttdef"><b>Definition</b> device.h:126</div></div>
<div class="ttc" id="astructmlx_1_1core_1_1metal_1_1_fence_html_aeccd8f2b81418ae9fc446ae2b6e15b87"><div class="ttname"><a href="structmlx_1_1core_1_1metal_1_1_fence.html#aeccd8f2b81418ae9fc446ae2b6e15b87">mlx::core::metal::Fence::fence</a></div><div class="ttdeci">MTL::Fence * fence</div><div class="ttdef"><b>Definition</b> device.h:129</div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0
</small></address>
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_d0c977ea65824390717cdb7efc36c157.html">metal</a></li><li class="navelem"><a class="el" href="backend_2metal_2device_8h.html">device.h</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.1 </li>
</ul>
</div>
</body>
</html>
+58 -41
View File
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.12.0"/>
<meta name="generator" content="Doxygen 1.13.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MLX: mlx/backend/metal/kernels/complex.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -11,11 +11,18 @@
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
@@ -28,12 +35,24 @@
<div id="projectname">MLX
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.12.0 -->
<!-- Generated by Doxygen 1.13.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
@@ -44,22 +63,23 @@ var searchBox = new SearchBox("searchBox", "search/",'.html');
$(function() { codefold.init(0); });
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search',false);
$(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){ initResizable(false); });
$(function(){initNavTree('backend_2metal_2kernels_2complex_8h.html',''); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
@@ -81,12 +101,6 @@ $(function(){ initResizable(false); });
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_d0c977ea65824390717cdb7efc36c157.html">metal</a></li><li class="navelem"><a class="el" href="dir_70a37effa88bcbd6b791977fa1e64356.html">kernels</a></li> </ul>
</div>
</div><!-- top -->
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#nested-classes">Classes</a> &#124;
@@ -131,10 +145,10 @@ Functions</h2></td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="var-members" name="var-members"></a>
Variables</h2></td></tr>
<tr class="memitem:a4f90ad54f4fae363e8d3cc41d539557b" id="r_a4f90ad54f4fae363e8d3cc41d539557b"><td class="memTemplParams" colspan="2">template&lt;typename T &gt; </td></tr>
<tr class="memitem:a4f90ad54f4fae363e8d3cc41d539557b" id="r_a4f90ad54f4fae363e8d3cc41d539557b"><td class="memTemplParams" colspan="2">template&lt;typename T&gt; </td></tr>
<tr class="memitem:a4f90ad54f4fae363e8d3cc41d539557b"><td class="memTemplItemLeft" align="right" valign="top">static constexpr constant bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="#a4f90ad54f4fae363e8d3cc41d539557b">can_convert_to_complex64</a></td></tr>
<tr class="separator:a4f90ad54f4fae363e8d3cc41d539557b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab149db78f6f19b8da6297dac4c36d893" id="r_ab149db78f6f19b8da6297dac4c36d893"><td class="memTemplParams" colspan="2">template&lt;typename T &gt; </td></tr>
<tr class="memitem:ab149db78f6f19b8da6297dac4c36d893" id="r_ab149db78f6f19b8da6297dac4c36d893"><td class="memTemplParams" colspan="2">template&lt;typename T&gt; </td></tr>
<tr class="memitem:ab149db78f6f19b8da6297dac4c36d893"><td class="memTemplItemLeft" align="right" valign="top">static constexpr constant bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="#ab149db78f6f19b8da6297dac4c36d893">can_convert_from_complex64</a></td></tr>
<tr class="separator:ab149db78f6f19b8da6297dac4c36d893"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
@@ -161,7 +175,7 @@ Variables</h2></td></tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
<span class="mlabels"><span class="mlabel constexpr">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
@@ -190,7 +204,7 @@ Variables</h2></td></tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
<span class="mlabels"><span class="mlabel constexpr">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
@@ -219,7 +233,7 @@ Variables</h2></td></tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
<span class="mlabels"><span class="mlabel constexpr">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
@@ -248,7 +262,7 @@ Variables</h2></td></tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
<span class="mlabels"><span class="mlabel constexpr">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
@@ -273,7 +287,7 @@ Variables</h2></td></tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
<span class="mlabels"><span class="mlabel constexpr">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
@@ -302,7 +316,7 @@ Variables</h2></td></tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
<span class="mlabels"><span class="mlabel constexpr">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
@@ -331,7 +345,7 @@ Variables</h2></td></tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
<span class="mlabels"><span class="mlabel constexpr">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
@@ -360,7 +374,7 @@ Variables</h2></td></tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
<span class="mlabels"><span class="mlabel constexpr">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
@@ -389,7 +403,7 @@ Variables</h2></td></tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
<span class="mlabels"><span class="mlabel constexpr">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
@@ -418,7 +432,7 @@ Variables</h2></td></tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
<span class="mlabels"><span class="mlabel constexpr">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
@@ -447,7 +461,7 @@ Variables</h2></td></tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span> </td>
<span class="mlabels"><span class="mlabel constexpr">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
@@ -461,7 +475,7 @@ Variables</h2></td></tr>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename T &gt; </div>
template&lt;typename T&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
@@ -472,7 +486,7 @@ template&lt;typename T &gt; </div>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">constexpr</span></span> </td>
<span class="mlabels"><span class="mlabel static">static</span><span class="mlabel constexpr">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
@@ -488,7 +502,7 @@ template&lt;typename T &gt; </div>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename T &gt; </div>
template&lt;typename T&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
@@ -499,7 +513,7 @@ template&lt;typename T &gt; </div>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">constexpr</span></span> </td>
<span class="mlabels"><span class="mlabel static">static</span><span class="mlabel constexpr">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
@@ -509,10 +523,13 @@ template&lt;typename T &gt; </div>
</div>
</div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0
</small></address>
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_d0c977ea65824390717cdb7efc36c157.html">metal</a></li><li class="navelem"><a class="el" href="dir_70a37effa88bcbd6b791977fa1e64356.html">kernels</a></li><li class="navelem"><a class="el" href="backend_2metal_2kernels_2complex_8h.html">complex.h</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.1 </li>
</ul>
</div>
</body>
</html>
+17
View File
@@ -0,0 +1,17 @@
var backend_2metal_2kernels_2complex_8h =
[
[ "complex64_t", "structcomplex64__t.html", "structcomplex64__t" ],
[ "operator%", "backend_2metal_2kernels_2complex_8h.html#aaf53122a07c8eca858b5a8e38ae280e0", null ],
[ "operator*", "backend_2metal_2kernels_2complex_8h.html#a681d4fb076973f58f7dac894ec62a385", null ],
[ "operator+", "backend_2metal_2kernels_2complex_8h.html#ad6af5c6c5ed4898b49758618e5aee189", null ],
[ "operator-", "backend_2metal_2kernels_2complex_8h.html#af5608264cf920688607059b4e8cd3117", null ],
[ "operator-", "backend_2metal_2kernels_2complex_8h.html#a226cfd54d49f02e35c5aab3139c7596b", null ],
[ "operator/", "backend_2metal_2kernels_2complex_8h.html#ae6a708f67d6fd9b0962aa8877cec6d35", null ],
[ "operator<", "backend_2metal_2kernels_2complex_8h.html#a67674e32596a9dae2258bb8e0e6a2058", null ],
[ "operator<=", "backend_2metal_2kernels_2complex_8h.html#aee04c9a63c6716a99a027418354debb0", null ],
[ "operator==", "backend_2metal_2kernels_2complex_8h.html#abfc19f03616441245dfc7726b278f190", null ],
[ "operator>", "backend_2metal_2kernels_2complex_8h.html#a032a8d3eec2384c9f03066f7fd945995", null ],
[ "operator>=", "backend_2metal_2kernels_2complex_8h.html#aafbd686c180398c98b33d7643f893a46", null ],
[ "can_convert_from_complex64", "backend_2metal_2kernels_2complex_8h.html#ab149db78f6f19b8da6297dac4c36d893", null ],
[ "can_convert_to_complex64", "backend_2metal_2kernels_2complex_8h.html#a4f90ad54f4fae363e8d3cc41d539557b", null ]
];
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.12.0"/>
<meta name="generator" content="Doxygen 1.13.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MLX: mlx/backend/metal/kernels/complex.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -11,11 +11,18 @@
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
@@ -28,12 +35,24 @@
<div id="projectname">MLX
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.12.0 -->
<!-- Generated by Doxygen 1.13.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
@@ -44,22 +63,23 @@ var searchBox = new SearchBox("searchBox", "search/",'.html');
$(function() { codefold.init(0); });
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search',false);
$(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){ initResizable(false); });
$(function(){initNavTree('backend_2metal_2kernels_2complex_8h_source.html',''); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
@@ -81,12 +101,6 @@ $(function(){ initResizable(false); });
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_d0c977ea65824390717cdb7efc36c157.html">metal</a></li><li class="navelem"><a class="el" href="dir_70a37effa88bcbd6b791977fa1e64356.html">kernels</a></li> </ul>
</div>
</div><!-- top -->
<div id="doc-content">
<div class="header">
<div class="headertitle"><div class="title">complex.h</div></div>
</div><!--header-->
@@ -111,7 +125,7 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> (is_convertible_v&lt;float, T&gt; || is_convertible_v&lt;bfloat16_t, T&gt;);</div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> </div>
<div class="foldopen" id="foldopen00020" data-start="{" data-end="};">
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"><a class="line" href="structcomplex64__t.html"> 20</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structcomplex64__t.html">complex64_t</a> {</div>
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"><a class="line" href="structcomplex64__t.html"> 20</a></span><span class="keyword">struct </span><a class="code hl_function" href="structcomplex64__t.html#adbd392a5e92d31997380ad0a38be4be8">complex64_t</a> {</div>
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"><a class="line" href="structcomplex64__t.html#abbd4a0092eca9f112c1c5ae1a133a27e"> 21</a></span> <span class="keywordtype">float</span> <a class="code hl_variable" href="structcomplex64__t.html#abbd4a0092eca9f112c1c5ae1a133a27e">real</a>;</div>
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"><a class="line" href="structcomplex64__t.html#a94037c0cf8451aaff7cb4d154a8426de"> 22</a></span> <span class="keywordtype">float</span> <a class="code hl_variable" href="structcomplex64__t.html#a94037c0cf8451aaff7cb4d154a8426de">imag</a>;</div>
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> </div>
@@ -280,10 +294,13 @@ $(function(){ initResizable(false); });
<div class="ttc" id="astructcomplex64__t_html_ac81b486f642fb3b26c5d659917bdbcd0"><div class="ttname"><a href="structcomplex64__t.html#ac81b486f642fb3b26c5d659917bdbcd0">complex64_t::complex64_t</a></div><div class="ttdeci">constexpr complex64_t(T x) device</div><div class="ttdef"><b>Definition</b> complex.h:43</div></div>
<div class="ttc" id="astructcomplex64__t_html_adbd392a5e92d31997380ad0a38be4be8"><div class="ttname"><a href="structcomplex64__t.html#adbd392a5e92d31997380ad0a38be4be8">complex64_t::complex64_t</a></div><div class="ttdeci">constexpr complex64_t(float real, float imag)</div><div class="ttdef"><b>Definition</b> complex.h:25</div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0
</small></address>
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_d0c977ea65824390717cdb7efc36c157.html">metal</a></li><li class="navelem"><a class="el" href="dir_70a37effa88bcbd6b791977fa1e64356.html">kernels</a></li><li class="navelem"><a class="el" href="backend_2metal_2kernels_2complex_8h.html">complex.h</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.1 </li>
</ul>
</div>
</body>
</html>
+74 -58
View File
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.12.0"/>
<meta name="generator" content="Doxygen 1.13.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MLX: mlx/backend/metal/kernels/fft.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -11,11 +11,18 @@
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
@@ -28,12 +35,24 @@
<div id="projectname">MLX
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.12.0 -->
<!-- Generated by Doxygen 1.13.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
@@ -44,22 +63,23 @@ var searchBox = new SearchBox("searchBox", "search/",'.html');
$(function() { codefold.init(0); });
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search',false);
$(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){ initResizable(false); });
$(function(){initNavTree('backend_2metal_2kernels_2fft_8h.html',''); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
@@ -81,12 +101,6 @@ $(function(){ initResizable(false); });
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_d0c977ea65824390717cdb7efc36c157.html">metal</a></li><li class="navelem"><a class="el" href="dir_70a37effa88bcbd6b791977fa1e64356.html">kernels</a></li> </ul>
</div>
</div><!-- top -->
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#define-members">Macros</a> &#124;
@@ -123,21 +137,21 @@ Functions</h2></td></tr>
<tr class="memitem:a278d980ed397e6841ce0af44b9aa4396"><td class="memTemplItemLeft" align="right" valign="top">METAL_FUNC void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="#a278d980ed397e6841ce0af44b9aa4396">radix_butterfly</a> (int i, int p, thread float2 *x, thread short *indices, thread float2 *y)</td></tr>
<tr class="separator:a278d980ed397e6841ce0af44b9aa4396"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aba8d32e0911499671df93678f39da08b" id="r_aba8d32e0911499671df93678f39da08b"><td class="memTemplParams" colspan="2">template&lt;int radix, <a class="el" href="#a6ba62eabfd5428644aabf89ddaa0128d">RadixFunc</a> radix_func&gt; </td></tr>
<tr class="memitem:aba8d32e0911499671df93678f39da08b"><td class="memTemplItemLeft" align="right" valign="top">METAL_FUNC void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="#aba8d32e0911499671df93678f39da08b">radix_n_steps</a> (int i, thread int *p, int m, int n, int num_steps, thread float2 *inputs, thread short *indices, thread float2 *values, threadgroup float2 *<a class="el" href="backend_2metal_2allocator_8h.html#a15aa5cc1baf29be08d55cca88509e697">buf</a>)</td></tr>
<tr class="memitem:aba8d32e0911499671df93678f39da08b"><td class="memTemplItemLeft" align="right" valign="top">METAL_FUNC void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="#aba8d32e0911499671df93678f39da08b">radix_n_steps</a> (int i, thread int *p, int m, int n, int num_steps, thread float2 *inputs, thread short *indices, thread float2 *values, threadgroup float2 *buf)</td></tr>
<tr class="separator:aba8d32e0911499671df93678f39da08b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a050ead8fa5cacdaec13d68ca3c0dcb81" id="r_a050ead8fa5cacdaec13d68ca3c0dcb81"><td class="memTemplParams" colspan="2">template&lt;bool rader = false&gt; </td></tr>
<tr class="memitem:a050ead8fa5cacdaec13d68ca3c0dcb81"><td class="memTemplItemLeft" align="right" valign="top">METAL_FUNC void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="#a050ead8fa5cacdaec13d68ca3c0dcb81">perform_fft</a> (int fft_idx, thread int *p, int m, int n, threadgroup float2 *<a class="el" href="backend_2metal_2allocator_8h.html#a15aa5cc1baf29be08d55cca88509e697">buf</a>)</td></tr>
<tr class="memitem:a050ead8fa5cacdaec13d68ca3c0dcb81"><td class="memTemplItemLeft" align="right" valign="top">METAL_FUNC void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="#a050ead8fa5cacdaec13d68ca3c0dcb81">perform_fft</a> (int fft_idx, thread int *p, int m, int n, threadgroup float2 *buf)</td></tr>
<tr class="separator:a050ead8fa5cacdaec13d68ca3c0dcb81"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4010b0e151e5f01e610e9c32234458c7" id="r_a4010b0e151e5f01e610e9c32234458c7"><td class="memTemplParams" colspan="2">template&lt;int tg_mem_size, typename in_T , typename out_T &gt; </td></tr>
<tr class="memitem:a4010b0e151e5f01e610e9c32234458c7" id="r_a4010b0e151e5f01e610e9c32234458c7"><td class="memTemplParams" colspan="2">template&lt;int tg_mem_size, typename in_T, typename out_T&gt; </td></tr>
<tr class="memitem:a4010b0e151e5f01e610e9c32234458c7"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="#a4010b0e151e5f01e610e9c32234458c7">fft</a> (const device in_T *in, device out_T *out, constant const int &amp;n, constant const int &amp;batch_size, uint3 elem, uint3 grid)</td></tr>
<tr class="separator:a4010b0e151e5f01e610e9c32234458c7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad123452303f6415904f3592f660769b8" id="r_ad123452303f6415904f3592f660769b8"><td class="memTemplParams" colspan="2">template&lt;int tg_mem_size, typename in_T , typename out_T &gt; </td></tr>
<tr class="memitem:ad123452303f6415904f3592f660769b8" id="r_ad123452303f6415904f3592f660769b8"><td class="memTemplParams" colspan="2">template&lt;int tg_mem_size, typename in_T, typename out_T&gt; </td></tr>
<tr class="memitem:ad123452303f6415904f3592f660769b8"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="#ad123452303f6415904f3592f660769b8">rader_fft</a> (const device in_T *in, device out_T *out, const device float2 *raders_b_q, const device short *raders_g_q, const device short *raders_g_minus_q, constant const int &amp;n, constant const int &amp;batch_size, constant const int &amp;rader_n, uint3 elem, uint3 grid)</td></tr>
<tr class="separator:ad123452303f6415904f3592f660769b8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0abc609e9756475800e996775a96a87e" id="r_a0abc609e9756475800e996775a96a87e"><td class="memTemplParams" colspan="2">template&lt;int tg_mem_size, typename in_T , typename out_T &gt; </td></tr>
<tr class="memitem:a0abc609e9756475800e996775a96a87e" id="r_a0abc609e9756475800e996775a96a87e"><td class="memTemplParams" colspan="2">template&lt;int tg_mem_size, typename in_T, typename out_T&gt; </td></tr>
<tr class="memitem:a0abc609e9756475800e996775a96a87e"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="#a0abc609e9756475800e996775a96a87e">bluestein_fft</a> (const device in_T *in, device out_T *out, const device float2 *w_q, const device float2 *w_k, constant const int &amp;length, constant const int &amp;n, constant const int &amp;batch_size, uint3 elem, uint3 grid)</td></tr>
<tr class="separator:a0abc609e9756475800e996775a96a87e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6558a8205ee4c3e4767bafa93f7606de" id="r_a6558a8205ee4c3e4767bafa93f7606de"><td class="memTemplParams" colspan="2">template&lt;int tg_mem_size, typename in_T , typename out_T , int step, bool real = false&gt; </td></tr>
<tr class="memitem:a6558a8205ee4c3e4767bafa93f7606de" id="r_a6558a8205ee4c3e4767bafa93f7606de"><td class="memTemplParams" colspan="2">template&lt;int tg_mem_size, typename in_T, typename out_T, int step, bool real = false&gt; </td></tr>
<tr class="memitem:a6558a8205ee4c3e4767bafa93f7606de"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="#a6558a8205ee4c3e4767bafa93f7606de">four_step_fft</a> (const device in_T *in, device out_T *out, constant const int &amp;n1, constant const int &amp;n2, constant const int &amp;batch_size, uint3 elem, uint3 grid)</td></tr>
<tr class="separator:a6558a8205ee4c3e4767bafa93f7606de"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
@@ -241,8 +255,7 @@ Variables</h2></td></tr>
</table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line"> <a class="code hl_function" href="#aba8d32e0911499671df93678f39da08b">radix_n_steps&lt;radix, radix_func&gt;</a>( \</div>
<div class="line"> fft_idx, p, m, n, num_steps, inputs, indices, values, <a class="code hl_variable" href="backend_2metal_2allocator_8h.html#a15aa5cc1baf29be08d55cca88509e697">buf</a>);</div>
<div class="ttc" id="abackend_2metal_2allocator_8h_html_a15aa5cc1baf29be08d55cca88509e697"><div class="ttname"><a href="backend_2metal_2allocator_8h.html#a15aa5cc1baf29be08d55cca88509e697">buf</a></div><div class="ttdeci">MTL::Buffer * buf</div><div class="ttdef"><b>Definition</b> allocator.h:39</div></div>
<div class="line"> fft_idx, p, m, n, num_steps, inputs, indices, values, buf);</div>
<div class="ttc" id="abackend_2metal_2kernels_2fft_8h_html_aba8d32e0911499671df93678f39da08b"><div class="ttname"><a href="#aba8d32e0911499671df93678f39da08b">radix_n_steps</a></div><div class="ttdeci">METAL_FUNC void radix_n_steps(int i, thread int *p, int m, int n, int num_steps, thread float2 *inputs, thread short *indices, thread float2 *values, threadgroup float2 *buf)</div><div class="ttdef"><b>Definition</b> fft.h:100</div></div>
</div><!-- fragment -->
</div>
@@ -269,7 +282,7 @@ Variables</h2></td></tr>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;int tg_mem_size, typename in_T , typename out_T &gt; </div>
template&lt;int tg_mem_size, typename in_T, typename out_T&gt; </div>
<table class="memname">
<tr>
<td class="memname">void bluestein_fft </td>
@@ -327,7 +340,7 @@ template&lt;int tg_mem_size, typename in_T , typename out_T &gt; </div>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;int tg_mem_size, typename in_T , typename out_T &gt; </div>
template&lt;int tg_mem_size, typename in_T, typename out_T&gt; </div>
<table class="memname">
<tr>
<td class="memname">void fft </td>
@@ -370,7 +383,7 @@ template&lt;int tg_mem_size, typename in_T , typename out_T &gt; </div>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;int tg_mem_size, typename in_T , typename out_T , int step, bool real = false&gt; </div>
template&lt;int tg_mem_size, typename in_T, typename out_T, int step, bool real = false&gt; </div>
<table class="memname">
<tr>
<td class="memname">void four_step_fft </td>
@@ -456,7 +469,7 @@ template&lt;bool rader = false&gt; </div>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;int tg_mem_size, typename in_T , typename out_T &gt; </div>
template&lt;int tg_mem_size, typename in_T, typename out_T&gt; </div>
<table class="memname">
<tr>
<td class="memname">void rader_fft </td>
@@ -625,7 +638,7 @@ template&lt;int radix, <a class="el" href="#a6ba62eabfd5428644aabf89ddaa0128d">R
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">constexpr</span></span> </td>
<span class="mlabels"><span class="mlabel static">static</span><span class="mlabel constexpr">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
@@ -647,7 +660,7 @@ template&lt;int radix, <a class="el" href="#a6ba62eabfd5428644aabf89ddaa0128d">R
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">constexpr</span></span> </td>
<span class="mlabels"><span class="mlabel static">static</span><span class="mlabel constexpr">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
@@ -669,7 +682,7 @@ template&lt;int radix, <a class="el" href="#a6ba62eabfd5428644aabf89ddaa0128d">R
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">constexpr</span></span> </td>
<span class="mlabels"><span class="mlabel static">static</span><span class="mlabel constexpr">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
@@ -691,7 +704,7 @@ template&lt;int radix, <a class="el" href="#a6ba62eabfd5428644aabf89ddaa0128d">R
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">constexpr</span></span> </td>
<span class="mlabels"><span class="mlabel static">static</span><span class="mlabel constexpr">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
@@ -713,7 +726,7 @@ template&lt;int radix, <a class="el" href="#a6ba62eabfd5428644aabf89ddaa0128d">R
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">constexpr</span></span> </td>
<span class="mlabels"><span class="mlabel static">static</span><span class="mlabel constexpr">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
@@ -735,7 +748,7 @@ template&lt;int radix, <a class="el" href="#a6ba62eabfd5428644aabf89ddaa0128d">R
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">constexpr</span></span> </td>
<span class="mlabels"><span class="mlabel static">static</span><span class="mlabel constexpr">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
@@ -757,7 +770,7 @@ template&lt;int radix, <a class="el" href="#a6ba62eabfd5428644aabf89ddaa0128d">R
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">constexpr</span></span> </td>
<span class="mlabels"><span class="mlabel static">static</span><span class="mlabel constexpr">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
@@ -779,7 +792,7 @@ template&lt;int radix, <a class="el" href="#a6ba62eabfd5428644aabf89ddaa0128d">R
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">constexpr</span></span> </td>
<span class="mlabels"><span class="mlabel static">static</span><span class="mlabel constexpr">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
@@ -801,7 +814,7 @@ template&lt;int radix, <a class="el" href="#a6ba62eabfd5428644aabf89ddaa0128d">R
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">constexpr</span></span> </td>
<span class="mlabels"><span class="mlabel static">static</span><span class="mlabel constexpr">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
@@ -823,7 +836,7 @@ template&lt;int radix, <a class="el" href="#a6ba62eabfd5428644aabf89ddaa0128d">R
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">constexpr</span></span> </td>
<span class="mlabels"><span class="mlabel static">static</span><span class="mlabel constexpr">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
@@ -845,7 +858,7 @@ template&lt;int radix, <a class="el" href="#a6ba62eabfd5428644aabf89ddaa0128d">R
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">constexpr</span></span> </td>
<span class="mlabels"><span class="mlabel static">static</span><span class="mlabel constexpr">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
@@ -867,7 +880,7 @@ template&lt;int radix, <a class="el" href="#a6ba62eabfd5428644aabf89ddaa0128d">R
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">constexpr</span></span> </td>
<span class="mlabels"><span class="mlabel static">static</span><span class="mlabel constexpr">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
@@ -889,7 +902,7 @@ template&lt;int radix, <a class="el" href="#a6ba62eabfd5428644aabf89ddaa0128d">R
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">constexpr</span></span> </td>
<span class="mlabels"><span class="mlabel static">static</span><span class="mlabel constexpr">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
@@ -911,7 +924,7 @@ template&lt;int radix, <a class="el" href="#a6ba62eabfd5428644aabf89ddaa0128d">R
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">constexpr</span></span> </td>
<span class="mlabels"><span class="mlabel static">static</span><span class="mlabel constexpr">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
@@ -933,7 +946,7 @@ template&lt;int radix, <a class="el" href="#a6ba62eabfd5428644aabf89ddaa0128d">R
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">constexpr</span></span> </td>
<span class="mlabels"><span class="mlabel static">static</span><span class="mlabel constexpr">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
@@ -955,7 +968,7 @@ template&lt;int radix, <a class="el" href="#a6ba62eabfd5428644aabf89ddaa0128d">R
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">constexpr</span></span> </td>
<span class="mlabels"><span class="mlabel static">static</span><span class="mlabel constexpr">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
@@ -977,7 +990,7 @@ template&lt;int radix, <a class="el" href="#a6ba62eabfd5428644aabf89ddaa0128d">R
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">constexpr</span></span> </td>
<span class="mlabels"><span class="mlabel static">static</span><span class="mlabel constexpr">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
@@ -999,7 +1012,7 @@ template&lt;int radix, <a class="el" href="#a6ba62eabfd5428644aabf89ddaa0128d">R
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">constexpr</span></span> </td>
<span class="mlabels"><span class="mlabel static">static</span><span class="mlabel constexpr">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
@@ -1021,7 +1034,7 @@ template&lt;int radix, <a class="el" href="#a6ba62eabfd5428644aabf89ddaa0128d">R
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">constexpr</span></span> </td>
<span class="mlabels"><span class="mlabel static">static</span><span class="mlabel constexpr">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
@@ -1043,7 +1056,7 @@ template&lt;int radix, <a class="el" href="#a6ba62eabfd5428644aabf89ddaa0128d">R
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">constexpr</span></span> </td>
<span class="mlabels"><span class="mlabel static">static</span><span class="mlabel constexpr">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
@@ -1065,7 +1078,7 @@ template&lt;int radix, <a class="el" href="#a6ba62eabfd5428644aabf89ddaa0128d">R
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">constexpr</span></span> </td>
<span class="mlabels"><span class="mlabel static">static</span><span class="mlabel constexpr">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
@@ -1087,7 +1100,7 @@ template&lt;int radix, <a class="el" href="#a6ba62eabfd5428644aabf89ddaa0128d">R
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">constexpr</span></span> </td>
<span class="mlabels"><span class="mlabel static">static</span><span class="mlabel constexpr">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
@@ -1095,10 +1108,13 @@ template&lt;int radix, <a class="el" href="#a6ba62eabfd5428644aabf89ddaa0128d">R
</div>
</div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0
</small></address>
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_d0c977ea65824390717cdb7efc36c157.html">metal</a></li><li class="navelem"><a class="el" href="dir_70a37effa88bcbd6b791977fa1e64356.html">kernels</a></li><li class="navelem"><a class="el" href="backend_2metal_2kernels_2fft_8h.html">fft.h</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.1 </li>
</ul>
</div>
</body>
</html>
+36
View File
@@ -0,0 +1,36 @@
var backend_2metal_2kernels_2fft_8h =
[
[ "MAX_OUTPUT_SIZE", "backend_2metal_2kernels_2fft_8h.html#a28d683cf067736d76f867f30c066317e", null ],
[ "MAX_RADIX", "backend_2metal_2kernels_2fft_8h.html#a7b6e56afa21f022c5e754b000955735a", null ],
[ "RADIX_STEP", "backend_2metal_2kernels_2fft_8h.html#a794032d3a9acff0e31c77c69d0007f10", null ],
[ "RadixFunc", "backend_2metal_2kernels_2fft_8h.html#a6ba62eabfd5428644aabf89ddaa0128d", null ],
[ "bluestein_fft", "backend_2metal_2kernels_2fft_8h.html#a0abc609e9756475800e996775a96a87e", null ],
[ "fft", "backend_2metal_2kernels_2fft_8h.html#a4010b0e151e5f01e610e9c32234458c7", null ],
[ "four_step_fft", "backend_2metal_2kernels_2fft_8h.html#a6558a8205ee4c3e4767bafa93f7606de", null ],
[ "perform_fft", "backend_2metal_2kernels_2fft_8h.html#a050ead8fa5cacdaec13d68ca3c0dcb81", null ],
[ "rader_fft", "backend_2metal_2kernels_2fft_8h.html#ad123452303f6415904f3592f660769b8", null ],
[ "radix_butterfly", "backend_2metal_2kernels_2fft_8h.html#a278d980ed397e6841ce0af44b9aa4396", null ],
[ "radix_n_steps", "backend_2metal_2kernels_2fft_8h.html#aba8d32e0911499671df93678f39da08b", null ],
[ "elems_per_thread_", "backend_2metal_2kernels_2fft_8h.html#ad395c11e6f2aee72cd1928fba93a35a3", null ],
[ "inv_", "backend_2metal_2kernels_2fft_8h.html#a7a83318497519ff3ff0141b7d511ed38", null ],
[ "is_power_of_2_", "backend_2metal_2kernels_2fft_8h.html#a2a4df90e329b84ee6c1890ba7c265c9c", null ],
[ "rader_11_steps_", "backend_2metal_2kernels_2fft_8h.html#a1f3c377d05da52429172e64132dba750", null ],
[ "rader_13_steps_", "backend_2metal_2kernels_2fft_8h.html#a20d24f3e040d3d226a70d4dd7c9ac6a9", null ],
[ "rader_2_steps_", "backend_2metal_2kernels_2fft_8h.html#a2d725bfd4c30be4c605b5c4559a62892", null ],
[ "rader_3_steps_", "backend_2metal_2kernels_2fft_8h.html#adb129cc3808c08fd95af9795bfc7ae63", null ],
[ "rader_4_steps_", "backend_2metal_2kernels_2fft_8h.html#ac7c58404df0434d4f861db62d3471870", null ],
[ "rader_5_steps_", "backend_2metal_2kernels_2fft_8h.html#afea05e9a7105bafbaafca25042f4d1b4", null ],
[ "rader_6_steps_", "backend_2metal_2kernels_2fft_8h.html#a020469d1aca557ff1b49414f121dedbb", null ],
[ "rader_7_steps_", "backend_2metal_2kernels_2fft_8h.html#a0d437aef17faf8d9707ae7ffe68fdb30", null ],
[ "rader_8_steps_", "backend_2metal_2kernels_2fft_8h.html#ac6123e111816dd62a11ccb86b66fa3e9", null ],
[ "rader_m_", "backend_2metal_2kernels_2fft_8h.html#ac309c77ef775a3ef13850c5287a86480", null ],
[ "radix_11_steps_", "backend_2metal_2kernels_2fft_8h.html#a7cd17bff8bc567f71d4789ee31fa07f2", null ],
[ "radix_13_steps_", "backend_2metal_2kernels_2fft_8h.html#abb079b86e89ca88ce13a179d9ec566af", null ],
[ "radix_2_steps_", "backend_2metal_2kernels_2fft_8h.html#a53fdc660e99e6b5db6808bbd596cd374", null ],
[ "radix_3_steps_", "backend_2metal_2kernels_2fft_8h.html#a579123b7be825f08f3076287dded08e3", null ],
[ "radix_4_steps_", "backend_2metal_2kernels_2fft_8h.html#a12d99a846c3686806bab6c42148e1039", null ],
[ "radix_5_steps_", "backend_2metal_2kernels_2fft_8h.html#a903d5239b5f73577c559e97ff910892d", null ],
[ "radix_6_steps_", "backend_2metal_2kernels_2fft_8h.html#a2f7f7cc2423cfcd4998d1a2a0363c3e2", null ],
[ "radix_7_steps_", "backend_2metal_2kernels_2fft_8h.html#a2145cc8ab4d07583a735317b3cf60d55", null ],
[ "radix_8_steps_", "backend_2metal_2kernels_2fft_8h.html#a3cb03a97a209ba1346375e720ee76177", null ]
];
+67 -51
View File
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.12.0"/>
<meta name="generator" content="Doxygen 1.13.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MLX: mlx/backend/metal/kernels/fft.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -11,11 +11,18 @@
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
@@ -28,12 +35,24 @@
<div id="projectname">MLX
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.12.0 -->
<!-- Generated by Doxygen 1.13.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
@@ -44,22 +63,23 @@ var searchBox = new SearchBox("searchBox", "search/",'.html');
$(function() { codefold.init(0); });
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search',false);
$(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){ initResizable(false); });
$(function(){initNavTree('backend_2metal_2kernels_2fft_8h_source.html',''); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
@@ -81,12 +101,6 @@ $(function(){ initResizable(false); });
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_d0c977ea65824390717cdb7efc36c157.html">metal</a></li><li class="navelem"><a class="el" href="dir_70a37effa88bcbd6b791977fa1e64356.html">kernels</a></li> </ul>
</div>
</div><!-- top -->
<div id="doc-content">
<div class="header">
<div class="headertitle"><div class="title">fft.h</div></div>
</div><!--header-->
@@ -202,7 +216,7 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> thread float2* inputs,</div>
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> thread <span class="keywordtype">short</span>* indices,</div>
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> thread float2* values,</div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> threadgroup float2* <a class="code hl_variable" href="backend_2metal_2allocator_8h.html#a15aa5cc1baf29be08d55cca88509e697">buf</a>) {</div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> threadgroup float2* buf) {</div>
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> <span class="keywordtype">int</span> m_r = n / radix;</div>
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> <span class="comment">// When combining different sized radices, we have to do</span></div>
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> <span class="comment">// multiple butterflies in a single thread.</span></div>
@@ -220,7 +234,7 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> index = i + t * m;</div>
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> <span class="keywordflow">if</span> (index &lt; m_r) {</div>
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> r = 0; r &lt; radix; r++) {</div>
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> inputs[r] = <a class="code hl_variable" href="backend_2metal_2allocator_8h.html#a15aa5cc1baf29be08d55cca88509e697">buf</a>[index + r * m_r];</div>
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> inputs[r] = buf[index + r * m_r];</div>
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> }</div>
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> <a class="code hl_function" href="backend_2metal_2kernels_2fft_8h.html#a278d980ed397e6841ce0af44b9aa4396">radix_butterfly&lt;radix, radix_func&gt;</a>(</div>
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> index, *p, inputs, indices + t * radix, values + t * radix);</div>
@@ -235,7 +249,7 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> <span class="keywordflow">if</span> (index &lt; m_r) {</div>
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> r = 0; r &lt; radix; r++) {</div>
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> r_index = t * radix + r;</div>
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> <a class="code hl_variable" href="backend_2metal_2allocator_8h.html#a15aa5cc1baf29be08d55cca88509e697">buf</a>[indices[r_index]] = values[r_index];</div>
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> buf[indices[r_index]] = values[r_index];</div>
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> }</div>
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> }</div>
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> }</div>
@@ -256,7 +270,7 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span><span class="keyword">template</span> &lt;<span class="keywordtype">bool</span> rader = false&gt;</div>
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span>METAL_FUNC <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen00159" data-start="{" data-end="}">
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"><a class="line" href="backend_2metal_2kernels_2fft_8h.html#a050ead8fa5cacdaec13d68ca3c0dcb81"> 159</a></span><a class="code hl_function" href="backend_2metal_2kernels_2fft_8h.html#a050ead8fa5cacdaec13d68ca3c0dcb81">perform_fft</a>(<span class="keywordtype">int</span> fft_idx, thread <span class="keywordtype">int</span>* p, <span class="keywordtype">int</span> m, <span class="keywordtype">int</span> n, threadgroup float2* <a class="code hl_variable" href="backend_2metal_2allocator_8h.html#a15aa5cc1baf29be08d55cca88509e697">buf</a>) {</div>
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"><a class="line" href="backend_2metal_2kernels_2fft_8h.html#a050ead8fa5cacdaec13d68ca3c0dcb81"> 159</a></span><a class="code hl_function" href="backend_2metal_2kernels_2fft_8h.html#a050ead8fa5cacdaec13d68ca3c0dcb81">perform_fft</a>(<span class="keywordtype">int</span> fft_idx, thread <span class="keywordtype">int</span>* p, <span class="keywordtype">int</span> m, <span class="keywordtype">int</span> n, threadgroup float2* buf) {</div>
<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> float2 inputs[<a class="code hl_define" href="backend_2metal_2kernels_2fft_8h.html#a7b6e56afa21f022c5e754b000955735a">MAX_RADIX</a>];</div>
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> <span class="keywordtype">short</span> indices[<a class="code hl_define" href="backend_2metal_2kernels_2fft_8h.html#a28d683cf067736d76f867f30c066317e">MAX_OUTPUT_SIZE</a>];</div>
<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> float2 values[<a class="code hl_define" href="backend_2metal_2kernels_2fft_8h.html#a28d683cf067736d76f867f30c066317e">MAX_OUTPUT_SIZE</a>];</div>
@@ -310,9 +324,9 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> <span class="keywordtype">int</span> fft_idx = elem.z; <span class="comment">// Thread index in DFT</span></div>
<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span> <span class="keywordtype">int</span> m = grid.z; <span class="comment">// Threads per DFT</span></div>
<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> <span class="keywordtype">int</span> tg_idx = elem.y * n; <span class="comment">// Index of this DFT in threadgroup</span></div>
<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> threadgroup float2* <a class="code hl_variable" href="backend_2metal_2allocator_8h.html#a15aa5cc1baf29be08d55cca88509e697">buf</a> = &amp;shared_in[tg_idx];</div>
<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> threadgroup float2* buf = &amp;shared_in[tg_idx];</div>
<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span> </div>
<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> <a class="code hl_function" href="backend_2metal_2kernels_2fft_8h.html#a050ead8fa5cacdaec13d68ca3c0dcb81">perform_fft</a>(fft_idx, &amp;p, m, n, <a class="code hl_variable" href="backend_2metal_2allocator_8h.html#a15aa5cc1baf29be08d55cca88509e697">buf</a>);</div>
<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> <a class="code hl_function" href="backend_2metal_2kernels_2fft_8h.html#a050ead8fa5cacdaec13d68ca3c0dcb81">perform_fft</a>(fft_idx, &amp;p, m, n, buf);</div>
<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> </div>
<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> read_writer.write();</div>
<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span>}</div>
@@ -379,7 +393,7 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"> 275</span> </div>
<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</span> <span class="keywordtype">int</span> fft_idx = elem.z;</div>
<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"> 277</span> <span class="keywordtype">int</span> tg_idx = elem.y * n;</div>
<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"> 278</span> threadgroup float2* <a class="code hl_variable" href="backend_2metal_2allocator_8h.html#a15aa5cc1baf29be08d55cca88509e697">buf</a> = &amp;shared_in[tg_idx];</div>
<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"> 278</span> threadgroup float2* buf = &amp;shared_in[tg_idx];</div>
<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"> 279</span> </div>
<div class="line"><a id="l00280" name="l00280"></a><span class="lineno"> 280</span> <span class="comment">// rader_m = n / rader_n;</span></div>
<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"> 281</span> <span class="keywordtype">int</span> rader_m = <a class="code hl_variable" href="backend_2metal_2kernels_2fft_8h.html#ac309c77ef775a3ef13850c5287a86480">rader_m_</a>;</div>
@@ -391,7 +405,7 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00287" name="l00287"></a><span class="lineno"> 287</span> <span class="comment">// 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1</span></div>
<div class="line"><a id="l00288" name="l00288"></a><span class="lineno"> 288</span> <span class="keywordtype">short</span> x_0_index =</div>
<div class="line"><a id="l00289" name="l00289"></a><span class="lineno"> 289</span> <a class="code hl_function" href="namespacemetal.html#a6653b28c9473087141eddce39878d4d3">metal::min</a>(fft_idx * <a class="code hl_variable" href="backend_2metal_2kernels_2fft_8h.html#ad395c11e6f2aee72cd1928fba93a35a3">elems_per_thread_</a> / (rader_n - 1), rader_m - 1);</div>
<div class="line"><a id="l00290" name="l00290"></a><span class="lineno"> 290</span> float2 x_0[2] = {<a class="code hl_variable" href="backend_2metal_2allocator_8h.html#a15aa5cc1baf29be08d55cca88509e697">buf</a>[x_0_index], <a class="code hl_variable" href="backend_2metal_2allocator_8h.html#a15aa5cc1baf29be08d55cca88509e697">buf</a>[x_0_index + 1]};</div>
<div class="line"><a id="l00290" name="l00290"></a><span class="lineno"> 290</span> float2 x_0[2] = {buf[x_0_index], buf[x_0_index + 1]};</div>
<div class="line"><a id="l00291" name="l00291"></a><span class="lineno"> 291</span> </div>
<div class="line"><a id="l00292" name="l00292"></a><span class="lineno"> 292</span> <span class="comment">// Do the Rader permutation in shared memory</span></div>
<div class="line"><a id="l00293" name="l00293"></a><span class="lineno"> 293</span> float2 temp[<a class="code hl_define" href="backend_2metal_2kernels_2fft_8h.html#a7b6e56afa21f022c5e754b000955735a">MAX_RADIX</a>];</div>
@@ -399,26 +413,26 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00295" name="l00295"></a><span class="lineno"> 295</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> e = 0; e &lt; <a class="code hl_variable" href="backend_2metal_2kernels_2fft_8h.html#ad395c11e6f2aee72cd1928fba93a35a3">elems_per_thread_</a>; e++) {</div>
<div class="line"><a id="l00296" name="l00296"></a><span class="lineno"> 296</span> <span class="keywordtype">short</span> index = <a class="code hl_function" href="namespacemetal.html#a6653b28c9473087141eddce39878d4d3">metal::min</a>(fft_idx * <a class="code hl_variable" href="backend_2metal_2kernels_2fft_8h.html#ad395c11e6f2aee72cd1928fba93a35a3">elems_per_thread_</a> + e, max_index);</div>
<div class="line"><a id="l00297" name="l00297"></a><span class="lineno"> 297</span> <span class="keywordtype">short</span> g_q = raders_g_q[index / rader_m];</div>
<div class="line"><a id="l00298" name="l00298"></a><span class="lineno"> 298</span> temp[e] = <a class="code hl_variable" href="backend_2metal_2allocator_8h.html#a15aa5cc1baf29be08d55cca88509e697">buf</a>[rader_m + (g_q - 1) * rader_m + index % rader_m];</div>
<div class="line"><a id="l00298" name="l00298"></a><span class="lineno"> 298</span> temp[e] = buf[rader_m + (g_q - 1) * rader_m + index % rader_m];</div>
<div class="line"><a id="l00299" name="l00299"></a><span class="lineno"> 299</span> }</div>
<div class="line"><a id="l00300" name="l00300"></a><span class="lineno"> 300</span> </div>
<div class="line"><a id="l00301" name="l00301"></a><span class="lineno"> 301</span> threadgroup_barrier(mem_flags::mem_threadgroup);</div>
<div class="line"><a id="l00302" name="l00302"></a><span class="lineno"> 302</span> </div>
<div class="line"><a id="l00303" name="l00303"></a><span class="lineno"> 303</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> e = 0; e &lt; <a class="code hl_variable" href="backend_2metal_2kernels_2fft_8h.html#ad395c11e6f2aee72cd1928fba93a35a3">elems_per_thread_</a>; e++) {</div>
<div class="line"><a id="l00304" name="l00304"></a><span class="lineno"> 304</span> <span class="keywordtype">short</span> index = <a class="code hl_function" href="namespacemetal.html#a6653b28c9473087141eddce39878d4d3">metal::min</a>(fft_idx * <a class="code hl_variable" href="backend_2metal_2kernels_2fft_8h.html#ad395c11e6f2aee72cd1928fba93a35a3">elems_per_thread_</a> + e, max_index);</div>
<div class="line"><a id="l00305" name="l00305"></a><span class="lineno"> 305</span> <a class="code hl_variable" href="backend_2metal_2allocator_8h.html#a15aa5cc1baf29be08d55cca88509e697">buf</a>[index + rader_m] = temp[e];</div>
<div class="line"><a id="l00305" name="l00305"></a><span class="lineno"> 305</span> buf[index + rader_m] = temp[e];</div>
<div class="line"><a id="l00306" name="l00306"></a><span class="lineno"> 306</span> }</div>
<div class="line"><a id="l00307" name="l00307"></a><span class="lineno"> 307</span> </div>
<div class="line"><a id="l00308" name="l00308"></a><span class="lineno"> 308</span> threadgroup_barrier(mem_flags::mem_threadgroup);</div>
<div class="line"><a id="l00309" name="l00309"></a><span class="lineno"> 309</span> </div>
<div class="line"><a id="l00310" name="l00310"></a><span class="lineno"> 310</span> <span class="comment">// Rader FFT on x[rader_m:]</span></div>
<div class="line"><a id="l00311" name="l00311"></a><span class="lineno"> 311</span> <span class="keywordtype">int</span> p = 1;</div>
<div class="line"><a id="l00312" name="l00312"></a><span class="lineno"> 312</span> <a class="code hl_function" href="backend_2metal_2kernels_2fft_8h.html#a050ead8fa5cacdaec13d68ca3c0dcb81">perform_fft</a>&lt;<span class="comment">/*rader=*/</span><span class="keyword">true</span>&gt;(fft_idx, &amp;p, m, n - rader_m, <a class="code hl_variable" href="backend_2metal_2allocator_8h.html#a15aa5cc1baf29be08d55cca88509e697">buf</a> + rader_m);</div>
<div class="line"><a id="l00312" name="l00312"></a><span class="lineno"> 312</span> <a class="code hl_function" href="backend_2metal_2kernels_2fft_8h.html#a050ead8fa5cacdaec13d68ca3c0dcb81">perform_fft</a>&lt;<span class="comment">/*rader=*/</span><span class="keyword">true</span>&gt;(fft_idx, &amp;p, m, n - rader_m, buf + rader_m);</div>
<div class="line"><a id="l00313" name="l00313"></a><span class="lineno"> 313</span> </div>
<div class="line"><a id="l00314" name="l00314"></a><span class="lineno"> 314</span> <span class="comment">// x_1 + ... + x_n is computed for us in the first FFT step so</span></div>
<div class="line"><a id="l00315" name="l00315"></a><span class="lineno"> 315</span> <span class="comment">// we save it in the first rader_m indices of the array for later.</span></div>
<div class="line"><a id="l00316" name="l00316"></a><span class="lineno"> 316</span> <span class="keywordtype">int</span> x_sum_index = <a class="code hl_function" href="namespacemetal.html#a6653b28c9473087141eddce39878d4d3">metal::min</a>(fft_idx, rader_m - 1);</div>
<div class="line"><a id="l00317" name="l00317"></a><span class="lineno"> 317</span> <a class="code hl_variable" href="backend_2metal_2allocator_8h.html#a15aa5cc1baf29be08d55cca88509e697">buf</a>[x_sum_index] = <a class="code hl_variable" href="backend_2metal_2allocator_8h.html#a15aa5cc1baf29be08d55cca88509e697">buf</a>[rader_m + x_sum_index * (rader_n - 1)];</div>
<div class="line"><a id="l00317" name="l00317"></a><span class="lineno"> 317</span> buf[x_sum_index] = buf[rader_m + x_sum_index * (rader_n - 1)];</div>
<div class="line"><a id="l00318" name="l00318"></a><span class="lineno"> 318</span> </div>
<div class="line"><a id="l00319" name="l00319"></a><span class="lineno"> 319</span> float2 inv = {1.0f, -1.0f};</div>
<div class="line"><a id="l00320" name="l00320"></a><span class="lineno"> 320</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> e = 0; e &lt; <a class="code hl_variable" href="backend_2metal_2kernels_2fft_8h.html#ad395c11e6f2aee72cd1928fba93a35a3">elems_per_thread_</a>; e++) {</div>
@@ -426,7 +440,7 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00322" name="l00322"></a><span class="lineno"> 322</span> <span class="keywordtype">short</span> interleaved_index =</div>
<div class="line"><a id="l00323" name="l00323"></a><span class="lineno"> 323</span> index / rader_m + (index % rader_m) * (rader_n - 1);</div>
<div class="line"><a id="l00324" name="l00324"></a><span class="lineno"> 324</span> temp[e] = <a class="code hl_function" href="radix_8h.html#a5bfc53b531214c9ce277bebc18aa67d6">complex_mul</a>(</div>
<div class="line"><a id="l00325" name="l00325"></a><span class="lineno"> 325</span> <a class="code hl_variable" href="backend_2metal_2allocator_8h.html#a15aa5cc1baf29be08d55cca88509e697">buf</a>[rader_m + interleaved_index],</div>
<div class="line"><a id="l00325" name="l00325"></a><span class="lineno"> 325</span> buf[rader_m + interleaved_index],</div>
<div class="line"><a id="l00326" name="l00326"></a><span class="lineno"> 326</span> raders_b_q[interleaved_index % (rader_n - 1)]);</div>
<div class="line"><a id="l00327" name="l00327"></a><span class="lineno"> 327</span> }</div>
<div class="line"><a id="l00328" name="l00328"></a><span class="lineno"> 328</span> </div>
@@ -434,25 +448,25 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00330" name="l00330"></a><span class="lineno"> 330</span> </div>
<div class="line"><a id="l00331" name="l00331"></a><span class="lineno"> 331</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> e = 0; e &lt; <a class="code hl_variable" href="backend_2metal_2kernels_2fft_8h.html#ad395c11e6f2aee72cd1928fba93a35a3">elems_per_thread_</a>; e++) {</div>
<div class="line"><a id="l00332" name="l00332"></a><span class="lineno"> 332</span> <span class="keywordtype">short</span> index = <a class="code hl_function" href="namespacemetal.html#a6653b28c9473087141eddce39878d4d3">metal::min</a>(fft_idx * <a class="code hl_variable" href="backend_2metal_2kernels_2fft_8h.html#ad395c11e6f2aee72cd1928fba93a35a3">elems_per_thread_</a> + e, max_index);</div>
<div class="line"><a id="l00333" name="l00333"></a><span class="lineno"> 333</span> <a class="code hl_variable" href="backend_2metal_2allocator_8h.html#a15aa5cc1baf29be08d55cca88509e697">buf</a>[rader_m + index] = temp[e] * inv;</div>
<div class="line"><a id="l00333" name="l00333"></a><span class="lineno"> 333</span> buf[rader_m + index] = temp[e] * inv;</div>
<div class="line"><a id="l00334" name="l00334"></a><span class="lineno"> 334</span> }</div>
<div class="line"><a id="l00335" name="l00335"></a><span class="lineno"> 335</span> </div>
<div class="line"><a id="l00336" name="l00336"></a><span class="lineno"> 336</span> threadgroup_barrier(mem_flags::mem_threadgroup);</div>
<div class="line"><a id="l00337" name="l00337"></a><span class="lineno"> 337</span> </div>
<div class="line"><a id="l00338" name="l00338"></a><span class="lineno"> 338</span> <span class="comment">// Rader IFFT on x[rader_m:]</span></div>
<div class="line"><a id="l00339" name="l00339"></a><span class="lineno"> 339</span> p = 1;</div>
<div class="line"><a id="l00340" name="l00340"></a><span class="lineno"> 340</span> <a class="code hl_function" href="backend_2metal_2kernels_2fft_8h.html#a050ead8fa5cacdaec13d68ca3c0dcb81">perform_fft</a>&lt;<span class="comment">/*rader=*/</span><span class="keyword">true</span>&gt;(fft_idx, &amp;p, m, n - rader_m, <a class="code hl_variable" href="backend_2metal_2allocator_8h.html#a15aa5cc1baf29be08d55cca88509e697">buf</a> + rader_m);</div>
<div class="line"><a id="l00340" name="l00340"></a><span class="lineno"> 340</span> <a class="code hl_function" href="backend_2metal_2kernels_2fft_8h.html#a050ead8fa5cacdaec13d68ca3c0dcb81">perform_fft</a>&lt;<span class="comment">/*rader=*/</span><span class="keyword">true</span>&gt;(fft_idx, &amp;p, m, n - rader_m, buf + rader_m);</div>
<div class="line"><a id="l00341" name="l00341"></a><span class="lineno"> 341</span> </div>
<div class="line"><a id="l00342" name="l00342"></a><span class="lineno"> 342</span> float2 rader_inv_factor = {1.0f / (rader_n - 1), -1.0f / (rader_n - 1)};</div>
<div class="line"><a id="l00343" name="l00343"></a><span class="lineno"> 343</span> </div>
<div class="line"><a id="l00344" name="l00344"></a><span class="lineno"> 344</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> e = 0; e &lt; <a class="code hl_variable" href="backend_2metal_2kernels_2fft_8h.html#ad395c11e6f2aee72cd1928fba93a35a3">elems_per_thread_</a>; e++) {</div>
<div class="line"><a id="l00345" name="l00345"></a><span class="lineno"> 345</span> <span class="keywordtype">short</span> index = <a class="code hl_function" href="namespacemetal.html#a6653b28c9473087141eddce39878d4d3">metal::min</a>(fft_idx * <a class="code hl_variable" href="backend_2metal_2kernels_2fft_8h.html#ad395c11e6f2aee72cd1928fba93a35a3">elems_per_thread_</a> + e, n - rader_m - 1);</div>
<div class="line"><a id="l00346" name="l00346"></a><span class="lineno"> 346</span> <span class="keywordtype">short</span> diff_index = index / (rader_n - 1) - x_0_index;</div>
<div class="line"><a id="l00347" name="l00347"></a><span class="lineno"> 347</span> temp[e] = <a class="code hl_variable" href="backend_2metal_2allocator_8h.html#a15aa5cc1baf29be08d55cca88509e697">buf</a>[rader_m + index] * rader_inv_factor + x_0[diff_index];</div>
<div class="line"><a id="l00347" name="l00347"></a><span class="lineno"> 347</span> temp[e] = buf[rader_m + index] * rader_inv_factor + x_0[diff_index];</div>
<div class="line"><a id="l00348" name="l00348"></a><span class="lineno"> 348</span> }</div>
<div class="line"><a id="l00349" name="l00349"></a><span class="lineno"> 349</span> </div>
<div class="line"><a id="l00350" name="l00350"></a><span class="lineno"> 350</span> <span class="comment">// Use the sum of elements that was computed in the first FFT</span></div>
<div class="line"><a id="l00351" name="l00351"></a><span class="lineno"> 351</span> float2 x_sum = <a class="code hl_variable" href="backend_2metal_2allocator_8h.html#a15aa5cc1baf29be08d55cca88509e697">buf</a>[x_0_index] + x_0[0];</div>
<div class="line"><a id="l00351" name="l00351"></a><span class="lineno"> 351</span> float2 x_sum = buf[x_0_index] + x_0[0];</div>
<div class="line"><a id="l00352" name="l00352"></a><span class="lineno"> 352</span> </div>
<div class="line"><a id="l00353" name="l00353"></a><span class="lineno"> 353</span> threadgroup_barrier(mem_flags::mem_threadgroup);</div>
<div class="line"><a id="l00354" name="l00354"></a><span class="lineno"> 354</span> </div>
@@ -461,15 +475,15 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00357" name="l00357"></a><span class="lineno"> 357</span> <span class="keywordtype">short</span> g_q_index = index % (rader_n - 1);</div>
<div class="line"><a id="l00358" name="l00358"></a><span class="lineno"> 358</span> <span class="keywordtype">short</span> g_q = raders_g_minus_q[g_q_index];</div>
<div class="line"><a id="l00359" name="l00359"></a><span class="lineno"> 359</span> <span class="keywordtype">short</span> out_index = index - g_q_index + g_q + (index / (rader_n - 1));</div>
<div class="line"><a id="l00360" name="l00360"></a><span class="lineno"> 360</span> <a class="code hl_variable" href="backend_2metal_2allocator_8h.html#a15aa5cc1baf29be08d55cca88509e697">buf</a>[out_index] = temp[e];</div>
<div class="line"><a id="l00360" name="l00360"></a><span class="lineno"> 360</span> buf[out_index] = temp[e];</div>
<div class="line"><a id="l00361" name="l00361"></a><span class="lineno"> 361</span> }</div>
<div class="line"><a id="l00362" name="l00362"></a><span class="lineno"> 362</span> </div>
<div class="line"><a id="l00363" name="l00363"></a><span class="lineno"> 363</span> <a class="code hl_variable" href="backend_2metal_2allocator_8h.html#a15aa5cc1baf29be08d55cca88509e697">buf</a>[x_0_index * rader_n] = x_sum;</div>
<div class="line"><a id="l00363" name="l00363"></a><span class="lineno"> 363</span> buf[x_0_index * rader_n] = x_sum;</div>
<div class="line"><a id="l00364" name="l00364"></a><span class="lineno"> 364</span> </div>
<div class="line"><a id="l00365" name="l00365"></a><span class="lineno"> 365</span> threadgroup_barrier(mem_flags::mem_threadgroup);</div>
<div class="line"><a id="l00366" name="l00366"></a><span class="lineno"> 366</span> </div>
<div class="line"><a id="l00367" name="l00367"></a><span class="lineno"> 367</span> p = rader_n;</div>
<div class="line"><a id="l00368" name="l00368"></a><span class="lineno"> 368</span> <a class="code hl_function" href="backend_2metal_2kernels_2fft_8h.html#a050ead8fa5cacdaec13d68ca3c0dcb81">perform_fft</a>(fft_idx, &amp;p, m, n, <a class="code hl_variable" href="backend_2metal_2allocator_8h.html#a15aa5cc1baf29be08d55cca88509e697">buf</a>);</div>
<div class="line"><a id="l00368" name="l00368"></a><span class="lineno"> 368</span> <a class="code hl_function" href="backend_2metal_2kernels_2fft_8h.html#a050ead8fa5cacdaec13d68ca3c0dcb81">perform_fft</a>(fft_idx, &amp;p, m, n, buf);</div>
<div class="line"><a id="l00369" name="l00369"></a><span class="lineno"> 369</span> </div>
<div class="line"><a id="l00370" name="l00370"></a><span class="lineno"> 370</span> read_writer.write();</div>
<div class="line"><a id="l00371" name="l00371"></a><span class="lineno"> 371</span>}</div>
@@ -520,22 +534,22 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00414" name="l00414"></a><span class="lineno"> 414</span> <span class="keywordtype">int</span> fft_idx = elem.z; <span class="comment">// Thread index in DFT</span></div>
<div class="line"><a id="l00415" name="l00415"></a><span class="lineno"> 415</span> <span class="keywordtype">int</span> m = grid.z; <span class="comment">// Threads per DFT</span></div>
<div class="line"><a id="l00416" name="l00416"></a><span class="lineno"> 416</span> <span class="keywordtype">int</span> tg_idx = elem.y * n; <span class="comment">// Index of this DFT in threadgroup</span></div>
<div class="line"><a id="l00417" name="l00417"></a><span class="lineno"> 417</span> threadgroup float2* <a class="code hl_variable" href="backend_2metal_2allocator_8h.html#a15aa5cc1baf29be08d55cca88509e697">buf</a> = &amp;shared_in[tg_idx];</div>
<div class="line"><a id="l00417" name="l00417"></a><span class="lineno"> 417</span> threadgroup float2* buf = &amp;shared_in[tg_idx];</div>
<div class="line"><a id="l00418" name="l00418"></a><span class="lineno"> 418</span> </div>
<div class="line"><a id="l00419" name="l00419"></a><span class="lineno"> 419</span> <span class="comment">// fft</span></div>
<div class="line"><a id="l00420" name="l00420"></a><span class="lineno"> 420</span> <a class="code hl_function" href="backend_2metal_2kernels_2fft_8h.html#a050ead8fa5cacdaec13d68ca3c0dcb81">perform_fft</a>(fft_idx, &amp;p, m, n, <a class="code hl_variable" href="backend_2metal_2allocator_8h.html#a15aa5cc1baf29be08d55cca88509e697">buf</a>);</div>
<div class="line"><a id="l00420" name="l00420"></a><span class="lineno"> 420</span> <a class="code hl_function" href="backend_2metal_2kernels_2fft_8h.html#a050ead8fa5cacdaec13d68ca3c0dcb81">perform_fft</a>(fft_idx, &amp;p, m, n, buf);</div>
<div class="line"><a id="l00421" name="l00421"></a><span class="lineno"> 421</span> </div>
<div class="line"><a id="l00422" name="l00422"></a><span class="lineno"> 422</span> float2 inv = float2(1.0f, -1.0f);</div>
<div class="line"><a id="l00423" name="l00423"></a><span class="lineno"> 423</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> t = 0; t &lt; <a class="code hl_variable" href="backend_2metal_2kernels_2fft_8h.html#ad395c11e6f2aee72cd1928fba93a35a3">elems_per_thread_</a>; t++) {</div>
<div class="line"><a id="l00424" name="l00424"></a><span class="lineno"> 424</span> <span class="keywordtype">int</span> index = fft_idx + t * m;</div>
<div class="line"><a id="l00425" name="l00425"></a><span class="lineno"> 425</span> <a class="code hl_variable" href="backend_2metal_2allocator_8h.html#a15aa5cc1baf29be08d55cca88509e697">buf</a>[index] = <a class="code hl_function" href="radix_8h.html#a5bfc53b531214c9ce277bebc18aa67d6">complex_mul</a>(<a class="code hl_variable" href="backend_2metal_2allocator_8h.html#a15aa5cc1baf29be08d55cca88509e697">buf</a>[index], w_q[index]) * inv;</div>
<div class="line"><a id="l00425" name="l00425"></a><span class="lineno"> 425</span> buf[index] = <a class="code hl_function" href="radix_8h.html#a5bfc53b531214c9ce277bebc18aa67d6">complex_mul</a>(buf[index], w_q[index]) * inv;</div>
<div class="line"><a id="l00426" name="l00426"></a><span class="lineno"> 426</span> }</div>
<div class="line"><a id="l00427" name="l00427"></a><span class="lineno"> 427</span> </div>
<div class="line"><a id="l00428" name="l00428"></a><span class="lineno"> 428</span> threadgroup_barrier(mem_flags::mem_threadgroup);</div>
<div class="line"><a id="l00429" name="l00429"></a><span class="lineno"> 429</span> </div>
<div class="line"><a id="l00430" name="l00430"></a><span class="lineno"> 430</span> <span class="comment">// ifft</span></div>
<div class="line"><a id="l00431" name="l00431"></a><span class="lineno"> 431</span> p = 1;</div>
<div class="line"><a id="l00432" name="l00432"></a><span class="lineno"> 432</span> <a class="code hl_function" href="backend_2metal_2kernels_2fft_8h.html#a050ead8fa5cacdaec13d68ca3c0dcb81">perform_fft</a>(fft_idx, &amp;p, m, n, <a class="code hl_variable" href="backend_2metal_2allocator_8h.html#a15aa5cc1baf29be08d55cca88509e697">buf</a>);</div>
<div class="line"><a id="l00432" name="l00432"></a><span class="lineno"> 432</span> <a class="code hl_function" href="backend_2metal_2kernels_2fft_8h.html#a050ead8fa5cacdaec13d68ca3c0dcb81">perform_fft</a>(fft_idx, &amp;p, m, n, buf);</div>
<div class="line"><a id="l00433" name="l00433"></a><span class="lineno"> 433</span> </div>
<div class="line"><a id="l00434" name="l00434"></a><span class="lineno"> 434</span> read_writer.write_padded(length, w_k);</div>
<div class="line"><a id="l00435" name="l00435"></a><span class="lineno"> 435</span>}</div>
@@ -566,7 +580,7 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00458" name="l00458"></a><span class="lineno"> 458</span> <span class="keywordtype">int</span> fft_idx = elem.z;</div>
<div class="line"><a id="l00459" name="l00459"></a><span class="lineno"> 459</span> </div>
<div class="line"><a id="l00460" name="l00460"></a><span class="lineno"> 460</span> threadgroup float2 shared_in[tg_mem_size];</div>
<div class="line"><a id="l00461" name="l00461"></a><span class="lineno"> 461</span> threadgroup float2* <a class="code hl_variable" href="backend_2metal_2allocator_8h.html#a15aa5cc1baf29be08d55cca88509e697">buf</a> = &amp;shared_in[elem.y * n];</div>
<div class="line"><a id="l00461" name="l00461"></a><span class="lineno"> 461</span> threadgroup float2* buf = &amp;shared_in[elem.y * n];</div>
<div class="line"><a id="l00462" name="l00462"></a><span class="lineno"> 462</span> </div>
<div class="line"><a id="l00463" name="l00463"></a><span class="lineno"> 463</span> <span class="keyword">using </span>read_writer_t = <a class="code hl_struct" href="struct_read_writer.html">ReadWriter&lt;in_T, out_T, step, real&gt;</a>;</div>
<div class="line"><a id="l00464" name="l00464"></a><span class="lineno"> 464</span> read_writer_t read_writer = read_writer_t(</div>
@@ -588,12 +602,11 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00480" name="l00480"></a><span class="lineno"> 480</span> threadgroup_barrier(mem_flags::mem_threadgroup);</div>
<div class="line"><a id="l00481" name="l00481"></a><span class="lineno"> 481</span> </div>
<div class="line"><a id="l00482" name="l00482"></a><span class="lineno"> 482</span> <span class="keywordtype">int</span> p = 1;</div>
<div class="line"><a id="l00483" name="l00483"></a><span class="lineno"> 483</span> <a class="code hl_function" href="backend_2metal_2kernels_2fft_8h.html#a050ead8fa5cacdaec13d68ca3c0dcb81">perform_fft</a>(fft_idx, &amp;p, m, n, <a class="code hl_variable" href="backend_2metal_2allocator_8h.html#a15aa5cc1baf29be08d55cca88509e697">buf</a>);</div>
<div class="line"><a id="l00483" name="l00483"></a><span class="lineno"> 483</span> <a class="code hl_function" href="backend_2metal_2kernels_2fft_8h.html#a050ead8fa5cacdaec13d68ca3c0dcb81">perform_fft</a>(fft_idx, &amp;p, m, n, buf);</div>
<div class="line"><a id="l00484" name="l00484"></a><span class="lineno"> 484</span> </div>
<div class="line"><a id="l00485" name="l00485"></a><span class="lineno"> 485</span> read_writer.write_strided(stride, overall_n);</div>
<div class="line"><a id="l00486" name="l00486"></a><span class="lineno"> 486</span>}</div>
</div>
<div class="ttc" id="abackend_2metal_2allocator_8h_html_a15aa5cc1baf29be08d55cca88509e697"><div class="ttname"><a href="backend_2metal_2allocator_8h.html#a15aa5cc1baf29be08d55cca88509e697">buf</a></div><div class="ttdeci">MTL::Buffer * buf</div><div class="ttdef"><b>Definition</b> allocator.h:39</div></div>
<div class="ttc" id="abackend_2metal_2kernels_2fft_8h_html_a020469d1aca557ff1b49414f121dedbb"><div class="ttname"><a href="backend_2metal_2kernels_2fft_8h.html#a020469d1aca557ff1b49414f121dedbb">rader_6_steps_</a></div><div class="ttdeci">static constant constexpr const int rader_6_steps_</div><div class="ttdef"><b>Definition</b> fft.h:43</div></div>
<div class="ttc" id="abackend_2metal_2kernels_2fft_8h_html_a050ead8fa5cacdaec13d68ca3c0dcb81"><div class="ttname"><a href="backend_2metal_2kernels_2fft_8h.html#a050ead8fa5cacdaec13d68ca3c0dcb81">perform_fft</a></div><div class="ttdeci">METAL_FUNC void perform_fft(int fft_idx, thread int *p, int m, int n, threadgroup float2 *buf)</div><div class="ttdef"><b>Definition</b> fft.h:159</div></div>
<div class="ttc" id="abackend_2metal_2kernels_2fft_8h_html_a0abc609e9756475800e996775a96a87e"><div class="ttname"><a href="backend_2metal_2kernels_2fft_8h.html#a0abc609e9756475800e996775a96a87e">bluestein_fft</a></div><div class="ttdeci">void bluestein_fft(const device in_T *in, device out_T *out, const device float2 *w_q, const device float2 *w_k, constant const int &amp;length, constant const int &amp;n, constant const int &amp;batch_size, uint3 elem, uint3 grid)</div><div class="ttdef"><b>Definition</b> fft.h:374</div></div>
@@ -649,10 +662,13 @@ $(function(){ initResizable(false); });
<div class="ttc" id="asteel_2defines_8h_html_a90b91c866313ffa46eff6d9cc944ad2b"><div class="ttname"><a href="steel_2defines_8h.html#a90b91c866313ffa46eff6d9cc944ad2b">STEEL_CONST</a></div><div class="ttdeci">#define STEEL_CONST</div><div class="ttdef"><b>Definition</b> defines.h:3</div></div>
<div class="ttc" id="astruct_read_writer_html"><div class="ttname"><a href="struct_read_writer.html">ReadWriter</a></div><div class="ttdef"><b>Definition</b> readwrite.h:35</div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0
</small></address>
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_d0c977ea65824390717cdb7efc36c157.html">metal</a></li><li class="navelem"><a class="el" href="dir_70a37effa88bcbd6b791977fa1e64356.html">kernels</a></li><li class="navelem"><a class="el" href="backend_2metal_2kernels_2fft_8h.html">fft.h</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.1 </li>
</ul>
</div>
</body>
</html>
+41 -24
View File
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.12.0"/>
<meta name="generator" content="Doxygen 1.13.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MLX: mlx/backend/metal/kernels/jit/bf16.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -11,11 +11,18 @@
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
@@ -28,12 +35,24 @@
<div id="projectname">MLX
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.12.0 -->
<!-- Generated by Doxygen 1.13.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
@@ -44,22 +63,23 @@ var searchBox = new SearchBox("searchBox", "search/",'.html');
$(function() { codefold.init(0); });
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search',false);
$(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){ initResizable(false); });
$(function(){initNavTree('backend_2metal_2kernels_2jit_2bf16_8h.html',''); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
@@ -81,12 +101,6 @@ $(function(){ initResizable(false); });
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_d0c977ea65824390717cdb7efc36c157.html">metal</a></li><li class="navelem"><a class="el" href="dir_70a37effa88bcbd6b791977fa1e64356.html">kernels</a></li><li class="navelem"><a class="el" href="dir_fb5e52e7ad5a84a63db2993d12f7610c.html">jit</a></li> </ul>
</div>
</div><!-- top -->
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#define-members">Macros</a> </div>
@@ -151,10 +165,13 @@ Macros</h2></td></tr>
</div>
</div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0
</small></address>
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_d0c977ea65824390717cdb7efc36c157.html">metal</a></li><li class="navelem"><a class="el" href="dir_70a37effa88bcbd6b791977fa1e64356.html">kernels</a></li><li class="navelem"><a class="el" href="dir_fb5e52e7ad5a84a63db2993d12f7610c.html">jit</a></li><li class="navelem"><a class="el" href="backend_2metal_2kernels_2jit_2bf16_8h.html">bf16.h</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.1 </li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,6 @@
var backend_2metal_2kernels_2jit_2bf16_8h =
[
[ "jit_else", "backend_2metal_2kernels_2jit_2bf16_8h.html#a4b2f08732045407adc7ee181e39e5ae3", null ],
[ "jit_endif", "backend_2metal_2kernels_2jit_2bf16_8h.html#a5049b44a1fffcb837e0c470ae4cafc56", null ],
[ "jit_if", "backend_2metal_2kernels_2jit_2bf16_8h.html#aaf5bb88c2349054a6c4c2aefee63d3d2", null ]
];
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.12.0"/>
<meta name="generator" content="Doxygen 1.13.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MLX: mlx/backend/metal/kernels/jit/bf16.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -11,11 +11,18 @@
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
@@ -28,12 +35,24 @@
<div id="projectname">MLX
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.12.0 -->
<!-- Generated by Doxygen 1.13.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
@@ -44,22 +63,23 @@ var searchBox = new SearchBox("searchBox", "search/",'.html');
$(function() { codefold.init(0); });
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search',false);
$(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){ initResizable(false); });
$(function(){initNavTree('backend_2metal_2kernels_2jit_2bf16_8h_source.html',''); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
@@ -81,12 +101,6 @@ $(function(){ initResizable(false); });
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_d0c977ea65824390717cdb7efc36c157.html">metal</a></li><li class="navelem"><a class="el" href="dir_70a37effa88bcbd6b791977fa1e64356.html">kernels</a></li><li class="navelem"><a class="el" href="dir_fb5e52e7ad5a84a63db2993d12f7610c.html">jit</a></li> </ul>
</div>
</div><!-- top -->
<div id="doc-content">
<div class="header">
<div class="headertitle"><div class="title">bf16.h</div></div>
</div><!--header-->
@@ -112,10 +126,13 @@ $(function(){ initResizable(false); });
<div class="ttc" id="abackend_2metal_2kernels_2jit_2bf16_8h_html_aaf5bb88c2349054a6c4c2aefee63d3d2"><div class="ttname"><a href="backend_2metal_2kernels_2jit_2bf16_8h.html#aaf5bb88c2349054a6c4c2aefee63d3d2">jit_if</a></div><div class="ttdeci">#define jit_if</div><div class="ttdef"><b>Definition</b> bf16.h:4</div></div>
<div class="ttc" id="abackend_2metal_2kernels_2metal__3__0_2bf16_8h_html"><div class="ttname"><a href="backend_2metal_2kernels_2metal__3__0_2bf16_8h.html">bf16.h</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0
</small></address>
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_d0c977ea65824390717cdb7efc36c157.html">metal</a></li><li class="navelem"><a class="el" href="dir_70a37effa88bcbd6b791977fa1e64356.html">kernels</a></li><li class="navelem"><a class="el" href="dir_fb5e52e7ad5a84a63db2993d12f7610c.html">jit</a></li><li class="navelem"><a class="el" href="backend_2metal_2kernels_2jit_2bf16_8h.html">bf16.h</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.1 </li>
</ul>
</div>
</body>
</html>
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,358 @@
var backend_2metal_2kernels_2metal__3__0_2bf16_8h =
[
[ "_MLX_BFloat16", "struct___m_l_x___b_float16.html", "struct___m_l_x___b_float16" ],
[ "_MLX_BFloat16::bits_to_bfloat_struct", "struct___m_l_x___b_float16_1_1bits__to__bfloat__struct.html", null ],
[ "metal::_numeric_limits_impl< bfloat16_t >", "structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html", "structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4" ],
[ "bfloat_binop", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7694892a131c0e31e5153c088cccb707", null ],
[ "bfloat_binop_base", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a78c92beda4436da9a2e520fa98c59f70", null ],
[ "bfloat_binop_helper", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ac7ff36230dab17e8f17b7a7c80888594", null ],
[ "bfloat_compop", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a330a0883503cb640f1cf628a7ca50239", null ],
[ "bfloat_inplace_op", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a4ac82467fbc674e990090f482b9c1e5c", null ],
[ "bfloat_inplace_op_addr_space_helper", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a1457da931c28fa4e2500daa4e6441e8b", null ],
[ "bfloat_inplace_op_addr_space_helper", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#af30a2cbd2c3415516203b83bd21872f8", null ],
[ "bfloat_inplace_op_helper", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#afe5988aa8147be2bafda6a5b7792fe15", null ],
[ "bfloat_inplace_op_helper", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a2846fd11b5e19b435e9f7ef0998c9b1d", null ],
[ "bfloat16_t", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7782de82393104dd4ad754ce3b316e82", null ],
[ "bfloat16_to_uint16", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a1420e191fa60d707dce327d0938e3088", null ],
[ "bfloat_bits_to_float", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a3b33ae338dc4f223d0f3c748de07bad1", null ],
[ "float_to_bfloat_bits", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a31ce5e8e860295fa236e0d4b0befeae1", null ],
[ "metal::isnan", "namespacemetal.html#a83320ba983d90dd1fa5847b6940dc0bb", null ],
[ "operator!=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#afc6e4fc5589bbf30f978f34868dd4e55", null ],
[ "operator!=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a6baa722c22d66c7510786bb275cb8cc2", null ],
[ "operator!=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#aa504a474ab6e00ebe2b1b7ed2f7d1ffb", null ],
[ "operator!=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a347c9bbf816bad2e9e5e91aa448f8b65", null ],
[ "operator!=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#aa6b99cde403405df1865c989e4ce845a", null ],
[ "operator!=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a2bbdcece13148826d3fe33af727bb79b", null ],
[ "operator!=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a3602117b4c61d5cd4fd72fb8e5f68bd6", null ],
[ "operator!=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#aa8d9f01582a0a9f01a666d110c74db2a", null ],
[ "operator!=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#abf5f3040227f021a5b84cf2eda248b2f", null ],
[ "operator!=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a33ea086b561c652f25833a5e1ded34dd", null ],
[ "operator!=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a204d13a881ae8d337f6efbb98673790c", null ],
[ "operator!=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#aeb1efa47c5f22cc0b35d49ccce73c406", null ],
[ "operator!=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a2721c088adfc9d73cde442d6badd2a6c", null ],
[ "operator*", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a8f06316063fc91747533105f256b55b5", null ],
[ "operator*", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7b3bce3f6f17089d87e13e91f580a581", null ],
[ "operator*", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a852689073c17596de4fb545bc046b380", null ],
[ "operator*", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a6278bd2e0e2805090b33ef666bf7f6bb", null ],
[ "operator*", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ad1a559ab88dbbb4fd2c7509d2c94e55b", null ],
[ "operator*", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7cd44d27fa9a4f13df39894c34fdb348", null ],
[ "operator*", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a87ab4b7a502430da664ccb8abd383058", null ],
[ "operator*", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a54ae7216b82c5cea362f6b83e1df3a9b", null ],
[ "operator*", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a168300bbd04d8e97c5e4218cb14ae378", null ],
[ "operator*", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#aecf703522d9ce32dfeefe1e6e903db06", null ],
[ "operator*", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a495ae2d9be5d97c4c6448fc4e50a03e1", null ],
[ "operator*", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#aee64dc1890abb6d1035361cb8c751f96", null ],
[ "operator*", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a5f997839cf49c24ab594a0dff486a7bc", null ],
[ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a13aa79165ec87710e977f33fe0361e91", null ],
[ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7232b0a0e193b3c6172d6fc2578bf419", null ],
[ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ab706af260b61f735b28464877d02137c", null ],
[ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a81f65b04a87a25c7eb1a751d1be9fa55", null ],
[ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ae97ab6c3ddcc2754b24f86319a5398be", null ],
[ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a917354f77eac26189da8a2f610a00074", null ],
[ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a99aa4cc110d1c7aa3b4c8c5cbf9235b7", null ],
[ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#aeff4c28986f98c23de1df17043edb0f5", null ],
[ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a1a2a683ff40490226eb1371fb905023d", null ],
[ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ade65ebca11e38d56408c512df89b99f4", null ],
[ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a979374b1dd4e0eaf602326fa901336d1", null ],
[ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a08c1f916302eb9d48c93f8b7260538fe", null ],
[ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a3ff4ff59f411010ac8502cfabda4bd6f", null ],
[ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#af725f935bfa0405e5ff17ede3ac47283", null ],
[ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a2179abbc91ce8763e96e39e1917bfa6e", null ],
[ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7dbf0c75df4817cb4ef8b60c417a89d0", null ],
[ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a4126fb7ed5bbb27a2332c543cf56a337", null ],
[ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a3796dcf819adb1ef8152f57ba63ff6b1", null ],
[ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#af4348ce3425dd99d069e8fdf06e25a3c", null ],
[ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ac815eec2c1b15a47b1c6ea6790e77d24", null ],
[ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#adc8e82b8f593b12c6d405e2250ab0f62", null ],
[ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#abd3d82e2dec1847e97eb8fc3bab2985a", null ],
[ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7c56980c234a04260b8b19298085e526", null ],
[ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ab070ea4676d10a10ff3e9379a4068a57", null ],
[ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a323a80492cd17a49e2c3dd18f8c8b5cc", null ],
[ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ab092d9790ef20fc0386707530aee89db", null ],
[ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a2c3c5f793b3d957d7295d7f1faabebee", null ],
[ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a8110fae7bcc34a0de5927546b24aa935", null ],
[ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a4611728172afea51860a77fdb06cafa0", null ],
[ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a738078eb7d5ff94ff48156a555d763a5", null ],
[ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ab840ff9de0cdd0e9afffb8baa2a850a3", null ],
[ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a0197e039d4c65bf49649a6f250c2d436", null ],
[ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#adb465776d3868bda0525d632ffc4d129", null ],
[ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#abff1fd2439e31e6e64a3d2fdee3c7821", null ],
[ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#aaab79d0b4c9e9bdc059ace6ec58c5b00", null ],
[ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ac66657077d55e94197b52b63acb50b7d", null ],
[ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ae4acef3e7ae7dfe359422503f894e885", null ],
[ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a0b8736e2ae24758b6e24ea72668df5b4", null ],
[ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a435f2f4256aadb1b57fd62bb7f733cf7", null ],
[ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a73416a7415f3fe31525e33419e5e8aab", null ],
[ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ad3565cc6fd1e088d052b1108aa065851", null ],
[ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a12a98d71d670b409b8065e0d61672d55", null ],
[ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a625dcb133f1f953f263e6200399866c6", null ],
[ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a383165ea838cc3feeee4d9cf54aa77cc", null ],
[ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#adc268cdbc30500f3009f5de2b2f0f67a", null ],
[ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ad920df9579603f0b0ee2689eba330617", null ],
[ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a0e4377b120d6305335d296e031ee5b30", null ],
[ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a16978f4b16d954ef4d4cf0f32f6c0b94", null ],
[ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a711693988c437c2fb4d7da505982fe21", null ],
[ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a5d00eb2ec2b0e15b2753d100694c45ae", null ],
[ "operator*=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a08b6071245513e1726ec68e3b63edc53", null ],
[ "operator+", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a09c1a797eb7f43742578680899932f50", null ],
[ "operator+", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a551b970f73bb4a3b287653021d000b60", null ],
[ "operator+", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a8b6c3fd9d068a2159084359df8b9b449", null ],
[ "operator+", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#aa415ce182fe7582d885fe633fc3527ce", null ],
[ "operator+", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a006763fae6e0577fc168ec9446f0f747", null ],
[ "operator+", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ab43932322f81bf322aa1b0deeee9a987", null ],
[ "operator+", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#af87dfa2122e9c76042dc41fb7f338a87", null ],
[ "operator+", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a43a225e7e548bb041f3a5d844faaf0da", null ],
[ "operator+", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a0a5bfe15d95ba540795f4c25ebfa4f07", null ],
[ "operator+", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a62f891b7dbba0000749cf338f594bedb", null ],
[ "operator+", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a12a47e8ac0be788edff57ae0a96d7830", null ],
[ "operator+", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#acd15d46ea5827a2a39898ccbb8352eb8", null ],
[ "operator+", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#af2737d09c887ee8cd43fdeabceddbe82", null ],
[ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a24ca436ab299a710263d65302532dd3b", null ],
[ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ab04f480aea9fbba0895068c7558dd400", null ],
[ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ae0c70198e236ffe1a98f79987c686419", null ],
[ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ab93ce536eb7998bee00de4af868e31a9", null ],
[ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a15573fefd880adefbba079b1c1bd8082", null ],
[ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ac45e9ca0c7155caebe3d0f7261518077", null ],
[ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#af5713afb3a62967a02c3c20661951ee4", null ],
[ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a4dd3cf0e5aa116ff330352a50c18cde7", null ],
[ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a77bab4481b41be50297b257e95058706", null ],
[ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a251780ac4592cc2b1a543e417ff57770", null ],
[ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a13b3338935440ae51ecc4a356093efc5", null ],
[ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ad0ae9e2b4874f991a2c853e1c1fe735d", null ],
[ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a104cf94cb9e359d1b6ef92ced2ce0c27", null ],
[ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a3c62ac679d6aa515144d40ebafe4a188", null ],
[ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7f1b84352a3ed6171444a43da1fc7e92", null ],
[ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#afb9a0e18c0e40c77e6143fb7d84ebfba", null ],
[ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7816a97d16b1d2f8a90227bb1da2f6ac", null ],
[ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#aee1bdf0ab2e445293708b476e8cfde3b", null ],
[ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a24381d991c2d570aa953694f396a69b5", null ],
[ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a5a0cb8544b4ebd2906ba8e7f2868e8de", null ],
[ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a194a6670cc25ade35a24b566f31af785", null ],
[ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#aa04cfcb52191fd23205a1a3572b46ae0", null ],
[ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a9ff5ab3aef1057fa083b53a65c8aba03", null ],
[ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#af1983edd26245e6e51c6e47354095e32", null ],
[ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#adf0cfd9a608a6fb3d57933e32e7d81d2", null ],
[ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ac244d140c6149726ea44174d3e836ca3", null ],
[ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7595740d4cc12924905d6bd1b99ee4da", null ],
[ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7b134429ea0c8493800ff8b465410f9c", null ],
[ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a3d0d689516c99003659c5d026847bd2e", null ],
[ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ad684bc2ae1a2a627cd3e4a4c641e2d77", null ],
[ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ae74bb0a3c12cd1a23f3d29ce307d6fb1", null ],
[ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a8cd55d1a579540eb450e12a8a8a950be", null ],
[ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a4bd92db6c8b9b5dc96332c7ae3eff8c7", null ],
[ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#af802541c4c65ee4442acd495de4d27fe", null ],
[ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a190e27077f0fba642a86f5c8f488bcc2", null ],
[ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ac1498acb8c3623b5f412f70ab6a6528b", null ],
[ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a4154f90ab7857ca856f9e15fe1bf5acf", null ],
[ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a007f58508b98bb79e5c323ed0dec89b6", null ],
[ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ad1e28448e35f4934075b397c34ba3d66", null ],
[ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ac188bd19f236b098d603b0d8acd08921", null ],
[ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a588ef0f7e03f306758524d378278976f", null ],
[ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a5d628a5bc4fa755610392f47a523a1f1", null ],
[ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ac06eb2fea47a09a8a8abdaa1aa9b4603", null ],
[ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#abce5ab327110c164f054b43ed47f79a0", null ],
[ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ab9ae6a51e2027b02cac9966e05f3ba68", null ],
[ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#aa7198e580e2a83c1fd01a4b6fdf86a80", null ],
[ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a8ad16afd7f1711de83c0cec5af868f76", null ],
[ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#aef9fa600d107b509f2e3df7d6b080e01", null ],
[ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a74751abec7086f85f4f26ced44f1ca1f", null ],
[ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7c790442f77f2437b482c4a55e224fc3", null ],
[ "operator+=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a5263b2463fecdc97f9521d00bffea059", null ],
[ "operator-", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a333f67614dbf8027439a7e124052cb85", null ],
[ "operator-", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a891aa4bf46c20a26a55061736aba25f1", null ],
[ "operator-", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#af69ef8f1d8ecae0e6f755bf1c46cf075", null ],
[ "operator-", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ab02f8646b47806e1d2038f248df03f06", null ],
[ "operator-", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ab789f8a400512ff27e36b3373170f0c5", null ],
[ "operator-", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a5868c85c988ec3432cf86d7df40e464d", null ],
[ "operator-", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a152366ab4e2ccc867e919af6c74ced91", null ],
[ "operator-", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a6aedc8d6d0980134ac69b96f22d9a855", null ],
[ "operator-", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7ad7ff44a3200853711869f7a577d931", null ],
[ "operator-", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a5bd875a54b79b2dcedf674807c3e53c5", null ],
[ "operator-", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ab27b26182c7c6e08af37e6d511fd9253", null ],
[ "operator-", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7f601b22ecc480132d82ad782e5363bf", null ],
[ "operator-", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ad03ef47e6cc7521bbfb45740dee20f88", null ],
[ "operator-", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a42bead8ef0beb9f3452128d64cd4df9d", null ],
[ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a0d3fb52437c677c5d0f1a3642384b15c", null ],
[ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ab225043bd02bb423930bc98aae9c2bca", null ],
[ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#aef62c7e3e494b6a511a7833c0d942a60", null ],
[ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7167343d90eb70e5a0d5fa9ec5398e94", null ],
[ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a9d06cceea5c179bcc608452188bd7d6a", null ],
[ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#afb3cd302e0b78902c62111dce4494fe8", null ],
[ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ab155f418f15cabd86ff942c6f9472ddb", null ],
[ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a9a837c3b9c4e42f53d7cd1ed0d266e2f", null ],
[ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a1dac193d9f1c8c0eb4473441895f8c58", null ],
[ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ac2f1e1f2365cfa531b1519aa9ff67695", null ],
[ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ad30726cc8b69fd300d33c2a46e123c28", null ],
[ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a9b31c363ebc93d592b6fa0e27b00335a", null ],
[ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a0aa9ffe056f49fda181bbacbd60556ea", null ],
[ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#abb884888f14086cc674657677cb4b8bc", null ],
[ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#aaa66dc6d7b2c5efbfaa97ca9c7872bd8", null ],
[ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#acf7af2284269544064b68e807064bba4", null ],
[ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ad2817d53fdd4b112babfb6f0b38c8f39", null ],
[ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#adda64cae388baac1f138b06dc8595237", null ],
[ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a513501355a5912a1263fd8b10864142b", null ],
[ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a8859b5b8dc241e4f58243c85d2630cc8", null ],
[ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a967a1d7b5664f616e5b6f2d257367f0c", null ],
[ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ada5685d99c2d6708d1c4ef826d68e879", null ],
[ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a38bb89f925eca4f9c042f6ee7a2c0193", null ],
[ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a696978d9401e09200045b2d8aad045c2", null ],
[ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a28d297705e29009197418546ef435393", null ],
[ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#aa705d87cf4b78e9d7c6b07dd0c66cac6", null ],
[ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ab4f4ecd62c3d8b3363d02019573dc9f1", null ],
[ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7003e1e5881e3d106257f22b6a3e59fe", null ],
[ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#aff19193e1b2cee29a8737318e95cc74a", null ],
[ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a726cecf778b8584b6f7c37db1b064576", null ],
[ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ac30c580713f354916088a7dc049ae4cd", null ],
[ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ae998d8f423a9fb73405cfbd4b836bc72", null ],
[ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a948579a4d9ba276523190b03b09578fb", null ],
[ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a542affc376726840647a6e93acf2c1a7", null ],
[ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#af20874a61c6c3f4c3fd045a96e806644", null ],
[ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a92d1348f201d78fcd474f75d5b23ef68", null ],
[ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a3165e37d393be50c2cfa9ddcba153684", null ],
[ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#aede0cc4179507b739849948f1a2fed4b", null ],
[ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a3816a35f8468156d59c239256c12dcf3", null ],
[ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a715c824ee8c87e0256114a85624d9949", null ],
[ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a279d09ab8542f1c1a8dc8173b65946b6", null ],
[ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a5a4b98a0a11db5b77cf9168df37c8bc7", null ],
[ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#add18cfe4c0d38e95c6dff6bab3e7a932", null ],
[ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a3eefe9a7f5fb226335ea687012f32d5c", null ],
[ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a76f5bd895b7214cbc3cea3440992718a", null ],
[ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7e1a6056f9c96f3c89fe204dbf103be5", null ],
[ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#aa332fae098e7c6dc23b98bc0026f1070", null ],
[ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7bc91aaaf476a37063264d1d53d862cc", null ],
[ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a491dadfae957cd7cc0c36188d910f6f6", null ],
[ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a31a3d8f2ff8038f7e0d717845c039808", null ],
[ "operator-=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ab1de7e7e7304ff3598925d2e69134764", null ],
[ "operator/", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a9f16a44e1c9836ca57edc1d7b93b5d7c", null ],
[ "operator/", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#aacaedf12f862c76457133336dd6fc446", null ],
[ "operator/", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ad8f7b11669736fbd6ed2e28211d877d4", null ],
[ "operator/", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a8c8ac6736440fdca366ebdefe2a12b9f", null ],
[ "operator/", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ad6399ba2b8708899739b4cdbb44add8d", null ],
[ "operator/", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a4720cc79ab2b8e39952ea9ef20e51250", null ],
[ "operator/", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#aa3277ae33976c70f7bd937ddff027b72", null ],
[ "operator/", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a584a513596de20663dad951a5b81695e", null ],
[ "operator/", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a59515695ebc48844345fa5120511aed1", null ],
[ "operator/", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ad6859b04680d0d26d75fd6c4dd74ee24", null ],
[ "operator/", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a998b1ba877a606aedf722ab46b290403", null ],
[ "operator/", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a72d10ec0e62949247da129eb3a83fb9b", null ],
[ "operator/", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#aa708a970a200822c99c0489f389469fa", null ],
[ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#af1a12a1efb618a57da6dd41ae18cb53c", null ],
[ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a5aa3b8c68a2b58d41ea33eaabbf83095", null ],
[ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a744f72ba83522fe3cc2a49a007b42543", null ],
[ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ab933bc3cdf9adfea10ab9dba5292c812", null ],
[ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a64f1136b17006f168ef837e17240814f", null ],
[ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a9f835a0a80c411580c97b65fdc5bdfd3", null ],
[ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a44522c2304c6396bbe6b9d32000f4b6f", null ],
[ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#adc9f32cc6f40768df4285fba2e4783c7", null ],
[ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a4358ee606e66ba2081fcf94f9c3b5915", null ],
[ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a90a1c5130db515db48624d8587edbb91", null ],
[ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a77c678665b34df7652dcde053ca73185", null ],
[ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a25e7c5d2ecf3375756d59074f333858f", null ],
[ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ae46d75b8046d557452d74513f1106710", null ],
[ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a17f47ec9cff60f8e1b3477a2793b7ac0", null ],
[ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#aef8e7e499ea9d432aa743d83c076f945", null ],
[ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ae71f66d814a03f6377c9d86cf0a2b5d7", null ],
[ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ad1e7ef6f065695d4b1d017547b60ef62", null ],
[ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a94686039356dfa9aa45608a8b0562fdc", null ],
[ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a65f30a2dc199134e35bc7c5d431b2263", null ],
[ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ae0614b6b199d8a65ae95d4621b118b82", null ],
[ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a4ae4a80fde67eea9a0a37b2803946544", null ],
[ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a08d2460e259b9106d90d889481ad60d5", null ],
[ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a5be23e296bbed3a885586a6424b1666e", null ],
[ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a3a0a3edbf1ba2314551454059c3f422b", null ],
[ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ad0125b6baba3065a87a174ec27aa9a61", null ],
[ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a284dfc702f0f67b9c233b87162eeabdd", null ],
[ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7172d84db640e6c49dff0d08dd64b53e", null ],
[ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#aa846fde89c7d2d18b18ef180a8a9c8a3", null ],
[ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a912393b7208fa45bd1e87f30b218b68b", null ],
[ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a0f7fd418408806ef498745c6fdb2c062", null ],
[ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#afba39221eb54e272aae79910b3cd7ef5", null ],
[ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#acb9f0aef9fbdfde8a4f46e33b0d6c52f", null ],
[ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a5cc74ad3e522d7104e6e2117751151ad", null ],
[ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ab8f211ea896fc5190004f3ad6ad8932f", null ],
[ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#aa251d6483d3b099d1b5311fbe6f0bce2", null ],
[ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#acf7cb9927bf09022088401923f2e1916", null ],
[ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a08e778be18e4a291c108fcc528b981d3", null ],
[ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a18963246f2b640874bef6dca7049f64d", null ],
[ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ac703495cb370b52526a5a2d36ae26038", null ],
[ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ac057d95a2bf087575584aa6f9a2c6bf5", null ],
[ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a303dfcc81ffd355f866f863d7d9f0fa5", null ],
[ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ab3b594321fb42b0c2da99954d1e0976c", null ],
[ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7e1bcf3bc06cbcbc304c0cdf729802bc", null ],
[ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a86b2a001cbec0d3a8d762a3c7ff47b0b", null ],
[ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a6b9e49ad9ea256d2d0220c0d81552602", null ],
[ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a0e2c2c2cb50b3a55ff213f18978aca35", null ],
[ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a4ca11d43174baf0a729f93b35eabcbea", null ],
[ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ab986ae2cec780a1f494b7b4468b7ba11", null ],
[ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a359edd4bcb8776861ceb26a3005624c0", null ],
[ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a4a0023e2fd08875156cd6ef747fbb5cd", null ],
[ "operator/=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#abbe42648a46092137b303ccd08f7df86", null ],
[ "operator<", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a9ef6a57b7185e9ca49e255fec1a44e25", null ],
[ "operator<", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#aab02c65bc38ea66335b2192ead4095a8", null ],
[ "operator<", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a2486f3b5de85b0d57f458d8f21f82b42", null ],
[ "operator<", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#abdd04257e6a73883b5f56f1186d0e906", null ],
[ "operator<", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a0736a76f56578d26ba1422dc8b744a18", null ],
[ "operator<", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a501cc01d5bf15d9f03aa28545f9624ea", null ],
[ "operator<", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#af80ff2020ec2c4b406c5fdae3fe55e63", null ],
[ "operator<", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ae91686513e284bcc9635833744bbdda1", null ],
[ "operator<", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a435a2aec4c777b4b184ff5d24992e8a1", null ],
[ "operator<", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a69984aaa05ae1d4fccccf7f57e8ecb4a", null ],
[ "operator<", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a24b1fa8998c892f90f8dde7c34fb10a5", null ],
[ "operator<", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a1b029e4ca72125a5f9471f582c819705", null ],
[ "operator<", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ac03f6eefb836373d37dc280b0d813d78", null ],
[ "operator<=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#af469c58cffeab488c681f4b33f02cd05", null ],
[ "operator<=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a5a81eae168dfafd299c2b94e3e8558cf", null ],
[ "operator<=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#acba9efe192d22b7781b4622103c7a944", null ],
[ "operator<=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7eac96f64ca42991caf819c8e8c8d2bc", null ],
[ "operator<=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a28f8d21c5eef047c701cf690ce9c2ef0", null ],
[ "operator<=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a08c7d12a0d16565fbf052dba2db8b22d", null ],
[ "operator<=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a0f360806708b95a3be400af0b8871b57", null ],
[ "operator<=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a0f486bf02c6ad5b9b6a96d3450f03e47", null ],
[ "operator<=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#aff100489cc40ad276c2d5d67a9df67db", null ],
[ "operator<=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a88c11cd37600de5480570da3d2ae5732", null ],
[ "operator<=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a14b56c687053ee2432398a25663c068f", null ],
[ "operator<=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a2b9de9624c0a507b4ead85f898ad9daf", null ],
[ "operator<=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a80d288f22cadfdf5e904410349e616a1", null ],
[ "operator==", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a49a13b06a325ed3cca4004b6a0cde065", null ],
[ "operator==", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a0aa3bfcfab53700488e5f386e6de60d5", null ],
[ "operator==", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ae753526b669fba27771089dc809abd66", null ],
[ "operator==", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ae86f5917847b1ec9f313996250f2e0be", null ],
[ "operator==", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#aa5fa1a8f2b39c3508fe38205469756d1", null ],
[ "operator==", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ac30a2c1fa6f172af903fdeb6a8632606", null ],
[ "operator==", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a3ae2091ada1e39e857fbc53c97bdb79f", null ],
[ "operator==", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a3936148781ab1c4f33f58d12c116f370", null ],
[ "operator==", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a05a4f197a71d0f16879032f44492bb79", null ],
[ "operator==", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#aab74ec4d33a64b92b908717d500f1ecf", null ],
[ "operator==", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#aeadc1f36c6bdc219294ce9341d80afa5", null ],
[ "operator==", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ab4e9ad547aa23daa351075e0ecc58fa2", null ],
[ "operator==", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ac7b4d295f3c7b1e09964f24f306422da", null ],
[ "operator>", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ae394c0a10e47d1d047854a888402eb57", null ],
[ "operator>", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ab9cd098786d2f4c855c42e4a6f30ab3e", null ],
[ "operator>", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#afd7cdb8ed2a9820efe9cf322c06f188c", null ],
[ "operator>", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a68125e66f74eaffe5ea9267638ce870d", null ],
[ "operator>", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a41d55d167e9dc63bf29d15e0ff004869", null ],
[ "operator>", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a74e477567c9477c2cf0684f81ef4498f", null ],
[ "operator>", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a2826bd301bb5393473ccd363f2052c0d", null ],
[ "operator>", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a55600f3b9859e2891e0e0b5690867b72", null ],
[ "operator>", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a31bbdbe0b62b90a4d6ea4bb0a7db586b", null ],
[ "operator>", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ac89eb6b29edad8cca63727ab97171c29", null ],
[ "operator>", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#aa95f9ebfdab3c5f524775651362ce914", null ],
[ "operator>", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a2d37130b6fd79b425f5ba92b65e36bed", null ],
[ "operator>", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a62a512d0edd894759c69f724b970fbdb", null ],
[ "operator>=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a430dd11fbf4c6f39bc1506ab43b2341f", null ],
[ "operator>=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a64f6787a96386246f83a8981d274150e", null ],
[ "operator>=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ae88617c4a012c5dc12781a349a28c886", null ],
[ "operator>=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a9e21c5ea9dd724dc2ca8c54ad908f09c", null ],
[ "operator>=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a2807fa6862b0f9689c81199b1e695ed8", null ],
[ "operator>=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#abec53064aa96265385ecc57de5fbc74c", null ],
[ "operator>=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a523eda93c809733368e2b45382d2add6", null ],
[ "operator>=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a1a788f82212afad30e4c2ee40f1c313c", null ],
[ "operator>=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a467a88531150a4d9d30fce07c49c126e", null ],
[ "operator>=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a2f6286d222e2176bcbdc824c5d598100", null ],
[ "operator>=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#aee3ae0d0d1f941463b06eca0bf041b2b", null ],
[ "operator>=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#ac766839f8f9e4863e8e18418c342c875", null ],
[ "operator>=", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a1f4e90909ac1c7280f4c7d1977c55fb7", null ],
[ "uint16_to_bfloat16", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a8d066e48cf3e2a0583c71816fa40f7f4", null ],
[ "can_convert_from_bfloat", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7e5992f7fcd8f2cdadcc1d7f6aefbb5a", null ],
[ "can_convert_to_bfloat", "backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#aae77817d261452b2f001f4d947a3e04e", null ]
];
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.12.0"/>
<meta name="generator" content="Doxygen 1.13.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MLX: mlx/backend/metal/kernels/metal_3_0/bf16.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -11,11 +11,18 @@
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
@@ -28,12 +35,24 @@
<div id="projectname">MLX
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.12.0 -->
<!-- Generated by Doxygen 1.13.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
@@ -44,22 +63,23 @@ var searchBox = new SearchBox("searchBox", "search/",'.html');
$(function() { codefold.init(0); });
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search',false);
$(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){ initResizable(false); });
$(function(){initNavTree('backend_2metal_2kernels_2metal__3__0_2bf16_8h_source.html',''); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
@@ -81,12 +101,6 @@ $(function(){ initResizable(false); });
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_d0c977ea65824390717cdb7efc36c157.html">metal</a></li><li class="navelem"><a class="el" href="dir_70a37effa88bcbd6b791977fa1e64356.html">kernels</a></li><li class="navelem"><a class="el" href="dir_d36f9e79442ec4bd53287b83bdefe7e5.html">metal_3_0</a></li> </ul>
</div>
</div><!-- top -->
<div id="doc-content">
<div class="header">
<div class="headertitle"><div class="title">bf16.h</div></div>
</div><!--header-->
@@ -98,7 +112,7 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="preprocessor">#include &lt;metal_stdlib&gt;</span></div>
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span> </div>
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="keyword">using namespace </span><a class="code hl_namespace" href="namespacemetal.html">metal</a>;</div>
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span> </div>
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span></div>
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment">// Helpers</span></div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span> </div>
<div class="foldopen" id="foldopen00013" data-start="{" data-end="}">
@@ -135,17 +149,17 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"><a class="line" href="backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7e5992f7fcd8f2cdadcc1d7f6aefbb5a"> 41</a></span><span class="keyword">static</span> <span class="keyword">constexpr</span> constant <span class="keywordtype">bool</span> <a class="code hl_variable" href="backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7e5992f7fcd8f2cdadcc1d7f6aefbb5a">can_convert_from_bfloat</a> =</div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> !is_same_v&lt;T, _MLX_BFloat16&gt; &amp;&amp; is_convertible_v&lt;float, T&gt;;</div>
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> </div>
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span></div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span><span class="comment">// Bfloat struct</span></div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> </div>
<div class="foldopen" id="foldopen00048" data-start="{" data-end="};">
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"><a class="line" href="struct___m_l_x___b_float16.html"> 48</a></span><span class="keyword">struct </span><a class="code hl_struct" href="struct___m_l_x___b_float16.html">_MLX_BFloat16</a> {</div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"><a class="line" href="struct___m_l_x___b_float16.html"> 48</a></span><span class="keyword">struct </span><a class="code hl_function" href="struct___m_l_x___b_float16.html#ab1af7700f5d1e4ab567da6a34fa84668">_MLX_BFloat16</a> {</div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> <span class="comment">// Constructors</span></div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"><a class="line" href="struct___m_l_x___b_float16.html#a4113263b63e3757ea8334cc4f0f5c3c8"> 51</a></span> uint16_t <a class="code hl_variable" href="struct___m_l_x___b_float16.html#a4113263b63e3757ea8334cc4f0f5c3c8">bits_</a>;</div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"><a class="line" href="struct___m_l_x___b_float16.html#ab1af7700f5d1e4ab567da6a34fa84668"> 52</a></span> <a class="code hl_function" href="struct___m_l_x___b_float16.html#ab1af7700f5d1e4ab567da6a34fa84668">_MLX_BFloat16</a>() thread = default;</div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"><a class="line" href="struct___m_l_x___b_float16.html#ae5c51644c3bd7cda6b796cb63c60c0b4"> 53</a></span> <a class="code hl_struct" href="struct___m_l_x___b_float16.html">_MLX_BFloat16</a>() threadgroup = default;</div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"><a class="line" href="struct___m_l_x___b_float16.html#a21998a3c852d0e0f52681f8b453172bf"> 54</a></span> <a class="code hl_struct" href="struct___m_l_x___b_float16.html">_MLX_BFloat16</a>() device = default;</div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"><a class="line" href="struct___m_l_x___b_float16.html#a64d8fc2e2463d7fa19cd3d5dd1ffdae8"> 55</a></span> <a class="code hl_struct" href="struct___m_l_x___b_float16.html">_MLX_BFloat16</a>() constant = default;</div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"><a class="line" href="struct___m_l_x___b_float16.html#ae5c51644c3bd7cda6b796cb63c60c0b4"> 53</a></span> <a class="code hl_function" href="struct___m_l_x___b_float16.html#ab1af7700f5d1e4ab567da6a34fa84668">_MLX_BFloat16</a>() threadgroup = default;</div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"><a class="line" href="struct___m_l_x___b_float16.html#a21998a3c852d0e0f52681f8b453172bf"> 54</a></span> <a class="code hl_function" href="struct___m_l_x___b_float16.html#ab1af7700f5d1e4ab567da6a34fa84668">_MLX_BFloat16</a>() device = default;</div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"><a class="line" href="struct___m_l_x___b_float16.html#a64d8fc2e2463d7fa19cd3d5dd1ffdae8"> 55</a></span> <a class="code hl_function" href="struct___m_l_x___b_float16.html#ab1af7700f5d1e4ab567da6a34fa84668">_MLX_BFloat16</a>() constant = default;</div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> </div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"><a class="line" href="struct___m_l_x___b_float16_1_1bits__to__bfloat__struct.html"> 57</a></span> struct <a class="code hl_struct" href="struct___m_l_x___b_float16_1_1bits__to__bfloat__struct.html">bits_to_bfloat_struct</a> {};</div>
<div class="foldopen" id="foldopen00058" data-start="{" data-end="}">
@@ -157,7 +171,7 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"><a class="line" href="struct___m_l_x___b_float16.html#a50d825f05a162d0ac133ad8b6f3c3112"> 61</a></span> <span class="keyword">constexpr</span> METAL_FUNC <a class="code hl_function" href="struct___m_l_x___b_float16.html#a50d825f05a162d0ac133ad8b6f3c3112">_MLX_BFloat16</a>(uint16_t bits, <a class="code hl_struct" href="struct___m_l_x___b_float16_1_1bits__to__bfloat__struct.html">bits_to_bfloat_struct</a>)</div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> : <a class="code hl_variable" href="struct___m_l_x___b_float16.html#a4113263b63e3757ea8334cc4f0f5c3c8">bits_</a>(bits) {}</div>
</div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> </div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span></div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> <span class="comment">// Conversions to bfloat</span></div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> </div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> <span class="keyword">template</span> &lt;</div>
@@ -191,7 +205,7 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"><a class="line" href="struct___m_l_x___b_float16.html#aec7fa716fd621ce1843338027bcb0118"> 88</a></span> <span class="keyword">constexpr</span> METAL_FUNC <a class="code hl_function" href="struct___m_l_x___b_float16.html#aec7fa716fd621ce1843338027bcb0118">_MLX_BFloat16</a>(T x) constant</div>
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> : <a class="code hl_variable" href="struct___m_l_x___b_float16.html#a4113263b63e3757ea8334cc4f0f5c3c8">bits_</a>(<a class="code hl_function" href="backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a31ce5e8e860295fa236e0d4b0befeae1">float_to_bfloat_bits</a>(<span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span>(x))) {}</div>
</div>
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> </div>
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span></div>
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> <span class="comment">// Conversions from bfloat</span></div>
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> </div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> <span class="keyword">template</span> &lt;</div>
@@ -231,16 +245,16 @@ $(function(){ initResizable(false); });
</div>
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span>};</div>
</div>
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> </div>
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span></div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span><span class="comment">// Bfloat operators</span></div>
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> </div>
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span></div>
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span><span class="comment">// Unary ops</span></div>
<div class="foldopen" id="foldopen00129" data-start="{" data-end="}">
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"><a class="line" href="backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a6aedc8d6d0980134ac69b96f22d9a855"> 129</a></span><span class="keyword">constexpr</span> METAL_FUNC <a class="code hl_struct" href="struct___m_l_x___b_float16.html">_MLX_BFloat16</a> <a class="code hl_function" href="backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a6aedc8d6d0980134ac69b96f22d9a855">operator-</a>(<a class="code hl_struct" href="struct___m_l_x___b_float16.html">_MLX_BFloat16</a> x) {</div>
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> <span class="keywordflow">return</span> -<span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span>(x);</div>
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span>}</div>
</div>
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> </div>
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span></div>
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span><span class="comment">// Binary operators</span></div>
<div class="foldopen" id="foldopen00135" data-start="" data-end="">
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"><a class="line" href="backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a78c92beda4436da9a2e520fa98c59f70"> 135</a></span><span class="preprocessor">#define bfloat_binop_base(__op__, __operator__, otype, atype, btype, ctype) \</span></div>
@@ -258,7 +272,7 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span><span class="preprocessor"> return static_cast&lt;ctype&gt;(lhs) __op__ static_cast&lt;ctype&gt;(rhs); \</span></div>
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span><span class="preprocessor"> }</span></div>
</div>
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> </div>
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span></div>
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span><span class="comment">// Arithmetic Operators</span></div>
<div class="foldopen" id="foldopen00150" data-start="" data-end="">
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"><a class="line" href="backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7694892a131c0e31e5153c088cccb707"> 150</a></span><span class="preprocessor">#define bfloat_binop(_op_, _operator_) \</span></div>
@@ -276,7 +290,7 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"><a class="line" href="backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a333f67614dbf8027439a7e124052cb85"> 161</a></span><a class="code hl_define" href="backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7694892a131c0e31e5153c088cccb707">bfloat_binop</a>(-, <span class="keyword">operator</span>-);</div>
<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"><a class="line" href="backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a8f06316063fc91747533105f256b55b5"> 162</a></span><a class="code hl_define" href="backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7694892a131c0e31e5153c088cccb707">bfloat_binop</a>(*, <span class="keyword">operator</span>*);</div>
<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"><a class="line" href="backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a9f16a44e1c9836ca57edc1d7b93b5d7c"> 163</a></span><a class="code hl_define" href="backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7694892a131c0e31e5153c088cccb707">bfloat_binop</a>(/, <span class="keyword">operator</span>/);</div>
<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> </div>
<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span></div>
<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span><span class="comment">// Comparison ops</span></div>
<div class="foldopen" id="foldopen00167" data-start="" data-end="">
<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"><a class="line" href="backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a330a0883503cb640f1cf628a7ca50239"> 167</a></span><span class="preprocessor">#define bfloat_compop(__op__, __operator__) \</span></div>
@@ -301,7 +315,7 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span><span class="preprocessor">#undef bfloat_binop_base</span></div>
<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span><span class="preprocessor">#undef bfloat_binop_helper</span></div>
<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span><span class="preprocessor">#undef bfloat_binop</span></div>
<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> </div>
<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span></div>
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span><span class="comment">// Inplace Operators</span></div>
<div class="foldopen" id="foldopen00191" data-start="" data-end="">
<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"><a class="line" href="backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a2846fd11b5e19b435e9f7ef0998c9b1d"> 191</a></span><span class="preprocessor">#define bfloat_inplace_op_helper(__op__, __operator__, itype, addr_space) \</span></div>
@@ -364,11 +378,11 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span> </div>
<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span><span class="preprocessor">#undef bfloat_inplace_op_helper</span></div>
<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span><span class="preprocessor">#undef bfloat_inplace_op_addr_space_helper</span></div>
<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span> </div>
<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span></div>
<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span><span class="comment">// Bfloat typedef</span></div>
<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span> </div>
<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"><a class="line" href="backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7782de82393104dd4ad754ce3b316e82"> 251</a></span><span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code hl_struct" href="struct___m_l_x___b_float16.html">_MLX_BFloat16</a> <a class="code hl_struct" href="struct___m_l_x___b_float16.html">bfloat16_t</a>;</div>
<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span> </div>
<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"><a class="line" href="backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7782de82393104dd4ad754ce3b316e82"> 251</a></span><span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code hl_struct" href="struct___m_l_x___b_float16.html">_MLX_BFloat16</a> <a class="code hl_typedef" href="backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7782de82393104dd4ad754ce3b316e82">bfloat16_t</a>;</div>
<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span></div>
<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span><span class="comment">// Bfloat numeric limits</span></div>
<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span> </div>
<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span><span class="preprocessor">#pragma METAL internals : enable</span></div>
@@ -377,58 +391,58 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00260" name="l00260"></a><span class="lineno"> 260</span> </div>
<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span><span class="keyword">template</span> &lt;&gt;</div>
<div class="foldopen" id="foldopen00262" data-start="{" data-end="};">
<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"><a class="line" href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html"> 262</a></span><span class="keyword">struct </span>_numeric_limits_impl&lt;<a class="code hl_struct" href="struct___m_l_x___b_float16.html">bfloat16_t</a>&gt; : _fp_numeric_limits_impl_base {</div>
<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"><a class="line" href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#af6a681edff230c8d734a1feefb8d1879"> 263</a></span> <span class="keyword">static</span> <span class="keyword">constexpr</span> constant <span class="keywordtype">int</span> digits = 8;</div>
<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"><a class="line" href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#a0f48dd0c8a2d2dfa825067fb212b2e6b"> 264</a></span> <span class="keyword">static</span> <span class="keyword">constexpr</span> constant <span class="keywordtype">int</span> digits10 = 2;</div>
<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"><a class="line" href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#a8d3905e6f158379a0c52682266e8d0e2"> 265</a></span> <span class="keyword">static</span> <span class="keyword">constexpr</span> constant <span class="keywordtype">int</span> max_digits10 = 4;</div>
<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"><a class="line" href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#aaefa8c2cadd11ac7e22f7b2c5edbd1cd"> 266</a></span> <span class="keyword">static</span> <span class="keyword">constexpr</span> constant <span class="keywordtype">int</span> radix = 2;</div>
<div class="line"><a id="l00267" name="l00267"></a><span class="lineno"><a class="line" href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#a13829f8c7a7c0efdc8946eff5d3c9470"> 267</a></span> <span class="keyword">static</span> <span class="keyword">constexpr</span> constant <span class="keywordtype">int</span> min_exponent = -125;</div>
<div class="line"><a id="l00268" name="l00268"></a><span class="lineno"><a class="line" href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#aeaed172780720e06b8731cef3177e277"> 268</a></span> <span class="keyword">static</span> <span class="keyword">constexpr</span> constant <span class="keywordtype">int</span> min_exponent10 = -37;</div>
<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"><a class="line" href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#a61bb136f819fa392c50bdf3c38f3aad2"> 269</a></span> <span class="keyword">static</span> <span class="keyword">constexpr</span> constant <span class="keywordtype">int</span> max_exponent = 128;</div>
<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"><a class="line" href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#a76bfb2deb0e0afc011f77bf5a6d0ed94"> 270</a></span> <span class="keyword">static</span> <span class="keyword">constexpr</span> constant <span class="keywordtype">int</span> max_exponent10 = 38;</div>
<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"><a class="line" href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html"> 262</a></span><span class="keyword">struct </span>_numeric_limits_impl&lt;<a class="code hl_typedef" href="backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7782de82393104dd4ad754ce3b316e82">bfloat16_t</a>&gt; : _fp_numeric_limits_impl_base {</div>
<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"><a class="line" href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#af6a681edff230c8d734a1feefb8d1879"> 263</a></span> <span class="keyword">static</span> <span class="keyword">constexpr</span> constant <span class="keywordtype">int</span> <a class="code hl_variable" href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#af6a681edff230c8d734a1feefb8d1879">digits</a> = 8;</div>
<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"><a class="line" href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#a0f48dd0c8a2d2dfa825067fb212b2e6b"> 264</a></span> <span class="keyword">static</span> <span class="keyword">constexpr</span> constant <span class="keywordtype">int</span> <a class="code hl_variable" href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#a0f48dd0c8a2d2dfa825067fb212b2e6b">digits10</a> = 2;</div>
<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"><a class="line" href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#a8d3905e6f158379a0c52682266e8d0e2"> 265</a></span> <span class="keyword">static</span> <span class="keyword">constexpr</span> constant <span class="keywordtype">int</span> <a class="code hl_variable" href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#a8d3905e6f158379a0c52682266e8d0e2">max_digits10</a> = 4;</div>
<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"><a class="line" href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#aaefa8c2cadd11ac7e22f7b2c5edbd1cd"> 266</a></span> <span class="keyword">static</span> <span class="keyword">constexpr</span> constant <span class="keywordtype">int</span> <a class="code hl_variable" href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#aaefa8c2cadd11ac7e22f7b2c5edbd1cd">radix</a> = 2;</div>
<div class="line"><a id="l00267" name="l00267"></a><span class="lineno"><a class="line" href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#a13829f8c7a7c0efdc8946eff5d3c9470"> 267</a></span> <span class="keyword">static</span> <span class="keyword">constexpr</span> constant <span class="keywordtype">int</span> <a class="code hl_variable" href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#a13829f8c7a7c0efdc8946eff5d3c9470">min_exponent</a> = -125;</div>
<div class="line"><a id="l00268" name="l00268"></a><span class="lineno"><a class="line" href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#aeaed172780720e06b8731cef3177e277"> 268</a></span> <span class="keyword">static</span> <span class="keyword">constexpr</span> constant <span class="keywordtype">int</span> <a class="code hl_variable" href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#aeaed172780720e06b8731cef3177e277">min_exponent10</a> = -37;</div>
<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"><a class="line" href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#a61bb136f819fa392c50bdf3c38f3aad2"> 269</a></span> <span class="keyword">static</span> <span class="keyword">constexpr</span> constant <span class="keywordtype">int</span> <a class="code hl_variable" href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#a61bb136f819fa392c50bdf3c38f3aad2">max_exponent</a> = 128;</div>
<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"><a class="line" href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#a76bfb2deb0e0afc011f77bf5a6d0ed94"> 270</a></span> <span class="keyword">static</span> <span class="keyword">constexpr</span> constant <span class="keywordtype">int</span> <a class="code hl_variable" href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#a76bfb2deb0e0afc011f77bf5a6d0ed94">max_exponent10</a> = 38;</div>
<div class="line"><a id="l00271" name="l00271"></a><span class="lineno"> 271</span> </div>
<div class="foldopen" id="foldopen00272" data-start="{" data-end="}">
<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"><a class="line" href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#adaed80031f5ca0ff69d30ec4c5d0c98f"> 272</a></span> <span class="keyword">static</span> <span class="keyword">constexpr</span> <a class="code hl_struct" href="struct___m_l_x___b_float16.html">bfloat16_t</a> <a class="code hl_function" href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#adaed80031f5ca0ff69d30ec4c5d0c98f">min</a>() {</div>
<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"><a class="line" href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#adaed80031f5ca0ff69d30ec4c5d0c98f"> 272</a></span> <span class="keyword">static</span> <span class="keyword">constexpr</span> <a class="code hl_typedef" href="backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7782de82393104dd4ad754ce3b316e82">bfloat16_t</a> <a class="code hl_function" href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#adaed80031f5ca0ff69d30ec4c5d0c98f">min</a>() {</div>
<div class="line"><a id="l00273" name="l00273"></a><span class="lineno"> 273</span> <span class="keywordflow">return</span> <a class="code hl_struct" href="struct___m_l_x___b_float16.html">_MLX_BFloat16</a>(0x0080, <a class="code hl_function" href="struct___m_l_x___b_float16.html#a91ccb774773b65f8d4c1aea3f1c6e1ca">_MLX_BFloat16::bits_to_bfloat</a>());</div>
<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"> 274</span> }</div>
</div>
<div class="foldopen" id="foldopen00275" data-start="{" data-end="}">
<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"><a class="line" href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#ae81c58b8223e504965183c99d19a2116"> 275</a></span> <span class="keyword">static</span> <span class="keyword">constexpr</span> <a class="code hl_struct" href="struct___m_l_x___b_float16.html">bfloat16_t</a> <a class="code hl_function" href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#ae81c58b8223e504965183c99d19a2116">lowest</a>() {</div>
<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"><a class="line" href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#ae81c58b8223e504965183c99d19a2116"> 275</a></span> <span class="keyword">static</span> <span class="keyword">constexpr</span> <a class="code hl_typedef" href="backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7782de82393104dd4ad754ce3b316e82">bfloat16_t</a> <a class="code hl_function" href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#ae81c58b8223e504965183c99d19a2116">lowest</a>() {</div>
<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</span> <span class="keywordflow">return</span> <a class="code hl_struct" href="struct___m_l_x___b_float16.html">_MLX_BFloat16</a>(0xFF7F, <a class="code hl_function" href="struct___m_l_x___b_float16.html#a91ccb774773b65f8d4c1aea3f1c6e1ca">_MLX_BFloat16::bits_to_bfloat</a>());</div>
<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"> 277</span> }</div>
</div>
<div class="foldopen" id="foldopen00278" data-start="{" data-end="}">
<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"><a class="line" href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#a92320d40a58218e40cc414986ac95c50"> 278</a></span> <span class="keyword">static</span> <span class="keyword">constexpr</span> <a class="code hl_struct" href="struct___m_l_x___b_float16.html">bfloat16_t</a> <a class="code hl_function" href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#a92320d40a58218e40cc414986ac95c50">max</a>() {</div>
<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"><a class="line" href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#a92320d40a58218e40cc414986ac95c50"> 278</a></span> <span class="keyword">static</span> <span class="keyword">constexpr</span> <a class="code hl_typedef" href="backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7782de82393104dd4ad754ce3b316e82">bfloat16_t</a> <a class="code hl_function" href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#a92320d40a58218e40cc414986ac95c50">max</a>() {</div>
<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"> 279</span> <span class="keywordflow">return</span> <a class="code hl_struct" href="struct___m_l_x___b_float16.html">_MLX_BFloat16</a>(0x7F7F, <a class="code hl_function" href="struct___m_l_x___b_float16.html#a91ccb774773b65f8d4c1aea3f1c6e1ca">_MLX_BFloat16::bits_to_bfloat</a>());</div>
<div class="line"><a id="l00280" name="l00280"></a><span class="lineno"> 280</span> }</div>
</div>
<div class="foldopen" id="foldopen00281" data-start="{" data-end="}">
<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"><a class="line" href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#a96c4197e3076f0aa9065370b8ece49ca"> 281</a></span> <span class="keyword">static</span> <span class="keyword">constexpr</span> <a class="code hl_struct" href="struct___m_l_x___b_float16.html">bfloat16_t</a> <a class="code hl_function" href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#a96c4197e3076f0aa9065370b8ece49ca">epsilon</a>() {</div>
<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"><a class="line" href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#a96c4197e3076f0aa9065370b8ece49ca"> 281</a></span> <span class="keyword">static</span> <span class="keyword">constexpr</span> <a class="code hl_typedef" href="backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7782de82393104dd4ad754ce3b316e82">bfloat16_t</a> <a class="code hl_function" href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#a96c4197e3076f0aa9065370b8ece49ca">epsilon</a>() {</div>
<div class="line"><a id="l00282" name="l00282"></a><span class="lineno"> 282</span> <span class="keywordflow">return</span> <a class="code hl_struct" href="struct___m_l_x___b_float16.html">_MLX_BFloat16</a>(0x3C00, <a class="code hl_function" href="struct___m_l_x___b_float16.html#a91ccb774773b65f8d4c1aea3f1c6e1ca">_MLX_BFloat16::bits_to_bfloat</a>());</div>
<div class="line"><a id="l00283" name="l00283"></a><span class="lineno"> 283</span> }</div>
</div>
<div class="foldopen" id="foldopen00284" data-start="{" data-end="}">
<div class="line"><a id="l00284" name="l00284"></a><span class="lineno"><a class="line" href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#afa223448fa4f04c1113a85345dd720c3"> 284</a></span> <span class="keyword">static</span> <span class="keyword">constexpr</span> <a class="code hl_struct" href="struct___m_l_x___b_float16.html">bfloat16_t</a> <a class="code hl_function" href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#afa223448fa4f04c1113a85345dd720c3">round_error</a>() {</div>
<div class="line"><a id="l00284" name="l00284"></a><span class="lineno"><a class="line" href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#afa223448fa4f04c1113a85345dd720c3"> 284</a></span> <span class="keyword">static</span> <span class="keyword">constexpr</span> <a class="code hl_typedef" href="backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7782de82393104dd4ad754ce3b316e82">bfloat16_t</a> <a class="code hl_function" href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#afa223448fa4f04c1113a85345dd720c3">round_error</a>() {</div>
<div class="line"><a id="l00285" name="l00285"></a><span class="lineno"> 285</span> <span class="keywordflow">return</span> <a class="code hl_struct" href="struct___m_l_x___b_float16.html">_MLX_BFloat16</a>(0x3F00, <a class="code hl_function" href="struct___m_l_x___b_float16.html#a91ccb774773b65f8d4c1aea3f1c6e1ca">_MLX_BFloat16::bits_to_bfloat</a>());</div>
<div class="line"><a id="l00286" name="l00286"></a><span class="lineno"> 286</span> }</div>
</div>
<div class="foldopen" id="foldopen00287" data-start="{" data-end="}">
<div class="line"><a id="l00287" name="l00287"></a><span class="lineno"><a class="line" href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#a61eb741e7af49046beb863abf023b206"> 287</a></span> <span class="keyword">static</span> <span class="keyword">constexpr</span> <a class="code hl_struct" href="struct___m_l_x___b_float16.html">bfloat16_t</a> <a class="code hl_function" href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#a61eb741e7af49046beb863abf023b206">infinity</a>() {</div>
<div class="line"><a id="l00287" name="l00287"></a><span class="lineno"><a class="line" href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#a61eb741e7af49046beb863abf023b206"> 287</a></span> <span class="keyword">static</span> <span class="keyword">constexpr</span> <a class="code hl_typedef" href="backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7782de82393104dd4ad754ce3b316e82">bfloat16_t</a> <a class="code hl_function" href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#a61eb741e7af49046beb863abf023b206">infinity</a>() {</div>
<div class="line"><a id="l00288" name="l00288"></a><span class="lineno"> 288</span> <span class="keywordflow">return</span> <a class="code hl_struct" href="struct___m_l_x___b_float16.html">_MLX_BFloat16</a>(0x7F80, <a class="code hl_function" href="struct___m_l_x___b_float16.html#a91ccb774773b65f8d4c1aea3f1c6e1ca">_MLX_BFloat16::bits_to_bfloat</a>());</div>
<div class="line"><a id="l00289" name="l00289"></a><span class="lineno"> 289</span> }</div>
</div>
<div class="foldopen" id="foldopen00290" data-start="{" data-end="}">
<div class="line"><a id="l00290" name="l00290"></a><span class="lineno"><a class="line" href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#aebeb07c01984be246bc2d1b8f8e4ac7b"> 290</a></span> <span class="keyword">static</span> <span class="keyword">constexpr</span> <a class="code hl_struct" href="struct___m_l_x___b_float16.html">bfloat16_t</a> <a class="code hl_function" href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#aebeb07c01984be246bc2d1b8f8e4ac7b">quiet_NaN</a>() {</div>
<div class="line"><a id="l00290" name="l00290"></a><span class="lineno"><a class="line" href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#aebeb07c01984be246bc2d1b8f8e4ac7b"> 290</a></span> <span class="keyword">static</span> <span class="keyword">constexpr</span> <a class="code hl_typedef" href="backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7782de82393104dd4ad754ce3b316e82">bfloat16_t</a> <a class="code hl_function" href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#aebeb07c01984be246bc2d1b8f8e4ac7b">quiet_NaN</a>() {</div>
<div class="line"><a id="l00291" name="l00291"></a><span class="lineno"> 291</span> <span class="keywordflow">return</span> <a class="code hl_struct" href="struct___m_l_x___b_float16.html">_MLX_BFloat16</a>(0x7FC0, <a class="code hl_function" href="struct___m_l_x___b_float16.html#a91ccb774773b65f8d4c1aea3f1c6e1ca">_MLX_BFloat16::bits_to_bfloat</a>());</div>
<div class="line"><a id="l00292" name="l00292"></a><span class="lineno"> 292</span> }</div>
</div>
<div class="foldopen" id="foldopen00293" data-start="{" data-end="}">
<div class="line"><a id="l00293" name="l00293"></a><span class="lineno"><a class="line" href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#ad1f76a43c7d51a3765174aa6e0dd9f80"> 293</a></span> <span class="keyword">static</span> <span class="keyword">constexpr</span> <a class="code hl_struct" href="struct___m_l_x___b_float16.html">bfloat16_t</a> <a class="code hl_function" href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#ad1f76a43c7d51a3765174aa6e0dd9f80">signaling_NaN</a>() {</div>
<div class="line"><a id="l00293" name="l00293"></a><span class="lineno"><a class="line" href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#ad1f76a43c7d51a3765174aa6e0dd9f80"> 293</a></span> <span class="keyword">static</span> <span class="keyword">constexpr</span> <a class="code hl_typedef" href="backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7782de82393104dd4ad754ce3b316e82">bfloat16_t</a> <a class="code hl_function" href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#ad1f76a43c7d51a3765174aa6e0dd9f80">signaling_NaN</a>() {</div>
<div class="line"><a id="l00294" name="l00294"></a><span class="lineno"> 294</span> <span class="keywordflow">return</span> <a class="code hl_struct" href="struct___m_l_x___b_float16.html">_MLX_BFloat16</a>(0x7F80, <a class="code hl_function" href="struct___m_l_x___b_float16.html#a91ccb774773b65f8d4c1aea3f1c6e1ca">_MLX_BFloat16::bits_to_bfloat</a>());</div>
<div class="line"><a id="l00295" name="l00295"></a><span class="lineno"> 295</span> }</div>
</div>
<div class="foldopen" id="foldopen00296" data-start="{" data-end="}">
<div class="line"><a id="l00296" name="l00296"></a><span class="lineno"><a class="line" href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#a6a9dbcba4dd79cad50876dda506b9eed"> 296</a></span> <span class="keyword">static</span> <span class="keyword">constexpr</span> <a class="code hl_struct" href="struct___m_l_x___b_float16.html">bfloat16_t</a> <a class="code hl_function" href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#a6a9dbcba4dd79cad50876dda506b9eed">denorm_min</a>() {</div>
<div class="line"><a id="l00296" name="l00296"></a><span class="lineno"><a class="line" href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#a6a9dbcba4dd79cad50876dda506b9eed"> 296</a></span> <span class="keyword">static</span> <span class="keyword">constexpr</span> <a class="code hl_typedef" href="backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7782de82393104dd4ad754ce3b316e82">bfloat16_t</a> <a class="code hl_function" href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#a6a9dbcba4dd79cad50876dda506b9eed">denorm_min</a>() {</div>
<div class="line"><a id="l00297" name="l00297"></a><span class="lineno"> 297</span> <span class="keywordflow">return</span> <a class="code hl_struct" href="struct___m_l_x___b_float16.html">_MLX_BFloat16</a>(0x0001, <a class="code hl_function" href="struct___m_l_x___b_float16.html#a91ccb774773b65f8d4c1aea3f1c6e1ca">_MLX_BFloat16::bits_to_bfloat</a>());</div>
<div class="line"><a id="l00298" name="l00298"></a><span class="lineno"> 298</span> }</div>
</div>
@@ -445,13 +459,13 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00306" name="l00306"></a><span class="lineno"> 306</span> </div>
<div class="line"><a id="l00307" name="l00307"></a><span class="lineno"> 307</span><span class="preprocessor">#pragma METAL internals : disable</span></div>
<div class="foldopen" id="foldopen00308" data-start="{" data-end="}">
<div class="line"><a id="l00308" name="l00308"></a><span class="lineno"><a class="line" href="backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a1420e191fa60d707dce327d0938e3088"> 308</a></span><span class="keyword">inline</span> uint16_t <a class="code hl_function" href="backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a1420e191fa60d707dce327d0938e3088">bfloat16_to_uint16</a>(<span class="keyword">const</span> <a class="code hl_struct" href="struct___m_l_x___b_float16.html">bfloat16_t</a> x) {</div>
<div class="line"><a id="l00308" name="l00308"></a><span class="lineno"><a class="line" href="backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a1420e191fa60d707dce327d0938e3088"> 308</a></span><span class="keyword">inline</span> uint16_t <a class="code hl_function" href="backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a1420e191fa60d707dce327d0938e3088">bfloat16_to_uint16</a>(<span class="keyword">const</span> <a class="code hl_typedef" href="backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7782de82393104dd4ad754ce3b316e82">bfloat16_t</a> x) {</div>
<div class="line"><a id="l00309" name="l00309"></a><span class="lineno"> 309</span> <span class="keywordflow">return</span> x.<a class="code hl_variable" href="struct___m_l_x___b_float16.html#a4113263b63e3757ea8334cc4f0f5c3c8">bits_</a>;</div>
<div class="line"><a id="l00310" name="l00310"></a><span class="lineno"> 310</span>}</div>
</div>
<div class="line"><a id="l00311" name="l00311"></a><span class="lineno"> 311</span> </div>
<div class="foldopen" id="foldopen00312" data-start="{" data-end="}">
<div class="line"><a id="l00312" name="l00312"></a><span class="lineno"><a class="line" href="backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a8d066e48cf3e2a0583c71816fa40f7f4"> 312</a></span><span class="keyword">inline</span> <a class="code hl_struct" href="struct___m_l_x___b_float16.html">bfloat16_t</a> <a class="code hl_function" href="backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a8d066e48cf3e2a0583c71816fa40f7f4">uint16_to_bfloat16</a>(<span class="keyword">const</span> uint16_t x) {</div>
<div class="line"><a id="l00312" name="l00312"></a><span class="lineno"><a class="line" href="backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a8d066e48cf3e2a0583c71816fa40f7f4"> 312</a></span><span class="keyword">inline</span> <a class="code hl_typedef" href="backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7782de82393104dd4ad754ce3b316e82">bfloat16_t</a> <a class="code hl_function" href="backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a8d066e48cf3e2a0583c71816fa40f7f4">uint16_to_bfloat16</a>(<span class="keyword">const</span> uint16_t x) {</div>
<div class="line"><a id="l00313" name="l00313"></a><span class="lineno"> 313</span> <span class="keywordflow">return</span> <a class="code hl_struct" href="struct___m_l_x___b_float16.html">_MLX_BFloat16</a>(x, <a class="code hl_function" href="struct___m_l_x___b_float16.html#a91ccb774773b65f8d4c1aea3f1c6e1ca">_MLX_BFloat16::bits_to_bfloat</a>());</div>
<div class="line"><a id="l00314" name="l00314"></a><span class="lineno"> 314</span>}</div>
</div>
@@ -462,6 +476,7 @@ $(function(){ initResizable(false); });
<div class="ttc" id="abackend_2metal_2kernels_2metal__3__0_2bf16_8h_html_a4ac82467fbc674e990090f482b9c1e5c"><div class="ttname"><a href="backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a4ac82467fbc674e990090f482b9c1e5c">bfloat_inplace_op</a></div><div class="ttdeci">#define bfloat_inplace_op(itype)</div><div class="ttdef"><b>Definition</b> bf16.h:208</div></div>
<div class="ttc" id="abackend_2metal_2kernels_2metal__3__0_2bf16_8h_html_a6aedc8d6d0980134ac69b96f22d9a855"><div class="ttname"><a href="backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a6aedc8d6d0980134ac69b96f22d9a855">operator-</a></div><div class="ttdeci">constexpr METAL_FUNC _MLX_BFloat16 operator-(_MLX_BFloat16 x)</div><div class="ttdef"><b>Definition</b> bf16.h:129</div></div>
<div class="ttc" id="abackend_2metal_2kernels_2metal__3__0_2bf16_8h_html_a7694892a131c0e31e5153c088cccb707"><div class="ttname"><a href="backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7694892a131c0e31e5153c088cccb707">bfloat_binop</a></div><div class="ttdeci">#define bfloat_binop(_op_, _operator_)</div><div class="ttdef"><b>Definition</b> bf16.h:150</div></div>
<div class="ttc" id="abackend_2metal_2kernels_2metal__3__0_2bf16_8h_html_a7782de82393104dd4ad754ce3b316e82"><div class="ttname"><a href="backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7782de82393104dd4ad754ce3b316e82">bfloat16_t</a></div><div class="ttdeci">struct _MLX_BFloat16 bfloat16_t</div><div class="ttdef"><b>Definition</b> bf16.h:251</div></div>
<div class="ttc" id="abackend_2metal_2kernels_2metal__3__0_2bf16_8h_html_a7e5992f7fcd8f2cdadcc1d7f6aefbb5a"><div class="ttname"><a href="backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7e5992f7fcd8f2cdadcc1d7f6aefbb5a">can_convert_from_bfloat</a></div><div class="ttdeci">static constexpr constant bool can_convert_from_bfloat</div><div class="ttdef"><b>Definition</b> bf16.h:41</div></div>
<div class="ttc" id="abackend_2metal_2kernels_2metal__3__0_2bf16_8h_html_a8d066e48cf3e2a0583c71816fa40f7f4"><div class="ttname"><a href="backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a8d066e48cf3e2a0583c71816fa40f7f4">uint16_to_bfloat16</a></div><div class="ttdeci">bfloat16_t uint16_to_bfloat16(const uint16_t x)</div><div class="ttdef"><b>Definition</b> bf16.h:312</div></div>
<div class="ttc" id="abackend_2metal_2kernels_2metal__3__0_2bf16_8h_html_aae77817d261452b2f001f4d947a3e04e"><div class="ttname"><a href="backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#aae77817d261452b2f001f4d947a3e04e">can_convert_to_bfloat</a></div><div class="ttdeci">static constexpr constant bool can_convert_to_bfloat</div><div class="ttdef"><b>Definition</b> bf16.h:37</div></div>
@@ -478,20 +493,31 @@ $(function(){ initResizable(false); });
<div class="ttc" id="astruct___m_l_x___b_float16_html_ad2701d003e8fad168c89abc3907c6e53"><div class="ttname"><a href="struct___m_l_x___b_float16.html#ad2701d003e8fad168c89abc3907c6e53">_MLX_BFloat16::_MLX_BFloat16</a></div><div class="ttdeci">constexpr METAL_FUNC _MLX_BFloat16(T x) device</div><div class="ttdef"><b>Definition</b> bf16.h:82</div></div>
<div class="ttc" id="astruct___m_l_x___b_float16_html_adeb880f31121c6dc40ce47765c6c7455"><div class="ttname"><a href="struct___m_l_x___b_float16.html#adeb880f31121c6dc40ce47765c6c7455">_MLX_BFloat16::_MLX_BFloat16</a></div><div class="ttdeci">constexpr METAL_FUNC _MLX_BFloat16(T x) threadgroup</div><div class="ttdef"><b>Definition</b> bf16.h:76</div></div>
<div class="ttc" id="astruct___m_l_x___b_float16_html_aec7fa716fd621ce1843338027bcb0118"><div class="ttname"><a href="struct___m_l_x___b_float16.html#aec7fa716fd621ce1843338027bcb0118">_MLX_BFloat16::_MLX_BFloat16</a></div><div class="ttdeci">constexpr METAL_FUNC _MLX_BFloat16(T x) const ant</div><div class="ttdef"><b>Definition</b> bf16.h:88</div></div>
<div class="ttc" id="astructmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4_html_a0f48dd0c8a2d2dfa825067fb212b2e6b"><div class="ttname"><a href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#a0f48dd0c8a2d2dfa825067fb212b2e6b">metal::_numeric_limits_impl&lt; bfloat16_t &gt;::digits10</a></div><div class="ttdeci">static constexpr constant int digits10</div><div class="ttdef"><b>Definition</b> bf16.h:264</div></div>
<div class="ttc" id="astructmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4_html_a13829f8c7a7c0efdc8946eff5d3c9470"><div class="ttname"><a href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#a13829f8c7a7c0efdc8946eff5d3c9470">metal::_numeric_limits_impl&lt; bfloat16_t &gt;::min_exponent</a></div><div class="ttdeci">static constexpr constant int min_exponent</div><div class="ttdef"><b>Definition</b> bf16.h:267</div></div>
<div class="ttc" id="astructmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4_html_a61bb136f819fa392c50bdf3c38f3aad2"><div class="ttname"><a href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#a61bb136f819fa392c50bdf3c38f3aad2">metal::_numeric_limits_impl&lt; bfloat16_t &gt;::max_exponent</a></div><div class="ttdeci">static constexpr constant int max_exponent</div><div class="ttdef"><b>Definition</b> bf16.h:269</div></div>
<div class="ttc" id="astructmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4_html_a61eb741e7af49046beb863abf023b206"><div class="ttname"><a href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#a61eb741e7af49046beb863abf023b206">metal::_numeric_limits_impl&lt; bfloat16_t &gt;::infinity</a></div><div class="ttdeci">static constexpr bfloat16_t infinity()</div><div class="ttdef"><b>Definition</b> bf16.h:287</div></div>
<div class="ttc" id="astructmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4_html_a6a9dbcba4dd79cad50876dda506b9eed"><div class="ttname"><a href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#a6a9dbcba4dd79cad50876dda506b9eed">metal::_numeric_limits_impl&lt; bfloat16_t &gt;::denorm_min</a></div><div class="ttdeci">static constexpr bfloat16_t denorm_min()</div><div class="ttdef"><b>Definition</b> bf16.h:296</div></div>
<div class="ttc" id="astructmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4_html_a76bfb2deb0e0afc011f77bf5a6d0ed94"><div class="ttname"><a href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#a76bfb2deb0e0afc011f77bf5a6d0ed94">metal::_numeric_limits_impl&lt; bfloat16_t &gt;::max_exponent10</a></div><div class="ttdeci">static constexpr constant int max_exponent10</div><div class="ttdef"><b>Definition</b> bf16.h:270</div></div>
<div class="ttc" id="astructmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4_html_a8d3905e6f158379a0c52682266e8d0e2"><div class="ttname"><a href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#a8d3905e6f158379a0c52682266e8d0e2">metal::_numeric_limits_impl&lt; bfloat16_t &gt;::max_digits10</a></div><div class="ttdeci">static constexpr constant int max_digits10</div><div class="ttdef"><b>Definition</b> bf16.h:265</div></div>
<div class="ttc" id="astructmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4_html_a92320d40a58218e40cc414986ac95c50"><div class="ttname"><a href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#a92320d40a58218e40cc414986ac95c50">metal::_numeric_limits_impl&lt; bfloat16_t &gt;::max</a></div><div class="ttdeci">static constexpr bfloat16_t max()</div><div class="ttdef"><b>Definition</b> bf16.h:278</div></div>
<div class="ttc" id="astructmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4_html_a96c4197e3076f0aa9065370b8ece49ca"><div class="ttname"><a href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#a96c4197e3076f0aa9065370b8ece49ca">metal::_numeric_limits_impl&lt; bfloat16_t &gt;::epsilon</a></div><div class="ttdeci">static constexpr bfloat16_t epsilon()</div><div class="ttdef"><b>Definition</b> bf16.h:281</div></div>
<div class="ttc" id="astructmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4_html_aaefa8c2cadd11ac7e22f7b2c5edbd1cd"><div class="ttname"><a href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#aaefa8c2cadd11ac7e22f7b2c5edbd1cd">metal::_numeric_limits_impl&lt; bfloat16_t &gt;::radix</a></div><div class="ttdeci">static constexpr constant int radix</div><div class="ttdef"><b>Definition</b> bf16.h:266</div></div>
<div class="ttc" id="astructmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4_html_ad1f76a43c7d51a3765174aa6e0dd9f80"><div class="ttname"><a href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#ad1f76a43c7d51a3765174aa6e0dd9f80">metal::_numeric_limits_impl&lt; bfloat16_t &gt;::signaling_NaN</a></div><div class="ttdeci">static constexpr bfloat16_t signaling_NaN()</div><div class="ttdef"><b>Definition</b> bf16.h:293</div></div>
<div class="ttc" id="astructmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4_html_adaed80031f5ca0ff69d30ec4c5d0c98f"><div class="ttname"><a href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#adaed80031f5ca0ff69d30ec4c5d0c98f">metal::_numeric_limits_impl&lt; bfloat16_t &gt;::min</a></div><div class="ttdeci">static constexpr bfloat16_t min()</div><div class="ttdef"><b>Definition</b> bf16.h:272</div></div>
<div class="ttc" id="astructmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4_html_ae81c58b8223e504965183c99d19a2116"><div class="ttname"><a href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#ae81c58b8223e504965183c99d19a2116">metal::_numeric_limits_impl&lt; bfloat16_t &gt;::lowest</a></div><div class="ttdeci">static constexpr bfloat16_t lowest()</div><div class="ttdef"><b>Definition</b> bf16.h:275</div></div>
<div class="ttc" id="astructmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4_html_aeaed172780720e06b8731cef3177e277"><div class="ttname"><a href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#aeaed172780720e06b8731cef3177e277">metal::_numeric_limits_impl&lt; bfloat16_t &gt;::min_exponent10</a></div><div class="ttdeci">static constexpr constant int min_exponent10</div><div class="ttdef"><b>Definition</b> bf16.h:268</div></div>
<div class="ttc" id="astructmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4_html_aebeb07c01984be246bc2d1b8f8e4ac7b"><div class="ttname"><a href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#aebeb07c01984be246bc2d1b8f8e4ac7b">metal::_numeric_limits_impl&lt; bfloat16_t &gt;::quiet_NaN</a></div><div class="ttdeci">static constexpr bfloat16_t quiet_NaN()</div><div class="ttdef"><b>Definition</b> bf16.h:290</div></div>
<div class="ttc" id="astructmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4_html_af6a681edff230c8d734a1feefb8d1879"><div class="ttname"><a href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#af6a681edff230c8d734a1feefb8d1879">metal::_numeric_limits_impl&lt; bfloat16_t &gt;::digits</a></div><div class="ttdeci">static constexpr constant int digits</div><div class="ttdef"><b>Definition</b> bf16.h:263</div></div>
<div class="ttc" id="astructmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4_html_afa223448fa4f04c1113a85345dd720c3"><div class="ttname"><a href="structmetal_1_1__numeric__limits__impl_3_01bfloat16__t_01_4.html#afa223448fa4f04c1113a85345dd720c3">metal::_numeric_limits_impl&lt; bfloat16_t &gt;::round_error</a></div><div class="ttdeci">static constexpr bfloat16_t round_error()</div><div class="ttdef"><b>Definition</b> bf16.h:284</div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0
</small></address>
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_d0c977ea65824390717cdb7efc36c157.html">metal</a></li><li class="navelem"><a class="el" href="dir_70a37effa88bcbd6b791977fa1e64356.html">kernels</a></li><li class="navelem"><a class="el" href="dir_d36f9e79442ec4bd53287b83bdefe7e5.html">metal_3_0</a></li><li class="navelem"><a class="el" href="backend_2metal_2kernels_2metal__3__0_2bf16_8h.html">bf16.h</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.1 </li>
</ul>
</div>
</body>
</html>
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.12.0"/>
<meta name="generator" content="Doxygen 1.13.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MLX: mlx/backend/metal/kernels/metal_3_1/bf16.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -11,11 +11,18 @@
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
@@ -28,12 +35,24 @@
<div id="projectname">MLX
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.12.0 -->
<!-- Generated by Doxygen 1.13.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
@@ -44,22 +63,23 @@ var searchBox = new SearchBox("searchBox", "search/",'.html');
$(function() { codefold.init(0); });
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search',false);
$(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){ initResizable(false); });
$(function(){initNavTree('backend_2metal_2kernels_2metal__3__1_2bf16_8h.html',''); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
@@ -81,12 +101,6 @@ $(function(){ initResizable(false); });
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_d0c977ea65824390717cdb7efc36c157.html">metal</a></li><li class="navelem"><a class="el" href="dir_70a37effa88bcbd6b791977fa1e64356.html">kernels</a></li><li class="navelem"><a class="el" href="dir_83367edb60e23ad59b1a493d8c883287.html">metal_3_1</a></li> </ul>
</div>
</div><!-- top -->
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#typedef-members">Typedefs</a> &#124;
@@ -144,7 +158,7 @@ Functions</h2></td></tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
<span class="mlabels"><span class="mlabel inline">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
@@ -169,7 +183,7 @@ Functions</h2></td></tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
<span class="mlabels"><span class="mlabel inline">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
@@ -177,10 +191,13 @@ Functions</h2></td></tr>
</div>
</div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0
</small></address>
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_d0c977ea65824390717cdb7efc36c157.html">metal</a></li><li class="navelem"><a class="el" href="dir_70a37effa88bcbd6b791977fa1e64356.html">kernels</a></li><li class="navelem"><a class="el" href="dir_83367edb60e23ad59b1a493d8c883287.html">metal_3_1</a></li><li class="navelem"><a class="el" href="backend_2metal_2kernels_2metal__3__1_2bf16_8h.html">bf16.h</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.1 </li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,6 @@
var backend_2metal_2kernels_2metal__3__1_2bf16_8h =
[
[ "bfloat16_t", "backend_2metal_2kernels_2metal__3__1_2bf16_8h.html#a58e15a77da988b9104fee00cdf8b280e", null ],
[ "bfloat16_to_uint16", "backend_2metal_2kernels_2metal__3__1_2bf16_8h.html#a1420e191fa60d707dce327d0938e3088", null ],
[ "uint16_to_bfloat16", "backend_2metal_2kernels_2metal__3__1_2bf16_8h.html#a8d066e48cf3e2a0583c71816fa40f7f4", null ]
];
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.12.0"/>
<meta name="generator" content="Doxygen 1.13.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MLX: mlx/backend/metal/kernels/metal_3_1/bf16.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -11,11 +11,18 @@
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
@@ -28,12 +35,24 @@
<div id="projectname">MLX
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.12.0 -->
<!-- Generated by Doxygen 1.13.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
@@ -44,22 +63,23 @@ var searchBox = new SearchBox("searchBox", "search/",'.html');
$(function() { codefold.init(0); });
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search',false);
$(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){ initResizable(false); });
$(function(){initNavTree('backend_2metal_2kernels_2metal__3__1_2bf16_8h_source.html',''); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
@@ -81,12 +101,6 @@ $(function(){ initResizable(false); });
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_d0c977ea65824390717cdb7efc36c157.html">metal</a></li><li class="navelem"><a class="el" href="dir_70a37effa88bcbd6b791977fa1e64356.html">kernels</a></li><li class="navelem"><a class="el" href="dir_83367edb60e23ad59b1a493d8c883287.html">metal_3_1</a></li> </ul>
</div>
</div><!-- top -->
<div id="doc-content">
<div class="header">
<div class="headertitle"><div class="title">bf16.h</div></div>
</div><!--header-->
@@ -99,28 +113,30 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span> </div>
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="keyword">using namespace </span><a class="code hl_namespace" href="namespacemetal.html">metal</a>;</div>
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span> </div>
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"><a class="line" href="backend_2metal_2kernels_2metal__3__1_2bf16_8h.html#a58e15a77da988b9104fee00cdf8b280e"> 9</a></span><span class="keyword">typedef</span> bfloat <a class="code hl_typedef" href="backend_2metal_2kernels_2metal__3__1_2bf16_8h.html#a58e15a77da988b9104fee00cdf8b280e">bfloat16_t</a>;</div>
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"><a class="line" href="backend_2metal_2kernels_2metal__3__1_2bf16_8h.html#a58e15a77da988b9104fee00cdf8b280e"> 9</a></span><span class="keyword">typedef</span> bfloat <a class="code hl_typedef" href="backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7782de82393104dd4ad754ce3b316e82">bfloat16_t</a>;</div>
<div class="foldopen" id="foldopen00010" data-start="{" data-end="}">
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"><a class="line" href="backend_2metal_2kernels_2metal__3__1_2bf16_8h.html#a1420e191fa60d707dce327d0938e3088"> 10</a></span><span class="keyword">inline</span> uint16_t <a class="code hl_function" href="backend_2metal_2kernels_2metal__3__1_2bf16_8h.html#a1420e191fa60d707dce327d0938e3088">bfloat16_to_uint16</a>(<span class="keyword">const</span> <a class="code hl_struct" href="struct___m_l_x___b_float16.html">bfloat16_t</a> x) {</div>
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"><a class="line" href="backend_2metal_2kernels_2metal__3__1_2bf16_8h.html#a1420e191fa60d707dce327d0938e3088"> 10</a></span><span class="keyword">inline</span> uint16_t <a class="code hl_function" href="backend_2metal_2kernels_2metal__3__1_2bf16_8h.html#a1420e191fa60d707dce327d0938e3088">bfloat16_to_uint16</a>(<span class="keyword">const</span> <a class="code hl_typedef" href="backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7782de82393104dd4ad754ce3b316e82">bfloat16_t</a> x) {</div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span> <span class="keywordflow">return</span> as_type&lt;uint16_t&gt;(x);</div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span>}</div>
</div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span> </div>
<div class="foldopen" id="foldopen00014" data-start="{" data-end="}">
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"><a class="line" href="backend_2metal_2kernels_2metal__3__1_2bf16_8h.html#a8d066e48cf3e2a0583c71816fa40f7f4"> 14</a></span><span class="keyword">inline</span> <a class="code hl_struct" href="struct___m_l_x___b_float16.html">bfloat16_t</a> <a class="code hl_function" href="backend_2metal_2kernels_2metal__3__1_2bf16_8h.html#a8d066e48cf3e2a0583c71816fa40f7f4">uint16_to_bfloat16</a>(<span class="keyword">const</span> uint16_t x) {</div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"><a class="line" href="backend_2metal_2kernels_2metal__3__1_2bf16_8h.html#a8d066e48cf3e2a0583c71816fa40f7f4"> 14</a></span><span class="keyword">inline</span> <a class="code hl_typedef" href="backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7782de82393104dd4ad754ce3b316e82">bfloat16_t</a> <a class="code hl_function" href="backend_2metal_2kernels_2metal__3__1_2bf16_8h.html#a8d066e48cf3e2a0583c71816fa40f7f4">uint16_to_bfloat16</a>(<span class="keyword">const</span> uint16_t x) {</div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> <span class="keywordflow">return</span> as_type&lt;bfloat16_t&gt;(x);</div>
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span>}</div>
</div>
<div class="ttc" id="abackend_2metal_2kernels_2metal__3__0_2bf16_8h_html_a7782de82393104dd4ad754ce3b316e82"><div class="ttname"><a href="backend_2metal_2kernels_2metal__3__0_2bf16_8h.html#a7782de82393104dd4ad754ce3b316e82">bfloat16_t</a></div><div class="ttdeci">struct _MLX_BFloat16 bfloat16_t</div><div class="ttdef"><b>Definition</b> bf16.h:251</div></div>
<div class="ttc" id="abackend_2metal_2kernels_2metal__3__1_2bf16_8h_html_a1420e191fa60d707dce327d0938e3088"><div class="ttname"><a href="backend_2metal_2kernels_2metal__3__1_2bf16_8h.html#a1420e191fa60d707dce327d0938e3088">bfloat16_to_uint16</a></div><div class="ttdeci">uint16_t bfloat16_to_uint16(const bfloat16_t x)</div><div class="ttdef"><b>Definition</b> bf16.h:10</div></div>
<div class="ttc" id="abackend_2metal_2kernels_2metal__3__1_2bf16_8h_html_a58e15a77da988b9104fee00cdf8b280e"><div class="ttname"><a href="backend_2metal_2kernels_2metal__3__1_2bf16_8h.html#a58e15a77da988b9104fee00cdf8b280e">bfloat16_t</a></div><div class="ttdeci">bfloat bfloat16_t</div><div class="ttdef"><b>Definition</b> bf16.h:9</div></div>
<div class="ttc" id="abackend_2metal_2kernels_2metal__3__1_2bf16_8h_html_a8d066e48cf3e2a0583c71816fa40f7f4"><div class="ttname"><a href="backend_2metal_2kernels_2metal__3__1_2bf16_8h.html#a8d066e48cf3e2a0583c71816fa40f7f4">uint16_to_bfloat16</a></div><div class="ttdeci">bfloat16_t uint16_to_bfloat16(const uint16_t x)</div><div class="ttdef"><b>Definition</b> bf16.h:14</div></div>
<div class="ttc" id="anamespacemetal_html"><div class="ttname"><a href="namespacemetal.html">metal</a></div><div class="ttdef"><b>Definition</b> bf16_math.h:226</div></div>
<div class="ttc" id="astruct___m_l_x___b_float16_html"><div class="ttname"><a href="struct___m_l_x___b_float16.html">_MLX_BFloat16</a></div><div class="ttdef"><b>Definition</b> bf16.h:48</div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0
</small></address>
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_d0c977ea65824390717cdb7efc36c157.html">metal</a></li><li class="navelem"><a class="el" href="dir_70a37effa88bcbd6b791977fa1e64356.html">kernels</a></li><li class="navelem"><a class="el" href="dir_83367edb60e23ad59b1a493d8c883287.html">metal_3_1</a></li><li class="navelem"><a class="el" href="backend_2metal_2kernels_2metal__3__1_2bf16_8h.html">bf16.h</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.1 </li>
</ul>
</div>
</body>
</html>
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.12.0"/>
<meta name="generator" content="Doxygen 1.13.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MLX: mlx/backend/metal/kernels/reduction/ops.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -11,11 +11,18 @@
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
@@ -28,12 +35,24 @@
<div id="projectname">MLX
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.12.0 -->
<!-- Generated by Doxygen 1.13.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
@@ -44,22 +63,23 @@ var searchBox = new SearchBox("searchBox", "search/",'.html');
$(function() { codefold.init(0); });
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search',false);
$(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){ initResizable(false); });
$(function(){initNavTree('backend_2metal_2kernels_2reduction_2ops_8h.html',''); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
@@ -81,12 +101,6 @@ $(function(){ initResizable(false); });
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_d0c977ea65824390717cdb7efc36c157.html">metal</a></li><li class="navelem"><a class="el" href="dir_70a37effa88bcbd6b791977fa1e64356.html">kernels</a></li><li class="navelem"><a class="el" href="dir_f60cd69d27fd3faa641c79056fff0e2d.html">reduction</a></li> </ul>
</div>
</div><!-- top -->
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#nested-classes">Classes</a> &#124;
@@ -157,7 +171,7 @@ Variables</h2></td></tr>
<div class="line"> <span class="keywordflow">return</span> val; \</div>
<div class="line"> }</div>
<div class="ttc" id="abackend_2metal_2kernels_2reduction_2ops_8h_html_a515b75d563a93d3c09ee677948dc83e3"><div class="ttname"><a href="#a515b75d563a93d3c09ee677948dc83e3">simd_size</a></div><div class="ttdeci">static constant constexpr const uint8_t simd_size</div><div class="ttdef"><b>Definition</b> ops.h:22</div></div>
<div class="ttc" id="abackend_2metal_2kernels_2utils_8h_html_aba6279624b1d30c525efee856a222b5c"><div class="ttname"><a href="backend_2metal_2kernels_2utils_8h.html#aba6279624b1d30c525efee856a222b5c">simd_shuffle_down</a></div><div class="ttdeci">uint64_t simd_shuffle_down(uint64_t data, uint16_t delta)</div><div class="ttdef"><b>Definition</b> utils.h:346</div></div>
<div class="ttc" id="abackend_2metal_2kernels_2utils_8h_html_aba6279624b1d30c525efee856a222b5c"><div class="ttname"><a href="backend_2metal_2kernels_2utils_8h.html#aba6279624b1d30c525efee856a222b5c">simd_shuffle_down</a></div><div class="ttdeci">uint64_t simd_shuffle_down(uint64_t data, uint16_t delta)</div><div class="ttdef"><b>Definition</b> utils.h:335</div></div>
</div><!-- fragment -->
</div>
</div>
@@ -177,7 +191,7 @@ Variables</h2></td></tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">constexpr</span></span> </td>
<span class="mlabels"><span class="mlabel static">static</span><span class="mlabel constexpr">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
@@ -185,10 +199,13 @@ Variables</h2></td></tr>
</div>
</div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0
</small></address>
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_d0c977ea65824390717cdb7efc36c157.html">metal</a></li><li class="navelem"><a class="el" href="dir_70a37effa88bcbd6b791977fa1e64356.html">kernels</a></li><li class="navelem"><a class="el" href="dir_f60cd69d27fd3faa641c79056fff0e2d.html">reduction</a></li><li class="navelem"><a class="el" href="backend_2metal_2kernels_2reduction_2ops_8h.html">ops.h</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.1 </li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,13 @@
var backend_2metal_2kernels_2reduction_2ops_8h =
[
[ "bool4_or_uint", "unionbool4__or__uint.html", "unionbool4__or__uint" ],
[ "None", "struct_none.html", "struct_none" ],
[ "And< U >", "struct_and.html", null ],
[ "Or< U >", "struct_or.html", null ],
[ "Sum< U >", "struct_sum.html", null ],
[ "Prod< U >", "struct_prod.html", null ],
[ "Min< U >", "struct_min.html", null ],
[ "Max< U >", "struct_max.html", "struct_max" ],
[ "DEFINE_SIMD_REDUCE", "backend_2metal_2kernels_2reduction_2ops_8h.html#acacf99e0ba629ed062ccc3c2eba89b05", null ],
[ "simd_size", "backend_2metal_2kernels_2reduction_2ops_8h.html#a515b75d563a93d3c09ee677948dc83e3", null ]
];
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.12.0"/>
<meta name="generator" content="Doxygen 1.13.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MLX: mlx/backend/metal/kernels/reduction/ops.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -11,11 +11,18 @@
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
@@ -28,12 +35,24 @@
<div id="projectname">MLX
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.12.0 -->
<!-- Generated by Doxygen 1.13.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
@@ -44,22 +63,23 @@ var searchBox = new SearchBox("searchBox", "search/",'.html');
$(function() { codefold.init(0); });
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search',false);
$(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){ initResizable(false); });
$(function(){initNavTree('backend_2metal_2kernels_2reduction_2ops_8h_source.html',''); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
@@ -81,12 +101,6 @@ $(function(){ initResizable(false); });
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_d0c977ea65824390717cdb7efc36c157.html">metal</a></li><li class="navelem"><a class="el" href="dir_70a37effa88bcbd6b791977fa1e64356.html">kernels</a></li><li class="navelem"><a class="el" href="dir_f60cd69d27fd3faa641c79056fff0e2d.html">reduction</a></li> </ul>
</div>
</div><!-- top -->
<div id="doc-content">
<div class="header">
<div class="headertitle"><div class="title">ops.h</div></div>
</div><!--header-->
@@ -278,7 +292,7 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> <span class="keywordflow">return</span> simd_min(val);</div>
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> }</div>
<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> </div>
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> <span class="keyword">static</span> <span class="keyword">constexpr</span> constant U init = <a class="code hl_struct" href="struct_limits.html">Limits&lt;U&gt;::max</a>;</div>
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> <span class="keyword">static</span> <span class="keyword">constexpr</span> constant U init = <a class="code hl_variable" href="struct_limits.html#a2f0673b6f9da89ce1d64f9f3d74f50a8">Limits&lt;U&gt;::max</a>;</div>
<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> </div>
<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> <span class="keywordtype">void</span> atomic_update(device <a class="code hl_struct" href="structmlx__atomic.html">mlx_atomic&lt;T&gt;</a>* out, T val, <span class="keywordtype">size_t</span> offset = 0) {</div>
@@ -302,7 +316,7 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> <span class="keywordflow">return</span> simd_max(val);</div>
<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> }</div>
<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> </div>
<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> <span class="keyword">static</span> <span class="keyword">constexpr</span> constant U init = <a class="code hl_struct" href="struct_limits.html">Limits&lt;U&gt;::min</a>;</div>
<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> <span class="keyword">static</span> <span class="keyword">constexpr</span> constant U init = <a class="code hl_variable" href="struct_limits.html#a6e81584ba65a4dc6ff9366b458e3a20e">Limits&lt;U&gt;::min</a>;</div>
<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> </div>
<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> <span class="keywordtype">void</span> atomic_update(device <a class="code hl_struct" href="structmlx__atomic.html">mlx_atomic&lt;T&gt;</a>* out, T val, <span class="keywordtype">size_t</span> offset = 0) {</div>
@@ -325,7 +339,8 @@ $(function(){ initResizable(false); });
<div class="ttc" id="abackend_2metal_2kernels_2reduction_2ops_8h_html_a515b75d563a93d3c09ee677948dc83e3"><div class="ttname"><a href="backend_2metal_2kernels_2reduction_2ops_8h.html#a515b75d563a93d3c09ee677948dc83e3">simd_size</a></div><div class="ttdeci">static constant constexpr const uint8_t simd_size</div><div class="ttdef"><b>Definition</b> ops.h:22</div></div>
<div class="ttc" id="abackend_2metal_2kernels_2reduction_2ops_8h_html_acacf99e0ba629ed062ccc3c2eba89b05"><div class="ttname"><a href="backend_2metal_2kernels_2reduction_2ops_8h.html#acacf99e0ba629ed062ccc3c2eba89b05">DEFINE_SIMD_REDUCE</a></div><div class="ttdeci">#define DEFINE_SIMD_REDUCE()</div><div class="ttdef"><b>Definition</b> ops.h:8</div></div>
<div class="ttc" id="astruct_and_html"><div class="ttname"><a href="struct_and.html">And</a></div><div class="ttdef"><b>Definition</b> ops.h:37</div></div>
<div class="ttc" id="astruct_limits_html"><div class="ttname"><a href="struct_limits.html">Limits</a></div><div class="ttdef"><b>Definition</b> utils.h:23</div></div>
<div class="ttc" id="astruct_limits_html_a2f0673b6f9da89ce1d64f9f3d74f50a8"><div class="ttname"><a href="struct_limits.html#a2f0673b6f9da89ce1d64f9f3d74f50a8">Limits::max</a></div><div class="ttdeci">static const constant U max</div><div class="ttdef"><b>Definition</b> utils.h:24</div></div>
<div class="ttc" id="astruct_limits_html_a6e81584ba65a4dc6ff9366b458e3a20e"><div class="ttname"><a href="struct_limits.html#a6e81584ba65a4dc6ff9366b458e3a20e">Limits::min</a></div><div class="ttdeci">static const constant U min</div><div class="ttdef"><b>Definition</b> utils.h:25</div></div>
<div class="ttc" id="astruct_max_html"><div class="ttname"><a href="struct_max.html">Max</a></div><div class="ttdef"><b>Definition</b> ops.h:185</div></div>
<div class="ttc" id="astruct_max_html_adfee65117dbf49404241861d374b9c4d"><div class="ttname"><a href="struct_max.html#adfee65117dbf49404241861d374b9c4d">Max::a</a></div><div class="ttdeci">b a</div><div class="ttdef"><b>Definition</b> ops.h:202</div></div>
<div class="ttc" id="astruct_min_html"><div class="ttname"><a href="struct_min.html">Min</a></div><div class="ttdef"><b>Definition</b> ops.h:163</div></div>
@@ -339,10 +354,13 @@ $(function(){ initResizable(false); });
<div class="ttc" id="aunionbool4__or__uint_html_a47d77eac47598fe420f8f04a615f76ca"><div class="ttname"><a href="unionbool4__or__uint.html#a47d77eac47598fe420f8f04a615f76ca">bool4_or_uint::b</a></div><div class="ttdeci">bool4 b</div><div class="ttdef"><b>Definition</b> ops.h:25</div></div>
<div class="ttc" id="aunionbool4__or__uint_html_ab24d95aaf4203ddf3e6b1ed19397ced7"><div class="ttname"><a href="unionbool4__or__uint.html#ab24d95aaf4203ddf3e6b1ed19397ced7">bool4_or_uint::i</a></div><div class="ttdeci">unsigned int i</div><div class="ttdef"><b>Definition</b> ops.h:26</div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0
</small></address>
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_d0c977ea65824390717cdb7efc36c157.html">metal</a></li><li class="navelem"><a class="el" href="dir_70a37effa88bcbd6b791977fa1e64356.html">kernels</a></li><li class="navelem"><a class="el" href="dir_f60cd69d27fd3faa641c79056fff0e2d.html">reduction</a></li><li class="navelem"><a class="el" href="backend_2metal_2kernels_2reduction_2ops_8h.html">ops.h</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.1 </li>
</ul>
</div>
</body>
</html>
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.12.0"/>
<meta name="generator" content="Doxygen 1.13.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MLX: mlx/backend/metal/kernels/steel/attn/transforms.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -11,11 +11,18 @@
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
@@ -28,12 +35,24 @@
<div id="projectname">MLX
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.12.0 -->
<!-- Generated by Doxygen 1.13.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
@@ -44,22 +63,23 @@ var searchBox = new SearchBox("searchBox", "search/",'.html');
$(function() { codefold.init(0); });
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search',false);
$(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){ initResizable(false); });
$(function(){initNavTree('backend_2metal_2kernels_2steel_2attn_2transforms_8h.html',''); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
@@ -81,12 +101,6 @@ $(function(){ initResizable(false); });
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_d0c977ea65824390717cdb7efc36c157.html">metal</a></li><li class="navelem"><a class="el" href="dir_70a37effa88bcbd6b791977fa1e64356.html">kernels</a></li><li class="navelem"><a class="el" href="dir_76215a6c54e2b67053e723fc2395583c.html">steel</a></li><li class="navelem"><a class="el" href="dir_e1756c7634b0c14aead026895ad71c6d.html">attn</a></li> </ul>
</div>
</div><!-- top -->
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#nested-classes">Classes</a> &#124;
@@ -119,10 +133,13 @@ Namespaces</h2></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0
</small></address>
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_d0c977ea65824390717cdb7efc36c157.html">metal</a></li><li class="navelem"><a class="el" href="dir_70a37effa88bcbd6b791977fa1e64356.html">kernels</a></li><li class="navelem"><a class="el" href="dir_76215a6c54e2b67053e723fc2395583c.html">steel</a></li><li class="navelem"><a class="el" href="dir_e1756c7634b0c14aead026895ad71c6d.html">attn</a></li><li class="navelem"><a class="el" href="backend_2metal_2kernels_2steel_2attn_2transforms_8h.html">transforms.h</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.1 </li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,8 @@
var backend_2metal_2kernels_2steel_2attn_2transforms_8h =
[
[ "mlx::steel::TransformNone< OutT, InT >", "structmlx_1_1steel_1_1_transform_none.html", "structmlx_1_1steel_1_1_transform_none" ],
[ "mlx::steel::TransformAdd< OutT, InT >", "structmlx_1_1steel_1_1_transform_add.html", "structmlx_1_1steel_1_1_transform_add" ],
[ "mlx::steel::TransformAxpby< OutT, InT >", "structmlx_1_1steel_1_1_transform_axpby.html", "structmlx_1_1steel_1_1_transform_axpby" ],
[ "mlx::steel::AccumHelper< T >", "structmlx_1_1steel_1_1_accum_helper.html", "structmlx_1_1steel_1_1_accum_helper" ],
[ "mlx::steel::BlockSwizzle", "structmlx_1_1steel_1_1_block_swizzle.html", "structmlx_1_1steel_1_1_block_swizzle" ]
];
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.12.0"/>
<meta name="generator" content="Doxygen 1.13.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MLX: mlx/backend/metal/kernels/steel/attn/transforms.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -11,11 +11,18 @@
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
@@ -28,12 +35,24 @@
<div id="projectname">MLX
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.12.0 -->
<!-- Generated by Doxygen 1.13.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
@@ -44,22 +63,23 @@ var searchBox = new SearchBox("searchBox", "search/",'.html');
$(function() { codefold.init(0); });
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search',false);
$(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){ initResizable(false); });
$(function(){initNavTree('backend_2metal_2kernels_2steel_2attn_2transforms_8h_source.html',''); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
@@ -81,12 +101,6 @@ $(function(){ initResizable(false); });
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_d0c977ea65824390717cdb7efc36c157.html">metal</a></li><li class="navelem"><a class="el" href="dir_70a37effa88bcbd6b791977fa1e64356.html">kernels</a></li><li class="navelem"><a class="el" href="dir_76215a6c54e2b67053e723fc2395583c.html">steel</a></li><li class="navelem"><a class="el" href="dir_e1756c7634b0c14aead026895ad71c6d.html">attn</a></li> </ul>
</div>
</div><!-- top -->
<div id="doc-content">
<div class="header">
<div class="headertitle"><div class="title">transforms.h</div></div>
</div><!--header-->
@@ -96,14 +110,14 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="preprocessor">#pragma once</span></div>
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span> </div>
<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="preprocessor">#include &quot;<a class="code" href="backend_2metal_2kernels_2steel_2utils_8h.html">mlx/backend/metal/kernels/steel/utils.h</a>&quot;</span></div>
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span> </div>
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span></div>
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment">// Transforms and Epilogues</span></div>
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span> </div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacemlx.html">mlx</a> {</div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="keyword">namespace </span>steel {</div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacemlx_1_1steel.html">steel</a> {</div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span> </div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> OutT, <span class="keyword">typename</span> InT&gt;</div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="keyword">struct </span>TransformNone {</div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="keyword">struct </span><a class="code hl_struct" href="structmlx_1_1steel_1_1_transform_none.html">TransformNone</a> {</div>
<div class="foldopen" id="foldopen00016" data-start="{" data-end="}">
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_transform_none.html#a84daa89be5b3348b5715bf8c5a01da75"> 16</a></span> <span class="keyword">static</span> METAL_FUNC OutT <a class="code hl_function" href="structmlx_1_1steel_1_1_transform_none.html#a84daa89be5b3348b5715bf8c5a01da75">apply</a>(InT x) {</div>
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span> <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span>OutT<span class="keyword">&gt;</span>(x);</div>
@@ -177,6 +191,7 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span>} <span class="comment">// namespace steel</span></div>
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span>} <span class="comment">// namespace mlx</span></div>
<div class="ttc" id="abackend_2metal_2kernels_2steel_2utils_8h_html"><div class="ttname"><a href="backend_2metal_2kernels_2steel_2utils_8h.html">utils.h</a></div></div>
<div class="ttc" id="anamespacemlx_1_1steel_html"><div class="ttname"><a href="namespacemlx_1_1steel.html">mlx::steel</a></div><div class="ttdef"><b>Definition</b> attn.h:19</div></div>
<div class="ttc" id="anamespacemlx_html"><div class="ttname"><a href="namespacemlx.html">mlx</a></div><div class="ttdef"><b>Definition</b> allocator.h:7</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_accum_helper_html_ae52abf69e7ba6af1a73d65d57182ed26"><div class="ttname"><a href="structmlx_1_1steel_1_1_accum_helper.html#ae52abf69e7ba6af1a73d65d57182ed26">mlx::steel::AccumHelper::accum_type</a></div><div class="ttdeci">float accum_type</div><div class="ttdef"><b>Definition</b> transforms.h:57</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_swizzle_html"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_swizzle.html">mlx::steel::BlockSwizzle</a></div><div class="ttdef"><b>Definition</b> transforms.h:60</div></div>
@@ -189,13 +204,17 @@ $(function(){ initResizable(false); });
<div class="ttc" id="astructmlx_1_1steel_1_1_transform_axpby_html_aaf3a45e25d7abf7a34b48cc612e631ba"><div class="ttname"><a href="structmlx_1_1steel_1_1_transform_axpby.html#aaf3a45e25d7abf7a34b48cc612e631ba">mlx::steel::TransformAxpby::apply</a></div><div class="ttdeci">METAL_FUNC OutT apply(InT x, OutT c) const</div><div class="ttdef"><b>Definition</b> transforms.h:50</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_transform_axpby_html_ab3223b49c6b3b7f89eba91aeaff9dcff"><div class="ttname"><a href="structmlx_1_1steel_1_1_transform_axpby.html#ab3223b49c6b3b7f89eba91aeaff9dcff">mlx::steel::TransformAxpby::alpha</a></div><div class="ttdeci">const float alpha</div><div class="ttdef"><b>Definition</b> transforms.h:40</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_transform_axpby_html_ad7d11c53de13646b725921391d15bbe9"><div class="ttname"><a href="structmlx_1_1steel_1_1_transform_axpby.html#ad7d11c53de13646b725921391d15bbe9">mlx::steel::TransformAxpby::TransformAxpby</a></div><div class="ttdeci">TransformAxpby(const float alpha_, const float beta_)</div><div class="ttdef"><b>Definition</b> transforms.h:43</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_transform_none_html"><div class="ttname"><a href="structmlx_1_1steel_1_1_transform_none.html">mlx::steel::TransformNone</a></div><div class="ttdef"><b>Definition</b> transforms.h:15</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_transform_none_html_a84daa89be5b3348b5715bf8c5a01da75"><div class="ttname"><a href="structmlx_1_1steel_1_1_transform_none.html#a84daa89be5b3348b5715bf8c5a01da75">mlx::steel::TransformNone::apply</a></div><div class="ttdeci">static METAL_FUNC OutT apply(InT x)</div><div class="ttdef"><b>Definition</b> transforms.h:16</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_transform_none_html_ae4c397038f386b13eaa386638a0fce90"><div class="ttname"><a href="structmlx_1_1steel_1_1_transform_none.html#ae4c397038f386b13eaa386638a0fce90">mlx::steel::TransformNone::apply</a></div><div class="ttdeci">static METAL_FUNC OutT apply(InT x, OutT)</div><div class="ttdef"><b>Definition</b> transforms.h:20</div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0
</small></address>
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_d0c977ea65824390717cdb7efc36c157.html">metal</a></li><li class="navelem"><a class="el" href="dir_70a37effa88bcbd6b791977fa1e64356.html">kernels</a></li><li class="navelem"><a class="el" href="dir_76215a6c54e2b67053e723fc2395583c.html">steel</a></li><li class="navelem"><a class="el" href="dir_e1756c7634b0c14aead026895ad71c6d.html">attn</a></li><li class="navelem"><a class="el" href="backend_2metal_2kernels_2steel_2attn_2transforms_8h.html">transforms.h</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.1 </li>
</ul>
</div>
</body>
</html>
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.12.0"/>
<meta name="generator" content="Doxygen 1.13.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MLX: mlx/backend/metal/kernels/steel/gemm/transforms.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -11,11 +11,18 @@
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
@@ -28,12 +35,24 @@
<div id="projectname">MLX
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.12.0 -->
<!-- Generated by Doxygen 1.13.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
@@ -44,22 +63,23 @@ var searchBox = new SearchBox("searchBox", "search/",'.html');
$(function() { codefold.init(0); });
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search',false);
$(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){ initResizable(false); });
$(function(){initNavTree('backend_2metal_2kernels_2steel_2gemm_2transforms_8h.html',''); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
@@ -81,12 +101,6 @@ $(function(){ initResizable(false); });
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_d0c977ea65824390717cdb7efc36c157.html">metal</a></li><li class="navelem"><a class="el" href="dir_70a37effa88bcbd6b791977fa1e64356.html">kernels</a></li><li class="navelem"><a class="el" href="dir_76215a6c54e2b67053e723fc2395583c.html">steel</a></li><li class="navelem"><a class="el" href="dir_6768c99e6145fb9510ccdb40db8ede25.html">gemm</a></li> </ul>
</div>
</div><!-- top -->
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#nested-classes">Classes</a> &#124;
@@ -119,10 +133,13 @@ Namespaces</h2></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0
</small></address>
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_d0c977ea65824390717cdb7efc36c157.html">metal</a></li><li class="navelem"><a class="el" href="dir_70a37effa88bcbd6b791977fa1e64356.html">kernels</a></li><li class="navelem"><a class="el" href="dir_76215a6c54e2b67053e723fc2395583c.html">steel</a></li><li class="navelem"><a class="el" href="dir_6768c99e6145fb9510ccdb40db8ede25.html">gemm</a></li><li class="navelem"><a class="el" href="backend_2metal_2kernels_2steel_2gemm_2transforms_8h.html">transforms.h</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.1 </li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,8 @@
var backend_2metal_2kernels_2steel_2gemm_2transforms_8h =
[
[ "mlx::steel::TransformNone< OutT, InT >", "structmlx_1_1steel_1_1_transform_none.html", "structmlx_1_1steel_1_1_transform_none" ],
[ "mlx::steel::TransformAdd< OutT, InT >", "structmlx_1_1steel_1_1_transform_add.html", "structmlx_1_1steel_1_1_transform_add" ],
[ "mlx::steel::TransformAxpby< OutT, InT >", "structmlx_1_1steel_1_1_transform_axpby.html", "structmlx_1_1steel_1_1_transform_axpby" ],
[ "mlx::steel::AccumHelper< T >", "structmlx_1_1steel_1_1_accum_helper.html", "structmlx_1_1steel_1_1_accum_helper" ],
[ "mlx::steel::BlockSwizzle", "structmlx_1_1steel_1_1_block_swizzle.html", "structmlx_1_1steel_1_1_block_swizzle" ]
];
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.12.0"/>
<meta name="generator" content="Doxygen 1.13.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MLX: mlx/backend/metal/kernels/steel/gemm/transforms.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -11,11 +11,18 @@
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
@@ -28,12 +35,24 @@
<div id="projectname">MLX
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.12.0 -->
<!-- Generated by Doxygen 1.13.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
@@ -44,22 +63,23 @@ var searchBox = new SearchBox("searchBox", "search/",'.html');
$(function() { codefold.init(0); });
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search',false);
$(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){ initResizable(false); });
$(function(){initNavTree('backend_2metal_2kernels_2steel_2gemm_2transforms_8h_source.html',''); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
@@ -81,12 +101,6 @@ $(function(){ initResizable(false); });
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_d0c977ea65824390717cdb7efc36c157.html">metal</a></li><li class="navelem"><a class="el" href="dir_70a37effa88bcbd6b791977fa1e64356.html">kernels</a></li><li class="navelem"><a class="el" href="dir_76215a6c54e2b67053e723fc2395583c.html">steel</a></li><li class="navelem"><a class="el" href="dir_6768c99e6145fb9510ccdb40db8ede25.html">gemm</a></li> </ul>
</div>
</div><!-- top -->
<div id="doc-content">
<div class="header">
<div class="headertitle"><div class="title">transforms.h</div></div>
</div><!--header-->
@@ -96,11 +110,11 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="preprocessor">#pragma once</span></div>
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span> </div>
<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="preprocessor">#include &quot;<a class="code" href="backend_2metal_2kernels_2steel_2utils_8h.html">mlx/backend/metal/kernels/steel/utils.h</a>&quot;</span></div>
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span> </div>
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span></div>
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment">// Transforms and Epilogues</span></div>
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span> </div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacemlx.html">mlx</a> {</div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="keyword">namespace </span>steel {</div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacemlx_1_1steel.html">steel</a> {</div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span> </div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> OutT, <span class="keyword">typename</span> InT&gt;</div>
<div class="foldopen" id="foldopen00015" data-start="{" data-end="};">
@@ -121,7 +135,7 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> </div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> OutT, <span class="keyword">typename</span> InT&gt;</div>
<div class="foldopen" id="foldopen00026" data-start="{" data-end="};">
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_transform_add.html"> 26</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structmlx_1_1steel_1_1_transform_add.html">TransformAdd</a> {</div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_transform_add.html"> 26</a></span><span class="keyword">struct </span><a class="code hl_function" href="structmlx_1_1steel_1_1_transform_add.html#a7c1b7292910b74281e5296b3dac157ae">TransformAdd</a> {</div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_transform_add.html#a7c1b7292910b74281e5296b3dac157ae"> 27</a></span> <a class="code hl_function" href="structmlx_1_1steel_1_1_transform_add.html#a7c1b7292910b74281e5296b3dac157ae">TransformAdd</a>(<span class="keyword">const</span> <span class="keywordtype">float</span>, <span class="keyword">const</span> <span class="keywordtype">float</span>) {}</div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> </div>
<div class="foldopen" id="foldopen00029" data-start="{" data-end="}">
@@ -140,7 +154,7 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> </div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> OutT, <span class="keyword">typename</span> InT&gt;</div>
<div class="foldopen" id="foldopen00039" data-start="{" data-end="};">
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_transform_axpby.html"> 39</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structmlx_1_1steel_1_1_transform_axpby.html">TransformAxpby</a> {</div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_transform_axpby.html"> 39</a></span><span class="keyword">struct </span><a class="code hl_function" href="structmlx_1_1steel_1_1_transform_axpby.html#ad7d11c53de13646b725921391d15bbe9">TransformAxpby</a> {</div>
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> <span class="keyword">const</span> <span class="keywordtype">float</span> <a class="code hl_variable" href="structmlx_1_1steel_1_1_transform_axpby.html#ab3223b49c6b3b7f89eba91aeaff9dcff">alpha</a>;</div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> <span class="keyword">const</span> <span class="keywordtype">float</span> <a class="code hl_variable" href="structmlx_1_1steel_1_1_transform_axpby.html#a5fc726f085bafd1acbc391886f7fb8b6">beta</a>;</div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> </div>
@@ -166,7 +180,7 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="foldopen" id="foldopen00056" data-start="{" data-end="};">
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_accum_helper.html"> 56</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structmlx_1_1steel_1_1_accum_helper.html">AccumHelper</a> {</div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> <span class="keyword">typedef</span> <span class="keywordtype">float</span> <a class="code hl_typedef" href="structmlx_1_1steel_1_1_accum_helper.html#ae52abf69e7ba6af1a73d65d57182ed26">accum_type</a>;</div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"><a class="line" href="structmlx_1_1steel_1_1_accum_helper.html#ae52abf69e7ba6af1a73d65d57182ed26"> 57</a></span> <span class="keyword">typedef</span> <span class="keywordtype">float</span> <a class="code hl_typedef" href="structmlx_1_1steel_1_1_accum_helper.html#ae52abf69e7ba6af1a73d65d57182ed26">accum_type</a>;</div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span>};</div>
</div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> </div>
@@ -187,16 +201,15 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span>} <span class="comment">// namespace steel</span></div>
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span>} <span class="comment">// namespace mlx</span></div>
<div class="ttc" id="abackend_2metal_2kernels_2steel_2utils_8h_html"><div class="ttname"><a href="backend_2metal_2kernels_2steel_2utils_8h.html">utils.h</a></div></div>
<div class="ttc" id="anamespacemlx_1_1steel_html"><div class="ttname"><a href="namespacemlx_1_1steel.html">mlx::steel</a></div><div class="ttdef"><b>Definition</b> attn.h:19</div></div>
<div class="ttc" id="anamespacemlx_html"><div class="ttname"><a href="namespacemlx.html">mlx</a></div><div class="ttdef"><b>Definition</b> allocator.h:7</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_accum_helper_html"><div class="ttname"><a href="structmlx_1_1steel_1_1_accum_helper.html">mlx::steel::AccumHelper</a></div><div class="ttdef"><b>Definition</b> transforms.h:56</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_accum_helper_html_ae52abf69e7ba6af1a73d65d57182ed26"><div class="ttname"><a href="structmlx_1_1steel_1_1_accum_helper.html#ae52abf69e7ba6af1a73d65d57182ed26">mlx::steel::AccumHelper::accum_type</a></div><div class="ttdeci">float accum_type</div><div class="ttdef"><b>Definition</b> transforms.h:57</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_swizzle_html"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_swizzle.html">mlx::steel::BlockSwizzle</a></div><div class="ttdef"><b>Definition</b> transforms.h:60</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_block_swizzle_html_a98e558d63826d2aaa06d3e65a06d2760"><div class="ttname"><a href="structmlx_1_1steel_1_1_block_swizzle.html#a98e558d63826d2aaa06d3e65a06d2760">mlx::steel::BlockSwizzle::swizzle</a></div><div class="ttdeci">static METAL_FUNC int2 swizzle(uint3 tid, const int swizzle_log)</div><div class="ttdef"><b>Definition</b> transforms.h:62</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_transform_add_html"><div class="ttname"><a href="structmlx_1_1steel_1_1_transform_add.html">mlx::steel::TransformAdd</a></div><div class="ttdef"><b>Definition</b> transforms.h:26</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_transform_add_html_a4923b0059d88099b2739f2cf0273ea19"><div class="ttname"><a href="structmlx_1_1steel_1_1_transform_add.html#a4923b0059d88099b2739f2cf0273ea19">mlx::steel::TransformAdd::apply</a></div><div class="ttdeci">static METAL_FUNC OutT apply(InT x, OutT c)</div><div class="ttdef"><b>Definition</b> transforms.h:33</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_transform_add_html_a7c1b7292910b74281e5296b3dac157ae"><div class="ttname"><a href="structmlx_1_1steel_1_1_transform_add.html#a7c1b7292910b74281e5296b3dac157ae">mlx::steel::TransformAdd::TransformAdd</a></div><div class="ttdeci">TransformAdd(const float, const float)</div><div class="ttdef"><b>Definition</b> transforms.h:27</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_transform_add_html_afbb688d84443fd622b4dd2768cfe0acf"><div class="ttname"><a href="structmlx_1_1steel_1_1_transform_add.html#afbb688d84443fd622b4dd2768cfe0acf">mlx::steel::TransformAdd::apply</a></div><div class="ttdeci">static METAL_FUNC OutT apply(InT x)</div><div class="ttdef"><b>Definition</b> transforms.h:29</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_transform_axpby_html"><div class="ttname"><a href="structmlx_1_1steel_1_1_transform_axpby.html">mlx::steel::TransformAxpby</a></div><div class="ttdef"><b>Definition</b> transforms.h:39</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_transform_axpby_html_a14ad48b0189d6bdde06c66f1b567ae87"><div class="ttname"><a href="structmlx_1_1steel_1_1_transform_axpby.html#a14ad48b0189d6bdde06c66f1b567ae87">mlx::steel::TransformAxpby::apply</a></div><div class="ttdeci">static METAL_FUNC OutT apply(InT x)</div><div class="ttdef"><b>Definition</b> transforms.h:46</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_transform_axpby_html_a5fc726f085bafd1acbc391886f7fb8b6"><div class="ttname"><a href="structmlx_1_1steel_1_1_transform_axpby.html#a5fc726f085bafd1acbc391886f7fb8b6">mlx::steel::TransformAxpby::beta</a></div><div class="ttdeci">const float beta</div><div class="ttdef"><b>Definition</b> transforms.h:41</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_transform_axpby_html_aaf3a45e25d7abf7a34b48cc612e631ba"><div class="ttname"><a href="structmlx_1_1steel_1_1_transform_axpby.html#aaf3a45e25d7abf7a34b48cc612e631ba">mlx::steel::TransformAxpby::apply</a></div><div class="ttdeci">METAL_FUNC OutT apply(InT x, OutT c) const</div><div class="ttdef"><b>Definition</b> transforms.h:50</div></div>
@@ -206,10 +219,13 @@ $(function(){ initResizable(false); });
<div class="ttc" id="astructmlx_1_1steel_1_1_transform_none_html_a84daa89be5b3348b5715bf8c5a01da75"><div class="ttname"><a href="structmlx_1_1steel_1_1_transform_none.html#a84daa89be5b3348b5715bf8c5a01da75">mlx::steel::TransformNone::apply</a></div><div class="ttdeci">static METAL_FUNC OutT apply(InT x)</div><div class="ttdef"><b>Definition</b> transforms.h:16</div></div>
<div class="ttc" id="astructmlx_1_1steel_1_1_transform_none_html_ae4c397038f386b13eaa386638a0fce90"><div class="ttname"><a href="structmlx_1_1steel_1_1_transform_none.html#ae4c397038f386b13eaa386638a0fce90">mlx::steel::TransformNone::apply</a></div><div class="ttdeci">static METAL_FUNC OutT apply(InT x, OutT)</div><div class="ttdef"><b>Definition</b> transforms.h:20</div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0
</small></address>
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_d0c977ea65824390717cdb7efc36c157.html">metal</a></li><li class="navelem"><a class="el" href="dir_70a37effa88bcbd6b791977fa1e64356.html">kernels</a></li><li class="navelem"><a class="el" href="dir_76215a6c54e2b67053e723fc2395583c.html">steel</a></li><li class="navelem"><a class="el" href="dir_6768c99e6145fb9510ccdb40db8ede25.html">gemm</a></li><li class="navelem"><a class="el" href="backend_2metal_2kernels_2steel_2gemm_2transforms_8h.html">transforms.h</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.1 </li>
</ul>
</div>
</body>
</html>
+54 -37
View File
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.12.0"/>
<meta name="generator" content="Doxygen 1.13.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MLX: mlx/backend/metal/kernels/steel/utils.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -11,11 +11,18 @@
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
@@ -28,12 +35,24 @@
<div id="projectname">MLX
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.12.0 -->
<!-- Generated by Doxygen 1.13.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
@@ -44,22 +63,23 @@ var searchBox = new SearchBox("searchBox", "search/",'.html');
$(function() { codefold.init(0); });
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search',false);
$(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){ initResizable(false); });
$(function(){initNavTree('backend_2metal_2kernels_2steel_2utils_8h.html',''); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
@@ -81,12 +101,6 @@ $(function(){ initResizable(false); });
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_d0c977ea65824390717cdb7efc36c157.html">metal</a></li><li class="navelem"><a class="el" href="dir_70a37effa88bcbd6b791977fa1e64356.html">kernels</a></li><li class="navelem"><a class="el" href="dir_76215a6c54e2b67053e723fc2395583c.html">steel</a></li> </ul>
</div>
</div><!-- top -->
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#func-members">Functions</a> </div>
@@ -99,14 +113,14 @@ $(function(){ initResizable(false); });
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:aaf4974425147d6f26d031691e321637f" id="r_aaf4974425147d6f26d031691e321637f"><td class="memItemLeft" align="right" valign="top">METAL_FUNC ulong2&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aaf4974425147d6f26d031691e321637f">elem_to_loc_broadcast</a> (uint elem, constant const int *shape, constant const size_t *a_strides, constant const size_t *b_strides, int ndim)</td></tr>
<tr class="separator:aaf4974425147d6f26d031691e321637f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a42bd57d203a40d3d7d429f2333590a3c" id="r_a42bd57d203a40d3d7d429f2333590a3c"><td class="memItemLeft" align="right" valign="top">METAL_FUNC ulong3&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a42bd57d203a40d3d7d429f2333590a3c">elem_to_loc_broadcast</a> (uint elem, constant const int *shape, constant const size_t *a_strides, constant const size_t *b_strides, constant const size_t *c_strides, int ndim)</td></tr>
<tr class="separator:a42bd57d203a40d3d7d429f2333590a3c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af62bacceef7d93f8c1ba4fcf5b1adfe6" id="r_af62bacceef7d93f8c1ba4fcf5b1adfe6"><td class="memItemLeft" align="right" valign="top">METAL_FUNC ulong2&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#af62bacceef7d93f8c1ba4fcf5b1adfe6">elem_to_loc_broadcast</a> (uint elem, constant const int *shape, constant const int64_t *a_strides, constant const int64_t *b_strides, int ndim)</td></tr>
<tr class="separator:af62bacceef7d93f8c1ba4fcf5b1adfe6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a32e15e82a0534d2647b927949860d0fe" id="r_a32e15e82a0534d2647b927949860d0fe"><td class="memItemLeft" align="right" valign="top">METAL_FUNC ulong3&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a32e15e82a0534d2647b927949860d0fe">elem_to_loc_broadcast</a> (uint elem, constant const int *shape, constant const int64_t *a_strides, constant const int64_t *b_strides, constant const int64_t *c_strides, int ndim)</td></tr>
<tr class="separator:a32e15e82a0534d2647b927949860d0fe"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<h2 class="groupheader">Function Documentation</h2>
<a id="a42bd57d203a40d3d7d429f2333590a3c" name="a42bd57d203a40d3d7d429f2333590a3c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a42bd57d203a40d3d7d429f2333590a3c">&#9670;&#160;</a></span>elem_to_loc_broadcast() <span class="overload">[1/2]</span></h2>
<a id="a32e15e82a0534d2647b927949860d0fe" name="a32e15e82a0534d2647b927949860d0fe"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a32e15e82a0534d2647b927949860d0fe">&#9670;&#160;</a></span>elem_to_loc_broadcast() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
@@ -124,17 +138,17 @@ Functions</h2></td></tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">constant const size_t *</td> <td class="paramname"><span class="paramname"><em>a_strides</em></span>, </td>
<td class="paramtype">constant const int64_t *</td> <td class="paramname"><span class="paramname"><em>a_strides</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">constant const size_t *</td> <td class="paramname"><span class="paramname"><em>b_strides</em></span>, </td>
<td class="paramtype">constant const int64_t *</td> <td class="paramname"><span class="paramname"><em>b_strides</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">constant const size_t *</td> <td class="paramname"><span class="paramname"><em>c_strides</em></span>, </td>
<td class="paramtype">constant const int64_t *</td> <td class="paramname"><span class="paramname"><em>c_strides</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
@@ -146,8 +160,8 @@ Functions</h2></td></tr>
</div>
</div>
<a id="aaf4974425147d6f26d031691e321637f" name="aaf4974425147d6f26d031691e321637f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aaf4974425147d6f26d031691e321637f">&#9670;&#160;</a></span>elem_to_loc_broadcast() <span class="overload">[2/2]</span></h2>
<a id="af62bacceef7d93f8c1ba4fcf5b1adfe6" name="af62bacceef7d93f8c1ba4fcf5b1adfe6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af62bacceef7d93f8c1ba4fcf5b1adfe6">&#9670;&#160;</a></span>elem_to_loc_broadcast() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
@@ -165,12 +179,12 @@ Functions</h2></td></tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">constant const size_t *</td> <td class="paramname"><span class="paramname"><em>a_strides</em></span>, </td>
<td class="paramtype">constant const int64_t *</td> <td class="paramname"><span class="paramname"><em>a_strides</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">constant const size_t *</td> <td class="paramname"><span class="paramname"><em>b_strides</em></span>, </td>
<td class="paramtype">constant const int64_t *</td> <td class="paramname"><span class="paramname"><em>b_strides</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
@@ -183,10 +197,13 @@ Functions</h2></td></tr>
</div>
</div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0
</small></address>
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_d0c977ea65824390717cdb7efc36c157.html">metal</a></li><li class="navelem"><a class="el" href="dir_70a37effa88bcbd6b791977fa1e64356.html">kernels</a></li><li class="navelem"><a class="el" href="dir_76215a6c54e2b67053e723fc2395583c.html">steel</a></li><li class="navelem"><a class="el" href="backend_2metal_2kernels_2steel_2utils_8h.html">utils.h</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.1 </li>
</ul>
</div>
</body>
</html>
@@ -0,0 +1,5 @@
var backend_2metal_2kernels_2steel_2utils_8h =
[
[ "elem_to_loc_broadcast", "backend_2metal_2kernels_2steel_2utils_8h.html#a32e15e82a0534d2647b927949860d0fe", null ],
[ "elem_to_loc_broadcast", "backend_2metal_2kernels_2steel_2utils_8h.html#af62bacceef7d93f8c1ba4fcf5b1adfe6", null ]
];
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.12.0"/>
<meta name="generator" content="Doxygen 1.13.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MLX: mlx/backend/metal/kernels/steel/utils.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -11,11 +11,18 @@
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
@@ -28,12 +35,24 @@
<div id="projectname">MLX
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.12.0 -->
<!-- Generated by Doxygen 1.13.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
@@ -44,22 +63,23 @@ var searchBox = new SearchBox("searchBox", "search/",'.html');
$(function() { codefold.init(0); });
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search',false);
$(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){ initResizable(false); });
$(function(){initNavTree('backend_2metal_2kernels_2steel_2utils_8h_source.html',''); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
@@ -81,12 +101,6 @@ $(function(){ initResizable(false); });
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_d0c977ea65824390717cdb7efc36c157.html">metal</a></li><li class="navelem"><a class="el" href="dir_70a37effa88bcbd6b791977fa1e64356.html">kernels</a></li><li class="navelem"><a class="el" href="dir_76215a6c54e2b67053e723fc2395583c.html">steel</a></li> </ul>
</div>
</div><!-- top -->
<div id="doc-content">
<div class="header">
<div class="headertitle"><div class="title">utils.h</div></div>
</div><!--header-->
@@ -98,11 +112,11 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="preprocessor">#include &lt;metal_stdlib&gt;</span></div>
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span> </div>
<div class="foldopen" id="foldopen00007" data-start="{" data-end="}">
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"><a class="line" href="backend_2metal_2kernels_2steel_2utils_8h.html#aaf4974425147d6f26d031691e321637f"> 7</a></span>METAL_FUNC ulong2 <a class="code hl_function" href="backend_2metal_2kernels_2steel_2utils_8h.html#aaf4974425147d6f26d031691e321637f">elem_to_loc_broadcast</a>(</div>
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"><a class="line" href="backend_2metal_2kernels_2steel_2utils_8h.html#af62bacceef7d93f8c1ba4fcf5b1adfe6"> 7</a></span>METAL_FUNC ulong2 <a class="code hl_function" href="backend_2metal_2kernels_2steel_2utils_8h.html#af62bacceef7d93f8c1ba4fcf5b1adfe6">elem_to_loc_broadcast</a>(</div>
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span> uint elem,</div>
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span> constant <span class="keyword">const</span> <span class="keywordtype">int</span>* shape,</div>
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span> constant <span class="keyword">const</span> <span class="keywordtype">size_t</span>* a_strides,</div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span> constant <span class="keyword">const</span> <span class="keywordtype">size_t</span>* b_strides,</div>
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span> constant <span class="keyword">const</span> int64_t* a_strides,</div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span> constant <span class="keyword">const</span> int64_t* b_strides,</div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span> <span class="keywordtype">int</span> ndim) {</div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span> ulong loc_a{0};</div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span> ulong loc_b{0};</div>
@@ -117,12 +131,12 @@ $(function(){ initResizable(false); });
</div>
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> </div>
<div class="foldopen" id="foldopen00024" data-start="{" data-end="}">
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"><a class="line" href="backend_2metal_2kernels_2steel_2utils_8h.html#a42bd57d203a40d3d7d429f2333590a3c"> 24</a></span>METAL_FUNC ulong3 <a class="code hl_function" href="backend_2metal_2kernels_2steel_2utils_8h.html#aaf4974425147d6f26d031691e321637f">elem_to_loc_broadcast</a>(</div>
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"><a class="line" href="backend_2metal_2kernels_2steel_2utils_8h.html#a32e15e82a0534d2647b927949860d0fe"> 24</a></span>METAL_FUNC ulong3 <a class="code hl_function" href="backend_2metal_2kernels_2steel_2utils_8h.html#af62bacceef7d93f8c1ba4fcf5b1adfe6">elem_to_loc_broadcast</a>(</div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> uint elem,</div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> constant <span class="keyword">const</span> <span class="keywordtype">int</span>* shape,</div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> constant <span class="keyword">const</span> <span class="keywordtype">size_t</span>* a_strides,</div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> constant <span class="keyword">const</span> <span class="keywordtype">size_t</span>* b_strides,</div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> constant <span class="keyword">const</span> <span class="keywordtype">size_t</span>* c_strides,</div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> constant <span class="keyword">const</span> int64_t* a_strides,</div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> constant <span class="keyword">const</span> int64_t* b_strides,</div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> constant <span class="keyword">const</span> int64_t* c_strides,</div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> <span class="keywordtype">int</span> ndim) {</div>
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> ulong loc_a{0};</div>
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> ulong loc_b{0};</div>
@@ -137,12 +151,15 @@ $(function(){ initResizable(false); });
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> <span class="keywordflow">return</span> ulong3(loc_a, loc_b, loc_c);</div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span>}</div>
</div>
<div class="ttc" id="abackend_2metal_2kernels_2steel_2utils_8h_html_aaf4974425147d6f26d031691e321637f"><div class="ttname"><a href="backend_2metal_2kernels_2steel_2utils_8h.html#aaf4974425147d6f26d031691e321637f">elem_to_loc_broadcast</a></div><div class="ttdeci">METAL_FUNC ulong2 elem_to_loc_broadcast(uint elem, constant const int *shape, constant const size_t *a_strides, constant const size_t *b_strides, int ndim)</div><div class="ttdef"><b>Definition</b> utils.h:7</div></div>
<div class="ttc" id="abackend_2metal_2kernels_2steel_2utils_8h_html_af62bacceef7d93f8c1ba4fcf5b1adfe6"><div class="ttname"><a href="backend_2metal_2kernels_2steel_2utils_8h.html#af62bacceef7d93f8c1ba4fcf5b1adfe6">elem_to_loc_broadcast</a></div><div class="ttdeci">METAL_FUNC ulong2 elem_to_loc_broadcast(uint elem, constant const int *shape, constant const int64_t *a_strides, constant const int64_t *b_strides, int ndim)</div><div class="ttdef"><b>Definition</b> utils.h:7</div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0
</small></address>
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_d0c977ea65824390717cdb7efc36c157.html">metal</a></li><li class="navelem"><a class="el" href="dir_70a37effa88bcbd6b791977fa1e64356.html">kernels</a></li><li class="navelem"><a class="el" href="dir_76215a6c54e2b67053e723fc2395583c.html">steel</a></li><li class="navelem"><a class="el" href="backend_2metal_2kernels_2steel_2utils_8h.html">utils.h</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.1 </li>
</ul>
</div>
</body>
</html>
+141 -162
View File
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.12.0"/>
<meta name="generator" content="Doxygen 1.13.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MLX: mlx/backend/metal/kernels/utils.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -11,11 +11,18 @@
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
@@ -28,12 +35,24 @@
<div id="projectname">MLX
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.12.0 -->
<!-- Generated by Doxygen 1.13.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
@@ -44,22 +63,23 @@ var searchBox = new SearchBox("searchBox", "search/",'.html');
$(function() { codefold.init(0); });
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search',false);
$(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){ initResizable(false); });
$(function(){initNavTree('backend_2metal_2kernels_2utils_8h.html',''); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
@@ -81,12 +101,6 @@ $(function(){ initResizable(false); });
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_d0c977ea65824390717cdb7efc36c157.html">metal</a></li><li class="navelem"><a class="el" href="dir_70a37effa88bcbd6b791977fa1e64356.html">kernels</a></li> </ul>
</div>
</div><!-- top -->
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#nested-classes">Classes</a> &#124;
@@ -108,41 +122,41 @@ $(function(){ initResizable(false); });
Classes</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_limits.html">Limits&lt; U &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_limits_3_01uint8__t_01_4.html">Limits&lt; uint8_t &gt;</a></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_limits.html">Limits&lt; uint8_t &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_limits_3_01uint16__t_01_4.html">Limits&lt; uint16_t &gt;</a></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_limits.html">Limits&lt; uint16_t &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_limits_3_01uint32__t_01_4.html">Limits&lt; uint32_t &gt;</a></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_limits.html">Limits&lt; uint32_t &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_limits_3_01uint64__t_01_4.html">Limits&lt; uint64_t &gt;</a></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_limits.html">Limits&lt; uint64_t &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_limits_3_01int8__t_01_4.html">Limits&lt; int8_t &gt;</a></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_limits.html">Limits&lt; int8_t &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_limits_3_01int16__t_01_4.html">Limits&lt; int16_t &gt;</a></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_limits.html">Limits&lt; int16_t &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_limits_3_01int32__t_01_4.html">Limits&lt; int32_t &gt;</a></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_limits.html">Limits&lt; int32_t &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_limits_3_01int64__t_01_4.html">Limits&lt; int64_t &gt;</a></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_limits.html">Limits&lt; int64_t &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_limits_3_01half_01_4.html">Limits&lt; half &gt;</a></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_limits.html">Limits&lt; half &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_limits_3_01float_01_4.html">Limits&lt; float &gt;</a></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_limits.html">Limits&lt; float &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_limits_3_01bfloat16__t_01_4.html">Limits&lt; bfloat16_t &gt;</a></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_limits.html">Limits&lt; bfloat16_t &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_limits_3_01bool_01_4.html">Limits&lt; bool &gt;</a></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_limits.html">Limits&lt; bool &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_limits_3_01complex64__t_01_4.html">Limits&lt; complex64_t &gt;</a></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_limits.html">Limits&lt; complex64_t &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_looped_elem_to_loc.html">LoopedElemToLoc&lt; DIM, OffsetT, General &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_looped_elem_to_loc_3_011_00_01_offset_t_00_01true_01_4.html">LoopedElemToLoc&lt; 1, OffsetT, true &gt;</a></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_looped_elem_to_loc.html">LoopedElemToLoc&lt; 1, OffsetT, true &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_looped_elem_to_loc_3_011_00_01_offset_t_00_01false_01_4.html">LoopedElemToLoc&lt; 1, OffsetT, false &gt;</a></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_looped_elem_to_loc.html">LoopedElemToLoc&lt; 1, OffsetT, false &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_conditional_type.html">ConditionalType&lt; condition, T, U &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_conditional_type_3_01true_00_01_t_00_01_u_01_4.html">ConditionalType&lt; true, T, U &gt;</a></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct_conditional_type.html">ConditionalType&lt; true, T, U &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a>
@@ -161,31 +175,28 @@ Typedefs</h2></td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:a22eaa505dbc7dd2a63a895f2e16712f5" id="r_a22eaa505dbc7dd2a63a895f2e16712f5"><td class="memTemplParams" colspan="2">template&lt;typename StrideT , typename IdxT = StrideT&gt; </td></tr>
<tr class="memitem:a22eaa505dbc7dd2a63a895f2e16712f5"><td class="memTemplItemLeft" align="right" valign="top">METAL_FUNC IdxT&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="#a22eaa505dbc7dd2a63a895f2e16712f5">elem_to_loc</a> (uint elem, constant const int *shape, constant const StrideT *strides, int ndim)</td></tr>
<tr class="separator:a22eaa505dbc7dd2a63a895f2e16712f5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4b53fb0679f67f9063deba94753d4185" id="r_a4b53fb0679f67f9063deba94753d4185"><td class="memTemplParams" colspan="2">template&lt;typename StrideT , typename IdxT = StrideT&gt; </td></tr>
<tr class="memitem:a4b53fb0679f67f9063deba94753d4185"><td class="memTemplItemLeft" align="right" valign="top">METAL_FUNC IdxT&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="#a4b53fb0679f67f9063deba94753d4185">elem_to_loc</a> (StrideT elem, constant const int *shape, constant const StrideT *strides, int ndim)</td></tr>
<tr class="separator:a4b53fb0679f67f9063deba94753d4185"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aec82f4bf0e22b8d1b89ad654ad8d8753" id="r_aec82f4bf0e22b8d1b89ad654ad8d8753"><td class="memTemplParams" colspan="2">template&lt;typename StrideT , typename IdxT = StrideT&gt; </td></tr>
<tr class="memitem:aec82f4bf0e22b8d1b89ad654ad8d8753"><td class="memTemplItemLeft" align="right" valign="top">METAL_FUNC IdxT&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="#aec82f4bf0e22b8d1b89ad654ad8d8753">elem_to_loc</a> (uint3 elem, constant const int *shape, constant const StrideT *strides, int ndim)</td></tr>
<tr class="separator:aec82f4bf0e22b8d1b89ad654ad8d8753"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac612d0ae30b8257198339debe04916a3" id="r_ac612d0ae30b8257198339debe04916a3"><td class="memTemplParams" colspan="2">template&lt;typename StrideT , typename IdxT = StrideT&gt; </td></tr>
<tr class="memitem:ac612d0ae30b8257198339debe04916a3"><td class="memTemplItemLeft" align="right" valign="top">METAL_FUNC IdxT&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="#ac612d0ae30b8257198339debe04916a3">elem_to_loc_1</a> (uint elem, constant const StrideT &amp;stride)</td></tr>
<tr class="separator:ac612d0ae30b8257198339debe04916a3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a43f33efc000962d6de881a3aab7458de" id="r_a43f33efc000962d6de881a3aab7458de"><td class="memTemplParams" colspan="2">template&lt;typename StrideT , typename IdxT = StrideT&gt; </td></tr>
<tr class="memitem:a43f33efc000962d6de881a3aab7458de"><td class="memTemplItemLeft" align="right" valign="top">METAL_FUNC IdxT&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="#a43f33efc000962d6de881a3aab7458de">elem_to_loc_2</a> (uint2 elem, constant const StrideT strides[2])</td></tr>
<tr class="separator:a43f33efc000962d6de881a3aab7458de"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a650f8ea8cf9f9519da9e301aad0308dc" id="r_a650f8ea8cf9f9519da9e301aad0308dc"><td class="memTemplParams" colspan="2">template&lt;typename StrideT , typename IdxT = StrideT&gt; </td></tr>
<tr class="memitem:a650f8ea8cf9f9519da9e301aad0308dc"><td class="memTemplItemLeft" align="right" valign="top">METAL_FUNC IdxT&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="#a650f8ea8cf9f9519da9e301aad0308dc">elem_to_loc_3</a> (uint3 elem, constant const StrideT strides[3])</td></tr>
<tr class="separator:a650f8ea8cf9f9519da9e301aad0308dc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a66a2d7eec0262b12db16cd6c781ccf9a" id="r_a66a2d7eec0262b12db16cd6c781ccf9a"><td class="memTemplParams" colspan="2">template&lt;typename StrideT , typename IdxT = StrideT&gt; </td></tr>
<tr class="memitem:a66a2d7eec0262b12db16cd6c781ccf9a"><td class="memTemplItemLeft" align="right" valign="top">METAL_FUNC vec&lt; IdxT, 2 &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="#a66a2d7eec0262b12db16cd6c781ccf9a">elem_to_loc_2_nd</a> (uint3 elem, constant const int *shape, constant const StrideT *a_strides, constant const StrideT *b_strides, int ndim)</td></tr>
<tr class="separator:a66a2d7eec0262b12db16cd6c781ccf9a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a65d87b425e1f8ca19df97c15049f8733" id="r_a65d87b425e1f8ca19df97c15049f8733"><td class="memTemplParams" colspan="2">template&lt;typename IdxT = size_t&gt; </td></tr>
<tr class="memitem:a65d87b425e1f8ca19df97c15049f8733"><td class="memTemplItemLeft" align="right" valign="top">METAL_FUNC vec&lt; IdxT, 3 &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="#a65d87b425e1f8ca19df97c15049f8733">elem_to_loc_3_nd</a> (uint3 elem, constant const int *shape, constant const size_t *a_strides, constant const size_t *b_strides, constant const size_t *c_strides, int ndim)</td></tr>
<tr class="separator:a65d87b425e1f8ca19df97c15049f8733"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8e5a4b0fb5d018d7b078d147efe4f1e3" id="r_a8e5a4b0fb5d018d7b078d147efe4f1e3"><td class="memTemplParams" colspan="2">template&lt;typename T , typename U &gt; </td></tr>
<tr class="memitem:a497dd9f1a00c8a4303d8782158a0812a" id="r_a497dd9f1a00c8a4303d8782158a0812a"><td class="memTemplParams" colspan="2">template&lt;typename IdxT = int64_t&gt; </td></tr>
<tr class="memitem:a497dd9f1a00c8a4303d8782158a0812a"><td class="memTemplItemLeft" align="right" valign="top">METAL_FUNC IdxT&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="#a497dd9f1a00c8a4303d8782158a0812a">elem_to_loc</a> (IdxT elem, constant const int *shape, constant const int64_t *strides, int ndim)</td></tr>
<tr class="separator:a497dd9f1a00c8a4303d8782158a0812a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa610d2e68eb75d7f2da5db386c1ffc9e" id="r_aa610d2e68eb75d7f2da5db386c1ffc9e"><td class="memTemplParams" colspan="2">template&lt;typename IdxT = int64_t&gt; </td></tr>
<tr class="memitem:aa610d2e68eb75d7f2da5db386c1ffc9e"><td class="memTemplItemLeft" align="right" valign="top">METAL_FUNC IdxT&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="#aa610d2e68eb75d7f2da5db386c1ffc9e">elem_to_loc</a> (uint3 elem, constant const int *shape, constant const int64_t *strides, int ndim)</td></tr>
<tr class="separator:aa610d2e68eb75d7f2da5db386c1ffc9e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6787efcdf7a898d5bafb48f2a2f1e555" id="r_a6787efcdf7a898d5bafb48f2a2f1e555"><td class="memTemplParams" colspan="2">template&lt;typename IdxT = int64_t&gt; </td></tr>
<tr class="memitem:a6787efcdf7a898d5bafb48f2a2f1e555"><td class="memTemplItemLeft" align="right" valign="top">METAL_FUNC IdxT&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="#a6787efcdf7a898d5bafb48f2a2f1e555">elem_to_loc_1</a> (uint elem, constant const int64_t &amp;stride)</td></tr>
<tr class="separator:a6787efcdf7a898d5bafb48f2a2f1e555"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aac0e227f82198021246aa91d8c427b3e" id="r_aac0e227f82198021246aa91d8c427b3e"><td class="memTemplParams" colspan="2">template&lt;typename IdxT = int64_t&gt; </td></tr>
<tr class="memitem:aac0e227f82198021246aa91d8c427b3e"><td class="memTemplItemLeft" align="right" valign="top">METAL_FUNC IdxT&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="#aac0e227f82198021246aa91d8c427b3e">elem_to_loc_2</a> (uint2 elem, constant const int64_t strides[2])</td></tr>
<tr class="separator:aac0e227f82198021246aa91d8c427b3e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac8f4258ba306870b0280079f1c5eb23e" id="r_ac8f4258ba306870b0280079f1c5eb23e"><td class="memTemplParams" colspan="2">template&lt;typename IdxT = int64_t&gt; </td></tr>
<tr class="memitem:ac8f4258ba306870b0280079f1c5eb23e"><td class="memTemplItemLeft" align="right" valign="top">METAL_FUNC IdxT&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="#ac8f4258ba306870b0280079f1c5eb23e">elem_to_loc_3</a> (uint3 elem, constant const int64_t strides[3])</td></tr>
<tr class="separator:ac8f4258ba306870b0280079f1c5eb23e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a97ea664406a270b34ff5a23815716730" id="r_a97ea664406a270b34ff5a23815716730"><td class="memTemplParams" colspan="2">template&lt;typename IdxT = int64_t&gt; </td></tr>
<tr class="memitem:a97ea664406a270b34ff5a23815716730"><td class="memTemplItemLeft" align="right" valign="top">METAL_FUNC vec&lt; IdxT, 2 &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="#a97ea664406a270b34ff5a23815716730">elem_to_loc_2_nd</a> (uint3 elem, constant const int *shape, constant const int64_t *a_strides, constant const int64_t *b_strides, int ndim)</td></tr>
<tr class="separator:a97ea664406a270b34ff5a23815716730"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a62b078234dfd1d101ce635430b050916" id="r_a62b078234dfd1d101ce635430b050916"><td class="memTemplParams" colspan="2">template&lt;typename IdxT = int64_t&gt; </td></tr>
<tr class="memitem:a62b078234dfd1d101ce635430b050916"><td class="memTemplItemLeft" align="right" valign="top">METAL_FUNC vec&lt; IdxT, 3 &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="#a62b078234dfd1d101ce635430b050916">elem_to_loc_3_nd</a> (uint3 elem, constant const int *shape, constant const int64_t *a_strides, constant const int64_t *b_strides, constant const int64_t *c_strides, int ndim)</td></tr>
<tr class="separator:a62b078234dfd1d101ce635430b050916"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8e5a4b0fb5d018d7b078d147efe4f1e3" id="r_a8e5a4b0fb5d018d7b078d147efe4f1e3"><td class="memTemplParams" colspan="2">template&lt;typename T, typename U&gt; </td></tr>
<tr class="memitem:a8e5a4b0fb5d018d7b078d147efe4f1e3"><td class="memTemplItemLeft" align="right" valign="top">T&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="#a8e5a4b0fb5d018d7b078d147efe4f1e3">ceildiv</a> (T N, U M)</td></tr>
<tr class="memdesc:a8e5a4b0fb5d018d7b078d147efe4f1e3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute ceil((float)N/(float)M) <br /></td></tr>
<tr class="separator:a8e5a4b0fb5d018d7b078d147efe4f1e3"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -243,18 +254,16 @@ Functions</h2></td></tr>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line"> <span class="keyword">template</span> &lt;&gt; \</div>
<div class="line"> <span class="keyword">struct </span><a class="code hl_struct" href="struct_limits.html">Limits</a>&lt;type&gt; { \</div>
<div class="line"> <span class="keyword">static</span> <span class="keyword">constexpr</span> constant type <a class="code hl_variable" href="struct_limits.html#a2f0673b6f9da89ce1d64f9f3d74f50a8">max</a> = metal::numeric_limits&lt;type&gt;::max(); \</div>
<div class="line"> <span class="keyword">static</span> <span class="keyword">constexpr</span> constant type <a class="code hl_variable" href="struct_limits.html#a6e81584ba65a4dc6ff9366b458e3a20e">min</a> = metal::numeric_limits&lt;type&gt;::min(); \</div>
<div class="line"> <span class="keyword">static</span> <span class="keyword">constexpr</span> constant type <a class="code hl_variable" href="struct_limits.html#a5a3eae6d244fbea2aa7b9200001463e5">finite_max</a> = \</div>
<div class="line"> <span class="keyword">static</span> <span class="keyword">constexpr</span> constant type <a class="code hl_function" href="namespacemetal.html#a853c80479ab2264d9c4587c7bcac767b">max</a> = metal::numeric_limits&lt;type&gt;::max(); \</div>
<div class="line"> <span class="keyword">static</span> <span class="keyword">constexpr</span> constant type <a class="code hl_function" href="namespacemetal.html#a6653b28c9473087141eddce39878d4d3">min</a> = metal::numeric_limits&lt;type&gt;::min(); \</div>
<div class="line"> <span class="keyword">static</span> <span class="keyword">constexpr</span> constant type finite_max = \</div>
<div class="line"> metal::numeric_limits&lt;type&gt;::max(); \</div>
<div class="line"> <span class="keyword">static</span> <span class="keyword">constexpr</span> constant type <a class="code hl_variable" href="struct_limits.html#ae7469d21f2688797ca3e388d919ef05e">finite_min</a> = \</div>
<div class="line"> <span class="keyword">static</span> <span class="keyword">constexpr</span> constant type finite_min = \</div>
<div class="line"> metal::numeric_limits&lt;type&gt;::min(); \</div>
<div class="line"> };</div>
<div class="ttc" id="anamespacemetal_html_a6653b28c9473087141eddce39878d4d3"><div class="ttname"><a href="namespacemetal.html#a6653b28c9473087141eddce39878d4d3">metal::min</a></div><div class="ttdeci">METAL_FUNC bfloat16_t min(bfloat16_t x, bfloat16_t y)</div><div class="ttdef"><b>Definition</b> bf16_math.h:232</div></div>
<div class="ttc" id="anamespacemetal_html_a853c80479ab2264d9c4587c7bcac767b"><div class="ttname"><a href="namespacemetal.html#a853c80479ab2264d9c4587c7bcac767b">metal::max</a></div><div class="ttdeci">METAL_FUNC bfloat16_t max(bfloat16_t x, bfloat16_t y)</div><div class="ttdef"><b>Definition</b> bf16_math.h:232</div></div>
<div class="ttc" id="astruct_limits_html"><div class="ttname"><a href="struct_limits.html">Limits</a></div><div class="ttdef"><b>Definition</b> utils.h:23</div></div>
<div class="ttc" id="astruct_limits_html_a2f0673b6f9da89ce1d64f9f3d74f50a8"><div class="ttname"><a href="struct_limits.html#a2f0673b6f9da89ce1d64f9f3d74f50a8">Limits::max</a></div><div class="ttdeci">static const constant U max</div><div class="ttdef"><b>Definition</b> utils.h:24</div></div>
<div class="ttc" id="astruct_limits_html_a5a3eae6d244fbea2aa7b9200001463e5"><div class="ttname"><a href="struct_limits.html#a5a3eae6d244fbea2aa7b9200001463e5">Limits::finite_max</a></div><div class="ttdeci">static const constant U finite_max</div><div class="ttdef"><b>Definition</b> utils.h:26</div></div>
<div class="ttc" id="astruct_limits_html_a6e81584ba65a4dc6ff9366b458e3a20e"><div class="ttname"><a href="struct_limits.html#a6e81584ba65a4dc6ff9366b458e3a20e">Limits::min</a></div><div class="ttdeci">static const constant U min</div><div class="ttdef"><b>Definition</b> utils.h:25</div></div>
<div class="ttc" id="astruct_limits_html_ae7469d21f2688797ca3e388d919ef05e"><div class="ttname"><a href="struct_limits.html#ae7469d21f2688797ca3e388d919ef05e">Limits::finite_min</a></div><div class="ttdeci">static const constant U finite_min</div><div class="ttdef"><b>Definition</b> utils.h:27</div></div>
</div><!-- fragment -->
</div>
</div>
@@ -274,13 +283,13 @@ Functions</h2></td></tr>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line"> <span class="keyword">template</span> &lt;&gt; \</div>
<div class="line"> <span class="keyword">struct </span><a class="code hl_struct" href="struct_limits.html">Limits</a>&lt;type&gt; { \</div>
<div class="line"> <span class="keyword">static</span> <span class="keyword">constexpr</span> constant type <a class="code hl_variable" href="struct_limits.html#a2f0673b6f9da89ce1d64f9f3d74f50a8">max</a> = \</div>
<div class="line"> <span class="keyword">static</span> <span class="keyword">constexpr</span> constant type <a class="code hl_function" href="namespacemetal.html#a853c80479ab2264d9c4587c7bcac767b">max</a> = \</div>
<div class="line"> metal::numeric_limits&lt;type&gt;::infinity(); \</div>
<div class="line"> <span class="keyword">static</span> <span class="keyword">constexpr</span> constant type <a class="code hl_variable" href="struct_limits.html#a6e81584ba65a4dc6ff9366b458e3a20e">min</a> = \</div>
<div class="line"> <span class="keyword">static</span> <span class="keyword">constexpr</span> constant type <a class="code hl_function" href="namespacemetal.html#a6653b28c9473087141eddce39878d4d3">min</a> = \</div>
<div class="line"> -metal::numeric_limits&lt;type&gt;::infinity(); \</div>
<div class="line"> <span class="keyword">static</span> <span class="keyword">constexpr</span> constant type <a class="code hl_variable" href="struct_limits.html#a5a3eae6d244fbea2aa7b9200001463e5">finite_max</a> = \</div>
<div class="line"> <span class="keyword">static</span> <span class="keyword">constexpr</span> constant type finite_max = \</div>
<div class="line"> metal::numeric_limits&lt;type&gt;::max(); \</div>
<div class="line"> <span class="keyword">static</span> <span class="keyword">constexpr</span> constant type <a class="code hl_variable" href="struct_limits.html#ae7469d21f2688797ca3e388d919ef05e">finite_min</a> = \</div>
<div class="line"> <span class="keyword">static</span> <span class="keyword">constexpr</span> constant type finite_min = \</div>
<div class="line"> -metal::numeric_limits&lt;type&gt;::max(); \</div>
<div class="line"> };</div>
</div><!-- fragment -->
@@ -322,7 +331,7 @@ Functions</h2></td></tr>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename T , typename U &gt; </div>
template&lt;typename T, typename U&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
@@ -340,7 +349,7 @@ template&lt;typename T , typename U &gt; </div>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
<span class="mlabels"><span class="mlabel inline">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
@@ -349,18 +358,18 @@ template&lt;typename T , typename U &gt; </div>
</div>
</div>
<a id="a4b53fb0679f67f9063deba94753d4185" name="a4b53fb0679f67f9063deba94753d4185"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4b53fb0679f67f9063deba94753d4185">&#9670;&#160;</a></span>elem_to_loc() <span class="overload">[1/3]</span></h2>
<a id="a497dd9f1a00c8a4303d8782158a0812a" name="a497dd9f1a00c8a4303d8782158a0812a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a497dd9f1a00c8a4303d8782158a0812a">&#9670;&#160;</a></span>elem_to_loc() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename StrideT , typename IdxT = StrideT&gt; </div>
template&lt;typename IdxT = int64_t&gt; </div>
<table class="memname">
<tr>
<td class="memname">METAL_FUNC IdxT elem_to_loc </td>
<td>(</td>
<td class="paramtype">StrideT</td> <td class="paramname"><span class="paramname"><em>elem</em></span>, </td>
<td class="paramtype">IdxT</td> <td class="paramname"><span class="paramname"><em>elem</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
@@ -370,7 +379,7 @@ template&lt;typename StrideT , typename IdxT = StrideT&gt; </div>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">constant const StrideT *</td> <td class="paramname"><span class="paramname"><em>strides</em></span>, </td>
<td class="paramtype">constant const int64_t *</td> <td class="paramname"><span class="paramname"><em>strides</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
@@ -382,46 +391,13 @@ template&lt;typename StrideT , typename IdxT = StrideT&gt; </div>
</div>
</div>
<a id="a22eaa505dbc7dd2a63a895f2e16712f5" name="a22eaa505dbc7dd2a63a895f2e16712f5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a22eaa505dbc7dd2a63a895f2e16712f5">&#9670;&#160;</a></span>elem_to_loc() <span class="overload">[2/3]</span></h2>
<a id="aa610d2e68eb75d7f2da5db386c1ffc9e" name="aa610d2e68eb75d7f2da5db386c1ffc9e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa610d2e68eb75d7f2da5db386c1ffc9e">&#9670;&#160;</a></span>elem_to_loc() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename StrideT , typename IdxT = StrideT&gt; </div>
<table class="memname">
<tr>
<td class="memname">METAL_FUNC IdxT elem_to_loc </td>
<td>(</td>
<td class="paramtype">uint</td> <td class="paramname"><span class="paramname"><em>elem</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">constant const int *</td> <td class="paramname"><span class="paramname"><em>shape</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">constant const StrideT *</td> <td class="paramname"><span class="paramname"><em>strides</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int</td> <td class="paramname"><span class="paramname"><em>ndim</em></span>&#160;)</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="aec82f4bf0e22b8d1b89ad654ad8d8753" name="aec82f4bf0e22b8d1b89ad654ad8d8753"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aec82f4bf0e22b8d1b89ad654ad8d8753">&#9670;&#160;</a></span>elem_to_loc() <span class="overload">[3/3]</span></h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename StrideT , typename IdxT = StrideT&gt; </div>
template&lt;typename IdxT = int64_t&gt; </div>
<table class="memname">
<tr>
<td class="memname">METAL_FUNC IdxT elem_to_loc </td>
@@ -436,7 +412,7 @@ template&lt;typename StrideT , typename IdxT = StrideT&gt; </div>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">constant const StrideT *</td> <td class="paramname"><span class="paramname"><em>strides</em></span>, </td>
<td class="paramtype">constant const int64_t *</td> <td class="paramname"><span class="paramname"><em>strides</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
@@ -448,13 +424,13 @@ template&lt;typename StrideT , typename IdxT = StrideT&gt; </div>
</div>
</div>
<a id="ac612d0ae30b8257198339debe04916a3" name="ac612d0ae30b8257198339debe04916a3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac612d0ae30b8257198339debe04916a3">&#9670;&#160;</a></span>elem_to_loc_1()</h2>
<a id="a6787efcdf7a898d5bafb48f2a2f1e555" name="a6787efcdf7a898d5bafb48f2a2f1e555"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6787efcdf7a898d5bafb48f2a2f1e555">&#9670;&#160;</a></span>elem_to_loc_1()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename StrideT , typename IdxT = StrideT&gt; </div>
template&lt;typename IdxT = int64_t&gt; </div>
<table class="memname">
<tr>
<td class="memname">METAL_FUNC IdxT elem_to_loc_1 </td>
@@ -464,20 +440,20 @@ template&lt;typename StrideT , typename IdxT = StrideT&gt; </div>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">constant const StrideT &amp;</td> <td class="paramname"><span class="paramname"><em>stride</em></span>&#160;)</td>
<td class="paramtype">constant const int64_t &amp;</td> <td class="paramname"><span class="paramname"><em>stride</em></span>&#160;)</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="a43f33efc000962d6de881a3aab7458de" name="a43f33efc000962d6de881a3aab7458de"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a43f33efc000962d6de881a3aab7458de">&#9670;&#160;</a></span>elem_to_loc_2()</h2>
<a id="aac0e227f82198021246aa91d8c427b3e" name="aac0e227f82198021246aa91d8c427b3e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aac0e227f82198021246aa91d8c427b3e">&#9670;&#160;</a></span>elem_to_loc_2()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename StrideT , typename IdxT = StrideT&gt; </div>
template&lt;typename IdxT = int64_t&gt; </div>
<table class="memname">
<tr>
<td class="memname">METAL_FUNC IdxT elem_to_loc_2 </td>
@@ -487,20 +463,20 @@ template&lt;typename StrideT , typename IdxT = StrideT&gt; </div>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">constant const StrideT</td> <td class="paramname"><span class="paramname"><em>strides</em></span>[2]&#160;)</td>
<td class="paramtype">constant const int64_t</td> <td class="paramname"><span class="paramname"><em>strides</em></span>[2]&#160;)</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="a66a2d7eec0262b12db16cd6c781ccf9a" name="a66a2d7eec0262b12db16cd6c781ccf9a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a66a2d7eec0262b12db16cd6c781ccf9a">&#9670;&#160;</a></span>elem_to_loc_2_nd()</h2>
<a id="a97ea664406a270b34ff5a23815716730" name="a97ea664406a270b34ff5a23815716730"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a97ea664406a270b34ff5a23815716730">&#9670;&#160;</a></span>elem_to_loc_2_nd()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename StrideT , typename IdxT = StrideT&gt; </div>
template&lt;typename IdxT = int64_t&gt; </div>
<table class="memname">
<tr>
<td class="memname">METAL_FUNC vec&lt; IdxT, 2 &gt; elem_to_loc_2_nd </td>
@@ -515,12 +491,12 @@ template&lt;typename StrideT , typename IdxT = StrideT&gt; </div>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">constant const StrideT *</td> <td class="paramname"><span class="paramname"><em>a_strides</em></span>, </td>
<td class="paramtype">constant const int64_t *</td> <td class="paramname"><span class="paramname"><em>a_strides</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">constant const StrideT *</td> <td class="paramname"><span class="paramname"><em>b_strides</em></span>, </td>
<td class="paramtype">constant const int64_t *</td> <td class="paramname"><span class="paramname"><em>b_strides</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
@@ -532,13 +508,13 @@ template&lt;typename StrideT , typename IdxT = StrideT&gt; </div>
</div>
</div>
<a id="a650f8ea8cf9f9519da9e301aad0308dc" name="a650f8ea8cf9f9519da9e301aad0308dc"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a650f8ea8cf9f9519da9e301aad0308dc">&#9670;&#160;</a></span>elem_to_loc_3()</h2>
<a id="ac8f4258ba306870b0280079f1c5eb23e" name="ac8f4258ba306870b0280079f1c5eb23e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac8f4258ba306870b0280079f1c5eb23e">&#9670;&#160;</a></span>elem_to_loc_3()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename StrideT , typename IdxT = StrideT&gt; </div>
template&lt;typename IdxT = int64_t&gt; </div>
<table class="memname">
<tr>
<td class="memname">METAL_FUNC IdxT elem_to_loc_3 </td>
@@ -548,20 +524,20 @@ template&lt;typename StrideT , typename IdxT = StrideT&gt; </div>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">constant const StrideT</td> <td class="paramname"><span class="paramname"><em>strides</em></span>[3]&#160;)</td>
<td class="paramtype">constant const int64_t</td> <td class="paramname"><span class="paramname"><em>strides</em></span>[3]&#160;)</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="a65d87b425e1f8ca19df97c15049f8733" name="a65d87b425e1f8ca19df97c15049f8733"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a65d87b425e1f8ca19df97c15049f8733">&#9670;&#160;</a></span>elem_to_loc_3_nd()</h2>
<a id="a62b078234dfd1d101ce635430b050916" name="a62b078234dfd1d101ce635430b050916"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a62b078234dfd1d101ce635430b050916">&#9670;&#160;</a></span>elem_to_loc_3_nd()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename IdxT = size_t&gt; </div>
template&lt;typename IdxT = int64_t&gt; </div>
<table class="memname">
<tr>
<td class="memname">METAL_FUNC vec&lt; IdxT, 3 &gt; elem_to_loc_3_nd </td>
@@ -576,17 +552,17 @@ template&lt;typename IdxT = size_t&gt; </div>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">constant const size_t *</td> <td class="paramname"><span class="paramname"><em>a_strides</em></span>, </td>
<td class="paramtype">constant const int64_t *</td> <td class="paramname"><span class="paramname"><em>a_strides</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">constant const size_t *</td> <td class="paramname"><span class="paramname"><em>b_strides</em></span>, </td>
<td class="paramtype">constant const int64_t *</td> <td class="paramname"><span class="paramname"><em>b_strides</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">constant const size_t *</td> <td class="paramname"><span class="paramname"><em>c_strides</em></span>, </td>
<td class="paramtype">constant const int64_t *</td> <td class="paramname"><span class="paramname"><em>c_strides</em></span>, </td>
</tr>
<tr>
<td class="paramkey"></td>
@@ -616,7 +592,7 @@ template&lt;typename IdxT = size_t&gt; </div>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
<span class="mlabels"><span class="mlabel inline">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
@@ -641,7 +617,7 @@ template&lt;typename IdxT = size_t&gt; </div>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
<span class="mlabels"><span class="mlabel inline">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
@@ -670,7 +646,7 @@ template&lt;typename IdxT = size_t&gt; </div>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
<span class="mlabels"><span class="mlabel inline">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
@@ -699,7 +675,7 @@ template&lt;typename IdxT = size_t&gt; </div>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
<span class="mlabels"><span class="mlabel inline">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
@@ -728,7 +704,7 @@ template&lt;typename IdxT = size_t&gt; </div>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
<span class="mlabels"><span class="mlabel inline">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
@@ -757,7 +733,7 @@ template&lt;typename IdxT = size_t&gt; </div>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
<span class="mlabels"><span class="mlabel inline">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
@@ -791,7 +767,7 @@ template&lt;typename IdxT = size_t&gt; </div>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
<span class="mlabels"><span class="mlabel inline">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
@@ -825,7 +801,7 @@ template&lt;typename IdxT = size_t&gt; </div>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
<span class="mlabels"><span class="mlabel inline">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
@@ -859,7 +835,7 @@ template&lt;typename IdxT = size_t&gt; </div>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
<span class="mlabels"><span class="mlabel inline">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
@@ -893,7 +869,7 @@ template&lt;typename IdxT = size_t&gt; </div>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
<span class="mlabels"><span class="mlabel inline">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
@@ -922,7 +898,7 @@ template&lt;typename IdxT = size_t&gt; </div>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
<span class="mlabels"><span class="mlabel inline">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
@@ -951,7 +927,7 @@ template&lt;typename IdxT = size_t&gt; </div>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
<span class="mlabels"><span class="mlabel inline">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
@@ -980,7 +956,7 @@ template&lt;typename IdxT = size_t&gt; </div>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
<span class="mlabels"><span class="mlabel inline">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
@@ -1009,7 +985,7 @@ template&lt;typename IdxT = size_t&gt; </div>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
<span class="mlabels"><span class="mlabel inline">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
@@ -1038,7 +1014,7 @@ template&lt;typename IdxT = size_t&gt; </div>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
<span class="mlabels"><span class="mlabel inline">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
@@ -1067,7 +1043,7 @@ template&lt;typename IdxT = size_t&gt; </div>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
<span class="mlabels"><span class="mlabel inline">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
@@ -1096,7 +1072,7 @@ template&lt;typename IdxT = size_t&gt; </div>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
<span class="mlabels"><span class="mlabel inline">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
@@ -1125,7 +1101,7 @@ template&lt;typename IdxT = size_t&gt; </div>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
<span class="mlabels"><span class="mlabel inline">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
@@ -1133,10 +1109,13 @@ template&lt;typename IdxT = size_t&gt; </div>
</div>
</div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0
</small></address>
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_d0c977ea65824390717cdb7efc36c157.html">metal</a></li><li class="navelem"><a class="el" href="dir_70a37effa88bcbd6b791977fa1e64356.html">kernels</a></li><li class="navelem"><a class="el" href="backend_2metal_2kernels_2utils_8h.html">utils.h</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.1 </li>
</ul>
</div>
</body>
</html>
+52
View File
@@ -0,0 +1,52 @@
var backend_2metal_2kernels_2utils_8h =
[
[ "Limits< U >", "struct_limits.html", "struct_limits" ],
[ "Limits< uint8_t >", "struct_limits.html", "struct_limits" ],
[ "Limits< uint16_t >", "struct_limits.html", "struct_limits" ],
[ "Limits< uint32_t >", "struct_limits.html", "struct_limits" ],
[ "Limits< uint64_t >", "struct_limits.html", "struct_limits" ],
[ "Limits< int8_t >", "struct_limits.html", "struct_limits" ],
[ "Limits< int16_t >", "struct_limits.html", "struct_limits" ],
[ "Limits< int32_t >", "struct_limits.html", "struct_limits" ],
[ "Limits< int64_t >", "struct_limits.html", "struct_limits" ],
[ "Limits< half >", "struct_limits.html", "struct_limits" ],
[ "Limits< float >", "struct_limits.html", "struct_limits" ],
[ "Limits< bfloat16_t >", "struct_limits.html", "struct_limits" ],
[ "Limits< bool >", "struct_limits.html", "struct_limits" ],
[ "Limits< complex64_t >", "struct_limits.html", "struct_limits" ],
[ "LoopedElemToLoc< DIM, OffsetT, General >", "struct_looped_elem_to_loc.html", "struct_looped_elem_to_loc" ],
[ "LoopedElemToLoc< 1, OffsetT, true >", "struct_looped_elem_to_loc.html", "struct_looped_elem_to_loc" ],
[ "LoopedElemToLoc< 1, OffsetT, false >", "struct_looped_elem_to_loc.html", "struct_looped_elem_to_loc" ],
[ "ConditionalType< condition, T, U >", "struct_conditional_type.html", "struct_conditional_type" ],
[ "ConditionalType< true, T, U >", "struct_conditional_type.html", "struct_conditional_type" ],
[ "instantiate_default_limit", "backend_2metal_2kernels_2utils_8h.html#abedffa358e7ba7782cc78d6772064c7c", null ],
[ "instantiate_float_limit", "backend_2metal_2kernels_2utils_8h.html#a1e520e23f58ca645dea1ac20998d987a", null ],
[ "MLX_MTL_PRAGMA_UNROLL", "backend_2metal_2kernels_2utils_8h.html#a069b682d7d21827461544817d722bfd3", null ],
[ "float16_t", "backend_2metal_2kernels_2utils_8h.html#acb8ddf4a29129846b673c50ba7078773", null ],
[ "ceildiv", "backend_2metal_2kernels_2utils_8h.html#a8e5a4b0fb5d018d7b078d147efe4f1e3", null ],
[ "elem_to_loc", "backend_2metal_2kernels_2utils_8h.html#a497dd9f1a00c8a4303d8782158a0812a", null ],
[ "elem_to_loc", "backend_2metal_2kernels_2utils_8h.html#aa610d2e68eb75d7f2da5db386c1ffc9e", null ],
[ "elem_to_loc_1", "backend_2metal_2kernels_2utils_8h.html#a6787efcdf7a898d5bafb48f2a2f1e555", null ],
[ "elem_to_loc_2", "backend_2metal_2kernels_2utils_8h.html#aac0e227f82198021246aa91d8c427b3e", null ],
[ "elem_to_loc_2_nd", "backend_2metal_2kernels_2utils_8h.html#a97ea664406a270b34ff5a23815716730", null ],
[ "elem_to_loc_3", "backend_2metal_2kernels_2utils_8h.html#ac8f4258ba306870b0280079f1c5eb23e", null ],
[ "elem_to_loc_3_nd", "backend_2metal_2kernels_2utils_8h.html#a62b078234dfd1d101ce635430b050916", null ],
[ "log1p", "backend_2metal_2kernels_2utils_8h.html#a3501b665c8837eabf9789ea27a7d6946", null ],
[ "log1p", "backend_2metal_2kernels_2utils_8h.html#a27c03f2f90ab56db2e4d59559a3d2e9a", null ],
[ "simd_shuffle", "backend_2metal_2kernels_2utils_8h.html#ab4cbcdb054f9165130da91a3334da0cf", null ],
[ "simd_shuffle", "backend_2metal_2kernels_2utils_8h.html#ab8175b66bcc080fb89f738143568c30b", null ],
[ "simd_shuffle", "backend_2metal_2kernels_2utils_8h.html#a3bdbdfeb7a1dde40cd3ce1df8d9213b5", null ],
[ "simd_shuffle", "backend_2metal_2kernels_2utils_8h.html#a71986ecdd7d18f975dd22c3df7421ce2", null ],
[ "simd_shuffle_and_fill_up", "backend_2metal_2kernels_2utils_8h.html#ad55bd473647f2c6c68e65e5312c132d1", null ],
[ "simd_shuffle_and_fill_up", "backend_2metal_2kernels_2utils_8h.html#a94e02a6ae8c39cbf4cb23aa44df9dbd5", null ],
[ "simd_shuffle_and_fill_up", "backend_2metal_2kernels_2utils_8h.html#a7bb56415c5412a6a26f70a990915f064", null ],
[ "simd_shuffle_and_fill_up", "backend_2metal_2kernels_2utils_8h.html#a5862d5ea154c9b76cf56a630cf6385b4", null ],
[ "simd_shuffle_down", "backend_2metal_2kernels_2utils_8h.html#a48ae83a8caf5c74810df60b6c6cdb062", null ],
[ "simd_shuffle_down", "backend_2metal_2kernels_2utils_8h.html#ad9a671a5f9aaa729ae7a77026f16bcb0", null ],
[ "simd_shuffle_down", "backend_2metal_2kernels_2utils_8h.html#a0c1e4d782fcc56e1ab5565cef12430dd", null ],
[ "simd_shuffle_down", "backend_2metal_2kernels_2utils_8h.html#aba6279624b1d30c525efee856a222b5c", null ],
[ "simd_shuffle_up", "backend_2metal_2kernels_2utils_8h.html#ae0f5c42020275a588234e69f1eb7a485", null ],
[ "simd_shuffle_up", "backend_2metal_2kernels_2utils_8h.html#a92b455bac6a23af51c35ea83de2383eb", null ],
[ "simd_shuffle_up", "backend_2metal_2kernels_2utils_8h.html#a617f3857caf33c569afa6148135f8b7a", null ],
[ "simd_shuffle_up", "backend_2metal_2kernels_2utils_8h.html#a39e436e0a942912266aae7e0bd82d7c0", null ]
];
File diff suppressed because it is too large Load Diff
+47 -30
View File
@@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.12.0"/>
<meta name="generator" content="Doxygen 1.13.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MLX: mlx/backend/metal/utils.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
@@ -11,11 +11,18 @@
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { init_search(); });
/* @license-end */
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
@@ -28,12 +35,24 @@
<div id="projectname">MLX
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.12.0 -->
<!-- Generated by Doxygen 1.13.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
@@ -44,22 +63,23 @@ var searchBox = new SearchBox("searchBox", "search/",'.html');
$(function() { codefold.init(0); });
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search',false);
$(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){ initResizable(false); });
$(function(){initNavTree('backend_2metal_2utils_8h.html',''); initResizable(true); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
@@ -81,12 +101,6 @@ $(function(){ initResizable(false); });
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_d0c977ea65824390717cdb7efc36c157.html">metal</a></li> </ul>
</div>
</div><!-- top -->
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#namespaces">Namespaces</a> &#124;
@@ -115,10 +129,10 @@ Functions</h2></td></tr>
<tr class="separator:af1fdfdaa5644394362e6baba30701bae"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0f0f59d3ffe2d16a684e5fc093302e15" id="r_a0f0f59d3ffe2d16a684e5fc093302e15"><td class="memItemLeft" align="right" valign="top">MTL::Size&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacemlx_1_1core.html#a0f0f59d3ffe2d16a684e5fc093302e15">mlx::core::get_block_dims</a> (int dim0, int dim1, int dim2, int pow2=10)</td></tr>
<tr class="separator:a0f0f59d3ffe2d16a684e5fc093302e15"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8dc169474a51a1f4f761d5752819bd7c" id="r_a8dc169474a51a1f4f761d5752819bd7c"><td class="memItemLeft" align="right" valign="top">MTL::Size&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacemlx_1_1core.html#a8dc169474a51a1f4f761d5752819bd7c">mlx::core::get_2d_grid_dims</a> (const std::vector&lt; int &gt; &amp;shape, const std::vector&lt; size_t &gt; &amp;strides)</td></tr>
<tr class="separator:a8dc169474a51a1f4f761d5752819bd7c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a187b9a932c7b3d67ee42d9d12fcb1bb1" id="r_a187b9a932c7b3d67ee42d9d12fcb1bb1"><td class="memItemLeft" align="right" valign="top">MTL::Size&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacemlx_1_1core.html#a187b9a932c7b3d67ee42d9d12fcb1bb1">mlx::core::get_2d_grid_dims</a> (const std::vector&lt; int &gt; &amp;shape, const std::vector&lt; size_t &gt; &amp;strides, size_t divisor)</td></tr>
<tr class="separator:a187b9a932c7b3d67ee42d9d12fcb1bb1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa9692de582995fd3ce19493b45ab7144" id="r_aa9692de582995fd3ce19493b45ab7144"><td class="memItemLeft" align="right" valign="top">MTL::Size&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacemlx_1_1core.html#aa9692de582995fd3ce19493b45ab7144">mlx::core::get_2d_grid_dims</a> (const <a class="el" href="namespacemlx_1_1core.html#a694e23f2d59606643728ad443d621416">Shape</a> &amp;shape, const <a class="el" href="namespacemlx_1_1core.html#a79939016d0972ded7db37130da2a8b5c">Strides</a> &amp;strides)</td></tr>
<tr class="separator:aa9692de582995fd3ce19493b45ab7144"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6ec5cdf3253a9f20ca5ea7a1590fb386" id="r_a6ec5cdf3253a9f20ca5ea7a1590fb386"><td class="memItemLeft" align="right" valign="top">MTL::Size&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacemlx_1_1core.html#a6ec5cdf3253a9f20ca5ea7a1590fb386">mlx::core::get_2d_grid_dims</a> (const <a class="el" href="namespacemlx_1_1core.html#a694e23f2d59606643728ad443d621416">Shape</a> &amp;shape, const <a class="el" href="namespacemlx_1_1core.html#a79939016d0972ded7db37130da2a8b5c">Strides</a> &amp;strides, size_t divisor)</td></tr>
<tr class="separator:a6ec5cdf3253a9f20ca5ea7a1590fb386"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aed148d95e7b5221f1312473deded0d27" id="r_aed148d95e7b5221f1312473deded0d27"><td class="memItemLeft" align="right" valign="top">NS::String *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacemlx_1_1core.html#aed148d95e7b5221f1312473deded0d27">mlx::core::make_string</a> (std::ostringstream &amp;os)</td></tr>
<tr class="separator:aed148d95e7b5221f1312473deded0d27"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a79817d2432e782e596c9c49a08b93be2" id="r_a79817d2432e782e596c9c49a08b93be2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacemlx_1_1core.html#a79817d2432e782e596c9c49a08b93be2">mlx::core::debug_set_stream_queue_label</a> (MTL::CommandQueue *queue, int index)</td></tr>
@@ -127,18 +141,21 @@ Functions</h2></td></tr>
<tr class="separator:a489e45b3a5cd8b46e8ea56b9132eb230"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad4be35b310a252edd80d9cf04f094a60" id="r_ad4be35b310a252edd80d9cf04f094a60"><td class="memItemLeft" align="right" valign="top">std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacemlx_1_1core.html#ad4be35b310a252edd80d9cf04f094a60">mlx::core::get_primitive_string</a> (<a class="el" href="classmlx_1_1core_1_1_primitive.html">Primitive</a> *primitive)</td></tr>
<tr class="separator:ad4be35b310a252edd80d9cf04f094a60"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a76a2e310857f60f5ea6f1388d45b964d" id="r_a76a2e310857f60f5ea6f1388d45b964d"><td class="memTemplParams" colspan="2">template&lt;typename T &gt; </td></tr>
<tr class="memitem:a76a2e310857f60f5ea6f1388d45b964d" id="r_a76a2e310857f60f5ea6f1388d45b964d"><td class="memTemplParams" colspan="2">template&lt;typename T&gt; </td></tr>
<tr class="memitem:a76a2e310857f60f5ea6f1388d45b964d"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacemlx_1_1core.html#a76a2e310857f60f5ea6f1388d45b964d">mlx::core::concatenate</a> (std::string &amp;acc, T first)</td></tr>
<tr class="separator:a76a2e310857f60f5ea6f1388d45b964d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aaf51544472fa87fa974686eacdd2a4a6" id="r_aaf51544472fa87fa974686eacdd2a4a6"><td class="memTemplParams" colspan="2">template&lt;typename T , typename... Args&gt; </td></tr>
<tr class="memitem:aaf51544472fa87fa974686eacdd2a4a6" id="r_aaf51544472fa87fa974686eacdd2a4a6"><td class="memTemplParams" colspan="2">template&lt;typename T, typename... Args&gt; </td></tr>
<tr class="memitem:aaf51544472fa87fa974686eacdd2a4a6"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacemlx_1_1core.html#aaf51544472fa87fa974686eacdd2a4a6">mlx::core::concatenate</a> (std::string &amp;acc, T first, Args... args)</td></tr>
<tr class="separator:aaf51544472fa87fa974686eacdd2a4a6"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0
</small></address>
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_938ab0ecf10b8b860ff766c820f665fd.html">mlx</a></li><li class="navelem"><a class="el" href="dir_1d446c9bd3c99228254c9484e0bc5c06.html">backend</a></li><li class="navelem"><a class="el" href="dir_d0c977ea65824390717cdb7efc36c157.html">metal</a></li><li class="navelem"><a class="el" href="backend_2metal_2utils_8h.html">utils.h</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.13.1 </li>
</ul>
</div>
</body>
</html>

Some files were not shown because too many files have changed in this diff Show More