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
}