|
"""Get OS specific nvml wrapper. On OSX we use pynvx as drop in replacement for pynvml""" |
|
|
|
import platform |
|
from ..script import * |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import threading |
|
from ctypes import * |
|
|
|
nvmlLib = None |
|
libLoadLock = threading.Lock() |
|
|
|
def _LoadNvmlLibrary(): |
|
''' |
|
Load the library if it isn't loaded already |
|
''' |
|
|
|
global nvmlLib |
|
|
|
if (nvmlLib == None): |
|
libLoadLock.acquire() |
|
|
|
try: |
|
if (nvmlLib == None): |
|
try: |
|
if (sys.platform[:3] == "win"): |
|
searchPaths = [ |
|
os.path.join(os.getenv("ProgramFiles", r"C:\Program Files"), r"NVIDIA Corporation\NVSMI\nvml.dll"), |
|
os.path.join(os.getenv("WinDir", r"C:\Windows"), r"System32\nvml.dll"), |
|
] |
|
nvmlPath = next((x for x in searchPaths if os.path.isfile(x)), None) |
|
if (nvmlPath == None): |
|
nvmlLib = None |
|
else: |
|
nvmlLib = CDLL(nvmlPath) |
|
else: |
|
nvmlLib = None |
|
except OSError as ose: |
|
nvmlLib = None |
|
finally: |
|
libLoadLock.release() |
|
|
|
|
|
|
|
|
|
def load_pynvml_env(): |
|
import pynvml |
|
|
|
|
|
|
|
_LoadNvmlLibrary() |
|
pynvml.nvmlLib = nvmlLib |
|
|
|
|
|
|
|
|
|
if platform.system() == "Darwin": |
|
try: |
|
from pynvx import pynvml |
|
except: |
|
print("please install pynvx on OSX: pip install pynvx") |
|
sys.exit(1) |
|
|
|
pynvml.nvmlInit() |
|
return pynvml |
|
|
|
pynvml.nvmlInit() |
|
|
|
return pynvml |
|
|