use furiosa_mapping::*;
use crate::scalar::Scalar;
use crate::tensor::memory::{Address, HbmTensor, HostTensor};
use crate::tensor::raw::BufRawTensor;
use super::Kernel;
use crate::runtime::backend::Backend;
#[derive(Debug, Clone, Copy)]
pub struct Npu;
impl Backend for Npu {
type RawTensor<D: Scalar> = BufRawTensor<D>;
async fn to_hbm<D: Scalar, Element: M, Chip: M, Element2: M>(
host: &HostTensor<D, Element, Self>,
address: Address,
) -> HbmTensor<D, Chip, Element2, Self> {
Kernel::write(host, address).await
}
async fn from_hbm<D: Scalar, Chip: M, Element: M, Element2: M>(
hbm: &HbmTensor<D, Chip, Element, Self>,
) -> HostTensor<D, Element2, Self> {
Kernel::read(hbm).await
}
}