pub fn validate_buffer_placement(
desc: &QuantizationDescriptor,
buffers: &[BufferHandle],
data_buffer_index: u32,
) -> Result<()>Expand description
Validates that all quantization-parameter buffer indices in desc are valid
within the buffers table and do not alias the tensor data buffer.
For each parameter buffer index referenced by desc:
- The index MUST be less than
buffers.len(). - The index MUST NOT equal
data_buffer_index. - The referenced buffer’s
device_tagMUST match that ofbuffers[data_buffer_index].
§Errors
Error::QuantizationBufferIndexOutOfRange— a parameter buffer index is out of range.Error::QuantizationBufferAliasesData— a parameter buffer index equalsdata_buffer_index.Error::DeviceTagMismatch— a parameter buffer is on a different device than the data buffer.
§Examples
use hurray_core::{
BufferHandle, DeviceTag, Nf4, QuantizationDescriptor, SyncMode,
validate_buffer_placement, MIN_BUFFER_ALIGNMENT,
};
let data = BufferHandle::new(1024, MIN_BUFFER_ALIGNMENT, DeviceTag::Cpu, SyncMode::ProducerSynced).unwrap();
let scale = BufferHandle::new(64, MIN_BUFFER_ALIGNMENT, DeviceTag::Cpu, SyncMode::ProducerSynced).unwrap();
let buffers = [data, scale];
let desc = QuantizationDescriptor::Nf4(Nf4::new(0, 64, 1).unwrap());
// scale buffer index 1 is valid: in range, != data index 0, same device.
assert!(validate_buffer_placement(&desc, &buffers, 0).is_ok());