Piotr Wilkin (ilintar)
305ba519ab
CUDA: vectorize same-type get_rows with int4 copy ( #25929 )
...
k_get_rows_float did a scalar one-element-per-thread copy and recomputed the
row-invariant work (index load, fast_div_modulo, src/dst row pointers) for
every element. Hoist that out of the per-element loop, and add a vectorized
path (k_get_rows_float_vec) that copies one int4 (16 B) per thread for the
contiguous same-type (no-cast) case.
The vectorized path is gated at compile time (is_same<src0_t, dst_t>) and at
runtime on 16-byte alignment of the base pointers and all row strides and on
ne00 % VEC == 0. Vectorizing divides the block count by VEC, so a small
single-row gather can drop below the device CU count and regress; an
occupancy gate keeps those on the block-rich scalar path.
On Strix Halo (gfx1151) the DeltaNet recurrent-state gather (ne00=524288)
drops 18.6us -> 13.0us (rocprofv3 HW timestamps), faster than the Vulkan
backend, with no regression on the small conv-state gather; total get_rows
-27%. test-backend-ops GET_ROWS passes (47/47).
Assisted-by: Claude Opus 4.8
2026-07-21 15:53:57 +02:00
..
2026-06-30 14:06:54 +02:00
2026-06-26 11:42:56 +02:00
2025-05-12 14:44:49 +02:00
2024-06-26 18:33:02 +03:00
2025-08-20 10:17:37 +08:00
2025-08-05 22:10:36 +03:00
2026-05-13 22:36:14 +02:00
2026-05-10 11:05:22 +02:00
2024-06-26 18:33:02 +03:00
2024-06-26 18:33:02 +03:00
2025-12-17 11:47:01 +08:00
2024-10-03 21:17:26 +03:00
2026-07-09 20:07:12 +02:00
2026-07-09 20:07:12 +02:00
2026-06-25 10:06:44 +02:00
2026-04-10 10:24:09 +08:00
2025-03-03 18:18:11 +02:00
2024-06-26 18:33:02 +03:00
2026-05-20 13:59:02 +02:00
2026-06-18 22:23:01 +02:00
2026-06-18 22:23:01 +02:00
2026-07-16 13:37:35 +03:00
2026-07-15 13:36:32 +02:00
2024-06-26 18:33:02 +03:00
2025-06-20 09:50:24 +08:00
2025-06-20 09:50:24 +08:00
2026-03-26 10:19:14 +08:00
2026-03-26 10:19:14 +08:00
2025-09-01 06:55:06 +05:30
2025-08-28 20:33:03 +02:00
2026-07-06 11:49:06 +08:00
2024-07-08 12:23:00 +03:00
2026-07-06 20:04:53 +02:00
2026-03-22 17:53:33 +01:00
2024-11-09 08:35:46 +01:00
2024-10-03 21:17:26 +03:00
2025-05-09 13:34:58 +02:00
2025-11-23 11:13:34 +01:00
2026-06-27 17:46:21 +05:30
2025-10-14 11:53:49 +02:00
2025-07-03 07:45:11 +08:00
2024-09-20 21:15:05 +03:00
2026-01-04 22:22:16 +02:00
2025-12-04 22:19:51 +01:00
2026-04-15 18:38:38 +02:00
2025-12-09 20:28:57 +01:00
2025-12-09 20:28:57 +01:00
2024-06-26 18:33:02 +03:00
2024-06-26 18:33:02 +03:00
2026-07-17 00:33:33 +08:00
2026-07-17 00:33:33 +08:00
2026-07-01 10:55:14 +02:00
2026-06-30 14:06:54 +02:00
2026-05-09 11:28:29 +08:00
2026-06-30 14:06:54 +02:00
2026-06-03 13:56:42 +02:00
2026-06-03 13:56:42 +02:00
2026-03-05 08:50:21 +01:00
2026-07-06 16:26:50 +02:00
2026-06-03 18:39:59 +08:00
2025-12-09 12:23:47 +01:00
2025-12-08 21:10:12 +08:00
2026-05-26 11:05:51 +08:00
2026-05-26 11:05:51 +08:00
2026-07-03 14:36:29 +05:30
2026-07-03 14:36:29 +05:30
2026-07-21 15:53:57 +02:00
2025-04-30 23:12:59 +02:00
2026-07-17 00:33:33 +08:00
2025-01-10 09:58:08 +08:00
2025-01-10 09:58:08 +08:00
2026-05-11 19:48:29 +02:00
2025-09-04 10:38:49 +02:00
2026-07-15 19:57:52 +02:00
2026-07-15 19:57:52 +02:00
2026-05-20 13:59:02 +02:00
2025-06-22 12:39:54 +08:00
2026-05-14 22:58:58 +02:00
2026-07-16 09:02:25 +02:00
2026-06-02 10:38:37 +08:00
2026-07-16 09:02:25 +02:00
2026-07-16 09:02:25 +02:00
2026-07-13 18:37:57 +02:00
2026-07-13 18:37:57 +02:00
2026-07-13 18:37:57 +02:00
2026-07-13 18:37:57 +02:00
2026-07-13 18:37:57 +02:00
2026-07-13 18:37:57 +02:00
2026-07-16 11:39:17 +08:00
2026-07-13 18:37:57 +02:00
2026-07-16 09:02:25 +02:00
2026-07-15 23:21:22 +08:00
2026-06-03 13:56:42 +02:00
2026-02-03 23:31:23 +08:00
2026-07-09 13:23:57 +02:00
2026-05-28 14:50:25 +02:00
2026-05-20 13:59:02 +02:00
2025-08-29 11:35:58 +08:00
2024-11-17 08:30:29 +02:00
2024-09-20 21:15:05 +03:00
2025-08-14 12:03:57 +02:00
2025-08-14 12:03:57 +02:00
2026-06-26 08:51:25 +03:00
2024-09-20 21:15:05 +03:00
2025-09-26 02:56:10 +02:00
2025-08-22 13:06:29 +02:00
2026-02-10 08:07:16 +02:00
2024-06-26 18:33:02 +03:00
2024-06-26 18:33:02 +03:00
2024-06-26 18:33:02 +03:00
2026-07-16 09:02:25 +02:00
2026-07-16 09:02:25 +02:00
2026-06-03 13:56:42 +02:00
2025-07-29 14:45:18 +08:00
2025-07-29 14:45:18 +08:00
2026-05-20 13:59:02 +02:00
2025-11-13 08:50:01 +08:00
2026-05-20 13:59:02 +02:00
2024-06-26 18:33:02 +03:00
2026-07-08 19:24:20 +08:00
2025-07-12 16:31:38 +03:00
2025-10-28 20:10:28 +01:00
2025-10-28 20:10:28 +01:00
2026-05-08 17:44:09 +08:00
2026-05-08 17:44:09 +08:00
2026-05-20 13:59:02 +02:00
2025-07-29 14:22:03 +02:00
2026-03-05 08:50:21 +01:00
2025-01-16 16:43:38 +01:00
2026-03-05 08:50:21 +01:00
2025-11-28 12:15:32 +08:00
2026-06-03 13:56:42 +02:00
2026-04-30 02:39:56 +08:00
2026-06-10 14:27:08 +02:00
2025-03-31 18:05:13 +02:00
2025-08-13 10:04:46 +02:00
2024-09-08 11:05:55 +03:00
2026-05-20 13:59:02 +02:00
2025-06-22 12:39:54 +08:00
2026-07-09 20:07:12 +02:00
2026-01-04 22:22:16 +02:00
2026-07-03 15:36:55 +02:00
2026-01-29 10:31:28 +08:00
2025-12-04 22:19:51 +01:00
2025-12-04 22:19:51 +01:00
2025-09-16 15:25:57 +02:00
2024-06-26 18:33:02 +03:00
2026-05-20 13:59:02 +02:00
2026-04-23 10:28:56 +08:00
2025-11-30 21:57:31 +01:00
2024-06-26 18:33:02 +03:00
2026-07-16 11:39:17 +08:00
2025-03-18 07:27:50 +08:00
2025-03-18 07:27:50 +08:00