use async_cuda::runtime::Future;
use crate::ffi::builder_config::BuilderConfig;
use crate::ffi::memory::HostBuffer;
use crate::ffi::network::{NetworkDefinition, NetworkDefinitionCreationFlags};
use crate::ffi::optimization_profile::OptimizationProfile;
use crate::ffi::sync::builder::Builder as InnerBuilder;
type Result<T> = std::result::Result<T, crate::error::Error>;
pub struct Builder {
inner: InnerBuilder,
}
impl Builder {
pub async fn new() -> Result<Self> {
let inner = Future::new(InnerBuilder::new).await?;
Ok(Builder { inner })
}
#[inline(always)]
pub async fn config(&mut self) -> BuilderConfig {
Future::new(|| self.inner.config()).await
}
#[inline(always)]
pub fn optimization_profile(&mut self) -> Result<OptimizationProfile> {
self.inner.optimization_profile()
}
#[inline(always)]
pub fn add_default_optimization_profile(&mut self) -> Result<()> {
self.inner.add_default_optimization_profile()
}
#[inline(always)]
pub fn with_default_optimization_profile(mut self) -> Result<Self> {
self.inner.add_default_optimization_profile()?;
Ok(self)
}
#[inline(always)]
pub fn network_definition(
&mut self,
flags: NetworkDefinitionCreationFlags,
) -> NetworkDefinition {
self.inner.network_definition(flags)
}
pub async fn build_serialized_network(
&mut self,
network_definition: &mut NetworkDefinition,
config: BuilderConfig,
) -> Result<HostBuffer> {
Future::new(move || {
self.inner
.build_serialized_network(network_definition, config)
})
.await
}
#[inline(always)]
pub fn platform_has_fast_int8(&self) -> bool {
self.inner.platform_has_fast_int8()
}
#[inline(always)]
pub fn platform_has_fast_fp16(&self) -> bool {
self.inner.platform_has_fast_fp16()
}
}