This commit is contained in:
Awni Hannun
2024-09-17 12:06:14 -07:00
committed by CircleCI Docs
parent 27e07888b0
commit 6a6ffb598d
739 changed files with 28107 additions and 8524 deletions

View File

@@ -128,73 +128,73 @@ $(function() { codefold.init(0); });
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> array&amp; out,</div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> BinaryOpType bopt,</div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> <span class="keywordtype">bool</span> donate_with_move = <span class="keyword">false</span>) {</div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> <span class="keywordflow">switch</span> (bopt) {</div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> <span class="keywordflow">case</span> BinaryOpType::ScalarScalar:</div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> out.set_data(</div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> <a class="code hl_function" href="namespacemlx_1_1core_1_1allocator.html#a86ac0a11ff78f21e717f641716c34abc">allocator::malloc_or_wait</a>(out.itemsize()), 1, a.strides(), a.flags());</div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> <span class="keywordflow">case</span> BinaryOpType::ScalarVector:</div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> <span class="keywordflow">if</span> (b.is_donatable() &amp;&amp; b.itemsize() == out.itemsize()) {</div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> <span class="keywordflow">if</span> (donate_with_move) {</div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> out.move_shared_buffer(b);</div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> out.copy_shared_buffer(b);</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="keywordflow">else</span> {</div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> out.set_data(</div>
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> <a class="code hl_function" href="namespacemlx_1_1core_1_1allocator.html#a86ac0a11ff78f21e717f641716c34abc">allocator::malloc_or_wait</a>(b.data_size() * out.itemsize()),</div>
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> b.data_size(),</div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> b.strides(),</div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> b.flags());</div>
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> }</div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> <span class="keywordflow">case</span> BinaryOpType::VectorScalar:</div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> <span class="keywordflow">if</span> (a.is_donatable() &amp;&amp; a.itemsize() == out.itemsize()) {</div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> <span class="keywordflow">if</span> (donate_with_move) {</div>
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> out.move_shared_buffer(a);</div>
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> out.copy_shared_buffer(a);</div>
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> }</div>
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> out.set_data(</div>
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> <a class="code hl_function" href="namespacemlx_1_1core_1_1allocator.html#a86ac0a11ff78f21e717f641716c34abc">allocator::malloc_or_wait</a>(a.data_size() * out.itemsize()),</div>
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> a.data_size(),</div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> a.strides(),</div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> a.flags());</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> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> <span class="keywordflow">case</span> BinaryOpType::VectorVector:</div>
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> <span class="keywordflow">if</span> (a.is_donatable() &amp;&amp; a.itemsize() == out.itemsize()) {</div>
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> <span class="keywordflow">if</span> (donate_with_move) {</div>
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> out.move_shared_buffer(a);</div>
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> out.copy_shared_buffer(a);</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="keywordflow">else</span> <span class="keywordflow">if</span> (b.is_donatable() &amp;&amp; b.itemsize() == out.itemsize()) {</div>
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> <span class="keywordflow">if</span> (donate_with_move) {</div>
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> out.move_shared_buffer(b);</div>
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> out.copy_shared_buffer(b);</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="keywordflow">else</span> {</div>
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> out.set_data(</div>
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> <a class="code hl_function" href="namespacemlx_1_1core_1_1allocator.html#a86ac0a11ff78f21e717f641716c34abc">allocator::malloc_or_wait</a>(a.data_size() * out.itemsize()),</div>
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> a.data_size(),</div>
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> a.strides(),</div>
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> a.flags());</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> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> <span class="keywordflow">case</span> BinaryOpType::General:</div>
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> <span class="keywordflow">if</span> (a.is_donatable() &amp;&amp; a.flags().row_contiguous &amp;&amp;</div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> a.itemsize() == out.itemsize() &amp;&amp; a.size() == out.size()) {</div>
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> <span class="keywordflow">if</span> (donate_with_move) {</div>
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> out.move_shared_buffer(a);</div>
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> out.copy_shared_buffer(a);</div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> }</div>
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (</div>
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> b.is_donatable() &amp;&amp; b.flags().row_contiguous &amp;&amp;</div>
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> b.itemsize() == out.itemsize() &amp;&amp; b.size() == out.size()) {</div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> <span class="keywordtype">bool</span> b_donatable = <a class="code hl_function" href="namespacemlx_1_1core.html#af650e831ce21759da1ac103037d08d84">is_donatable</a>(b, out);</div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> <span class="keywordtype">bool</span> a_donatable = <a class="code hl_function" href="namespacemlx_1_1core.html#af650e831ce21759da1ac103037d08d84">is_donatable</a>(a, out);</div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> <span class="keywordflow">switch</span> (bopt) {</div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> <span class="keywordflow">case</span> BinaryOpType::ScalarScalar:</div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> out.set_data(</div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> <a class="code hl_function" href="namespacemlx_1_1core_1_1allocator.html#a86ac0a11ff78f21e717f641716c34abc">allocator::malloc_or_wait</a>(out.itemsize()), 1, a.strides(), a.flags());</div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> <span class="keywordflow">case</span> BinaryOpType::ScalarVector:</div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> <span class="keywordflow">if</span> (b_donatable) {</div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> <span class="keywordflow">if</span> (donate_with_move) {</div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> out.move_shared_buffer(b);</div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> out.copy_shared_buffer(b);</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"> 60</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> out.set_data(</div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> <a class="code hl_function" href="namespacemlx_1_1core_1_1allocator.html#a86ac0a11ff78f21e717f641716c34abc">allocator::malloc_or_wait</a>(b.data_size() * out.itemsize()),</div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> b.data_size(),</div>
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> b.strides(),</div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> b.flags());</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="keywordflow">break</span>;</div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> <span class="keywordflow">case</span> BinaryOpType::VectorScalar:</div>
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> <span class="keywordflow">if</span> (a_donatable) {</div>
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> <span class="keywordflow">if</span> (donate_with_move) {</div>
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> out.move_shared_buffer(a);</div>
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> out.copy_shared_buffer(a);</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="keywordflow">else</span> {</div>
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> out.set_data(</div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> <a class="code hl_function" href="namespacemlx_1_1core_1_1allocator.html#a86ac0a11ff78f21e717f641716c34abc">allocator::malloc_or_wait</a>(a.data_size() * out.itemsize()),</div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> a.data_size(),</div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> a.strides(),</div>
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> a.flags());</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> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> <span class="keywordflow">case</span> BinaryOpType::VectorVector:</div>
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> <span class="keywordflow">if</span> (a_donatable) {</div>
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> <span class="keywordflow">if</span> (donate_with_move) {</div>
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> out.move_shared_buffer(a);</div>
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> out.copy_shared_buffer(a);</div>
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> }</div>
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (b_donatable) {</div>
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> <span class="keywordflow">if</span> (donate_with_move) {</div>
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> out.move_shared_buffer(b);</div>
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> out.copy_shared_buffer(b);</div>
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> }</div>
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> out.set_data(</div>
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> <a class="code hl_function" href="namespacemlx_1_1core_1_1allocator.html#a86ac0a11ff78f21e717f641716c34abc">allocator::malloc_or_wait</a>(a.data_size() * out.itemsize()),</div>
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> a.data_size(),</div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> a.strides(),</div>
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> a.flags());</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="keywordflow">break</span>;</div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> <span class="keywordflow">case</span> BinaryOpType::General:</div>
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> <span class="keywordflow">if</span> (a_donatable &amp;&amp; a.flags().row_contiguous &amp;&amp; a.size() == out.size()) {</div>
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> <span class="keywordflow">if</span> (donate_with_move) {</div>
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> out.move_shared_buffer(a);</div>
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> out.copy_shared_buffer(a);</div>
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> }</div>
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (</div>
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> b_donatable &amp;&amp; b.flags().row_contiguous &amp;&amp; b.size() == out.size()) {</div>
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> <span class="keywordflow">if</span> (donate_with_move) {</div>
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> out.move_shared_buffer(b);</div>
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> } <span class="keywordflow">else</span> {</div>
@@ -757,6 +757,7 @@ $(function() { codefold.init(0); });
<div class="ttc" id="anamespacemlx_1_1core_html_abd84ff6c5245e4e170b2ef5247594337a0db377921f4ce762c62526131097968f"><div class="ttname"><a href="namespacemlx_1_1core.html#abd84ff6c5245e4e170b2ef5247594337a0db377921f4ce762c62526131097968f">mlx::core::CopyType::General</a></div><div class="ttdeci">@ General</div></div>
<div class="ttc" id="anamespacemlx_1_1core_html_abf228ee9d8ec48c03bb15adcc4e1f3ec"><div class="ttname"><a href="namespacemlx_1_1core.html#abf228ee9d8ec48c03bb15adcc4e1f3ec">mlx::core::float16</a></div><div class="ttdeci">constexpr Dtype float16</div><div class="ttdef"><b>Definition</b> dtype.h:70</div></div>
<div class="ttc" id="anamespacemlx_1_1core_html_ac63820d6fe10545907c33faf466a929e"><div class="ttname"><a href="namespacemlx_1_1core.html#ac63820d6fe10545907c33faf466a929e">mlx::core::uint32</a></div><div class="ttdeci">constexpr Dtype uint32</div><div class="ttdef"><b>Definition</b> dtype.h:62</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:158</div></div>
<div class="ttc" id="anamespacemlx_1_1core_html_af99db87e0078bfcdb383f5689bc874d4"><div class="ttname"><a href="namespacemlx_1_1core.html#af99db87e0078bfcdb383f5689bc874d4">mlx::core::complex64</a></div><div class="ttdeci">constexpr Dtype complex64</div><div class="ttdef"><b>Definition</b> dtype.h:73</div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->