Skip to main content

TOPOLOGY_MATRIX_REDUCTION

Constant TOPOLOGY_MATRIX_REDUCTION 

Source
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