furiosa-ai / device-api

APIs that offers NPU devices' information and allow to control the devices
Apache License 2.0
5 stars 8 forks source link

Reimpl find_devices() #43

Closed sukyoungjeong-furiosa closed 2 years ago

sukyoungjeong-furiosa commented 2 years ago

기존에 MultiCore Mode의 DeviceFile에 대해 .core_indices() 함수를 수행하면 빈 벡터를 리턴했습니다. 이는 실제로 multicore mode가 점유하는 코어 정보(=all) 와 맞지 않지만, 해당 파일의 이름만 보고 core list를 가져오는 것이 까다로워서 수정되지 않았고 대신 .is_multicore() 같은 보조 함수를 써서 필요할 때마다 예외 처리가 이루어졌습니다.

여기에서는 CoreRange라는 enum 을 넣어서 DeviceFile이 점유하는 core 정보를 나타내게 하고, DeviceConfig가 사용하던 비슷한 용도의 필드도 통합 시켰습니다. multicore device의 경우 All이라는 variant를 가집니다.

#[derive(Debug, Eq, PartialEq, Clone, Copy)]
pub enum CoreRange {
    All,
    Range((u8, u8)),
}

그리고 이를 기반으로 DeviceConfig에 .fit()이라는 함수를 추가해서 find 함수 구현을 단순화 합니다. 이 함수의 signature는 다음과 같이 생겼습니다.

pub(crate) fn fit(&self, device: &Device, device_file: &DeviceFile) -> bool ;

파라미터로 DeviceFile만 받으면 좋겠지만 그러려면 #6 이 해결되어야 하고, 지금은 Device를 같이 받는 형태입니다.

sukyoungjeong-furiosa commented 2 years ago

@libc-furiosa 님, 리뷰 주신 부분을 반영하는 과정에서 간단한 테스트 케이스를 추가하면서 fit 함수의 signature를 변경해보았는데요,

pub(crate) fn fit(&self, arch: Arch, device_file: &DeviceFile) -> bool ;

테스트 코드 쓰기도 간편하고 이 방식이 현재 코드에서 개선이 필요한 지점을 더 정확히 보여줄 것 같아서 변경했습니다.

libc-furiosa commented 2 years ago

수고하셨습니다. 머지하겠습니다.