Skip to content

Commit 5231c64

Browse files
fix nvidia-smi folder search (windows)
1 parent 42bc5a7 commit 5231c64

File tree

1 file changed

+22
-24
lines changed

1 file changed

+22
-24
lines changed

lib/graphics.js

Lines changed: 22 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,12 @@
1414
// ----------------------------------------------------------------------------------
1515

1616
const fs = require('fs');
17+
const path = require('path');
1718
const exec = require('child_process').exec;
1819
const execSync = require('child_process').execSync;
1920
const util = require('./util');
2021

21-
let _platform = process.platform;
22+
const _platform = process.platform;
2223
let _nvidiaSmiPath = '';
2324

2425
const _linux = _platform === 'linux' || _platform === 'android';
@@ -225,10 +226,8 @@ function graphics(callback) {
225226
for (let i = 0; i < pciIDs.length; i++) {
226227
pciIDs[i] = pciIDs[i].replace('Bus Address:', '').replace('0000:', '').trim();
227228
}
228-
pciIDs = pciIDs.filter(function (el) {
229-
return el != null && el;
230-
});
231-
} catch (e) {
229+
pciIDs = pciIDs.filter((el) => el != null && el);
230+
} catch {
232231
util.noop();
233232
}
234233
let i = 1;
@@ -422,25 +421,24 @@ function graphics(callback) {
422421

423422
if (_windows) {
424423
try {
425-
const basePath = util.WINDIR + String.raw`\System32\DriverStore\FileRepository`;
426-
// find all directories that have an nvidia-smi.exe file
427-
428-
const candidateDirs = fs.readdirSync(basePath).filter((dir) => {
429-
if (fs.statSync([basePath, dir].join('/')).isDirectory()) {
430-
return fs.readdirSync([basePath, dir].join('/')).includes('nvidia-smi.exe');
431-
} else {
432-
return false;
433-
}
434-
});
435-
// use the directory with the most recently created nvidia-smi.exe file
436-
const targetDir = candidateDirs.reduce((prevDir, currentDir) => {
437-
const previousNvidiaSmi = fs.statSync([basePath, prevDir, 'nvidia-smi.exe'].join('/'));
438-
const currentNvidiaSmi = fs.statSync([basePath, currentDir, 'nvidia-smi.exe'].join('/'));
439-
return previousNvidiaSmi.ctimeMs > currentNvidiaSmi.ctimeMs ? prevDir : currentDir;
440-
});
441-
442-
if (targetDir) {
443-
_nvidiaSmiPath = [basePath, targetDir, 'nvidia-smi.exe'].join('/');
424+
const basePath = path.join(util.WINDIR, 'System32', 'DriverStore', 'FileRepository');
425+
// find all directories that have an nvidia-smi.exe file with date
426+
const candidates = fs
427+
.readdirSync(basePath, { withFileTypes: true })
428+
.filter((dir) => dir.isDirectory())
429+
.map((dir) => {
430+
const nvidiaSmiPath = path.join(basePath, dir.name, 'nvidia-smi.exe');
431+
try {
432+
const stats = fs.statSync(nvidiaSmiPath);
433+
return { path: nvidiaSmiPath, ctime: stats.ctimeMs };
434+
} catch {
435+
return null;
436+
}
437+
})
438+
.filter(Boolean);
439+
if (candidates.length > 0) {
440+
// take the most recent
441+
_nvidiaSmiPath = candidates.reduce((prev, curr) => (curr.ctime > prev.ctime ? curr : prev)).path;
444442
}
445443
} catch {
446444
util.noop();

0 commit comments

Comments
 (0)