pub const TOPOLOGY_MATRIX_REDUCTION: &str = r#"
// Parallel column reduction using GPU
// Finds pivot rows for each column
@group(0) @binding(0)
var<storage, read_write> matrix: array<i32>;
@group(0) @binding(1)
var<uniform> dims: vec2<u32>; // rows, cols
@group(0) @binding(2)
var<storage, read_write> pivots: array<u32>;
@compute @workgroup_size(256)
fn main(@builtin(global_invocation_id) global_id: vec3<u32>) {
let col = global_id.x;
let rows = dims.x;
let cols = dims.y;
if (col >= cols) {
return;
}
// Find lowest non-zero in column (pivot row)
var pivot_row = rows; // rows means no pivot
for (var row = 0u; row < rows; row++) {
let idx = row * cols + col;
if (matrix[idx] != 0) {
pivot_row = row;
}
}
pivots[col] = pivot_row;
}
"#;Expand description
Parallel matrix reduction for homology computation