Comments (3)
Yeah, so due to the usage of lifetimes to track the relationships between the NVML
instance and the Device
structs obtained from it, it's not possible to store both the NVML
instance and Device
structs within the same object. (It creates a self-referential lifetime situation which isn't fun to deal with in Rust).
The best solution here is to initialize a global, static NVML
instance and store it in a once_cell
at program startup. You can then store devices obtained from that global instance within a struct. Here's an example:
use nvml_wrapper::{error::NvmlError, Device, NVML};
use once_cell::sync::Lazy;
static NVML_INSTANCE: Lazy<NVML> = Lazy::new(|| NVML::init().unwrap());
#[derive(Debug)]
struct NvmlDevices<'a> {
devices: Vec<Device<'a>>,
}
impl<'a> NvmlDevices<'a> {
pub fn new() -> Result<Self, NvmlError> {
Ok(NvmlDevices {
devices: (0..NVML_INSTANCE.device_count()?)
.map(|i| NVML_INSTANCE.device_by_index(i))
.collect::<Result<_, _>>()?,
})
}
}
fn main() {
let devices = NvmlDevices::new();
dbg!(&devices);
}
(I'm traveling and only have access to a mac right now, so I can't run that at the moment, but it compiles successfully for me.)
In the past I've thought about moving away from lifetimes and instead using Arc
s to model the lifetime relationships (which would be easier to deal with and make your code example possible to write). Since this library doesn't provide performance-critical code, I think that might be the better path to go down. If I find time and interest I'll play around with implementing that in this library sometime in the future.
from nvml-wrapper.
@Cldfire I checked, it works.
I think the Arc
implementation might be the way to go if the Device instances have to have a reference to the NVML instance.
Thank you.
from nvml-wrapper.
Awesome! Glad to hear that worked out for you.
from nvml-wrapper.
Related Issues (20)
- Name of the crate HOT 2
- Load NVML lib at runtime HOT 4
- Any way to build without /usr/lib? HOT 4
- Use the `#[doc(alias = "...")]` attribute on wrapper methods
- Rename `NVML` struct to `Nvml`
- Accept more variants of lib name or make internal init public HOT 2
- Explore reference counting to maintain lifetime relationships among NVML data structures
- nvmlDeviceSetGpuLockedClocks vs nvmlDeviceSetMemoryLockedClocks HOT 2
- GPU Temp sensors HOT 2
- feature request: add support for `nvmlDeviceGetGraphicsRunningProcesses_v2` HOT 5
- Device Brand function fails for new RTX cards
- Cannot call legacy functions HOT 3
- "libnvidia-ml.so: cannot open shared object file: No such file or directory HOT 3
- Segmentation fault when fetching graphics processes HOT 6
- FailedToLoadSymbol("GetProcAddress failed") with Windows studio driver v536.99 HOT 2
- failing to load driver nvml from wsl2 HOT 1
- Support for querying scoped fields HOT 2
- process_utilization_stats failed with NOT_FOUND error, Ubuntu 22.04
- Update memory info to v2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from nvml-wrapper.