vyre-conform 0.1.0

Conformance suite for vyre backends — proves byte-identical output to CPU reference
Documentation
//! Workgroup scheduling and runner configuration validation.

use crate::{OpSpec, ParityFailure};

use crate::pipeline::workgroup_sizes;

#[inline]
pub(crate) fn resolve_workgroup_sizes(op: &OpSpec) -> Result<Vec<u32>, String> {
    workgroup_sizes(op.workgroup_size)
}

#[inline]
pub(crate) fn config_failure(message: &str) -> ParityFailure {
    ParityFailure {
        op_id: "streaming.runner".to_string(),
        generator: "configuration".to_string(),
        input_label: "builder".to_string(),
        input: Vec::new(),
        gpu_output: Vec::new(),
        cpu_output: Vec::new(),
        message: message.to_string(),
        spec_version: 0,
        workgroup_size: 0,
    }
}

#[inline]
pub(crate) fn validate_sharding(shard_id: u64, shard_count: u64) -> Option<ParityFailure> {
    if shard_count == 0 {
        return Some(config_failure(
            "shard_count is zero. Fix: call shard(shard_id, shard_count) with shard_count >= 1.",
        ));
    }
    if shard_id >= shard_count {
        return Some(config_failure(
            "shard_id is outside shard_count. Fix: ensure shard_id < shard_count.",
        ));
    }
    None
}