| |
|
|
| |
|
|
| import triton |
| import triton.language as tl |
|
|
|
|
| @triton.jit |
| def remap_xcd_chunked( |
| pid, GRID_MN, NUM_XCDS: tl.constexpr = 8, CHUNK_SIZE: tl.constexpr = 2 |
| ): |
| |
| xcd = pid % NUM_XCDS |
| |
| if pid > (GRID_MN // (NUM_XCDS * CHUNK_SIZE)) * (NUM_XCDS * CHUNK_SIZE): |
| return pid |
| local_pid = pid // NUM_XCDS |
| |
| chunk_idx = local_pid // CHUNK_SIZE |
| pos_in_chunk = local_pid % CHUNK_SIZE |
| |
| new_pid = chunk_idx * NUM_XCDS * CHUNK_SIZE + xcd * CHUNK_SIZE + pos_in_chunk |
| return new_pid |
|
|
|
|
| @triton.jit |
| def remap_xcd(pid, GRID_MN, NUM_XCDS: tl.constexpr = 8): |
| |
| |
| pids_per_xcd = (GRID_MN + NUM_XCDS - 1) // NUM_XCDS |
| |
| |
| |
| |
| tall_xcds = GRID_MN % NUM_XCDS |
| if tall_xcds == 0: |
| tall_xcds = tl.cast(NUM_XCDS, tall_xcds.type) |
| |
| xcd = pid % NUM_XCDS |
| local_pid = pid // NUM_XCDS |
| |
| |
| |
| |
| if xcd < tall_xcds: |
| pid = xcd * pids_per_xcd + local_pid |
| else: |
| pid = ( |
| tall_xcds * pids_per_xcd |
| + (xcd - tall_xcds) * (pids_per_xcd - 1) |
| + local_pid |
| ) |
|
|
| return pid |
|
|
|
|
| @triton.jit |
| def pid_grid(pid: int, num_pid_m: int, num_pid_n: int, GROUP_SIZE_M: tl.constexpr = 1): |
| """ |
| Maps 1D pid to 2D grid coords (pid_m, pid_n). |
| |
| Args: |
| - pid: 1D pid |
| - num_pid_m: grid m size |
| - num_pid_n: grid n size |
| - GROUP_SIZE_M: tl.constexpr: default is 1 |
| """ |
| if GROUP_SIZE_M == 1: |
| pid_m = pid // num_pid_n |
| pid_n = pid % num_pid_n |
| else: |
| num_pid_in_group = GROUP_SIZE_M * num_pid_n |
| group_id = pid // num_pid_in_group |
| first_pid_m = group_id * GROUP_SIZE_M |
| group_size_m = min(num_pid_m - first_pid_m, GROUP_SIZE_M) |
| tl.assume(group_size_m >= 0) |
| pid_m = first_pid_m + (pid % group_size_m) |
| pid_n = (pid % num_pid_in_group) // group_size_m |
|
|
| return pid_m, pid_n |
|
|
|
|
| @triton.jit |
| def pid_grid_3d(pid: int, num_pid_m: int, num_pid_n: int, num_pid_k): |
| """ |
| Maps 1D pid to 3D grid coords (pid_m, pid_n, pid_k). |
| Args: |
| - pid: 1D pid |
| - num_pid_m: grid m size |
| - num_pid_n: grid n size |
| - num_pid_k: grid k size |
| |
| Returns: |
| - pid_m, pid_n, pid_k: 3D grid coordinates |
| """ |
| pid_m = pid % num_pid_m |
| pid_n = (pid // num_pid_m) % num_pid_n |
| pid_k = pid // (num_pid_m * num_pid_n) % num_pid_k |
|
|
| return pid_m, pid_n, pid_k |
|
|