v4.3 update. (#2709)
* v4.3 update. * Update the cute_dsl_api changelog's doc link * Update version to 4.3.0 * Update the example link * Update doc to encourage user to install DSL from requirements.txt --------- Co-authored-by: Larry Wu <larwu@nvidia.com>
This commit is contained in:
@@ -10,8 +10,7 @@
|
||||
"import cutlass.cute as cute\n",
|
||||
"from cutlass.cute.runtime import from_dlpack\n",
|
||||
"\n",
|
||||
"import numpy as np\n",
|
||||
"import torch"
|
||||
"import numpy as np"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -55,12 +54,13 @@
|
||||
" :param b: The source tensor to be loaded.\n",
|
||||
" \"\"\"\n",
|
||||
" a_vec = a.load()\n",
|
||||
" print(f\"a_vec: {a_vec}\") # prints `a_vec: vector<12xf32> o (3, 4)`\n",
|
||||
" print(f\"a_vec: {a_vec}\") # prints `a_vec: vector<12xf32> o (3, 4)`\n",
|
||||
" b_vec = b.load()\n",
|
||||
" print(f\"b_vec: {b_vec}\") # prints `b_vec: vector<12xf32> o (3, 4)`\n",
|
||||
" print(f\"b_vec: {b_vec}\") # prints `b_vec: vector<12xf32> o (3, 4)`\n",
|
||||
" res.store(a_vec + b_vec)\n",
|
||||
" cute.print_tensor(res)\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"a = np.ones(12).reshape((3, 4)).astype(np.float32)\n",
|
||||
"b = np.ones(12).reshape((3, 4)).astype(np.float32)\n",
|
||||
"c = np.zeros(12).reshape((3, 4)).astype(np.float32)\n",
|
||||
@@ -101,6 +101,7 @@
|
||||
" dst[0] = dst_vec\n",
|
||||
" cute.print_tensor(dst)\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"def slice_1():\n",
|
||||
" src_shape = (4, 2, 3)\n",
|
||||
" dst_shape = (4, 3)\n",
|
||||
@@ -124,6 +125,7 @@
|
||||
" dst = np.random.randn(*dst_shape).astype(np.float32)\n",
|
||||
" apply_slice(from_dlpack(a), from_dlpack(dst), indices)\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"slice_1()"
|
||||
]
|
||||
},
|
||||
@@ -141,6 +143,7 @@
|
||||
" dst = np.random.randn(*dst_shape).astype(np.float32)\n",
|
||||
" apply_slice(from_dlpack(a), from_dlpack(dst), indices)\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"slice_2()"
|
||||
]
|
||||
},
|
||||
@@ -169,22 +172,22 @@
|
||||
" b_vec = b.load()\n",
|
||||
"\n",
|
||||
" add_res = a_vec + b_vec\n",
|
||||
" cute.print_tensor(add_res) # prints [3.000000, 3.000000, 3.000000]\n",
|
||||
" cute.print_tensor(add_res) # prints [3.000000, 3.000000, 3.000000]\n",
|
||||
"\n",
|
||||
" sub_res = a_vec - b_vec\n",
|
||||
" cute.print_tensor(sub_res) # prints [-1.000000, -1.000000, -1.000000]\n",
|
||||
" cute.print_tensor(sub_res) # prints [-1.000000, -1.000000, -1.000000]\n",
|
||||
"\n",
|
||||
" mul_res = a_vec * b_vec\n",
|
||||
" cute.print_tensor(mul_res) # prints [2.000000, 2.000000, 2.000000]\n",
|
||||
" cute.print_tensor(mul_res) # prints [2.000000, 2.000000, 2.000000]\n",
|
||||
"\n",
|
||||
" div_res = a_vec / b_vec\n",
|
||||
" cute.print_tensor(div_res) # prints [0.500000, 0.500000, 0.500000]\n",
|
||||
" cute.print_tensor(div_res) # prints [0.500000, 0.500000, 0.500000]\n",
|
||||
"\n",
|
||||
" floor_div_res = a_vec // b_vec\n",
|
||||
" cute.print_tensor(res) # prints [0.000000, 0.000000, 0.000000]\n",
|
||||
" cute.print_tensor(res) # prints [0.000000, 0.000000, 0.000000]\n",
|
||||
"\n",
|
||||
" mod_res = a_vec % b_vec\n",
|
||||
" cute.print_tensor(mod_res) # prints [1.000000, 1.000000, 1.000000]\n",
|
||||
" cute.print_tensor(mod_res) # prints [1.000000, 1.000000, 1.000000]\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"a = np.empty((3,), dtype=np.float32)\n",
|
||||
@@ -206,22 +209,23 @@
|
||||
" a_vec = a.load()\n",
|
||||
"\n",
|
||||
" add_res = a_vec + c\n",
|
||||
" cute.print_tensor(add_res) # prints [3.000000, 3.000000, 3.000000]\n",
|
||||
" cute.print_tensor(add_res) # prints [3.000000, 3.000000, 3.000000]\n",
|
||||
"\n",
|
||||
" sub_res = a_vec - c\n",
|
||||
" cute.print_tensor(sub_res) # prints [-1.000000, -1.000000, -1.000000]\n",
|
||||
" cute.print_tensor(sub_res) # prints [-1.000000, -1.000000, -1.000000]\n",
|
||||
"\n",
|
||||
" mul_res = a_vec * c\n",
|
||||
" cute.print_tensor(mul_res) # prints [2.000000, 2.000000, 2.000000]\n",
|
||||
" cute.print_tensor(mul_res) # prints [2.000000, 2.000000, 2.000000]\n",
|
||||
"\n",
|
||||
" div_res = a_vec / c\n",
|
||||
" cute.print_tensor(div_res) # prints [0.500000, 0.500000, 0.500000]\n",
|
||||
" cute.print_tensor(div_res) # prints [0.500000, 0.500000, 0.500000]\n",
|
||||
"\n",
|
||||
" floor_div_res = a_vec // c\n",
|
||||
" cute.print_tensor(floor_div_res) # prints [0.000000, 0.000000, 0.000000]\n",
|
||||
" cute.print_tensor(floor_div_res) # prints [0.000000, 0.000000, 0.000000]\n",
|
||||
"\n",
|
||||
" mod_res = a_vec % c\n",
|
||||
" cute.print_tensor(mod_res) # prints [1.000000, 1.000000, 1.000000]\n",
|
||||
" cute.print_tensor(mod_res) # prints [1.000000, 1.000000, 1.000000]\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"a = np.empty((3,), dtype=np.float32)\n",
|
||||
"a.fill(1.0)\n",
|
||||
@@ -251,11 +255,12 @@
|
||||
" eq_res = a_ == b_ # [False, False, False]\n",
|
||||
" \"\"\"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"a = np.array([1, 2, 3], dtype=np.float32)\n",
|
||||
"b = np.array([2, 1, 4], dtype=np.float32)\n",
|
||||
"res = np.empty((3,), dtype=np.bool_)\n",
|
||||
"binary_op_3(from_dlpack(res), from_dlpack(a), from_dlpack(b))\n",
|
||||
"print(res) # prints [False, True, False]\n"
|
||||
"print(res) # prints [False, True, False]"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -278,11 +283,12 @@
|
||||
" # and_res = a_vec & b_vec\n",
|
||||
" # res.store(and_res) # prints [0, 2, 0]\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"a = np.array([1, 2, 3], dtype=np.int32)\n",
|
||||
"b = np.array([2, 2, 4], dtype=np.int32)\n",
|
||||
"res = np.empty((3,), dtype=np.int32)\n",
|
||||
"binary_op_4(from_dlpack(res), from_dlpack(a), from_dlpack(b))\n",
|
||||
"print(res) # prints [3, 0, 7]"
|
||||
"print(res) # prints [3, 0, 7]"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -303,14 +309,15 @@
|
||||
" a_vec = a.load()\n",
|
||||
"\n",
|
||||
" sqrt_res = cute.math.sqrt(a_vec)\n",
|
||||
" cute.print_tensor(sqrt_res) # prints [2.000000, 2.000000, 2.000000]\n",
|
||||
" cute.print_tensor(sqrt_res) # prints [2.000000, 2.000000, 2.000000]\n",
|
||||
"\n",
|
||||
" sin_res = cute.math.sin(a_vec)\n",
|
||||
" res.store(sin_res)\n",
|
||||
" cute.print_tensor(sin_res) # prints [-0.756802, -0.756802, -0.756802]\n",
|
||||
" cute.print_tensor(sin_res) # prints [-0.756802, -0.756802, -0.756802]\n",
|
||||
"\n",
|
||||
" exp2_res = cute.math.exp2(a_vec)\n",
|
||||
" cute.print_tensor(exp2_res) # prints [16.000000, 16.000000, 16.000000]\n",
|
||||
" cute.print_tensor(exp2_res) # prints [16.000000, 16.000000, 16.000000]\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"a = np.array([4.0, 4.0, 4.0], dtype=np.float32)\n",
|
||||
"res = np.empty((3,), dtype=np.float32)\n",
|
||||
@@ -344,26 +351,14 @@
|
||||
" :param src: The source tensor to be reduced.\n",
|
||||
" \"\"\"\n",
|
||||
" a_vec = a.load()\n",
|
||||
" red_res = a_vec.reduce(\n",
|
||||
" cute.ReductionOp.ADD,\n",
|
||||
" 0.0,\n",
|
||||
" reduction_profile=0\n",
|
||||
" )\n",
|
||||
" cute.printf(red_res) # prints 21.000000\n",
|
||||
" red_res = a_vec.reduce(cute.ReductionOp.ADD, 0.0, reduction_profile=0)\n",
|
||||
" cute.printf(red_res) # prints 21.000000\n",
|
||||
"\n",
|
||||
" red_res = a_vec.reduce(\n",
|
||||
" cute.ReductionOp.ADD,\n",
|
||||
" 0.0,\n",
|
||||
" reduction_profile=(None, 1)\n",
|
||||
" )\n",
|
||||
" cute.print_tensor(red_res) # prints [6.000000, 15.000000]\n",
|
||||
" red_res = a_vec.reduce(cute.ReductionOp.ADD, 0.0, reduction_profile=(None, 1))\n",
|
||||
" cute.print_tensor(red_res) # prints [6.000000, 15.000000]\n",
|
||||
"\n",
|
||||
" red_res = a_vec.reduce(\n",
|
||||
" cute.ReductionOp.ADD,\n",
|
||||
" 1.0,\n",
|
||||
" reduction_profile=(1, None)\n",
|
||||
" )\n",
|
||||
" cute.print_tensor(red_res) # prints [6.000000, 8.000000, 10.000000]\n",
|
||||
" red_res = a_vec.reduce(cute.ReductionOp.ADD, 1.0, reduction_profile=(1, None))\n",
|
||||
" cute.print_tensor(red_res) # prints [6.000000, 8.000000, 10.000000]\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"a = np.array([[1, 2, 3], [4, 5, 6]], dtype=np.float32)\n",
|
||||
@@ -399,7 +394,7 @@
|
||||
"\n",
|
||||
"@cute.jit\n",
|
||||
"def broadcast_examples():\n",
|
||||
" a = cute.make_fragment((1,3), dtype=cutlass.Float32)\n",
|
||||
" a = cute.make_rmem_tensor((1, 3), dtype=cutlass.Float32)\n",
|
||||
" a[0] = 0.0\n",
|
||||
" a[1] = 1.0\n",
|
||||
" a[2] = 2.0\n",
|
||||
@@ -411,7 +406,7 @@
|
||||
" # [ 0.000000, 1.000000, 2.000000, ],\n",
|
||||
" # [ 0.000000, 1.000000, 2.000000, ]])\n",
|
||||
"\n",
|
||||
" c = cute.make_fragment((4,1), dtype=cutlass.Float32)\n",
|
||||
" c = cute.make_rmem_tensor((4, 1), dtype=cutlass.Float32)\n",
|
||||
" c[0] = 0.0\n",
|
||||
" c[1] = 1.0\n",
|
||||
" c[2] = 2.0\n",
|
||||
@@ -494,7 +489,7 @@
|
||||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.12.10"
|
||||
"version": "3.12.11"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
|
||||
Reference in New Issue
Block a user