| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198519952005201520252035204520552065207520852095210521152125213521452155216521752185219522052215222522352245225522652275228522952305231523252335234523552365237523852395240524152425243524452455246524752485249525052515252525352545255525652575258525952605261526252635264526552665267526852695270527152725273527452755276527752785279528052815282528352845285528652875288528952905291529252935294529552965297529852995300530153025303530453055306530753085309531053115312531353145315531653175318531953205321532253235324532553265327532853295330533153325333533453355336533753385339534053415342534353445345534653475348534953505351535253535354535553565357535853595360536153625363536453655366536753685369537053715372537353745375537653775378537953805381538253835384538553865387538853895390539153925393539453955396539753985399540054015402540354045405540654075408540954105411541254135414541554165417541854195420542154225423542454255426542754285429543054315432543354345435543654375438543954405441544254435444544554465447544854495450545154525453545454555456545754585459546054615462546354645465546654675468546954705471547254735474547554765477547854795480548154825483548454855486548754885489549054915492549354945495549654975498549955005501550255035504550555065507550855095510551155125513551455155516551755185519552055215522552355245525552655275528552955305531553255335534553555365537553855395540554155425543554455455546554755485549555055515552555355545555555655575558555955605561556255635564556555665567556855695570557155725573557455755576557755785579558055815582558355845585558655875588558955905591559255935594559555965597559855995600560156025603560456055606560756085609561056115612561356145615561656175618561956205621562256235624562556265627562856295630563156325633563456355636563756385639564056415642564356445645564656475648564956505651565256535654565556565657565856595660566156625663566456655666566756685669567056715672567356745675567656775678567956805681568256835684568556865687568856895690569156925693569456955696569756985699570057015702570357045705570657075708570957105711571257135714571557165717571857195720572157225723572457255726572757285729573057315732573357345735573657375738573957405741574257435744574557465747574857495750575157525753575457555756575757585759576057615762576357645765576657675768576957705771577257735774577557765777577857795780578157825783578457855786578757885789579057915792579357945795579657975798579958005801580258035804580558065807580858095810581158125813581458155816581758185819582058215822582358245825582658275828582958305831583258335834583558365837583858395840584158425843584458455846584758485849585058515852585358545855585658575858585958605861586258635864586558665867586858695870587158725873587458755876587758785879588058815882588358845885588658875888588958905891589258935894589558965897589858995900590159025903590459055906590759085909591059115912591359145915591659175918591959205921592259235924592559265927592859295930593159325933593459355936593759385939594059415942594359445945594659475948594959505951595259535954595559565957595859595960596159625963596459655966596759685969597059715972597359745975597659775978597959805981598259835984598559865987598859895990599159925993599459955996599759985999600060016002600360046005600660076008600960106011601260136014601560166017601860196020602160226023602460256026602760286029603060316032603360346035603660376038603960406041604260436044604560466047604860496050605160526053605460556056605760586059606060616062606360646065606660676068606960706071607260736074607560766077607860796080608160826083608460856086608760886089609060916092609360946095609660976098609961006101610261036104610561066107610861096110611161126113611461156116611761186119612061216122612361246125612661276128612961306131613261336134613561366137613861396140614161426143614461456146614761486149615061516152615361546155615661576158615961606161616261636164616561666167616861696170617161726173617461756176617761786179618061816182618361846185618661876188618961906191619261936194619561966197619861996200620162026203620462056206620762086209621062116212621362146215621662176218621962206221622262236224622562266227622862296230623162326233623462356236623762386239624062416242624362446245624662476248624962506251625262536254625562566257625862596260626162626263626462656266626762686269627062716272627362746275627662776278627962806281628262836284628562866287628862896290629162926293629462956296629762986299630063016302630363046305630663076308630963106311631263136314631563166317631863196320632163226323632463256326632763286329633063316332633363346335633663376338633963406341634263436344634563466347634863496350635163526353635463556356635763586359636063616362636363646365636663676368636963706371637263736374637563766377637863796380638163826383638463856386638763886389639063916392639363946395639663976398639964006401640264036404640564066407640864096410641164126413641464156416641764186419642064216422642364246425642664276428642964306431643264336434643564366437643864396440644164426443644464456446644764486449645064516452645364546455645664576458645964606461646264636464646564666467646864696470647164726473647464756476647764786479648064816482648364846485648664876488648964906491649264936494649564966497649864996500650165026503650465056506650765086509651065116512651365146515651665176518651965206521652265236524652565266527652865296530653165326533653465356536653765386539654065416542654365446545654665476548654965506551655265536554655565566557655865596560656165626563656465656566656765686569657065716572657365746575657665776578657965806581658265836584658565866587658865896590659165926593659465956596659765986599660066016602660366046605660666076608660966106611661266136614661566166617661866196620662166226623662466256626662766286629663066316632663366346635663666376638663966406641664266436644664566466647664866496650665166526653665466556656665766586659666066616662666366646665666666676668666966706671667266736674667566766677667866796680668166826683668466856686668766886689669066916692669366946695669666976698669967006701670267036704670567066707670867096710671167126713671467156716671767186719672067216722672367246725672667276728672967306731673267336734673567366737673867396740674167426743674467456746674767486749675067516752675367546755675667576758675967606761676267636764676567666767676867696770677167726773677467756776677767786779678067816782678367846785678667876788678967906791679267936794679567966797679867996800680168026803680468056806680768086809681068116812681368146815681668176818681968206821682268236824682568266827682868296830683168326833683468356836683768386839684068416842684368446845684668476848684968506851685268536854685568566857685868596860686168626863686468656866686768686869687068716872687368746875687668776878687968806881688268836884688568866887688868896890689168926893689468956896689768986899690069016902690369046905690669076908690969106911691269136914691569166917691869196920 |
- #####
- # Copyright (c) 2011-2025, NVIDIA Corporation. All rights reserved.
- #
- # Redistribution and use in source and binary forms, with or without
- # modification, are permitted provided that the following conditions are met:
- #
- # * Redistributions of source code must retain the above copyright notice,
- # this list of conditions and the following disclaimer.
- # * Redistributions in binary form must reproduce the above copyright
- # notice, this list of conditions and the following disclaimer in the
- # documentation and/or other materials provided with the distribution.
- # * Neither the name of the NVIDIA Corporation nor the names of its
- # contributors may be used to endorse or promote products derived from
- # this software without specific prior written permission.
- #
- # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
- # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- # THE POSSIBILITY OF SUCH DAMAGE.
- #####
- ##
- # Python bindings for the NVML library
- ##
- from ctypes import *
- from ctypes.util import find_library
- from functools import wraps
- import sys
- import os
- import threading
- import string
- ## C Type mappings ##
- ## Enums
- _nvmlEnableState_t = c_uint
- NVML_FEATURE_DISABLED = 0
- NVML_FEATURE_ENABLED = 1
- _nvmlBrandType_t = c_uint
- NVML_BRAND_UNKNOWN = 0
- NVML_BRAND_QUADRO = 1
- NVML_BRAND_TESLA = 2
- NVML_BRAND_NVS = 3
- NVML_BRAND_GRID = 4 # Deprecated from API reporting. Keeping definition for backward compatibility.
- NVML_BRAND_GEFORCE = 5
- NVML_BRAND_TITAN = 6
- NVML_BRAND_NVIDIA_VAPPS = 7 # NVIDIA Virtual Applications
- NVML_BRAND_NVIDIA_VPC = 8 # NVIDIA Virtual PC
- NVML_BRAND_NVIDIA_VCS = 9 # NVIDIA Virtual Compute Server
- NVML_BRAND_NVIDIA_VWS = 10 # NVIDIA RTX Virtual Workstation
- NVML_BRAND_NVIDIA_CLOUD_GAMING = 11 # NVIDIA Cloud Gaming
- NVML_BRAND_NVIDIA_VGAMING = NVML_BRAND_NVIDIA_CLOUD_GAMING # Deprecated from API reporting. Keeping definition for backward compatibility.
- NVML_BRAND_QUADRO_RTX = 12
- NVML_BRAND_NVIDIA_RTX = 13
- NVML_BRAND_NVIDIA = 14
- NVML_BRAND_GEFORCE_RTX = 15 # Unused
- NVML_BRAND_TITAN_RTX = 16 # Unused
- NVML_BRAND_COUNT = 18
- _nvmlTemperatureThresholds_t = c_uint
- NVML_TEMPERATURE_THRESHOLD_SHUTDOWN = 0
- NVML_TEMPERATURE_THRESHOLD_SLOWDOWN = 1
- NVML_TEMPERATURE_THRESHOLD_MEM_MAX = 2
- NVML_TEMPERATURE_THRESHOLD_GPU_MAX = 3
- NVML_TEMPERATURE_THRESHOLD_ACOUSTIC_MIN = 4
- NVML_TEMPERATURE_THRESHOLD_ACOUSTIC_CURR = 5
- NVML_TEMPERATURE_THRESHOLD_ACOUSTIC_MAX = 6
- NVML_TEMPERATURE_THRESHOLD_GPS_CURR = 7
- NVML_TEMPERATURE_THRESHOLD_COUNT = 8
- _nvmlTemperatureSensors_t = c_uint
- NVML_TEMPERATURE_GPU = 0
- NVML_TEMPERATURE_COUNT = 1
- _nvmlComputeMode_t = c_uint
- NVML_COMPUTEMODE_DEFAULT = 0
- NVML_COMPUTEMODE_EXCLUSIVE_THREAD = 1 ## Support Removed
- NVML_COMPUTEMODE_PROHIBITED = 2
- NVML_COMPUTEMODE_EXCLUSIVE_PROCESS = 3
- NVML_COMPUTEMODE_COUNT = 4
- _nvmlMemoryLocation_t = c_uint
- NVML_MEMORY_LOCATION_L1_CACHE = 0
- NVML_MEMORY_LOCATION_L2_CACHE = 1
- NVML_MEMORY_LOCATION_DEVICE_MEMORY = 2
- NVML_MEMORY_LOCATION_DRAM = 2
- NVML_MEMORY_LOCATION_REGISTER_FILE = 3
- NVML_MEMORY_LOCATION_TEXTURE_MEMORY = 4
- NVML_MEMORY_LOCATION_TEXTURE_SHM = 5
- NVML_MEMORY_LOCATION_CBU = 6
- NVML_MEMORY_LOCATION_SRAM = 7
- NVML_MEMORY_LOCATION_COUNT = 8
- NVML_NVLINK_MAX_LINKS = 18
- # For backwards compatibility, maintain the incorrectly-named "LANES" define
- NVML_NVLINK_MAX_LANES = NVML_NVLINK_MAX_LINKS
- _nvmlNvLinkErrorCounter_t = c_uint
- NVML_NVLINK_ERROR_DL_REPLAY = 0
- NVML_NVLINK_ERROR_DL_RECOVERY = 1
- NVML_NVLINK_ERROR_DL_CRC_FLIT = 2
- NVML_NVLINK_ERROR_DL_CRC_DATA = 3
- NVML_NVLINK_ERROR_DL_ECC_DATA = 4
- NVML_NVLINK_ERROR_COUNT = 5
- _nvmlNvLinkEccLaneErrorCounter_t = c_uint
- NVML_NVLINK_ERROR_DL_ECC_LANE0 = 0
- NVML_NVLINK_ERROR_DL_ECC_LANE1 = 1
- NVML_NVLINK_ERROR_DL_ECC_LANE2 = 2
- NVML_NVLINK_ERROR_DL_ECC_LANE3 = 3
- NVML_NVLINK_ERROR_DL_ECC_COUNT = 5
- _nvmlNvLinkCapability_t = c_uint
- NVML_NVLINK_CAP_P2P_SUPPORTED = 0
- NVML_NVLINK_CAP_SYSMEM_ACCESS = 1
- NVML_NVLINK_CAP_P2P_ATOMICS = 2
- NVML_NVLINK_CAP_SYSMEM_ATOMICS= 3
- NVML_NVLINK_CAP_SLI_BRIDGE = 4
- NVML_NVLINK_CAP_VALID = 5
- NVML_NVLINK_CAP_COUNT = 6
- _nvmlNvLinkUtilizationCountPktTypes_t = c_uint
- NVML_NVLINK_COUNTER_PKTFILTER_NOP = 0x1
- NVML_NVLINK_COUNTER_PKTFILTER_READ = 0x2
- NVML_NVLINK_COUNTER_PKTFILTER_WRITE = 0x4
- NVML_NVLINK_COUNTER_PKTFILTER_RATOM = 0x8
- NVML_NVLINK_COUNTER_PKTFILTER_NRATOM = 0x10
- NVML_NVLINK_COUNTER_PKTFILTER_FLUSH = 0x20
- NVML_NVLINK_COUNTER_PKTFILTER_RESPDATA = 0x40
- NVML_NVLINK_COUNTER_PKTFILTER_RESPNODATA = 0x80
- NVML_NVLINK_COUNTER_PKTFILTER_ALL = 0xFF
- _nvmlNvLinkUtilizationCountUnits_t = c_uint
- NVML_NVLINK_COUNTER_UNIT_CYCLES = 0
- NVML_NVLINK_COUNTER_UNIT_PACKETS = 1
- NVML_NVLINK_COUNTER_UNIT_BYTES = 2
- NVML_NVLINK_COUNTER_UNIT_RESERVED = 3
- NVML_NVLINK_COUNTER_UNIT_COUNT = 4
- _nvmlNvLinkDeviceType_t = c_uint
- NVML_NVLINK_DEVICE_TYPE_GPU = 0x00
- NVML_NVLINK_DEVICE_TYPE_IBMNPU = 0x01
- NVML_NVLINK_DEVICE_TYPE_SWITCH = 0x02
- NVML_NVLINK_DEVICE_TYPE_UNKNOWN = 0xFF
- # These are deprecated, instead use _nvmlMemoryErrorType_t
- _nvmlEccBitType_t = c_uint
- NVML_SINGLE_BIT_ECC = 0
- NVML_DOUBLE_BIT_ECC = 1
- NVML_ECC_ERROR_TYPE_COUNT = 2
- _nvmlEccCounterType_t = c_uint
- NVML_VOLATILE_ECC = 0
- NVML_AGGREGATE_ECC = 1
- NVML_ECC_COUNTER_TYPE_COUNT = 2
- _nvmlMemoryErrorType_t = c_uint
- NVML_MEMORY_ERROR_TYPE_CORRECTED = 0
- NVML_MEMORY_ERROR_TYPE_UNCORRECTED = 1
- NVML_MEMORY_ERROR_TYPE_COUNT = 2
- _nvmlClockType_t = c_uint
- NVML_CLOCK_GRAPHICS = 0
- NVML_CLOCK_SM = 1
- NVML_CLOCK_MEM = 2
- NVML_CLOCK_VIDEO = 3
- NVML_CLOCK_COUNT = 4
- _nvmlClockId_t = c_uint
- NVML_CLOCK_ID_CURRENT = 0
- NVML_CLOCK_ID_APP_CLOCK_TARGET = 1
- NVML_CLOCK_ID_APP_CLOCK_DEFAULT = 2
- NVML_CLOCK_ID_CUSTOMER_BOOST_MAX = 3
- NVML_CLOCK_ID_COUNT = 4
- _nvmlDriverModel_t = c_uint
- NVML_DRIVER_WDDM = 0
- NVML_DRIVER_WDM = 1
- NVML_DRIVER_MCDM = 2
- NVML_MAX_GPU_PERF_PSTATES = 16
- _nvmlPstates_t = c_uint
- NVML_PSTATE_0 = 0
- NVML_PSTATE_1 = 1
- NVML_PSTATE_2 = 2
- NVML_PSTATE_3 = 3
- NVML_PSTATE_4 = 4
- NVML_PSTATE_5 = 5
- NVML_PSTATE_6 = 6
- NVML_PSTATE_7 = 7
- NVML_PSTATE_8 = 8
- NVML_PSTATE_9 = 9
- NVML_PSTATE_10 = 10
- NVML_PSTATE_11 = 11
- NVML_PSTATE_12 = 12
- NVML_PSTATE_13 = 13
- NVML_PSTATE_14 = 14
- NVML_PSTATE_15 = 15
- NVML_PSTATE_UNKNOWN = 32
- _nvmlInforomObject_t = c_uint
- NVML_INFOROM_OEM = 0
- NVML_INFOROM_ECC = 1
- NVML_INFOROM_POWER = 2
- NVML_INFOROM_DEN = 3
- NVML_INFOROM_COUNT = 4
- _nvmlReturn_t = c_uint
- NVML_SUCCESS = 0
- NVML_ERROR_UNINITIALIZED = 1
- NVML_ERROR_INVALID_ARGUMENT = 2
- NVML_ERROR_NOT_SUPPORTED = 3
- NVML_ERROR_NO_PERMISSION = 4
- NVML_ERROR_ALREADY_INITIALIZED = 5
- NVML_ERROR_NOT_FOUND = 6
- NVML_ERROR_INSUFFICIENT_SIZE = 7
- NVML_ERROR_INSUFFICIENT_POWER = 8
- NVML_ERROR_DRIVER_NOT_LOADED = 9
- NVML_ERROR_TIMEOUT = 10
- NVML_ERROR_IRQ_ISSUE = 11
- NVML_ERROR_LIBRARY_NOT_FOUND = 12
- NVML_ERROR_FUNCTION_NOT_FOUND = 13
- NVML_ERROR_CORRUPTED_INFOROM = 14
- NVML_ERROR_GPU_IS_LOST = 15
- NVML_ERROR_RESET_REQUIRED = 16
- NVML_ERROR_OPERATING_SYSTEM = 17
- NVML_ERROR_LIB_RM_VERSION_MISMATCH = 18
- NVML_ERROR_IN_USE = 19
- NVML_ERROR_MEMORY = 20
- NVML_ERROR_NO_DATA = 21
- NVML_ERROR_VGPU_ECC_NOT_SUPPORTED = 22
- NVML_ERROR_INSUFFICIENT_RESOURCES = 23
- NVML_ERROR_FREQ_NOT_SUPPORTED = 24
- NVML_ERROR_ARGUMENT_VERSION_MISMATCH = 25
- NVML_ERROR_DEPRECATED = 26
- NVML_ERROR_NOT_READY = 27
- NVML_ERROR_GPU_NOT_FOUND = 28
- NVML_ERROR_INVALID_STATE = 29
- NVML_ERROR_RESET_TYPE_NOT_SUPPORTED = 30
- NVML_ERROR_UNKNOWN = 999
- _nvmlFanState_t = c_uint
- NVML_FAN_NORMAL = 0
- NVML_FAN_FAILED = 1
- _nvmlFanControlPolicy_t = c_uint
- NVML_FAN_POLICY_TEMPERATURE_CONTINOUS_SW = 0
- NVML_FAN_POLICY_MANUAL = 1
- _nvmlLedColor_t = c_uint
- NVML_LED_COLOR_GREEN = 0
- NVML_LED_COLOR_AMBER = 1
- _nvmlGpuOperationMode_t = c_uint
- NVML_GOM_ALL_ON = 0
- NVML_GOM_COMPUTE = 1
- NVML_GOM_LOW_DP = 2
- _nvmlPageRetirementCause_t = c_uint
- NVML_PAGE_RETIREMENT_CAUSE_MULTIPLE_SINGLE_BIT_ECC_ERRORS = 0
- NVML_PAGE_RETIREMENT_CAUSE_DOUBLE_BIT_ECC_ERROR = 1
- NVML_PAGE_RETIREMENT_CAUSE_COUNT = 2
- _nvmlRestrictedAPI_t = c_uint
- NVML_RESTRICTED_API_SET_APPLICATION_CLOCKS = 0
- NVML_RESTRICTED_API_SET_AUTO_BOOSTED_CLOCKS = 1
- NVML_RESTRICTED_API_COUNT = 2
- _nvmlBridgeChipType_t = c_uint
- NVML_BRIDGE_CHIP_PLX = 0
- NVML_BRIDGE_CHIP_BRO4 = 1
- NVML_MAX_PHYSICAL_BRIDGE = 128
- _nvmlValueType_t = c_uint
- NVML_VALUE_TYPE_DOUBLE = 0
- NVML_VALUE_TYPE_UNSIGNED_INT = 1
- NVML_VALUE_TYPE_UNSIGNED_LONG = 2
- NVML_VALUE_TYPE_UNSIGNED_LONG_LONG = 3
- NVML_VALUE_TYPE_SIGNED_LONG_LONG = 4
- NVML_VALUE_TYPE_SIGNED_INT = 5
- NVML_VALUE_TYPE_UNSIGNED_SHORT = 6
- NVML_VALUE_TYPE_COUNT = 7
- _nvmlNvlinkVersion_t = c_uint
- NVML_NVLINK_VERSION_INVALID = 0
- NVML_NVLINK_VERSION_1_0 = 1
- NVML_NVLINK_VERSION_2_0 = 2
- NVML_NVLINK_VERSION_2_2 = 3
- NVML_NVLINK_VERSION_3_0 = 4
- NVML_NVLINK_VERSION_3_1 = 5
- NVML_NVLINK_VERSION_4_0 = 6
- NVML_NVLINK_VERSION_5_0 = 7
- _nvmlPerfPolicyType_t = c_uint
- NVML_PERF_POLICY_POWER = 0
- NVML_PERF_POLICY_THERMAL = 1
- NVML_PERF_POLICY_SYNC_BOOST = 2
- NVML_PERF_POLICY_BOARD_LIMIT = 3
- NVML_PERF_POLICY_LOW_UTILIZATION = 4
- NVML_PERF_POLICY_RELIABILITY = 5
- NVML_PERF_POLICY_TOTAL_APP_CLOCKS = 10
- NVML_PERF_POLICY_TOTAL_BASE_CLOCKS = 11
- NVML_PERF_POLICY_COUNT = 12
- _nvmlEncoderQueryType_t = c_uint
- NVML_ENCODER_QUERY_H264 = 0
- NVML_ENCODER_QUERY_HEVC = 1
- NVML_ENCODER_QUERY_AV1 = 2
- NVML_ENCODER_QUERY_UNKNOWN = 255
- _nvmlFBCSessionType_t = c_uint
- NVML_FBC_SESSION_TYPE_UNKNOWN = 0
- NVML_FBC_SESSION_TYPE_TOSYS = 1
- NVML_FBC_SESSION_TYPE_CUDA = 2
- NVML_FBC_SESSION_TYPE_VID = 3
- NVML_FBC_SESSION_TYPE_HWENC = 4
- _nvmlDetachGpuState_t = c_uint
- NVML_DETACH_GPU_KEEP = 0
- NVML_DETACH_GPU_REMOVE = 1
- _nvmlPcieLinkState_t = c_uint
- NVML_PCIE_LINK_KEEP = 0
- NVML_PCIE_LINK_SHUT_DOWN = 1
- _nvmlSamplingType_t = c_uint
- NVML_TOTAL_POWER_SAMPLES = 0
- NVML_GPU_UTILIZATION_SAMPLES = 1
- NVML_MEMORY_UTILIZATION_SAMPLES = 2
- NVML_ENC_UTILIZATION_SAMPLES = 3
- NVML_DEC_UTILIZATION_SAMPLES = 4
- NVML_PROCESSOR_CLK_SAMPLES = 5
- NVML_MEMORY_CLK_SAMPLES = 6
- NVML_MODULE_POWER_SAMPLES = 7
- NVML_JPG_UTILIZATION_SAMPLES = 8
- NVML_OFA_UTILIZATION_SAMPLES = 9
- NVML_SAMPLINGTYPE_COUNT = 10
- _nvmlPcieUtilCounter_t = c_uint
- NVML_PCIE_UTIL_TX_BYTES = 0
- NVML_PCIE_UTIL_RX_BYTES = 1
- NVML_PCIE_UTIL_COUNT = 2
- _nvmlGpuTopologyLevel_t = c_uint
- NVML_TOPOLOGY_INTERNAL = 0
- NVML_TOPOLOGY_SINGLE = 10
- NVML_TOPOLOGY_MULTIPLE = 20
- NVML_TOPOLOGY_HOSTBRIDGE = 30
- NVML_TOPOLOGY_NODE = 40
- NVML_TOPOLOGY_CPU = NVML_TOPOLOGY_NODE
- NVML_TOPOLOGY_SYSTEM = 50
- _nvmlGpuP2PCapsIndex_t = c_uint
- NVML_P2P_CAPS_INDEX_READ = 0,
- NVML_P2P_CAPS_INDEX_WRITE = 1
- NVML_P2P_CAPS_INDEX_NVLINK =2
- NVML_P2P_CAPS_INDEX_ATOMICS = 3
- #
- # NVML_P2P_CAPS_INDEX_PROP is deprecated.
- # Use NVML_P2P_CAPS_INDEX_PCI instead.
- #
- NVML_P2P_CAPS_INDEX_PROP = 4
- NVML_P2P_CAPS_INDEX_PCI = 4
- NVML_P2P_CAPS_INDEX_UNKNOWN = 5
- _nvmlGpuP2PStatus_t = c_uint
- NVML_P2P_STATUS_OK = 0
- NVML_P2P_STATUS_CHIPSET_NOT_SUPPORED = 1
- NVML_P2P_STATUS_CHIPSET_NOT_SUPPORTED = NVML_P2P_STATUS_CHIPSET_NOT_SUPPORED
- NVML_P2P_STATUS_GPU_NOT_SUPPORTED = 2
- NVML_P2P_STATUS_IOH_TOPOLOGY_NOT_SUPPORTED =3
- NVML_P2P_STATUS_DISABLED_BY_REGKEY =4
- NVML_P2P_STATUS_NOT_SUPPORTED =5
- NVML_P2P_STATUS_UNKNOWN =6
- _nvmlDeviceArchitecture_t = c_uint
- NVML_DEVICE_ARCH_KEPLER = 2
- NVML_DEVICE_ARCH_MAXWELL = 3
- NVML_DEVICE_ARCH_PASCAL = 4
- NVML_DEVICE_ARCH_VOLTA = 5
- NVML_DEVICE_ARCH_TURING = 6
- NVML_DEVICE_ARCH_AMPERE = 7
- NVML_DEVICE_ARCH_ADA = 8
- NVML_DEVICE_ARCH_HOPPER = 9
- NVML_DEVICE_ARCH_BLACKWELL = 10
- NVML_DEVICE_ARCH_UNKNOWN = 0xffffffff
- # PCI bus Types
- _nvmlBusType_t = c_uint
- NVML_BUS_TYPE_UNKNOWN = 0
- NVML_BUS_TYPE_PCI = 1
- NVML_BUS_TYPE_PCIE = 2
- NVML_BUS_TYPE_FPCI = 3
- NVML_BUS_TYPE_AGP = 4
- _nvmlPowerSource_t = c_uint
- NVML_POWER_SOURCE_AC = 0x00000000
- NVML_POWER_SOURCE_BATTERY = 0x00000001
- NVML_POWER_SOURCE_UNDERSIZED = 0x00000002
- _nvmlAdaptiveClockInfoStatus_t = c_uint
- NVML_ADAPTIVE_CLOCKING_INFO_STATUS_DISABLED = 0x00000000
- NVML_ADAPTIVE_CLOCKING_INFO_STATUS_ENABLED = 0x00000001
- _nvmlClockLimitId_t = c_uint
- NVML_CLOCK_LIMIT_ID_RANGE_START = 0xffffff00
- NVML_CLOCK_LIMIT_ID_TDP = 0xffffff01
- NVML_CLOCK_LIMIT_ID_UNLIMITED = 0xffffff02
- _nvmlPcieLinkMaxSpeed_t = c_uint
- NVML_PCIE_LINK_MAX_SPEED_INVALID = 0x00000000
- NVML_PCIE_LINK_MAX_SPEED_2500MBPS = 0x00000001
- NVML_PCIE_LINK_MAX_SPEED_5000MBPS = 0x00000002
- NVML_PCIE_LINK_MAX_SPEED_8000MBPS = 0x00000003
- NVML_PCIE_LINK_MAX_SPEED_16000MBPS = 0x00000004
- NVML_PCIE_LINK_MAX_SPEED_32000MBPS = 0x00000005
- NVML_PCIE_LINK_MAX_SPEED_64000MBPS = 0x00000006
- _nvmlPcieAtomicsCapability_t = c_uint
- NVML_PCIE_ATOMICS_CAP_FETCHADD32 = 0x01
- NVML_PCIE_ATOMICS_CAP_FETCHADD64 = 0x02
- NVML_PCIE_ATOMICS_CAP_SWAP32 = 0x04
- NVML_PCIE_ATOMICS_CAP_SWAP64 = 0x08
- NVML_PCIE_ATOMICS_CAP_CAS32 = 0x10
- NVML_PCIE_ATOMICS_CAP_CAS64 = 0x20
- NVML_PCIE_ATOMICS_CAP_CAS128 = 0x40
- NVML_PCIE_ATOMICS_OPS_MAX = 7
- _nvmlAffinityScope_t = c_uint
- NVML_AFFINITY_SCOPE_NODE = 0
- NVML_AFFINITY_SCOPE_SOCKET = 1
- _nvmlDeviceGpuRecoveryAction_t = c_uint
- NVML_GPU_RECOVERY_ACTION_NONE = 0
- NVML_GPU_RECOVERY_ACTION_GPU_RESET = 1
- NVML_GPU_RECOVERY_ACTION_NODE_REBOOT = 2
- NVML_GPU_RECOVERY_ACTION_DRAIN_P2P = 3
- NVML_GPU_RECOVERY_ACTION_DRAIN_AND_RESET = 4
- NVML_GPU_RECOVERY_ACTION_GPU_RESET_BUS = 5
- # C preprocessor defined values
- nvmlFlagDefault = 0
- nvmlFlagForce = 1
- NVML_INIT_FLAG_NO_GPUS = 1
- NVML_INIT_FLAG_NO_ATTACH = 2
- NVML_MAX_GPC_COUNT = 32
- # buffer size
- NVML_DEVICE_INFOROM_VERSION_BUFFER_SIZE = 16
- NVML_DEVICE_UUID_BUFFER_SIZE = 80
- NVML_DEVICE_UUID_V2_BUFFER_SIZE = 96
- NVML_SYSTEM_DRIVER_VERSION_BUFFER_SIZE = 80
- NVML_SYSTEM_NVML_VERSION_BUFFER_SIZE = 80
- NVML_DEVICE_NAME_BUFFER_SIZE = 64
- NVML_DEVICE_NAME_V2_BUFFER_SIZE = 96
- NVML_DEVICE_SERIAL_BUFFER_SIZE = 30
- NVML_DEVICE_PART_NUMBER_BUFFER_SIZE = 80
- NVML_DEVICE_GPU_PART_NUMBER_BUFFER_SIZE = 80
- NVML_DEVICE_VBIOS_VERSION_BUFFER_SIZE = 32
- NVML_DEVICE_PCI_BUS_ID_BUFFER_SIZE = 32
- NVML_DEVICE_PCI_BUS_ID_BUFFER_V2_SIZE = 16
- NVML_GRID_LICENSE_BUFFER_SIZE = 128
- NVML_VGPU_NAME_BUFFER_SIZE = 64
- NVML_GRID_LICENSE_FEATURE_MAX_COUNT = 3
- NVML_VGPU_METADATA_OPAQUE_DATA_SIZE = sizeof(c_uint) + 256
- NVML_VGPU_PGPU_METADATA_OPAQUE_DATA_SIZE = 256
- NVML_DEVICE_GPU_FRU_PART_NUMBER_BUFFER_SIZE = 0x14 # NV2080_GPU_MAX_PRODUCT_PART_NUMBER_LENGTH
- NVML_PERF_MODES_BUFFER_SIZE = 2048
- # Format strings
- NVML_DEVICE_PCI_BUS_ID_LEGACY_FMT = "%04X:%02X:%02X.0"
- NVML_DEVICE_PCI_BUS_ID_FMT = "%08X:%02X:%02X.0"
- NVML_VALUE_NOT_AVAILABLE_ulonglong = c_ulonglong(-1)
- NVML_VALUE_NOT_AVAILABLE_uint = c_uint(-1)
- '''
- Field Identifiers.
- All Identifiers pertain to a device. Each ID is only used once and is guaranteed never to change.
- '''
- NVML_FI_DEV_ECC_CURRENT = 1 # Current ECC mode. 1=Active. 0=Inactive
- NVML_FI_DEV_ECC_PENDING = 2 # Pending ECC mode. 1=Active. 0=Inactive
- #ECC Count Totals
- NVML_FI_DEV_ECC_SBE_VOL_TOTAL = 3 # Total single bit volatile ECC errors
- NVML_FI_DEV_ECC_DBE_VOL_TOTAL = 4 # Total double bit volatile ECC errors
- NVML_FI_DEV_ECC_SBE_AGG_TOTAL = 5 # Total single bit aggregate (persistent) ECC errors
- NVML_FI_DEV_ECC_DBE_AGG_TOTAL = 6 # Total double bit aggregate (persistent) ECC errors
- #Individual ECC locations
- NVML_FI_DEV_ECC_SBE_VOL_L1 = 7 # L1 cache single bit volatile ECC errors
- NVML_FI_DEV_ECC_DBE_VOL_L1 = 8 # L1 cache double bit volatile ECC errors
- NVML_FI_DEV_ECC_SBE_VOL_L2 = 9 # L2 cache single bit volatile ECC errors
- NVML_FI_DEV_ECC_DBE_VOL_L2 = 10 # L2 cache double bit volatile ECC errors
- NVML_FI_DEV_ECC_SBE_VOL_DEV = 11 # Device memory single bit volatile ECC errors
- NVML_FI_DEV_ECC_DBE_VOL_DEV = 12 # Device memory double bit volatile ECC errors
- NVML_FI_DEV_ECC_SBE_VOL_REG = 13 # Register file single bit volatile ECC errors
- NVML_FI_DEV_ECC_DBE_VOL_REG = 14 # Register file double bit volatile ECC errors
- NVML_FI_DEV_ECC_SBE_VOL_TEX = 15 # Texture memory single bit volatile ECC errors
- NVML_FI_DEV_ECC_DBE_VOL_TEX = 16 # Texture memory double bit volatile ECC errors
- NVML_FI_DEV_ECC_DBE_VOL_CBU = 17 # CBU double bit volatile ECC errors
- NVML_FI_DEV_ECC_SBE_AGG_L1 = 18 # L1 cache single bit aggregate (persistent) ECC errors
- NVML_FI_DEV_ECC_DBE_AGG_L1 = 19 # L1 cache double bit aggregate (persistent) ECC errors
- NVML_FI_DEV_ECC_SBE_AGG_L2 = 20 # L2 cache single bit aggregate (persistent) ECC errors
- NVML_FI_DEV_ECC_DBE_AGG_L2 = 21 # L2 cache double bit aggregate (persistent) ECC errors
- NVML_FI_DEV_ECC_SBE_AGG_DEV = 22 # Device memory single bit aggregate (persistent) ECC errors
- NVML_FI_DEV_ECC_DBE_AGG_DEV = 23 # Device memory double bit aggregate (persistent) ECC errors
- NVML_FI_DEV_ECC_SBE_AGG_REG = 24 # Register File single bit aggregate (persistent) ECC errors
- NVML_FI_DEV_ECC_DBE_AGG_REG = 25 # Register File double bit aggregate (persistent) ECC errors
- NVML_FI_DEV_ECC_SBE_AGG_TEX = 26 # Texture memory single bit aggregate (persistent) ECC errors
- NVML_FI_DEV_ECC_DBE_AGG_TEX = 27 # Texture memory double bit aggregate (persistent) ECC errors
- NVML_FI_DEV_ECC_DBE_AGG_CBU = 28 # CBU double bit aggregate ECC errors
- # Page Retirement
- NVML_FI_DEV_RETIRED_SBE = 29 # Number of retired pages because of single bit errors
- NVML_FI_DEV_RETIRED_DBE = 30 # Number of retired pages because of double bit errors
- NVML_FI_DEV_RETIRED_PENDING = 31 # If any pages are pending retirement. 1=yes. 0=no.
- # NvLink Flit Error Counters
- NVML_FI_DEV_NVLINK_CRC_FLIT_ERROR_COUNT_L0 = 32 # NVLink flow control CRC Error Counter for Lane 0
- NVML_FI_DEV_NVLINK_CRC_FLIT_ERROR_COUNT_L1 = 33 # NVLink flow control CRC Error Counter for Lane 1
- NVML_FI_DEV_NVLINK_CRC_FLIT_ERROR_COUNT_L2 = 34 # NVLink flow control CRC Error Counter for Lane 2
- NVML_FI_DEV_NVLINK_CRC_FLIT_ERROR_COUNT_L3 = 35 # NVLink flow control CRC Error Counter for Lane 3
- NVML_FI_DEV_NVLINK_CRC_FLIT_ERROR_COUNT_L4 = 36 # NVLink flow control CRC Error Counter for Lane 4
- NVML_FI_DEV_NVLINK_CRC_FLIT_ERROR_COUNT_L5 = 37 # NVLink flow control CRC Error Counter for Lane 5
- NVML_FI_DEV_NVLINK_CRC_FLIT_ERROR_COUNT_TOTAL = 38 # NVLink flow control CRC Error Counter total for all Lanes
- # NvLink CRC Data Error Counters
- NVML_FI_DEV_NVLINK_CRC_DATA_ERROR_COUNT_L0 = 39 # NVLink data CRC Error Counter for Lane 0
- NVML_FI_DEV_NVLINK_CRC_DATA_ERROR_COUNT_L1 = 40 # NVLink data CRC Error Counter for Lane 1
- NVML_FI_DEV_NVLINK_CRC_DATA_ERROR_COUNT_L2 = 41 # NVLink data CRC Error Counter for Lane 2
- NVML_FI_DEV_NVLINK_CRC_DATA_ERROR_COUNT_L3 = 42 # NVLink data CRC Error Counter for Lane 3
- NVML_FI_DEV_NVLINK_CRC_DATA_ERROR_COUNT_L4 = 43 # NVLink data CRC Error Counter for Lane 4
- NVML_FI_DEV_NVLINK_CRC_DATA_ERROR_COUNT_L5 = 44 # NVLink data CRC Error Counter for Lane 5
- NVML_FI_DEV_NVLINK_CRC_DATA_ERROR_COUNT_TOTAL = 45 # NvLink data CRC Error Counter total for all Lanes
- # NvLink Replay Error Counters
- NVML_FI_DEV_NVLINK_REPLAY_ERROR_COUNT_L0 = 46 # NVLink Replay Error Counter for Lane 0
- NVML_FI_DEV_NVLINK_REPLAY_ERROR_COUNT_L1 = 47 # NVLink Replay Error Counter for Lane 1
- NVML_FI_DEV_NVLINK_REPLAY_ERROR_COUNT_L2 = 48 # NVLink Replay Error Counter for Lane 2
- NVML_FI_DEV_NVLINK_REPLAY_ERROR_COUNT_L3 = 49 # NVLink Replay Error Counter for Lane 3
- NVML_FI_DEV_NVLINK_REPLAY_ERROR_COUNT_L4 = 50 # NVLink Replay Error Counter for Lane 4
- NVML_FI_DEV_NVLINK_REPLAY_ERROR_COUNT_L5 = 51 # NVLink Replay Error Counter for Lane 5
- NVML_FI_DEV_NVLINK_REPLAY_ERROR_COUNT_TOTAL = 52 # NVLink Replay Error Counter total for all Lanes
- # NvLink Recovery Error Counters
- NVML_FI_DEV_NVLINK_RECOVERY_ERROR_COUNT_L0 = 53 # NVLink Recovery Error Counter for Lane 0
- NVML_FI_DEV_NVLINK_RECOVERY_ERROR_COUNT_L1 = 54 # NVLink Recovery Error Counter for Lane 1
- NVML_FI_DEV_NVLINK_RECOVERY_ERROR_COUNT_L2 = 55 # NVLink Recovery Error Counter for Lane 2
- NVML_FI_DEV_NVLINK_RECOVERY_ERROR_COUNT_L3 = 56 # NVLink Recovery Error Counter for Lane 3
- NVML_FI_DEV_NVLINK_RECOVERY_ERROR_COUNT_L4 = 57 # NVLink Recovery Error Counter for Lane 4
- NVML_FI_DEV_NVLINK_RECOVERY_ERROR_COUNT_L5 = 58 # NVLink Recovery Error Counter for Lane 5
- NVML_FI_DEV_NVLINK_RECOVERY_ERROR_COUNT_TOTAL = 59 # NVLink Recovery Error Counter total for all Lanes
- # NvLink Bandwidth Counters
- NVML_FI_DEV_NVLINK_BANDWIDTH_C0_L0 = 60 # NVLink Bandwidth Counter for Counter Set 0, Lane 0
- NVML_FI_DEV_NVLINK_BANDWIDTH_C0_L1 = 61 # NVLink Bandwidth Counter for Counter Set 0, Lane 1
- NVML_FI_DEV_NVLINK_BANDWIDTH_C0_L2 = 62 # NVLink Bandwidth Counter for Counter Set 0, Lane 2
- NVML_FI_DEV_NVLINK_BANDWIDTH_C0_L3 = 63 # NVLink Bandwidth Counter for Counter Set 0, Lane 3
- NVML_FI_DEV_NVLINK_BANDWIDTH_C0_L4 = 64 # NVLink Bandwidth Counter for Counter Set 0, Lane 4
- NVML_FI_DEV_NVLINK_BANDWIDTH_C0_L5 = 65 # NVLink Bandwidth Counter for Counter Set 0, Lane 5
- NVML_FI_DEV_NVLINK_BANDWIDTH_C0_TOTAL = 66 # NVLink Bandwidth Counter Total for Counter Set 0, All Lanes
- # NvLink Bandwidth Counters
- NVML_FI_DEV_NVLINK_BANDWIDTH_C1_L0 = 67 # NVLink Bandwidth Counter for Counter Set 1, Lane 0
- NVML_FI_DEV_NVLINK_BANDWIDTH_C1_L1 = 68 # NVLink Bandwidth Counter for Counter Set 1, Lane 1
- NVML_FI_DEV_NVLINK_BANDWIDTH_C1_L2 = 69 # NVLink Bandwidth Counter for Counter Set 1, Lane 2
- NVML_FI_DEV_NVLINK_BANDWIDTH_C1_L3 = 70 # NVLink Bandwidth Counter for Counter Set 1, Lane 3
- NVML_FI_DEV_NVLINK_BANDWIDTH_C1_L4 = 71 # NVLink Bandwidth Counter for Counter Set 1, Lane 4
- NVML_FI_DEV_NVLINK_BANDWIDTH_C1_L5 = 72 # NVLink Bandwidth Counter for Counter Set 1, Lane 5
- NVML_FI_DEV_NVLINK_BANDWIDTH_C1_TOTAL = 73 # NVLink Bandwidth Counter Total for Counter Set 1, All Lanes
- # Perf Policy Counters
- NVML_FI_DEV_PERF_POLICY_POWER = 74 # Perf Policy Counter for Power Policy
- NVML_FI_DEV_PERF_POLICY_THERMAL = 75 # Perf Policy Counter for Thermal Policy
- NVML_FI_DEV_PERF_POLICY_SYNC_BOOST = 76 # Perf Policy Counter for Sync boost Policy
- NVML_FI_DEV_PERF_POLICY_BOARD_LIMIT = 77 # Perf Policy Counter for Board Limit
- NVML_FI_DEV_PERF_POLICY_LOW_UTILIZATION = 78 # Perf Policy Counter for Low GPU Utilization Policy
- NVML_FI_DEV_PERF_POLICY_RELIABILITY = 79 # Perf Policy Counter for Reliability Policy
- NVML_FI_DEV_PERF_POLICY_TOTAL_APP_CLOCKS = 80 # Perf Policy Counter for Total App Clock Policy
- NVML_FI_DEV_PERF_POLICY_TOTAL_BASE_CLOCKS = 81 # Perf Policy Counter for Total Base Clocks Policy
- # Memory temperatures
- NVML_FI_DEV_MEMORY_TEMP = 82 # Memory temperature for the device
- # Energy Counter
- NVML_FI_DEV_TOTAL_ENERGY_CONSUMPTION = 83 # Total energy consumption for the GPU in mJ since the driver was last reloaded
- # NVLink Speed
- NVML_FI_DEV_NVLINK_SPEED_MBPS_L0 = 84
- NVML_FI_DEV_NVLINK_SPEED_MBPS_L1 = 85
- NVML_FI_DEV_NVLINK_SPEED_MBPS_L2 = 86
- NVML_FI_DEV_NVLINK_SPEED_MBPS_L3 = 87
- NVML_FI_DEV_NVLINK_SPEED_MBPS_L4 = 88
- NVML_FI_DEV_NVLINK_SPEED_MBPS_L5 = 89
- NVML_FI_DEV_NVLINK_SPEED_MBPS_COMMON = 90
- # NVLink Link Count
- NVML_FI_DEV_NVLINK_LINK_COUNT = 91
- # Page Retirement pending fields
- NVML_FI_DEV_RETIRED_PENDING_SBE = 92
- NVML_FI_DEV_RETIRED_PENDING_DBE = 93
- # PCIe replay and replay rollover counters
- NVML_FI_DEV_PCIE_REPLAY_COUNTER = 94
- NVML_FI_DEV_PCIE_REPLAY_ROLLOVER_COUNTER = 95
- # NvLink Flit Error Counters
- NVML_FI_DEV_NVLINK_CRC_FLIT_ERROR_COUNT_L6 = 96 # NVLink flow control CRC Error Counter for Lane 6
- NVML_FI_DEV_NVLINK_CRC_FLIT_ERROR_COUNT_L7 = 97 # NVLink flow control CRC Error Counter for Lane 7
- NVML_FI_DEV_NVLINK_CRC_FLIT_ERROR_COUNT_L8 = 98 # NVLink flow control CRC Error Counter for Lane 8
- NVML_FI_DEV_NVLINK_CRC_FLIT_ERROR_COUNT_L9 = 99 # NVLink flow control CRC Error Counter for Lane 9
- NVML_FI_DEV_NVLINK_CRC_FLIT_ERROR_COUNT_L10 = 100 # NVLink flow control CRC Error Counter for Lane 10
- NVML_FI_DEV_NVLINK_CRC_FLIT_ERROR_COUNT_L11 = 101 # NVLink flow control CRC Error Counter for Lane 11
- # NvLink CRC Data Error Counters
- NVML_FI_DEV_NVLINK_CRC_DATA_ERROR_COUNT_L6 = 102 # NVLink data CRC Error Counter for Lane 6
- NVML_FI_DEV_NVLINK_CRC_DATA_ERROR_COUNT_L7 = 103 # NVLink data CRC Error Counter for Lane 7
- NVML_FI_DEV_NVLINK_CRC_DATA_ERROR_COUNT_L8 = 104 # NVLink data CRC Error Counter for Lane 8
- NVML_FI_DEV_NVLINK_CRC_DATA_ERROR_COUNT_L9 = 105 # NVLink data CRC Error Counter for Lane 9
- NVML_FI_DEV_NVLINK_CRC_DATA_ERROR_COUNT_L10 = 106 # NVLink data CRC Error Counter for Lane 10
- NVML_FI_DEV_NVLINK_CRC_DATA_ERROR_COUNT_L11 = 107 # NVLink data CRC Error Counter for Lane 11
- # NvLink Replay Error Counters
- NVML_FI_DEV_NVLINK_REPLAY_ERROR_COUNT_L6 = 108 # NVLink Replay Error Counter for Lane 6
- NVML_FI_DEV_NVLINK_REPLAY_ERROR_COUNT_L7 = 109 # NVLink Replay Error Counter for Lane 7
- NVML_FI_DEV_NVLINK_REPLAY_ERROR_COUNT_L8 = 110 # NVLink Replay Error Counter for Lane 8
- NVML_FI_DEV_NVLINK_REPLAY_ERROR_COUNT_L9 = 111 # NVLink Replay Error Counter for Lane 9
- NVML_FI_DEV_NVLINK_REPLAY_ERROR_COUNT_L10 = 112 # NVLink Replay Error Counter for Lane 10
- NVML_FI_DEV_NVLINK_REPLAY_ERROR_COUNT_L11 = 113 # NVLink Replay Error Counter for Lane 11
- # NvLink Recovery Error Counters
- NVML_FI_DEV_NVLINK_RECOVERY_ERROR_COUNT_L6 = 114 # NVLink Recovery Error Counter for Lane 6
- NVML_FI_DEV_NVLINK_RECOVERY_ERROR_COUNT_L7 = 115 # NVLink Recovery Error Counter for Lane 7
- NVML_FI_DEV_NVLINK_RECOVERY_ERROR_COUNT_L8 = 116 # NVLink Recovery Error Counter for Lane 8
- NVML_FI_DEV_NVLINK_RECOVERY_ERROR_COUNT_L9 = 117 # NVLink Recovery Error Counter for Lane 9
- NVML_FI_DEV_NVLINK_RECOVERY_ERROR_COUNT_L10 = 118 # NVLink Recovery Error Counter for Lane 10
- NVML_FI_DEV_NVLINK_RECOVERY_ERROR_COUNT_L11 = 119 # NVLink Recovery Error Counter for Lane 11
- # NvLink Bandwidth Counters
- NVML_FI_DEV_NVLINK_BANDWIDTH_C0_L6 = 120 # NVLink Bandwidth Counter for Counter Set 0, Lane 6
- NVML_FI_DEV_NVLINK_BANDWIDTH_C0_L7 = 121 # NVLink Bandwidth Counter for Counter Set 0, Lane 7
- NVML_FI_DEV_NVLINK_BANDWIDTH_C0_L8 = 122 # NVLink Bandwidth Counter for Counter Set 0, Lane 8
- NVML_FI_DEV_NVLINK_BANDWIDTH_C0_L9 = 123 # NVLink Bandwidth Counter for Counter Set 0, Lane 9
- NVML_FI_DEV_NVLINK_BANDWIDTH_C0_L10 = 124 # NVLink Bandwidth Counter for Counter Set 0, Lane 10
- NVML_FI_DEV_NVLINK_BANDWIDTH_C0_L11 = 125 # NVLink Bandwidth Counter for Counter Set 0, Lane 11
- # NvLink Bandwidth Counters
- NVML_FI_DEV_NVLINK_BANDWIDTH_C1_L6 = 126 # NVLink Bandwidth Counter for Counter Set 1, Lane 6
- NVML_FI_DEV_NVLINK_BANDWIDTH_C1_L7 = 127 # NVLink Bandwidth Counter for Counter Set 1, Lane 7
- NVML_FI_DEV_NVLINK_BANDWIDTH_C1_L8 = 128 # NVLink Bandwidth Counter for Counter Set 1, Lane 8
- NVML_FI_DEV_NVLINK_BANDWIDTH_C1_L9 = 129 # NVLink Bandwidth Counter for Counter Set 1, Lane 9
- NVML_FI_DEV_NVLINK_BANDWIDTH_C1_L10 = 130 # NVLink Bandwidth Counter for Counter Set 1, Lane 10
- NVML_FI_DEV_NVLINK_BANDWIDTH_C1_L11 = 131 # NVLink Bandwidth Counter for Counter Set 1, Lane 11
- # NVLink Speed
- NVML_FI_DEV_NVLINK_SPEED_MBPS_L6 = 132
- NVML_FI_DEV_NVLINK_SPEED_MBPS_L7 = 133
- NVML_FI_DEV_NVLINK_SPEED_MBPS_L8 = 134
- NVML_FI_DEV_NVLINK_SPEED_MBPS_L9 = 135
- NVML_FI_DEV_NVLINK_SPEED_MBPS_L10 = 136
- NVML_FI_DEV_NVLINK_SPEED_MBPS_L11 = 137
- # NVLink Throughput Counters
- NVML_FI_DEV_NVLINK_THROUGHPUT_DATA_TX = 138 # NVLink TX Data throughput in KiB
- NVML_FI_DEV_NVLINK_THROUGHPUT_DATA_RX = 139 # NVLink RX Data throughput in KiB
- NVML_FI_DEV_NVLINK_THROUGHPUT_RAW_TX = 140 # NVLink TX Data + protocol overhead in KiB
- NVML_FI_DEV_NVLINK_THROUGHPUT_RAW_RX = 141 # NVLink RX Data + protocol overhead in KiB
- # Row Remapper
- NVML_FI_DEV_REMAPPED_COR = 142
- NVML_FI_DEV_REMAPPED_UNC = 143
- NVML_FI_DEV_REMAPPED_PENDING = 144
- NVML_FI_DEV_REMAPPED_FAILURE = 145
- #Remote device NVLink ID
- NVML_FI_DEV_NVLINK_REMOTE_NVLINK_ID = 146
- # Number of NVLinks connected to NVSwitch
- NVML_FI_DEV_NVSWITCH_CONNECTED_LINK_COUNT = 147
- # NvLink ECC Data Error Counters
- NVML_FI_DEV_NVLINK_ECC_DATA_ERROR_COUNT_L0 = 148 #< NVLink data ECC Error Counter for Link 0
- NVML_FI_DEV_NVLINK_ECC_DATA_ERROR_COUNT_L1 = 149 #< NVLink data ECC Error Counter for Link 1
- NVML_FI_DEV_NVLINK_ECC_DATA_ERROR_COUNT_L2 = 150 #< NVLink data ECC Error Counter for Link 2
- NVML_FI_DEV_NVLINK_ECC_DATA_ERROR_COUNT_L3 = 151 #< NVLink data ECC Error Counter for Link 3
- NVML_FI_DEV_NVLINK_ECC_DATA_ERROR_COUNT_L4 = 152 #< NVLink data ECC Error Counter for Link 4
- NVML_FI_DEV_NVLINK_ECC_DATA_ERROR_COUNT_L5 = 153 #< NVLink data ECC Error Counter for Link 5
- NVML_FI_DEV_NVLINK_ECC_DATA_ERROR_COUNT_L6 = 154 #< NVLink data ECC Error Counter for Link 6
- NVML_FI_DEV_NVLINK_ECC_DATA_ERROR_COUNT_L7 = 155 #< NVLink data ECC Error Counter for Link 7
- NVML_FI_DEV_NVLINK_ECC_DATA_ERROR_COUNT_L8 = 156 #< NVLink data ECC Error Counter for Link 8
- NVML_FI_DEV_NVLINK_ECC_DATA_ERROR_COUNT_L9 = 157 #< NVLink data ECC Error Counter for Link 9
- NVML_FI_DEV_NVLINK_ECC_DATA_ERROR_COUNT_L10 = 158 #< NVLink data ECC Error Counter for Link 10
- NVML_FI_DEV_NVLINK_ECC_DATA_ERROR_COUNT_L11 = 159 #< NVLink data ECC Error Counter for Link 11
- NVML_FI_DEV_NVLINK_ECC_DATA_ERROR_COUNT_TOTAL = 160 #< NvLink data ECC Error Counter total for all Links
- NVML_FI_DEV_NVLINK_ERROR_DL_REPLAY = 161
- NVML_FI_DEV_NVLINK_ERROR_DL_RECOVERY = 162
- NVML_FI_DEV_NVLINK_ERROR_DL_CRC = 163
- NVML_FI_DEV_NVLINK_GET_SPEED = 164
- NVML_FI_DEV_NVLINK_GET_STATE = 165
- NVML_FI_DEV_NVLINK_GET_VERSION = 166
- NVML_FI_DEV_NVLINK_GET_POWER_STATE = 167
- NVML_FI_DEV_NVLINK_GET_POWER_THRESHOLD = 168
- NVML_FI_DEV_PCIE_L0_TO_RECOVERY_COUNTER = 169
- NVML_FI_DEV_C2C_LINK_COUNT = 170
- NVML_FI_DEV_C2C_LINK_GET_STATUS = 171
- NVML_FI_DEV_C2C_LINK_GET_MAX_BW = 172
- NVML_FI_DEV_PCIE_COUNT_CORRECTABLE_ERRORS = 173
- NVML_FI_DEV_PCIE_COUNT_NAKS_RECEIVED = 174
- NVML_FI_DEV_PCIE_COUNT_RECEIVER_ERROR = 175
- NVML_FI_DEV_PCIE_COUNT_BAD_TLP = 176
- NVML_FI_DEV_PCIE_COUNT_NAKS_SENT = 177
- NVML_FI_DEV_PCIE_COUNT_BAD_DLLP = 178
- NVML_FI_DEV_PCIE_COUNT_NON_FATAL_ERROR = 179
- NVML_FI_DEV_PCIE_COUNT_FATAL_ERROR = 180
- NVML_FI_DEV_PCIE_COUNT_UNSUPPORTED_REQ = 181
- NVML_FI_DEV_PCIE_COUNT_LCRC_ERROR = 182
- NVML_FI_DEV_PCIE_COUNT_LANE_ERROR = 183
- NVML_FI_DEV_IS_RESETLESS_MIG_SUPPORTED = 184
- NVML_FI_DEV_POWER_AVERAGE = 185
- NVML_FI_DEV_POWER_INSTANT = 186
- NVML_FI_DEV_POWER_MIN_LIMIT = 187
- NVML_FI_DEV_POWER_MAX_LIMIT = 188
- NVML_FI_DEV_POWER_DEFAULT_LIMIT = 189
- NVML_FI_DEV_POWER_CURRENT_LIMIT = 190
- NVML_FI_DEV_ENERGY = 191
- NVML_FI_DEV_POWER_REQUESTED_LIMIT = 192
- NVML_FI_DEV_TEMPERATURE_SHUTDOWN_TLIMIT = 193
- NVML_FI_DEV_TEMPERATURE_SLOWDOWN_TLIMIT = 194
- NVML_FI_DEV_TEMPERATURE_MEM_MAX_TLIMIT = 195
- NVML_FI_DEV_TEMPERATURE_GPU_MAX_TLIMIT = 196
- NVML_FI_DEV_PCIE_COUNT_TX_BYTES = 197
- NVML_FI_DEV_PCIE_COUNT_RX_BYTES = 198
- NVML_FI_DEV_IS_MIG_MODE_INDEPENDENT_MIG_QUERY_CAPABLE = 199
- NVML_FI_DEV_NVLINK_GET_POWER_THRESHOLD_MAX = 200
- NVML_FI_DEV_NVLINK_COUNT_XMIT_PACKETS = 201
- NVML_FI_DEV_NVLINK_COUNT_XMIT_BYTES = 202
- NVML_FI_DEV_NVLINK_COUNT_RCV_PACKETS = 203
- NVML_FI_DEV_NVLINK_COUNT_RCV_BYTES = 204
- NVML_FI_DEV_NVLINK_COUNT_VL15_DROPPED = 205 # Deprecated, do not use
- NVML_FI_DEV_NVLINK_COUNT_MALFORMED_PACKET_ERRORS = 206
- NVML_FI_DEV_NVLINK_COUNT_BUFFER_OVERRUN_ERRORS = 207
- NVML_FI_DEV_NVLINK_COUNT_RCV_ERRORS = 208
- NVML_FI_DEV_NVLINK_COUNT_RCV_REMOTE_ERRORS = 209
- NVML_FI_DEV_NVLINK_COUNT_RCV_GENERAL_ERRORS = 210
- NVML_FI_DEV_NVLINK_COUNT_LOCAL_LINK_INTEGRITY_ERRORS = 211
- NVML_FI_DEV_NVLINK_COUNT_XMIT_DISCARDS = 212
- NVML_FI_DEV_NVLINK_COUNT_LINK_RECOVERY_SUCCESSFUL_EVENTS = 213
- NVML_FI_DEV_NVLINK_COUNT_LINK_RECOVERY_FAILED_EVENTS = 214
- NVML_FI_DEV_NVLINK_COUNT_LINK_RECOVERY_EVENTS = 215
- NVML_FI_DEV_NVLINK_COUNT_RAW_BER_LANE0 = 216 # Deprecated, do not use
- NVML_FI_DEV_NVLINK_COUNT_RAW_BER_LANE1 = 217 # Deprecated, do not use
- NVML_FI_DEV_NVLINK_COUNT_RAW_BER = 218 # Deprecated, do not use
- NVML_FI_DEV_NVLINK_COUNT_EFFECTIVE_ERRORS = 219
- NVML_FI_DEV_NVLINK_COUNT_EFFECTIVE_BER = 220
- NVML_FI_DEV_NVLINK_COUNT_SYMBOL_ERRORS = 221
- NVML_FI_DEV_NVLINK_COUNT_SYMBOL_BER = 222
- NVML_FI_DEV_NVLINK_GET_POWER_THRESHOLD_MIN = 223
- NVML_FI_DEV_NVLINK_GET_POWER_THRESHOLD_UNITS = 224 # Values are in the form NVML_NVLINK_LOW_POWER_THRESHOLD_UNIT_*
- NVML_FI_DEV_NVLINK_GET_POWER_THRESHOLD_SUPPORTED = 225
- NVML_FI_DEV_RESET_STATUS = 226 # Deprecated use NVML_FI_DEV_GET_GPU_RECOVERY_ACTION instead
- NVML_FI_DEV_DRAIN_AND_RESET_STATUS = 227 # Deprecated use NVML_FI_DEV_GET_GPU_RECOVERY_ACTION instead
- NVML_FI_DEV_PCIE_OUTBOUND_ATOMICS_MASK = 228
- NVML_FI_DEV_PCIE_INBOUND_ATOMICS_MASK = 229
- NVML_FI_DEV_GET_GPU_RECOVERY_ACTION = 230
- NVML_FI_DEV_C2C_LINK_ERROR_INTR = 231
- NVML_FI_DEV_C2C_LINK_ERROR_REPLAY = 232
- NVML_FI_DEV_C2C_LINK_ERROR_REPLAY_B2B = 233
- NVML_FI_DEV_C2C_LINK_POWER_STATE = 234
- NVML_FI_DEV_NVLINK_COUNT_FEC_HISTORY_0 = 235
- NVML_FI_DEV_NVLINK_COUNT_FEC_HISTORY_1 = 236
- NVML_FI_DEV_NVLINK_COUNT_FEC_HISTORY_2 = 237
- NVML_FI_DEV_NVLINK_COUNT_FEC_HISTORY_3 = 238
- NVML_FI_DEV_NVLINK_COUNT_FEC_HISTORY_4 = 239
- NVML_FI_DEV_NVLINK_COUNT_FEC_HISTORY_5 = 240
- NVML_FI_DEV_NVLINK_COUNT_FEC_HISTORY_6 = 241
- NVML_FI_DEV_NVLINK_COUNT_FEC_HISTORY_7 = 242
- NVML_FI_DEV_NVLINK_COUNT_FEC_HISTORY_8 = 243
- NVML_FI_DEV_NVLINK_COUNT_FEC_HISTORY_9 = 244
- NVML_FI_DEV_NVLINK_COUNT_FEC_HISTORY_10 = 245
- NVML_FI_DEV_NVLINK_COUNT_FEC_HISTORY_11 = 246
- NVML_FI_DEV_NVLINK_COUNT_FEC_HISTORY_12 = 247
- NVML_FI_DEV_NVLINK_COUNT_FEC_HISTORY_13 = 248
- NVML_FI_DEV_NVLINK_COUNT_FEC_HISTORY_14 = 249
- NVML_FI_DEV_NVLINK_COUNT_FEC_HISTORY_15 = 250
- NVML_FI_DEV_CLOCKS_EVENT_REASON_SW_POWER_CAP = NVML_FI_DEV_PERF_POLICY_POWER
- NVML_FI_DEV_CLOCKS_EVENT_REASON_SYNC_BOOST = NVML_FI_DEV_PERF_POLICY_SYNC_BOOST
- NVML_FI_DEV_CLOCKS_EVENT_REASON_SW_THERM_SLOWDOWN = 251
- NVML_FI_DEV_CLOCKS_EVENT_REASON_HW_THERM_SLOWDOWN = 252
- NVML_FI_DEV_CLOCKS_EVENT_REASON_HW_POWER_BRAKE_SLOWDOWN = 253
- NVML_FI_DEV_POWER_SYNC_BALANCING_FREQ = 254
- NVML_FI_DEV_POWER_SYNC_BALANCING_AF = 255
- NVML_FI_PWR_SMOOTHING_ENABLED = 256 # Enablement (0/DISABLED or 1/ENABLED)
- NVML_FI_PWR_SMOOTHING_PRIV_LVL = 257 # Current privilege level
- NVML_FI_PWR_SMOOTHING_IMM_RAMP_DOWN_ENABLED = 258 # Immediate ramp down enablement (0/DISABLED or 1/ENABLED)
- NVML_FI_PWR_SMOOTHING_APPLIED_TMP_CEIL = 259 # Applied TMP ceiling value
- NVML_FI_PWR_SMOOTHING_APPLIED_TMP_FLOOR = 260 # Applied TMP floor value
- NVML_FI_PWR_SMOOTHING_MAX_PERCENT_TMP_FLOOR_SETTING = 261 # Max % TMP Floor value
- NVML_FI_PWR_SMOOTHING_MIN_PERCENT_TMP_FLOOR_SETTING = 262 # Min % TMP Floor value
- NVML_FI_PWR_SMOOTHING_HW_CIRCUITRY_PERCENT_LIFETIME_REMAINING = 263 # HW Circuitry % lifetime remaining
- NVML_FI_PWR_SMOOTHING_MAX_NUM_PRESET_PROFILES = 264 # Max number of preset profiles
- NVML_FI_PWR_SMOOTHING_PROFILE_PERCENT_TMP_FLOOR = 265 # % TMP floor for a given profile
- NVML_FI_PWR_SMOOTHING_PROFILE_RAMP_UP_RATE = 266 # Ramp up rate in mW/s for a given profile
- NVML_FI_PWR_SMOOTHING_PROFILE_RAMP_DOWN_RATE = 267 # Ramp down rate in mW/s for a given profile
- NVML_FI_PWR_SMOOTHING_PROFILE_RAMP_DOWN_HYST_VAL = 268 # Ramp down hysteresis value in ms for a given profile
- NVML_FI_PWR_SMOOTHING_ACTIVE_PRESET_PROFILE = 269 # Active preset profile number
- NVML_FI_PWR_SMOOTHING_ADMIN_OVERRIDE_PERCENT_TMP_FLOOR = 270 # % TMP floor for a given profile
- NVML_FI_PWR_SMOOTHING_ADMIN_OVERRIDE_RAMP_UP_RATE = 271 # Ramp up rate in mW/s for a given profile
- NVML_FI_PWR_SMOOTHING_ADMIN_OVERRIDE_RAMP_DOWN_RATE = 272 # Ramp down rate in mW/s for a given profile
- NVML_FI_PWR_SMOOTHING_ADMIN_OVERRIDE_RAMP_DOWN_HYST_VAL = 273 # Ramp down hysteresis value in ms for a given profile
- NVML_FI_MAX = 274 # One greater than the largest field ID defined above
- # NVML_FI_DEV_NVLINK_GET_STATE state enums
- NVML_NVLINK_STATE_INACTIVE = 0x0
- NVML_NVLINK_STATE_ACTIVE = 0x1
- NVML_NVLINK_STATE_SLEEP = 0x2
- NVML_NVLINK_LOW_POWER_THRESHOLD_UNIT_100US = 0 # NVML_FI_DEV_NVLINK_GET_POWER_THRESHOLD_UNITS
- NVML_NVLINK_LOW_POWER_THRESHOLD_UNIT_50US = 1 # NVML_FI_DEV_NVLINK_GET_POWER_THRESHOLD_UNITS
- # NVML_FI_DEV_C2C_LINK_POWER_STATE state enums
- NVML_C2C_POWER_STATE_FULL_POWER = 0
- NVML_C2C_POWER_STATE_LOW_POWER = 1
- ## Enums needed for the method nvmlDeviceGetVirtualizationMode and nvmlDeviceSetVirtualizationMode
- NVML_GPU_VIRTUALIZATION_MODE_NONE = 0 # Represents Bare Metal GPU
- NVML_GPU_VIRTUALIZATION_MODE_PASSTHROUGH = 1 # Device is associated with GPU-Passthorugh
- NVML_GPU_VIRTUALIZATION_MODE_VGPU = 2 # Device is associated with vGPU inside virtual machine.
- NVML_GPU_VIRTUALIZATION_MODE_HOST_VGPU = 3 # Device is associated with VGX hypervisor in vGPU mode
- NVML_GPU_VIRTUALIZATION_MODE_HOST_VSGA = 4 # Device is associated with VGX hypervisor in vSGA mode
- ## Lib loading ##
- nvmlLib = None
- libLoadLock = threading.Lock()
- _nvmlLib_refcount = 0 # Incremented on each nvmlInit and decremented on nvmlShutdown
- ## vGPU Management
- _nvmlVgpuTypeId_t = c_uint
- _nvmlVgpuInstance_t = c_uint
- _nvmlVgpuVmIdType_t = c_uint
- NVML_VGPU_VM_ID_DOMAIN_ID = 0
- NVML_VGPU_VM_ID_UUID = 1
- _nvmlGridLicenseFeatureCode_t = c_uint
- NVML_GRID_LICENSE_FEATURE_CODE_UNKNOWN = 0
- NVML_GRID_LICENSE_FEATURE_CODE_VGPU = 1
- NVML_GRID_LICENSE_FEATURE_CODE_NVIDIA_RTX = 2
- NVML_GRID_LICENSE_FEATURE_CODE_VWORKSTATION = 2 # deprecated, use NVML_GRID_LICENSE_FEATURE_CODE_NVIDIA_RTX.
- NVML_GRID_LICENSE_FEATURE_CODE_GAMING = 3
- NVML_GRID_LICENSE_FEATURE_CODE_COMPUTE = 4
- _nvmlGridLicenseExpiryStatus_t = c_uint8
- NVML_GRID_LICENSE_EXPIRY_NOT_AVAILABLE = 0, # Expiry information not available
- NVML_GRID_LICENSE_EXPIRY_INVALID = 1, # Invalid expiry or error fetching expiry
- NVML_GRID_LICENSE_EXPIRY_VALID = 2, # Valid expiry
- NVML_GRID_LICENSE_EXPIRY_NOT_APPLICABLE = 3, # Expiry not applicable
- NVML_GRID_LICENSE_EXPIRY_PERMANENT = 4, # Permanent expiry
- _nvmlVgpuCapability_t = c_uint
- NVML_VGPU_CAP_NVLINK_P2P = 0 # vGPU P2P over NVLink is supported
- NVML_VGPU_CAP_GPUDIRECT = 1 # GPUDirect capability is supported
- NVML_VGPU_CAP_MULTI_VGPU_EXCLUSIVE = 2 # vGPU profile cannot be mixed with other vGPU profiles in same VM
- NVML_VGPU_CAP_EXCLUSIVE_TYPE = 3 # vGPU profile cannot run on a GPU alongside other profiles of different type
- NVML_VGPU_CAP_EXCLUSIVE_SIZE = 4 # vGPU profile cannot run on a GPU alongside other profiles of different size
- NVML_VGPU_CAP_COUNT = 5
- _nvmlVgpuDriverCapability_t = c_uint
- NVML_VGPU_DRIVER_CAP_HETEROGENEOUS_MULTI_VGPU = 0 # Supports mixing of different vGPU profiles within one guest VM
- NVML_VGPU_DRIVER_CAP_WARM_UPDATE = 1 # Supports FSR and warm update of vGPU host driver without terminating the running guest VM
- NVML_VGPU_DRIVER_CAP_COUNT = 2
- _nvmlDeviceVgpuCapability_t = c_uint
- NVML_DEVICE_VGPU_CAP_FRACTIONAL_MULTI_VGPU = 0 # Query whether the fractional vGPU profiles on this GPU can be used in multi-vGPU configurations
- NVML_DEVICE_VGPU_CAP_HETEROGENEOUS_TIMESLICE_PROFILES = 1 # Query whether the GPU supports concurrent execution of timesliced vGPU profiles of differing types
- NVML_DEVICE_VGPU_CAP_HETEROGENEOUS_TIMESLICE_SIZES = 2 # Query whether the GPU supports concurrent execution of timesliced vGPU profiles of differing framebuffer sizes
- NVML_DEVICE_VGPU_CAP_READ_DEVICE_BUFFER_BW = 3 # Query the GPU's read_device_buffer expected bandwidth capacity in megabytes per second
- NVML_DEVICE_VGPU_CAP_WRITE_DEVICE_BUFFER_BW = 4 # Query the GPU's write_device_buffer expected bandwidth capacity in megabytes per second
- NVML_DEVICE_VGPU_CAP_DEVICE_STREAMING = 5 # Query whether the vGPU profiles on the GPU supports migration data streaming
- NVML_DEVICE_VGPU_CAP_MINI_QUARTER_GPU = 6 # Set/Get support of mini-quarter vGPU profiles
- NVML_DEVICE_VGPU_CAP_COMPUTE_MEDIA_ENGINE_GPU = 7 # Set/Get support for compute media engine vGPU profiles
- NVML_DEVICE_VGPU_CAP_WARM_UPDATE = 8 # Query whether the GPU supports FSR and warm update
- NVML_DEVICE_VGPU_CAP_HOMOGENEOUS_PLACEMENTS = 9 # Query whether the GPU supports reporting of placements of timesliced vGPU profiles with identical framebuffer sizes
- NVML_DEVICE_VGPU_CAP_MIG_TIMESLICING_SUPPORTED = 10 # Query whether the GPU supports timesliced vGPU on MIG
- NVML_DEVICE_VGPU_CAP_MIG_TIMESLICING_ENABLED = 11 # Set/Get MIG timesliced mode reporting, without impacting the underlying functionality
- NVML_DEVICE_VGPU_CAP_COUNT = 12
- _nvmlVgpuGuestInfoState_t = c_uint
- NVML_VGPU_INSTANCE_GUEST_INFO_STATE_UNINITIALIZED = 0
- NVML_VGPU_INSTANCE_GUEST_INFO_STATE_INITIALIZED = 1
- _nvmlVgpuVmCompatibility_t = c_uint
- NVML_VGPU_VM_COMPATIBILITY_NONE = 0x0
- NVML_VGPU_VM_COMPATIBILITY_COLD = 0x1
- NVML_VGPU_VM_COMPATIBILITY_HIBERNATE = 0x2
- NVML_VGPU_VM_COMPATIBILITY_SLEEP = 0x4
- NVML_VGPU_VM_COMPATIBILITY_LIVE = 0x8
- _nvmlVgpuPgpuCompatibilityLimitCode_t = c_uint
- NVML_VGPU_COMPATIBILITY_LIMIT_NONE = 0x0
- NVML_VGPU_COMPATIBILITY_LIMIT_HOST_DRIVER = 0x1
- NVML_VGPU_COMPATIBILITY_LIMIT_GUEST_DRIVER = 0x2
- NVML_VGPU_COMPATIBILITY_LIMIT_GPU = 0x4
- NVML_VGPU_COMPATIBILITY_LIMIT_OTHER = 0x80000000
- _nvmlHostVgpuMode_t = c_uint
- NVML_HOST_VGPU_MODE_NON_SRIOV = 0
- NVML_HOST_VGPU_MODE_SRIOV = 1
- _nvmlConfComputeGpusReadyState_t = c_uint
- NVML_CC_ACCEPTING_CLIENT_REQUESTS_FALSE = 0
- NVML_CC_ACCEPTING_CLIENT_REQUESTS_TRUE = 1
- _nvmlConfComputeGpuCaps_t = c_uint
- NVML_CC_SYSTEM_GPUS_CC_NOT_CAPABLE = 0
- NVML_CC_SYSTEM_GPUS_CC_CAPABLE = 1
- _nvmlConfComputeCpuCaps_t = c_uint
- NVML_CC_SYSTEM_CPU_CAPS_NONE = 0
- NVML_CC_SYSTEM_CPU_CAPS_AMD_SEV = 1
- NVML_CC_SYSTEM_CPU_CAPS_INTEL_TDX = 2
- NVML_CC_SYSTEM_CPU_CAPS_AMD_SEV_SNP = 3
- NVML_CC_SYSTEM_CPU_CAPS_AMD_SNP_VTOM = 4
- _nvmlConfComputeDevToolsMode_t = c_uint
- NVML_CC_SYSTEM_DEVTOOLS_MODE_OFF = 0
- NVML_CC_SYSTEM_DEVTOOLS_MODE_ON = 1
- NVML_CC_SYSTEM_MULTIGPU_NONE = 0
- NVML_CC_SYSTEM_MULTIGPU_PROTECTED_PCIE = 1
- NVML_CC_SYSTEM_MULTIGPU_NVLE = 2
- NVML_CC_SYSTEM_ENVIRONMENT_UNAVAILABLE = 0
- NVML_CC_SYSTEM_ENVIRONMENT_SIM = 1
- NVML_CC_SYSTEM_ENVIRONMENT_PROD = 2
- _nvmlConfComputeCcFeature_t = c_uint
- NVML_CC_SYSTEM_FEATURE_DISABLED = 0
- NVML_CC_SYSTEM_FEATURE_ENABLED = 1
- _nvmlConfComputeCcKeyRotationThreshAttackerAdv_t = c_uint
- NVML_CC_KEY_ROTATION_THRESH_ATTACKER_ADVANTAGE_MIN = 50
- NVML_CC_KEY_ROTATION_THRESH_ATTACKER_ADVANTAGE_MAX = 65
- # GSP firmware
- NVML_GSP_FIRMWARE_VERSION_BUF_SIZE = 0x40
- class NVMLLibraryMismatchError(Exception):
- pass
- ## Error Checking ##
- class NVMLError(Exception):
- _valClassMapping = dict()
- # List of currently known error codes
- _errcode_to_string = {
- NVML_ERROR_UNINITIALIZED: "Uninitialized",
- NVML_ERROR_INVALID_ARGUMENT: "Invalid Argument",
- NVML_ERROR_NOT_SUPPORTED: "Not Supported",
- NVML_ERROR_NO_PERMISSION: "Insufficient Permissions",
- NVML_ERROR_ALREADY_INITIALIZED: "Already Initialized",
- NVML_ERROR_NOT_FOUND: "Not Found",
- NVML_ERROR_INSUFFICIENT_SIZE: "Insufficient Size",
- NVML_ERROR_INSUFFICIENT_POWER: "Insufficient External Power",
- NVML_ERROR_DRIVER_NOT_LOADED: "Driver Not Loaded",
- NVML_ERROR_TIMEOUT: "Timeout",
- NVML_ERROR_IRQ_ISSUE: "Interrupt Request Issue",
- NVML_ERROR_LIBRARY_NOT_FOUND: "NVML Shared Library Not Found",
- NVML_ERROR_FUNCTION_NOT_FOUND: "Function Not Found",
- NVML_ERROR_CORRUPTED_INFOROM: "Corrupted infoROM",
- NVML_ERROR_GPU_IS_LOST: "GPU is lost",
- NVML_ERROR_RESET_REQUIRED: "GPU requires restart",
- NVML_ERROR_OPERATING_SYSTEM: "The operating system has blocked the request.",
- NVML_ERROR_LIB_RM_VERSION_MISMATCH: "RM has detected an NVML/RM version mismatch.",
- NVML_ERROR_MEMORY: "Insufficient Memory",
- NVML_ERROR_UNKNOWN: "Unknown Error",
- }
- def __new__(typ, value):
- '''
- Maps value to a proper subclass of NVMLError.
- See _extractNVMLErrorsAsClasses function for more details
- '''
- if typ == NVMLError:
- typ = NVMLError._valClassMapping.get(value, typ)
- obj = Exception.__new__(typ)
- obj.value = value
- return obj
- def __str__(self):
- try:
- if self.value not in NVMLError._errcode_to_string:
- NVMLError._errcode_to_string[self.value] = str(nvmlErrorString(self.value))
- return NVMLError._errcode_to_string[self.value]
- except NVMLError:
- return "NVML Error with code %d" % self.value
- def __eq__(self, other):
- return self.value == other.value
- def nvmlExceptionClass(nvmlErrorCode):
- if nvmlErrorCode not in NVMLError._valClassMapping:
- raise ValueError('nvmlErrorCode %s is not valid' % nvmlErrorCode)
- return NVMLError._valClassMapping[nvmlErrorCode]
- def _extractNVMLErrorsAsClasses():
- '''
- Generates a hierarchy of classes on top of NVMLError class.
- Each NVML Error gets a new NVMLError subclass. This way try,except blocks can filter appropriate
- exceptions more easily.
- NVMLError is a parent class. Each NVML_ERROR_* gets it's own subclass.
- e.g. NVML_ERROR_ALREADY_INITIALIZED will be turned into NVMLError_AlreadyInitialized
- '''
- this_module = sys.modules[__name__]
- nvmlErrorsNames = [x for x in dir(this_module) if x.startswith("NVML_ERROR_")]
- for err_name in nvmlErrorsNames:
- # e.g. Turn NVML_ERROR_ALREADY_INITIALIZED into NVMLError_AlreadyInitialized
- class_name = "NVMLError_" + string.capwords(err_name.replace("NVML_ERROR_", ""), "_").replace("_", "")
- err_val = getattr(this_module, err_name)
- def gen_new(val):
- def new(typ, *args):
- obj = NVMLError.__new__(typ, val)
- return obj
- return new
- new_error_class = type(class_name, (NVMLError,), {'__new__': gen_new(err_val)})
- new_error_class.__module__ = __name__
- setattr(this_module, class_name, new_error_class)
- NVMLError._valClassMapping[err_val] = new_error_class
- _extractNVMLErrorsAsClasses()
- def _nvmlCheckReturn(ret):
- if (ret != NVML_SUCCESS):
- raise NVMLError(ret)
- return ret
- ## Function access ##
- _nvmlGetFunctionPointer_cache = dict() # function pointers are cached to prevent unnecessary libLoadLock locking
- def _nvmlGetFunctionPointer(name):
- global nvmlLib
- if name in _nvmlGetFunctionPointer_cache:
- return _nvmlGetFunctionPointer_cache[name]
- libLoadLock.acquire()
- try:
- # ensure library was loaded
- if (nvmlLib == None):
- raise NVMLError(NVML_ERROR_UNINITIALIZED)
- try:
- _nvmlGetFunctionPointer_cache[name] = getattr(nvmlLib, name)
- return _nvmlGetFunctionPointer_cache[name]
- except AttributeError:
- raise NVMLError(NVML_ERROR_FUNCTION_NOT_FOUND)
- finally:
- # lock is always freed
- libLoadLock.release()
- ## Alternative object
- # Allows the object to be printed
- # Allows mismatched types to be assigned
- # - like None when the Structure variant requires c_uint
- class nvmlFriendlyObject(object):
- def __init__(self, dictionary):
- for x in dictionary:
- setattr(self, x, dictionary[x])
- def __str__(self):
- return self.__dict__.__str__()
- def nvmlStructToFriendlyObject(struct):
- d = {}
- for x in struct._fields_:
- key = x[0]
- value = getattr(struct, key)
- # only need to convert from bytes if bytes, no need to check python version.
- d[key] = value.decode() if isinstance(value, bytes) else value
- obj = nvmlFriendlyObject(d)
- return obj
- # pack the object so it can be passed to the NVML library
- def nvmlFriendlyObjectToStruct(obj, model):
- for x in model._fields_:
- key = x[0]
- value = obj.__dict__[key]
- # any c_char_p in python3 needs to be bytes, default encoding works fine.
- if sys.version_info >= (3,):
- setattr(model, key, value.encode())
- else:
- setattr(model, key, value)
- return model
- ## Unit structures
- class struct_c_nvmlUnit_t(Structure):
- pass # opaque handle
- c_nvmlUnit_t = POINTER(struct_c_nvmlUnit_t)
- class _PrintableStructure(Structure):
- """
- Abstract class that produces nicer __str__ output than ctypes.Structure.
- e.g. instead of:
- <class_name object at 0x7fdf82fef9e0>
- this class will print
- class_name(field_name: formatted_value, field_name: formatted_value)
- _fmt_ dictionary of <str _field_ name> -> <str format>
- e.g. class that has _field_ 'hex_value', c_uint could be formatted with
- _fmt_ = {"hex_value" : "%08X"}
- to produce nicer output.
- Default fomratting string for all fields can be set with key "<default>" like:
- _fmt_ = {"<default>" : "%d MHz"} # e.g all values are numbers in MHz.
- If not set it's assumed to be just "%s"
- Exact format of returned str from this class is subject to change in the future.
- """
- _fmt_ = {}
- def __str__(self):
- result = []
- for x in self._fields_:
- key = x[0]
- value = getattr(self, key)
- fmt = "%s"
- if key in self._fmt_:
- fmt = self._fmt_[key]
- elif "<default>" in self._fmt_:
- fmt = self._fmt_["<default>"]
- result.append(("%s: " + fmt) % (key, value))
- return self.__class__.__name__ + "(" + ", ".join(result) + ")"
- def __getattribute__(self, name):
- res = super(_PrintableStructure, self).__getattribute__(name)
- # need to convert bytes to unicode for python3 don't need to for python2
- # Python 2 strings are of both str and bytes
- # Python 3 strings are not of type bytes
- # ctypes should convert everything to the correct values otherwise
- if isinstance(res, bytes):
- if isinstance(res, str):
- return res
- return res.decode()
- return res
- def __setattr__(self, name, value):
- if isinstance(value, str):
- # encoding a python2 string returns the same value, since python2 strings are bytes already
- # bytes passed in python3 will be ignored.
- value = value.encode()
- super(_PrintableStructure, self).__setattr__(name, value)
- class c_nvmlUnitInfo_t(_PrintableStructure):
- _fields_ = [
- ('name', c_char * 96),
- ('id', c_char * 96),
- ('serial', c_char * 96),
- ('firmwareVersion', c_char * 96),
- ]
- class c_nvmlC2cModeInfo_v1_t(_PrintableStructure):
- _fields_ = [
- ('isC2cEnabled', c_uint)
- ]
- nvmlC2cModeInfo_v1 = 0x1000008;
- class c_nvmlLedState_t(_PrintableStructure):
- _fields_ = [
- ('cause', c_char * 256),
- ('color', _nvmlLedColor_t),
- ]
- class c_nvmlPSUInfo_t(_PrintableStructure):
- _fields_ = [
- ('state', c_char * 256),
- ('current', c_uint),
- ('voltage', c_uint),
- ('power', c_uint),
- ]
- class c_nvmlUnitFanInfo_t(_PrintableStructure):
- _fields_ = [
- ('speed', c_uint),
- ('state', _nvmlFanState_t),
- ]
- class c_nvmlUnitFanSpeeds_t(_PrintableStructure):
- _fields_ = [
- ('fans', c_nvmlUnitFanInfo_t * 24),
- ('count', c_uint)
- ]
- ## Device structures
- class struct_c_nvmlDevice_t(Structure):
- pass # opaque handle
- c_nvmlDevice_t = POINTER(struct_c_nvmlDevice_t)
- class nvmlPciInfoExt_v1_t(_PrintableStructure):
- _fields_ = [
- ('version', c_uint),
- ('domain', c_uint),
- ('bus', c_uint),
- ('device', c_uint),
- ('pciDeviceId', c_uint),
- ('pciSubSystemId', c_uint),
- ('baseClass', c_uint),
- ('subClass', c_uint),
- ('busId', c_char * NVML_DEVICE_PCI_BUS_ID_BUFFER_SIZE),
- ]
- _fmt_ = {
- 'version' : "0x%04X",
- 'domain' : "0x%04X",
- 'bus' : "0x%02X",
- 'device' : "0x%02X",
- 'pciDeviceId' : "0x%08X",
- 'pciSubSystemId' : "0x%08X",
- 'baseClass' : "0x%01X",
- 'subClass' : "0x%01X",
- }
- nvmlPciInfoExt_v1 = 0x1000040
- # Legacy pciInfo used for _v1 and _v2
- class nvmlPciInfo_v2_t(_PrintableStructure):
- _fields_ = [
- ('busId', c_char * NVML_DEVICE_PCI_BUS_ID_BUFFER_V2_SIZE),
- ('domain', c_uint),
- ('bus', c_uint),
- ('device', c_uint),
- ('pciDeviceId', c_uint),
- # Added in 2.285
- ('pciSubSystemId', c_uint),
- ('reserved0', c_uint),
- ('reserved1', c_uint),
- ('reserved2', c_uint),
- ('reserved3', c_uint),
- ]
- _fmt_ = {
- 'domain' : "0x%04X",
- 'bus' : "0x%02X",
- 'device' : "0x%02X",
- 'pciDeviceId' : "0x%08X",
- 'pciSubSystemId' : "0x%08X",
- }
- class nvmlPciInfo_t(_PrintableStructure):
- _fields_ = [
- # Moved to the new busId location below
- ('busIdLegacy', c_char * NVML_DEVICE_PCI_BUS_ID_BUFFER_V2_SIZE),
- ('domain', c_uint),
- ('bus', c_uint),
- ('device', c_uint),
- ('pciDeviceId', c_uint),
- # Added in 2.285
- ('pciSubSystemId', c_uint),
- # New busId replaced the long deprecated and reserved fields with a
- # field of the same size in 9.0
- ('busId', c_char * NVML_DEVICE_PCI_BUS_ID_BUFFER_SIZE),
- ]
- _fmt_ = {
- 'domain' : "0x%08X",
- 'bus' : "0x%02X",
- 'device' : "0x%02X",
- 'pciDeviceId' : "0x%08X",
- 'pciSubSystemId' : "0x%08X",
- }
- class c_nvmlSystemDriverBranchInfo_v1_t(_PrintableStructure):
- _fields_ = [
- ('version', c_uint),
- ("branch", c_char * NVML_SYSTEM_DRIVER_VERSION_BUFFER_SIZE),
- ]
- SystemDriverBranchInfo_v1 = 0x1000054
- class c_nvmlExcludedDeviceInfo_t(_PrintableStructure):
- _fields_ = [
- ('pci', nvmlPciInfo_t),
- ('uuid', c_char * NVML_DEVICE_UUID_BUFFER_SIZE)
- ]
- class nvmlNvLinkUtilizationControl_t(_PrintableStructure):
- _fields_ = [
- ('units', _nvmlNvLinkUtilizationCountUnits_t),
- ('pktfilter', _nvmlNvLinkUtilizationCountPktTypes_t),
- ]
- class c_nvmlMemory_t(_PrintableStructure):
- _fields_ = [
- ('total', c_ulonglong),
- ('free', c_ulonglong),
- ('used', c_ulonglong),
- ]
- _fmt_ = {'<default>': "%d B"}
- class c_nvmlMemory_v2_t(_PrintableStructure):
- _fields_ = [
- ('version', c_uint),
- ('total', c_ulonglong),
- ('reserved', c_ulonglong),
- ('free', c_ulonglong),
- ('used', c_ulonglong),
- ]
- _fmt_ = {'<default>': "%d B"}
- nvmlMemory_v2 = 0x02000028
- class c_nvmlBAR1Memory_t(_PrintableStructure):
- _fields_ = [
- ('bar1Total', c_ulonglong),
- ('bar1Free', c_ulonglong),
- ('bar1Used', c_ulonglong),
- ]
- _fmt_ = {'<default>': "%d B"}
- class nvmlClkMonFaultInfo_t(Structure):
- _fields_ = [("clkApiDomain", c_uint),
- ("clkDomainFaultMask", c_uint)
- ]
- MAX_CLK_DOMAINS = 32
- class nvmlClkMonStatus_t(Structure):
- _fields_ = [("bGlobalStatus", c_uint),
- ("clkMonListSize", c_uint),
- ("clkMonList", nvmlClkMonFaultInfo_t * MAX_CLK_DOMAINS)
- ]
- # On Windows with the WDDM driver, usedGpuMemory is reported as None
- # Code that processes this structure should check for None, I.E.
- #
- # if (info.usedGpuMemory == None):
- # # TODO handle the error
- # pass
- # else:
- # print("Using %d MiB of memory" % (info.usedGpuMemory / 1024 / 1024))
- # endif
- #
- # See NVML documentation for more information
- class c_nvmlProcessInfo_v2_t(_PrintableStructure):
- _fields_ = [
- ('pid', c_uint),
- ('usedGpuMemory', c_ulonglong),
- ('gpuInstanceId', c_uint),
- ('computeInstanceId', c_uint),
- ]
- _fmt_ = {'usedGpuMemory': "%d B"}
- c_nvmlProcessInfo_v3_t = c_nvmlProcessInfo_v2_t
- c_nvmlProcessInfo_t = c_nvmlProcessInfo_v3_t
- _nvmlProcessMode_t = c_uint
- NVML_PROCESS_MODE_COMPUTE = 0
- NVML_PROCESS_MODE_GRAPHICS = 1
- NVML_PROCESS_MODE_MPS = 2
- class c_nvmlProcessDetail_v1_t(Structure):
- _fields_ = [
- ('pid', c_uint),
- ('usedGpuMemory', c_ulonglong),
- ('gpuInstanceId', c_uint),
- ('computeInstanceId', c_uint),
- ('usedGpuCcProtectedMemory', c_ulonglong),
- ]
- class c_nvmlProcessDetailList_v1_t(_PrintableStructure):
- _fields_ = [
- ('version', c_uint),
- ('mode', _nvmlProcessMode_t),
- ('numProcArrayEntries', c_uint),
- ('procArray', POINTER(c_nvmlProcessDetail_v1_t)),
- ]
- _fmt_ = {'numProcArrayEntries': "%d B"}
- c_nvmlProcessDetailList_t = c_nvmlProcessDetailList_v1_t
- nvmlProcessDetailList_v1 = 0x1000018
- class c_nvmlBridgeChipInfo_t(_PrintableStructure):
- _fields_ = [
- ('type', _nvmlBridgeChipType_t),
- ('fwVersion', c_uint),
- ]
- class c_nvmlBridgeChipHierarchy_t(_PrintableStructure):
- _fields_ = [
- ('bridgeCount', c_uint),
- ('bridgeChipInfo', c_nvmlBridgeChipInfo_t * 128),
- ]
- class c_nvmlEccErrorCounts_t(_PrintableStructure):
- _fields_ = [
- ('l1Cache', c_ulonglong),
- ('l2Cache', c_ulonglong),
- ('deviceMemory', c_ulonglong),
- ('registerFile', c_ulonglong),
- ]
- class c_nvmlUtilization_t(_PrintableStructure):
- _fields_ = [
- ('gpu', c_uint),
- ('memory', c_uint),
- ]
- _fmt_ = {'<default>': "%d %%"}
- # Added in 2.285
- class c_nvmlHwbcEntry_t(_PrintableStructure):
- _fields_ = [
- ('hwbcId', c_uint),
- ('firmwareVersion', c_char * 32),
- ]
- class c_nvmlValue_t(Union):
- _fields_ = [
- ('dVal', c_double),
- ('uiVal', c_uint),
- ('ulVal', c_ulong),
- ('ullVal', c_ulonglong),
- ('sllVal', c_longlong),
- ('siVal', c_int),
- ('usVal', c_ushort),
- ]
- class c_nvmlSample_t(_PrintableStructure):
- _fields_ = [
- ('timeStamp', c_ulonglong),
- ('sampleValue', c_nvmlValue_t),
- ]
- class c_nvmlViolationTime_t(_PrintableStructure):
- _fields_ = [
- ('referenceTime', c_ulonglong),
- ('violationTime', c_ulonglong),
- ]
- class c_nvmlFieldValue_t(_PrintableStructure):
- _fields_ = [
- ('fieldId', c_uint32),
- ('scopeId', c_uint32),
- ('timestamp', c_int64),
- ('latencyUsec', c_int64),
- ('valueType', _nvmlValueType_t),
- ('nvmlReturn', _nvmlReturn_t),
- ('value', c_nvmlValue_t)
- ]
- NVML_NVLINK_TOTAL_SUPPORTED_BW_MODES = 23
- nvmlNvlinkSupportedBwModes_v1 = 0x100001c
- class c_nvmlNvlinkSupportedBwModes_v1_t(_PrintableStructure):
- _fields_ = [
- ('version', c_uint),
- ('bwModes', c_uint8 * NVML_NVLINK_TOTAL_SUPPORTED_BW_MODES),
- ('totalBwModes', c_uint8)
- ]
- def __init__(self):
- super(c_nvmlNvlinkSupportedBwModes_v1_t, self).__init__(version=nvmlNvlinkSupportedBwModes_v1)
- nvmlNvlinkGetBwMode_v1 = 0x100000c
- class c_nvmlNvlinkGetBwMode_v1_t(_PrintableStructure):
- _fields_ = [
- ('version', c_uint),
- ('bIsBest', c_uint),
- ('bwMode', c_uint8)
- ]
- def __init__(self):
- super(c_nvmlNvlinkGetBwMode_v1_t, self).__init__(version=nvmlNvlinkGetBwMode_v1)
- nvmlNvlinkSetBwMode_v1 = 0x100000c
- class c_nvmlNvlinkSetBwMode_v1_t(_PrintableStructure):
- _fields_ = [
- ('version', c_uint),
- ('bSetBest', c_uint),
- ('bwMode', c_uint8)
- ]
- def __init__(self):
- super(c_nvmlNvlinkSetBwMode_v1_t, self).__init__(version=nvmlNvlinkSetBwMode_v1)
- class c_nvmlVgpuHeterogeneousMode_v1_t(_PrintableStructure):
- _fields_ = [
- ('version', c_uint),
- ('mode', c_uint),
- ]
- VgpuHeterogeneousMode_v1 = 0x1000008
- class c_nvmlVgpuPlacementId_v1_t(_PrintableStructure):
- _fields_ = [
- ('version', c_uint),
- ('placementId', c_uint),
- ]
- VgpuPlacementId_v1 = 0x1000008
- class c_nvmlVgpuPlacementList_v1_t(_PrintableStructure):
- _fields_ = [
- ('version', c_uint),
- ('count', c_uint),
- ('placementSize', c_uint),
- ('placementIds', POINTER(c_uint)),
- ]
- VgpuPlacementList_v1 = 0x1000018
- NVML_VGPU_PGPU_HETEROGENEOUS_MODE = 0
- NVML_VGPU_PGPU_HOMOGENEOUS_MODE = 1
- class c_nvmlVgpuPlacementList_v2_t(_PrintableStructure):
- _fields_ = [
- ('version', c_uint),
- ('placementSize', c_uint),
- ('count', c_uint),
- ('placementIds', POINTER(c_uint)),
- ('mode', c_uint),
- ]
- VgpuPlacementList_v2 = 0x2000020
- class c_nvmlVgpuTypeBar1Info_v1_t(_PrintableStructure):
- _fields_ = [
- ('version', c_uint),
- ('bar1Size', c_ulonglong),
- ]
- VgpuTypeBar1Info_v1 = 0x1000010
- class c_nvmlVgpuInstanceUtilizationSample_t(_PrintableStructure):
- _fields_ = [
- ('vgpuInstance', _nvmlVgpuInstance_t),
- ('timeStamp', c_ulonglong),
- ('smUtil', c_nvmlValue_t),
- ('memUtil', c_nvmlValue_t),
- ('encUtil', c_nvmlValue_t),
- ('decUtil', c_nvmlValue_t),
- ]
- class c_nvmlVgpuInstanceUtilizationInfo_v1_t(_PrintableStructure):
- _fields_ = [
- ('timeStamp', c_ulonglong),
- ('vgpuInstance', _nvmlVgpuInstance_t),
- ('smUtil', c_nvmlValue_t),
- ('memUtil', c_nvmlValue_t),
- ('encUtil', c_nvmlValue_t),
- ('decUtil', c_nvmlValue_t),
- ('jpgUtil', c_nvmlValue_t),
- ('ofaUtil', c_nvmlValue_t),
- ]
- class c_nvmlVgpuInstancesUtilizationInfo_v1_t(_PrintableStructure):
- _fields_ = [
- ('version', c_uint),
- ('sampleValType', _nvmlValueType_t),
- ('vgpuInstanceCount', c_uint),
- ('lastSeenTimeStamp', c_ulonglong),
- ('vgpuUtilArray', POINTER(c_nvmlVgpuInstanceUtilizationInfo_v1_t)),
- ]
- VgpuInstancesUtilizationInfo_v1 = 0x01000020
- class c_nvmlVgpuProcessUtilizationSample_t(_PrintableStructure):
- _fields_ = [
- ('vgpuInstance', _nvmlVgpuInstance_t),
- ('pid', c_uint),
- ('processName', c_char * NVML_VGPU_NAME_BUFFER_SIZE),
- ('timeStamp', c_ulonglong),
- ('smUtil', c_uint),
- ('memUtil', c_uint),
- ('encUtil', c_uint),
- ('decUtil', c_uint),
- ]
- class c_nvmlVgpuProcessUtilizationInfo_v1_t(_PrintableStructure):
- _fields_ = [
- ('processName', c_char * NVML_VGPU_NAME_BUFFER_SIZE),
- ('timeStamp', c_ulonglong),
- ('vgpuInstance', _nvmlVgpuInstance_t),
- ('pid', c_uint),
- ('smUtil', c_uint),
- ('memUtil', c_uint),
- ('encUtil', c_uint),
- ('decUtil', c_uint),
- ('jpgUtil', c_uint),
- ('ofaUtil', c_uint),
- ]
- class c_nvmlVgpuProcessesUtilizationInfo_v1_t(_PrintableStructure):
- _fields_ = [
- ('version', c_uint),
- ('vgpuProcessCount', c_uint),
- ('lastSeenTimeStamp', c_ulonglong),
- ('vgpuProcUtilArray', POINTER(c_nvmlVgpuProcessUtilizationInfo_v1_t)),
- ]
- VgpuProcessesUtilizationInfo_v1 = 0x01000018
- class nvmlVgpuRuntimeState_v1_t(_PrintableStructure):
- _fields_ = [
- ('version', c_uint),
- ('size', c_ulonglong),
- ]
- VgpuRuntimeState_v1 = 0x1000010
- class c_nvmlVgpuLicenseExpiry_t(_PrintableStructure):
- _fields_ = [
- ('year', c_uint32),
- ('month', c_uint16),
- ('day', c_uint16),
- ('hour', c_uint16),
- ('min', c_uint16),
- ('sec', c_uint16),
- ('status', c_uint8),
- ]
- NVML_GRID_LICENSE_STATE_UNKNOWN = 0
- NVML_GRID_LICENSE_STATE_UNINITIALIZED = 1
- NVML_GRID_LICENSE_STATE_UNLICENSED_UNRESTRICTED = 2
- NVML_GRID_LICENSE_STATE_UNLICENSED_RESTRICTED = 3
- NVML_GRID_LICENSE_STATE_UNLICENSED = 4
- NVML_GRID_LICENSE_STATE_LICENSED = 5
- class c_nvmlVgpuLicenseInfo_t(_PrintableStructure):
- _fields_ = [
- ('isLicensed', c_uint8),
- ('licenseExpiry', c_nvmlVgpuLicenseExpiry_t),
- ('currentState', c_uint),
- ]
- class c_nvmlEncoderSession_t(_PrintableStructure):
- _fields_ = [
- ('sessionId', c_uint),
- ('pid', c_uint),
- ('vgpuInstance', _nvmlVgpuInstance_t),
- ('codecType', c_uint),
- ('hResolution', c_uint),
- ('vResolution', c_uint),
- ('averageFps', c_uint),
- ('encodeLatency', c_uint),
- ]
- class c_nvmlProcessUtilizationSample_t(_PrintableStructure):
- _fields_ = [
- ('pid', c_uint),
- ('timeStamp', c_ulonglong),
- ('smUtil', c_uint),
- ('memUtil', c_uint),
- ('encUtil', c_uint),
- ('decUtil', c_uint),
- ]
- class c_nvmlProcessUtilizationInfo_v1_t(_PrintableStructure):
- _fields_ = [
- ('timeStamp', c_ulonglong),
- ('pid', c_uint),
- ('smUtil', c_uint),
- ('memUtil', c_uint),
- ('encUtil', c_uint),
- ('decUtil', c_uint),
- ('jpgUtil', c_uint),
- ('ofaUtil', c_uint),
- ]
- class c_nvmlProcessesUtilizationInfo_v1_t(_PrintableStructure):
- _fields_ = [
- ('version', c_uint),
- ('processSamplesCount', c_uint),
- ('lastSeenTimeStamp', c_ulonglong),
- ('procUtilArray', POINTER(c_nvmlProcessUtilizationInfo_v1_t)),
- ]
- ProcessesUtilizationInfo_v1 = 0x01000018
- class c_nvmlGridLicenseExpiry_t(_PrintableStructure):
- _fields_ = [
- ('year', c_uint32),
- ('month', c_uint16),
- ('day', c_uint16),
- ('hour', c_uint16),
- ('min', c_uint16),
- ('sec', c_uint16),
- ('status', c_uint8),
- ]
- class c_nvmlGridLicensableFeature_v4_t(_PrintableStructure):
- _fields_ = [
- ('featureCode', _nvmlGridLicenseFeatureCode_t),
- ('featureState', c_uint),
- ('licenseInfo', c_char * NVML_GRID_LICENSE_BUFFER_SIZE),
- ('productName', c_char * NVML_GRID_LICENSE_BUFFER_SIZE),
- ('featureEnabled', c_uint),
- ('licenseExpiry', c_nvmlGridLicenseExpiry_t),
- ]
- class c_nvmlGridLicensableFeatures_v4_t(_PrintableStructure):
- _fields_ = [
- ('isGridLicenseSupported', c_int),
- ('licensableFeaturesCount', c_uint),
- ('gridLicensableFeatures', c_nvmlGridLicensableFeature_v4_t * NVML_GRID_LICENSE_FEATURE_MAX_COUNT),
- ]
- class c_nvmlGridLicensableFeature_v3_t(_PrintableStructure):
- _fields_ = [
- ('featureCode', _nvmlGridLicenseFeatureCode_t),
- ('featureState', c_uint),
- ('licenseInfo', c_char * NVML_GRID_LICENSE_BUFFER_SIZE),
- ('productName', c_char * NVML_GRID_LICENSE_BUFFER_SIZE),
- ('featureEnabled', c_uint),
- ]
- class c_nvmlGridLicensableFeatures_v3_t(_PrintableStructure):
- _fields_ = [
- ('isGridLicenseSupported', c_int),
- ('licensableFeaturesCount', c_uint),
- ('gridLicensableFeatures', c_nvmlGridLicensableFeature_v3_t * NVML_GRID_LICENSE_FEATURE_MAX_COUNT),
- ]
- class c_nvmlGridLicensableFeature_v2_t(_PrintableStructure):
- _fields_ = [
- ('featureCode', _nvmlGridLicenseFeatureCode_t),
- ('featureState', c_uint),
- ('licenseInfo', c_char * NVML_GRID_LICENSE_BUFFER_SIZE),
- ('productName', c_char * NVML_GRID_LICENSE_BUFFER_SIZE),
- ]
- class c_nvmlGridLicensableFeatures_v2_t(_PrintableStructure):
- _fields_ = [
- ('isGridLicenseSupported', c_int),
- ('licensableFeaturesCount', c_uint),
- ('gridLicensableFeatures', c_nvmlGridLicensableFeature_v2_t * NVML_GRID_LICENSE_FEATURE_MAX_COUNT),
- ]
- class c_nvmlGridLicensableFeature_t(_PrintableStructure):
- _fields_ = [
- ('featureCode', _nvmlGridLicenseFeatureCode_t),
- ('featureState', c_uint),
- ('licenseInfo', c_char * NVML_GRID_LICENSE_BUFFER_SIZE),
- ]
- class c_nvmlGridLicensableFeatures_t(_PrintableStructure):
- _fields_ = [
- ('isGridLicenseSupported', c_int),
- ('licensableFeaturesCount', c_uint),
- ('gridLicensableFeatures', c_nvmlGridLicensableFeature_t * NVML_GRID_LICENSE_FEATURE_MAX_COUNT),
- ]
- class c_nvmlMarginTemperature_v1_t(_PrintableStructure):
- _fields_ = [
- ('version', c_uint),
- ('marginTemperature', c_int),
- ]
- nvmlMarginTemperature_v1 = 0x1000008
- NVML_DEVICE_UUID_ASCII_LEN = 41
- NVML_DEVICE_UUID_BINARY_LEN = 16
- NVML_UUID_TYPE_NONE = 0
- NVML_UUID_TYPE_ASCII = 1
- NVML_UUID_TYPE_BINARY = 2
- class c_nvmlUUIDValue_t(Union):
- _fields_ = [
- ('str', c_char * NVML_DEVICE_UUID_ASCII_LEN),
- ('bytes', c_ubyte * NVML_DEVICE_UUID_BINARY_LEN),
- ]
- nvmlUUID_v1 = 0x1000034
- class c_nvmlUUID_t(_PrintableStructure):
- _fields_ = [
- ('version', c_uint),
- ('type', c_uint),
- ('value', c_nvmlUUIDValue_t),
- ]
- def __init__(self):
- super(c_nvmlUUID_t, self).__init__(version=nvmlUUID_v1)
- nvmlPdi_v1 = 0x1000010
- class c_nvmlPdi_t(_PrintableStructure):
- _fields_ = [
- ('version', c_uint),
- ('value', c_ulonglong),
- ]
- def __init__(self):
- super(c_nvmlPdi_t, self).__init__(version=nvmlPdi_v1)
- nvmlRepairStatus_v1 = 0x100000C
- class c_nvmlRepairStatus_t(_PrintableStructure):
- _fields_ = [
- ("version", c_uint),
- ("bChannelRepairPending", c_uint),
- ("bTpcRepairPending", c_uint),
- ]
- def __init__(self):
- super(c_nvmlRepairStatus_t, self).__init__(version=nvmlRepairStatus_v1)
- nvmlNvLinkInfo_v1 =0x1000008
- class c_nvmlNvLinkInfo_v1_t(_PrintableStructure):
- _fields_ = [
- ("version", c_uint),
- ("isNvleEnabled", c_uint),
- ]
- def __init__(self):
- super(c_nvmlNvLinkInfo_v1_t, self).__init__(version=nvmlNvLinkInfo_v1)
- NVML_NVLINK_FIRMWARE_UCODE_TYPE_MSE = 0x1
- NVML_NVLINK_FIRMWARE_UCODE_TYPE_NETIR = 0x2
- NVML_NVLINK_FIRMWARE_UCODE_TYPE_NETIR_UPHY = 0x3
- NVML_NVLINK_FIRMWARE_UCODE_TYPE_NETIR_CLN = 0x4
- NVML_NVLINK_FIRMWARE_UCODE_TYPE_NETIR_DLN = 0x5
- NVML_NVLINK_FIRMWARE_VERSION_LENGTH = 100
- class c_nvmlNvlinkFirmwareVersion_t(_PrintableStructure):
- _fields_ = [
- ("ucodeType", c_uint8),
- ("major", c_uint),
- ("minor", c_uint),
- ("subMinor", c_uint)
- ]
- class c_nvmlNvlinkFirmwareInfo_t(_PrintableStructure):
- _fields_ = [
- ("firmwareVersion", c_nvmlNvlinkFirmwareVersion_t * NVML_NVLINK_FIRMWARE_VERSION_LENGTH),
- ("numValidEntries", c_uint)
- ]
- nvmlNvLinkInfo_v2 = 0x200064c
- class c_nvmlNvLinkInfo_v2_t(_PrintableStructure):
- _fields_ = [
- ("version", c_uint),
- ("isNvleEnabled", c_uint),
- ("firmwareInfo", c_nvmlNvlinkFirmwareInfo_t)
- ]
- def __init__(self):
- super(c_nvmlNvLinkInfo_v2_t, self).__init__(version=nvmlNvLinkInfo_v2)
- NVML_PRM_DATA_MAX_SIZE = 496
- class c_nvmlPRMTLV_v1_t(_PrintableStructure):
- _fields_ = [
- ('dataSize', c_uint32),
- ('status', c_uint32),
- ('data', c_ubyte * NVML_PRM_DATA_MAX_SIZE),
- ]
- def __init__(self, size=0):
- super(c_nvmlPRMTLV_v1_t, self).__init__(dataSize=size, status=0)
- def nvmlDeviceReadWritePRM_v1(handle, c_info):
- fn = _nvmlGetFunctionPointer("nvmlDeviceReadWritePRM_v1")
- ret = fn(handle, byref(c_info))
- _nvmlCheckReturn(ret)
- # Addressing modes
- NVML_DEVICE_ADDRESSING_MODE_NONE = 0
- NVML_DEVICE_ADDRESSING_MODE_HMM = 1
- NVML_DEVICE_ADDRESSING_MODE_ATS = 2
- nvmlDeviceAddressingMode_v1 = 0x1000008
- class c_nvmlDeviceAddressingMode_t(_PrintableStructure):
- _fields_ = [
- ('version', c_uint),
- ('value', c_uint),
- ]
- def __init__(self):
- super(c_nvmlDeviceAddressingMode_t, self).__init__(version=nvmlDeviceAddressingMode_v1)
- ## Event structures
- class struct_c_nvmlEventSet_t(Structure):
- pass # opaque handle
- c_nvmlEventSet_t = POINTER(struct_c_nvmlEventSet_t)
- nvmlEventTypeSingleBitEccError = 0x0000000000000001
- nvmlEventTypeDoubleBitEccError = 0x0000000000000002
- nvmlEventTypePState = 0x0000000000000004
- nvmlEventTypeXidCriticalError = 0x0000000000000008
- nvmlEventTypeClock = 0x0000000000000010
- nvmlEventTypePowerSourceChange = 0x0000000000000080
- nvmlEventMigConfigChange = 0x0000000000000100
- nvmlEventTypeSingleBitEccErrorStorm = 0x0000000000000200
- nvmlEventTypeDramRetirementEvent = 0x0000000000000400
- nvmlEventTypeDramRetirementFailure = 0x0000000000000800
- nvmlEventTypeNonFatalPoisonError = 0x0000000000001000
- nvmlEventTypeFatalPoisonError = 0x0000000000002000
- nvmlEventTypeGpuUnavailableError = 0x0000000000004000
- nvmlEventTypeGpuRecoveryAction = 0x0000000000008000
- nvmlEventTypeNone = 0x0000000000000000
- nvmlEventTypeAll = (
- nvmlEventTypeNone
- | nvmlEventTypeSingleBitEccError
- | nvmlEventTypeDoubleBitEccError
- | nvmlEventTypePState
- | nvmlEventTypeClock
- | nvmlEventTypePowerSourceChange
- | nvmlEventTypeXidCriticalError
- | nvmlEventMigConfigChange
- | nvmlEventTypeSingleBitEccErrorStorm
- | nvmlEventTypeDramRetirementEvent
- | nvmlEventTypeDramRetirementFailure
- | nvmlEventTypeNonFatalPoisonError
- | nvmlEventTypeFatalPoisonError
- | nvmlEventTypeGpuUnavailableError
- | nvmlEventTypeGpuRecoveryAction
- )
- ## Clock Event Reasons defines
- nvmlClocksEventReasonGpuIdle = 0x0000000000000001
- nvmlClocksEventReasonApplicationsClocksSetting = 0x0000000000000002
- nvmlClocksEventReasonUserDefinedClocks = nvmlClocksEventReasonApplicationsClocksSetting # deprecated, use nvmlClocksEventReasonApplicationsClocksSetting
- nvmlClocksEventReasonSwPowerCap = 0x0000000000000004
- nvmlClocksEventReasonHwSlowdown = 0x0000000000000008
- nvmlClocksEventReasonSyncBoost = 0x0000000000000010
- nvmlClocksEventReasonSwThermalSlowdown = 0x0000000000000020
- nvmlClocksEventReasonHwThermalSlowdown = 0x0000000000000040
- nvmlClocksEventReasonHwPowerBrakeSlowdown = 0x0000000000000080
- nvmlClocksEventReasonDisplayClockSetting = 0x0000000000000100
- nvmlClocksEventReasonNone = 0x0000000000000000
- nvmlClocksEventReasonAll = (
- nvmlClocksEventReasonNone |
- nvmlClocksEventReasonGpuIdle |
- nvmlClocksEventReasonApplicationsClocksSetting |
- nvmlClocksEventReasonSwPowerCap |
- nvmlClocksEventReasonHwSlowdown |
- nvmlClocksEventReasonSyncBoost |
- nvmlClocksEventReasonSwThermalSlowdown |
- nvmlClocksEventReasonHwThermalSlowdown |
- nvmlClocksEventReasonHwPowerBrakeSlowdown |
- nvmlClocksEventReasonDisplayClockSetting
- )
- ## Following have been deprecated
- nvmlClocksThrottleReasonGpuIdle = 0x0000000000000001
- nvmlClocksThrottleReasonApplicationsClocksSetting = 0x0000000000000002
- nvmlClocksThrottleReasonUserDefinedClocks = nvmlClocksThrottleReasonApplicationsClocksSetting # deprecated, use nvmlClocksThrottleReasonApplicationsClocksSetting
- nvmlClocksThrottleReasonSwPowerCap = 0x0000000000000004
- nvmlClocksThrottleReasonHwSlowdown = 0x0000000000000008
- nvmlClocksThrottleReasonSyncBoost = 0x0000000000000010
- nvmlClocksThrottleReasonSwThermalSlowdown = 0x0000000000000020
- nvmlClocksThrottleReasonHwThermalSlowdown = 0x0000000000000040
- nvmlClocksThrottleReasonHwPowerBrakeSlowdown = 0x0000000000000080
- nvmlClocksThrottleReasonDisplayClockSetting = 0x0000000000000100
- nvmlClocksThrottleReasonNone = 0x0000000000000000
- nvmlClocksThrottleReasonAll = (
- nvmlClocksThrottleReasonNone |
- nvmlClocksThrottleReasonGpuIdle |
- nvmlClocksThrottleReasonApplicationsClocksSetting |
- nvmlClocksThrottleReasonSwPowerCap |
- nvmlClocksThrottleReasonHwSlowdown |
- nvmlClocksThrottleReasonSyncBoost |
- nvmlClocksThrottleReasonSwThermalSlowdown |
- nvmlClocksThrottleReasonHwThermalSlowdown |
- nvmlClocksThrottleReasonHwPowerBrakeSlowdown |
- nvmlClocksThrottleReasonDisplayClockSetting
- )
- class c_nvmlEventData_t(_PrintableStructure):
- _fields_ = [
- ('device', c_nvmlDevice_t),
- ('eventType', c_ulonglong),
- ('eventData', c_ulonglong),
- ('gpuInstanceId', c_uint),
- ('computeInstanceId', c_uint)
- ]
- _fmt_ = {'eventType': "0x%08X"}
- class struct_c_nvmlSystemEventSet_t(Structure):
- pass # opaque handle
- c_nvmlSystemEventSet_t = POINTER(struct_c_nvmlSystemEventSet_t)
- nvmlSystemEventTypeGpuDriverUnbind = 0x0000000000000001
- nvmlSystemEventTypeGpuDriverBind = 0x0000000000000002
- nvmlSystemEventTypeCount = 2
- nvmlSystemEventSetCreateRequest_v1 = 0x1000010
- class c_nvmlSystemEventSetCreateRequest_v1_t(_PrintableStructure):
- _fields_ = [
- ('version', c_uint),
- ('set', c_nvmlSystemEventSet_t)
- ]
- def __init__(self):
- super(c_nvmlSystemEventSetCreateRequest_v1_t, self).__init__(version=nvmlSystemEventSetCreateRequest_v1)
- nvmlSystemEventSetFreeRequest_v1 = 0x1000010
- class c_nvmlSystemEventSetFreeRequest_v1_t(_PrintableStructure):
- _fields_ = [
- ('version', c_uint),
- ('set', c_nvmlSystemEventSet_t)
- ]
- def __init__(self):
- super(c_nvmlSystemEventSetFreeRequest_v1_t, self).__init__(version=nvmlSystemEventSetFreeRequest_v1)
- nvmlSystemRegisterEventRequest_v1 = 0x1000018
- class c_nvmlSystemRegisterEventRequest_v1_t(_PrintableStructure):
- _fields_ = [
- ('version', c_uint),
- ('eventTypes', c_ulonglong),
- ('set', c_nvmlSystemEventSet_t)
- ]
- def __init__(self):
- super(c_nvmlSystemRegisterEventRequest_v1_t, self).__init__(version=nvmlSystemRegisterEventRequest_v1)
- class c_nvmlSystemEventData_v1_t(_PrintableStructure):
- _fields_ = [
- ('eventType', c_ulonglong),
- ('gpuId', c_uint)
- ]
- _fmt_ = {'eventType': "0x%08X"}
- nvmlSystemEventSetWaitRequest_v1 = 0x1000020
- class c_nvmlSystemEventSetWaitRequest_v1_t(_PrintableStructure):
- _fields_ = [
- ('version', c_uint), # input/output
- ('timeoutms', c_uint), # input
- ('set', c_nvmlSystemEventSet_t), # input
- ('data', POINTER(c_nvmlSystemEventData_v1_t)), # input/output. Buffer owned by caller
- ('dataSize', c_uint), # input
- ('numEvent', c_uint) # output. Number of event recorded
- ]
- def __init__(self):
- super(c_nvmlSystemEventSetWaitRequest_v1_t, self).__init__(version=nvmlSystemEventSetWaitRequest_v1)
- # C APIs for system events
- def c_nvmlSystemEventSetCreate(req):
- """
- C API binding for c_nvmlSystemEventSetFree
- :param req: reference of c_nvmlSystemEventSetCreateRequest_v1_t
- """
- fn = _nvmlGetFunctionPointer("nvmlSystemEventSetCreate")
- ret = fn(req)
- _nvmlCheckReturn(ret)
- def c_nvmlSystemEventSetFree(req):
- """
- C API binding for c_nvmlSystemEventSetFree
- :param req: reference of c_nvmlSystemEventSetFreeRequest_v1_t
- """
- fn = _nvmlGetFunctionPointer("nvmlSystemEventSetFree")
- ret = fn(req)
- _nvmlCheckReturn(ret)
- def c_nvmlSystemRegisterEvents(req):
- """
- C API binding for nvmlSystemRegisterEvents
- :param req: reference of c_nvmlSystemRegisterEventRequest_v1_t
- """
- fn = _nvmlGetFunctionPointer("nvmlSystemRegisterEvents")
- ret = fn(req)
- _nvmlCheckReturn(ret)
- def c_nvmlSystemEventSetWait(req):
- """
- C API binding for nvmlSystemEventSetWait
- :param req: reference of c_nvmlSystemEventSetWaitRequest_v1_t
- """
- fn = _nvmlGetFunctionPointer("nvmlSystemEventSetWait")
- ret = fn(req)
- # Accept TIMEOUT error
- if ret == NVML_ERROR_TIMEOUT:
- return ret
- _nvmlCheckReturn(ret)
- # Pythonic APIs for system events
- # No Pythonic API compability support
- # When user upgrades to a new NVML Python binding,
- # user should upgrade their code against API change.
- def nvmlSystemEventSetCreate(version):
- """
- Create an NVML system event set.
- :param version: The version of the request.
- :return: A ctypes pointer to the created c_nvmlSystemEventSet_t structure.
- """
- if version != nvmlSystemEventSetCreateRequest_v1:
- raise NVMLError(NVML_ERROR_ARGUMENT_VERSION_MISMATCH)
- # Prepare the request structure
- req = c_nvmlSystemEventSetCreateRequest_v1_t()
- req.version = version
- req.set = None # Initialize as NULL
- c_nvmlSystemEventSetCreate(byref(req))
- # Return the created set handle
- if not req.set:
- raise NVMLError(NVML_ERROR_MEMORY)
- return req.set
- def nvmlSystemEventSetFree(version, setHandle):
- """
- Free an NVML system event set.
- :param version: The version of the request.
- :param setHandle: A ctypes pointer to a c_nvmlSystemEventSet_t structure.
- """
- if version != nvmlSystemEventSetFreeRequest_v1:
- raise NVMLError(NVML_ERROR_ARGUMENT_VERSION_MISMATCH)
- req = c_nvmlSystemEventSetFreeRequest_v1_t()
- req.version = version
- req.set = setHandle
- c_nvmlSystemEventSetFree(byref(req))
- def nvmlSystemRegisterEvents(version, eventTypes, setHandle):
- """
- Register events for an NVML system event set.
- :param version: The version of the request.
- :param eventTypes: A bitmask of event types to register.
- :param setHandle: A ctypes pointer to a c_nvmlSystemEventSet_t structure.
- """
- if version != nvmlSystemRegisterEventRequest_v1:
- raise NVMLError(NVML_ERROR_ARGUMENT_VERSION_MISMATCH)
- req = c_nvmlSystemRegisterEventRequest_v1_t()
- req.version = version
- req.eventTypes = eventTypes
- req.set = setHandle
- c_nvmlSystemRegisterEvents(byref(req))
- def nvmlSystemEventSetWait(version, setHandle, timeoutMs, eventData, eventDataSize):
- """
- Wait for events in an NVML system event set.
- :param version: The version of the request.
- :param setHandle: A ctypes pointer to a c_nvmlSystemEventSet_t structure.
- :param timeoutMs: Timeout in milliseconds.
- :param eventData: A ctypes array of c_nvmlSystemEventData_v1_t for event data.
- :param eventDataSize: Number of c_nvmlSystemEventData_v1_t in evenData array..
- :return: A list of dictionaries containing event data.
- """
- if version != nvmlSystemEventSetWaitRequest_v1:
- raise NVMLError(NVML_ERROR_ARGUMENT_VERSION_MISMATCH)
- req = c_nvmlSystemEventSetWaitRequest_v1_t()
- req.version = version
- req.timeoutms = timeoutMs
- req.set = setHandle
- req.data = eventData
- req.dataSize = eventDataSize
- ret = c_nvmlSystemEventSetWait(byref(req))
- if ret == NVML_ERROR_TIMEOUT:
- return [] # Timeout, no events occurred.
- # Extract event data from the buffer
- events = []
- for i in range(req.numEvent):
- events.append({
- 'eventType': eventData[i].eventType,
- 'gpuId': eventData[i].gpuId
- })
- return events
- class c_nvmlAccountingStats_t(_PrintableStructure):
- _fields_ = [
- ('gpuUtilization', c_uint),
- ('memoryUtilization', c_uint),
- ('maxMemoryUsage', c_ulonglong),
- ('time', c_ulonglong),
- ('startTime', c_ulonglong),
- ('isRunning', c_uint),
- ('reserved', c_uint * 5)
- ]
- class c_nvmlVgpuVersion_t(Structure):
- _fields_ = [("minVersion", c_uint),
- ("maxVersion", c_uint)
- ]
- class c_nvmlVgpuMetadata_t(_PrintableStructure):
- _fields_ = [("version", c_uint),
- ("revision", c_uint),
- ("guestInfoState", _nvmlVgpuGuestInfoState_t),
- ("guestDriverVersion", c_char * NVML_SYSTEM_DRIVER_VERSION_BUFFER_SIZE),
- ("hostDriverVersion", c_char * NVML_SYSTEM_DRIVER_VERSION_BUFFER_SIZE),
- ("reserved", c_uint * 6),
- ("vgpuVirtualizationCaps", c_uint),
- ("guestVgpuVersion", c_uint),
- ("opaqueDataSize", c_uint),
- ("opaqueData", c_char * NVML_VGPU_METADATA_OPAQUE_DATA_SIZE)
- ]
- class c_nvmlVgpuPgpuMetadata_t(_PrintableStructure):
- _fields_ = [("version", c_uint),
- ("revision", c_uint),
- ("hostDriverVersion", c_char * NVML_SYSTEM_DRIVER_VERSION_BUFFER_SIZE),
- ("pgpuVirtualizationCaps", c_uint),
- ("reserved", c_uint * 5),
- ("hostSupportedVgpuRange", c_nvmlVgpuVersion_t),
- ("opaqueDataSize", c_uint),
- ("opaqueData", c_char * NVML_VGPU_PGPU_METADATA_OPAQUE_DATA_SIZE)
- ]
- class c_nvmlVgpuPgpuCompatibility_t(Structure):
- _fields_ = [("vgpuVmCompatibility", _nvmlVgpuVmCompatibility_t),
- ("compatibilityLimitCode", _nvmlVgpuPgpuCompatibilityLimitCode_t)
- ]
- ## vGPU scheduler policy defines
- NVML_VGPU_SCHEDULER_POLICY_UNKNOWN = 0
- NVML_VGPU_SCHEDULER_POLICY_BEST_EFFORT = 1
- NVML_VGPU_SCHEDULER_POLICY_EQUAL_SHARE = 2
- NVML_VGPU_SCHEDULER_POLICY_FIXED_SHARE = 3
- ## Supported vGPU scheduler policy count
- NVML_SUPPORTED_VGPU_SCHEDULER_POLICY_COUNT = 3
- NVML_SCHEDULER_SW_MAX_LOG_ENTRIES = 200
- NVML_VGPU_SCHEDULER_ARR_DEFAULT = 0
- NVML_VGPU_SCHEDULER_ARR_DISABLE = 1
- NVML_VGPU_SCHEDULER_ARR_ENABLE = 2
- NVML_VGPU_SCHEDULER_ENGINE_TYPE_GRAPHICS = 1
- class c_nvmlVgpuSchedDataWithARR_t(_PrintableStructure):
- _fields_ = [
- ('avgFactor', c_uint),
- ('timeslice', c_uint),
- ]
- class c_nvmlVgpuSchedData_t(_PrintableStructure):
- _fields_ = [
- ('timeslice', c_uint),
- ]
- class c_nvmlVgpuSchedulerParams_t(Union):
- _fields_ = [
- ('vgpuSchedDataWithARR', c_nvmlVgpuSchedDataWithARR_t),
- ('vgpuSchedData', c_nvmlVgpuSchedData_t),
- ]
- class c_nvmlVgpuSchedulerLogEntry_t(_PrintableStructure):
- _fields_ = [
- ('timestamp', c_ulonglong),
- ('timeRunTotal', c_ulonglong),
- ('timeRun', c_ulonglong),
- ('swRunlistId', c_uint),
- ('targetTimeSlice', c_ulonglong),
- ('cumulativePreemptionTime', c_ulonglong),
- ]
- class c_nvmlVgpuSchedulerLog_t(_PrintableStructure):
- _fields_ = [
- ('engineId', c_uint),
- ('schedulerPolicy', c_uint),
- ('arrMode', c_uint),
- ('schedulerParams', c_nvmlVgpuSchedulerParams_t),
- ('entriesCount', c_uint),
- ('logEntries', c_nvmlVgpuSchedulerLogEntry_t * NVML_SCHEDULER_SW_MAX_LOG_ENTRIES),
- ]
- class c_nvmlVgpuSchedulerGetState_t(_PrintableStructure):
- _fields_ = [
- ('schedulerPolicy', c_uint),
- ('arrMode', c_uint),
- ('schedulerParams', c_nvmlVgpuSchedulerParams_t),
- ]
- class c_nvmlVgpuSchedSetDataWithARR_t(_PrintableStructure):
- _fields_ = [
- ('avgFactor', c_uint),
- ('frequency', c_uint),
- ]
- class c_nvmlVgpuSchedSetData_t(_PrintableStructure):
- _fields_ = [
- ('timeslice', c_uint),
- ]
- class c_nvmlVgpuSchedulerSetParams_t(Union):
- _fields_ = [
- ('vgpuSchedDataWithARR', c_nvmlVgpuSchedSetDataWithARR_t),
- ('vgpuSchedData', c_nvmlVgpuSchedSetData_t),
- ]
- class c_nvmlVgpuSchedulerSetState_t(_PrintableStructure):
- _fields_ = [
- ('schedulerPolicy', c_uint),
- ('enableARRMode', c_uint),
- ('schedulerParams', c_nvmlVgpuSchedulerSetParams_t),
- ]
- class c_nvmlVgpuSchedulerCapabilities_t(_PrintableStructure):
- _fields_ = [
- ('supportedSchedulers', c_uint * NVML_SUPPORTED_VGPU_SCHEDULER_POLICY_COUNT),
- ('maxTimeslice', c_uint),
- ('minTimeslice', c_uint),
- ('isArrModeSupported', c_uint),
- ('maxFrequencyForARR', c_uint),
- ('minFrequencyForARR', c_uint),
- ('maxAvgFactorForARR', c_uint),
- ('minAvgFactorForARR', c_uint),
- ]
- class c_nvmlVgpuTypeIdInfo_v1_t(_PrintableStructure):
- _fields_ = [
- ('version', c_uint),
- ('vgpuCount', c_uint),
- ('vgpuTypeIds', POINTER(c_uint)),
- ]
- nvmlVgpuTypeIdInfo_v1 = 0x1000010
- class c_nvmlVgpuTypeMaxInstance_v1_t(_PrintableStructure):
- _fields_ = [
- ('version', c_uint),
- ('vgpuTypeId', c_uint),
- ('maxInstancePerGI', c_uint),
- ]
- nvmlVgpuTypeMaxInstance_v1 = 0x100000C
- class c_nvmlActiveVgpuInstanceInfo_v1_t(_PrintableStructure):
- _fields_ = [
- ('version', c_uint),
- ('vgpuCount', c_uint),
- ('vgpuInstances', POINTER(c_uint)),
- ]
- nvmlActiveVgpuInstanceInfo_v1 = 0x1000010
- class c_nvmlVgpuSchedulerState_v1_t(_PrintableStructure):
- _fields_ = [
- ('version', c_uint),
- ('engineId', c_uint),
- ('schedulerPolicy', c_uint),
- ('enableARRMode', c_uint),
- ('schedulerParams', c_nvmlVgpuSchedulerSetParams_t),
- ]
- nvmlVgpuSchedulerState_v1 = 0x1000018
- class c_nvmlVgpuSchedulerStateInfo_v1_t(_PrintableStructure):
- _fields_ = [
- ('version', c_uint), # input
- ('engineId', c_uint), # input. One of NVML_ENGINE_TYPE*
- ('schedulerPolicy', c_uint), # output
- ('arrMode', c_uint), # output
- ('schedulerParams', c_nvmlVgpuSchedulerParams_t), # output
- ]
- nvmlVgpuSchedulerStateInfo_v1 = 0x1000018
- class c_nvmlVgpuSchedulerLogInfo_v1_t(_PrintableStructure):
- _fields_ = [
- ('version', c_uint), # input
- ('engineId', c_uint), # input. One of NVML_ENGINE_TYPE*
- ('schedulerPolicy', c_uint), # output
- ('arrMode', c_uint), # output
- ('schedulerParams', c_nvmlVgpuSchedulerParams_t), # output
- ('entriesCount', c_uint), # output
- ('logEntries', c_nvmlVgpuSchedulerLogEntry_t * NVML_SCHEDULER_SW_MAX_LOG_ENTRIES), # output
- ]
- nvmlVgpuSchedulerLogInfo_v1 = 0x10025A0
- class c_nvmlVgpuCreatablePlacementInfo_v1_t(_PrintableStructure):
- _fields_ = [
- ('version', c_uint),
- ('vgpuTypeId', c_uint),
- ('count', c_uint),
- ('placementIds', POINTER(c_uint)),
- ('placementSize', c_uint),
- ]
- nvmlVgpuCreatablePlacementInfo_v1 = 0x1000020
- class c_nvmlFBCStats_t(Structure):
- _fields_ = [("sessionsCount", c_uint),
- ("averageFPS", c_uint),
- ("averageLatency", c_uint)
- ]
- class c_nvmlFBCSession_t(_PrintableStructure):
- _fields_ = [
- ('sessionId', c_uint),
- ('pid', c_uint),
- ('vgpuInstance', _nvmlVgpuInstance_t),
- ('displayOrdinal', c_uint),
- ('sessionType', c_uint),
- ('sessionFlags', c_uint),
- ('hMaxResolution', c_uint),
- ('vMaxResolution', c_uint),
- ('hResolution', c_uint),
- ('vResolution', c_uint),
- ('averageFPS', c_uint),
- ('averageLatency', c_uint),
- ]
- NVML_DEVICE_MIG_DISABLE = 0x0
- NVML_DEVICE_MIG_ENABLE = 0x1
- NVML_GPU_INSTANCE_PROFILE_1_SLICE = 0x0
- NVML_GPU_INSTANCE_PROFILE_2_SLICE = 0x1
- NVML_GPU_INSTANCE_PROFILE_3_SLICE = 0x2
- NVML_GPU_INSTANCE_PROFILE_4_SLICE = 0x3
- NVML_GPU_INSTANCE_PROFILE_7_SLICE = 0x4
- NVML_GPU_INSTANCE_PROFILE_8_SLICE = 0x5
- NVML_GPU_INSTANCE_PROFILE_6_SLICE = 0x6
- NVML_GPU_INSTANCE_PROFILE_1_SLICE_REV1 = 0x7
- NVML_GPU_INSTANCE_PROFILE_2_SLICE_REV1 = 0x8
- NVML_GPU_INSTANCE_PROFILE_1_SLICE_REV2 = 0x9
- NVML_GPU_INSTANCE_PROFILE_1_SLICE_GFX = 0xA
- NVML_GPU_INSTANCE_PROFILE_2_SLICE_GFX = 0xB
- NVML_GPU_INSTANCE_PROFILE_4_SLICE_GFX = 0xC
- NVML_GPU_INSTANCE_PROFILE_1_SLICE_NO_ME = 0xD
- NVML_GPU_INSTANCE_PROFILE_2_SLICE_NO_ME = 0xE
- NVML_GPU_INSTANCE_PROFILE_1_SLICE_ALL_ME = 0xF
- NVML_GPU_INSTANCE_PROFILE_2_SLICE_ALL_ME = 0x10
- NVML_GPU_INSTANCE_PROFILE_COUNT = 0x11
- class c_nvmlGpuInstancePlacement_t(Structure):
- _fields_ = [("start", c_uint),
- ("size", c_uint)
- ]
- class c_nvmlGpuInstanceProfileInfo_t(Structure):
- _fields_ = [("id", c_uint),
- ("isP2pSupported", c_uint),
- ("sliceCount", c_uint),
- ("instanceCount", c_uint),
- ("multiprocessorCount", c_uint),
- ("copyEngineCount", c_uint),
- ("decoderCount", c_uint),
- ("encoderCount", c_uint),
- ("jpegCount", c_uint),
- ("ofaCount", c_uint),
- ("memorySizeMB", c_ulonglong),
- ]
- nvmlGpuInstanceProfileInfo_v2 = 0x02000098
- class c_nvmlGpuInstanceProfileInfo_v2_t(_PrintableStructure):
- _fields_ = [("version", c_uint),
- ("id", c_uint),
- ("isP2pSupported", c_uint),
- ("sliceCount", c_uint),
- ("instanceCount", c_uint),
- ("multiprocessorCount", c_uint),
- ("copyEngineCount", c_uint),
- ("decoderCount", c_uint),
- ("encoderCount", c_uint),
- ("jpegCount", c_uint),
- ("ofaCount", c_uint),
- ("memorySizeMB", c_ulonglong),
- ("name", c_char * NVML_DEVICE_NAME_V2_BUFFER_SIZE)
- ]
- def __init__(self):
- super(c_nvmlGpuInstanceProfileInfo_v2_t, self).__init__(version=nvmlGpuInstanceProfileInfo_v2)
- class c_nvmlGpuInstanceInfo_t(Structure):
- _fields_ = [("device", c_nvmlDevice_t),
- ("id", c_uint),
- ("profileId", c_uint),
- ("placement", c_nvmlGpuInstancePlacement_t)
- ]
- class struct_c_nvmlGpuInstance_t(Structure):
- pass # opaque handle
- c_nvmlGpuInstance_t = POINTER(struct_c_nvmlGpuInstance_t)
- NVML_COMPUTE_INSTANCE_PROFILE_1_SLICE = 0x0
- NVML_COMPUTE_INSTANCE_PROFILE_2_SLICE = 0x1
- NVML_COMPUTE_INSTANCE_PROFILE_3_SLICE = 0x2
- NVML_COMPUTE_INSTANCE_PROFILE_4_SLICE = 0x3
- NVML_COMPUTE_INSTANCE_PROFILE_7_SLICE = 0x4
- NVML_COMPUTE_INSTANCE_PROFILE_8_SLICE = 0x5
- NVML_COMPUTE_INSTANCE_PROFILE_6_SLICE = 0x6
- NVML_COMPUTE_INSTANCE_PROFILE_1_SLICE_REV1 = 0x7
- NVML_COMPUTE_INSTANCE_PROFILE_COUNT = 0x8
- NVML_COMPUTE_INSTANCE_ENGINE_PROFILE_SHARED = 0x0
- NVML_COMPUTE_INSTANCE_ENGINE_PROFILE_COUNT = 0x1
- class c_nvmlComputeInstancePlacement_t(Structure):
- _fields_ = [("start", c_uint),
- ("size", c_uint)
- ]
- class c_nvmlComputeInstanceProfileInfo_t(Structure):
- _fields_ = [("id", c_uint),
- ("sliceCount", c_uint),
- ("instanceCount", c_uint),
- ("multiprocessorCount", c_uint),
- ("sharedCopyEngineCount", c_uint),
- ("sharedDecoderCount", c_uint),
- ("sharedEncoderCount", c_uint),
- ("sharedJpegCount", c_uint),
- ("sharedOfaCount", c_uint)
- ]
- nvmlComputeInstanceProfileInfo_v2 = 0x02000088
- class c_nvmlComputeInstanceProfileInfo_v2_t(_PrintableStructure):
- _fields_ = [("version", c_uint),
- ("id", c_uint),
- ("sliceCount", c_uint),
- ("instanceCount", c_uint),
- ("multiprocessorCount", c_uint),
- ("sharedCopyEngineCount", c_uint),
- ("sharedDecoderCount", c_uint),
- ("sharedEncoderCount", c_uint),
- ("sharedJpegCount", c_uint),
- ("sharedOfaCount", c_uint),
- ("name", c_char * NVML_DEVICE_NAME_V2_BUFFER_SIZE)
- ]
- def __init__(self):
- super(c_nvmlComputeInstanceProfileInfo_v2_t, self).__init__(version=nvmlComputeInstanceProfileInfo_v2)
- class c_nvmlComputeInstanceInfo_t(Structure):
- _fields_ = [("device", c_nvmlDevice_t),
- ("gpuInstance", c_nvmlGpuInstance_t),
- ("id", c_uint),
- ("profileId", c_uint),
- ("placement", c_nvmlComputeInstancePlacement_t)
- ]
- NVML_MAX_GPU_UTILIZATIONS = 8
- NVML_GPU_UTILIZATION_DOMAIN_GPU = 0
- NVML_GPU_UTILIZATION_DOMAIN_FB = 1
- NVML_GPU_UTILIZATION_DOMAIN_VID = 2
- NVML_GPU_UTILIZATION_DOMAIN_BUS = 3
- class c_nvmlGpuDynamicPstatesUtilization_t(Structure):
- _fields_ = [("bIsPresent", c_uint, 1),
- ("percentage", c_uint),
- ("incThreshold", c_uint),
- ("decThreshold", c_uint)]
- class c_nvmlGpuDynamicPstatesInfo_t(Structure):
- _fields_ = [("flags", c_uint),
- ("utilization", c_nvmlGpuDynamicPstatesUtilization_t * NVML_MAX_GPU_UTILIZATIONS)]
- NVML_MAX_THERMAL_SENSORS_PER_GPU = 3
- NVML_THERMAL_TARGET_NONE = 0
- NVML_THERMAL_TARGET_GPU = 1
- NVML_THERMAL_TARGET_MEMORY = 2
- NVML_THERMAL_TARGET_POWER_SUPPLY = 4
- NVML_THERMAL_TARGET_BOARD = 8
- NVML_THERMAL_TARGET_VCD_BOARD = 9
- NVML_THERMAL_TARGET_VCD_INLET = 10
- NVML_THERMAL_TARGET_VCD_OUTLET = 11
- NVML_THERMAL_TARGET_ALL = 15
- NVML_THERMAL_TARGET_UNKNOWN = -1
- NVML_THERMAL_CONTROLLER_NONE = 0
- NVML_THERMAL_CONTROLLER_GPU_INTERNAL = 1
- NVML_THERMAL_CONTROLLER_ADM1032 = 2
- NVML_THERMAL_CONTROLLER_ADT7461 = 3
- NVML_THERMAL_CONTROLLER_MAX6649 = 4
- NVML_THERMAL_CONTROLLER_MAX1617 = 5
- NVML_THERMAL_CONTROLLER_LM99 = 6
- NVML_THERMAL_CONTROLLER_LM89 = 7
- NVML_THERMAL_CONTROLLER_LM64 = 8
- NVML_THERMAL_CONTROLLER_G781 = 9
- NVML_THERMAL_CONTROLLER_ADT7473 = 10
- NVML_THERMAL_CONTROLLER_SBMAX6649 = 11
- NVML_THERMAL_CONTROLLER_VBIOSEVT = 12
- NVML_THERMAL_CONTROLLER_OS = 13
- NVML_THERMAL_CONTROLLER_NVSYSCON_CANOAS = 14
- NVML_THERMAL_CONTROLLER_NVSYSCON_E551 = 15
- NVML_THERMAL_CONTROLLER_MAX6649R = 16
- NVML_THERMAL_CONTROLLER_ADT7473S = 17
- NVML_THERMAL_CONTROLLER_UNKNOWN = -1
- class c_nvmlGpuThermalSensor_t(Structure):
- _fields_ = [("controller", c_int),
- ("defaultMinTemp", c_int),
- ("defaultMaxTemp", c_int),
- ("currentTemp", c_int),
- ("target", c_int)]
- class c_nvmlGpuThermalSettings_t(Structure):
- _fields_ = [("count", c_uint),
- ("sensor", c_nvmlGpuThermalSensor_t * NVML_MAX_THERMAL_SENSORS_PER_GPU)]
- _nvmlCoolerControl_t = c_uint
- NVML_THERMAL_COOLER_SIGNAL_NONE = 0
- NVML_THERMAL_COOLER_SIGNAL_TOGGLE = 1
- NVML_THERMAL_COOLER_SIGNAL_VARIABLE = 2
- NVML_THERMAL_COOLER_SIGNAL_COUNT = 3
- _nvmlCoolerTarget_t = c_uint
- NVML_THERMAL_COOLER_TARGET_NONE = (1 << 0)
- NVML_THERMAL_COOLER_TARGET_GPU = (1 << 1)
- NVML_THERMAL_COOLER_TARGET_MEMORY = (1 << 2)
- NVML_THERMAL_COOLER_TARGET_POWER_SUPPLY = (1 << 3)
- NVML_THERMAL_COOLER_TARGET_GPU_RELATED = (NVML_THERMAL_COOLER_TARGET_GPU | NVML_THERMAL_COOLER_TARGET_MEMORY | NVML_THERMAL_COOLER_TARGET_POWER_SUPPLY)
- class c_nvmlCoolerInfo_t(_PrintableStructure):
- _fields_ = [("version", c_uint),
- ("index", c_uint),
- ("coolerControlType", _nvmlCoolerControl_t),
- ("coolerTarget", _nvmlCoolerTarget_t)
- ]
- nvmlCoolerInfo_v1 = 0x1000010
- def nvmlDeviceGetCoolerInfo(handle):
- c_coolerInfo = c_nvmlCoolerInfo_t()
- c_coolerInfo.version = nvmlCoolerInfo_v1
- c_coolerInfo.index = 0
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetCoolerInfo")
- ret = fn(handle, byref(c_coolerInfo))
- _nvmlCheckReturn(ret)
- return [c_coolerInfo.coolerControlType, c_coolerInfo.coolerTarget]
- class struct_c_nvmlComputeInstance_t(Structure):
- pass # opaque handle
- c_nvmlComputeInstance_t = POINTER(struct_c_nvmlComputeInstance_t)
- class c_nvmlDeviceAttributes(Structure):
- _fields_ = [("multiprocessorCount", c_uint),
- ("sharedCopyEngineCount", c_uint),
- ("sharedDecoderCount", c_uint),
- ("sharedEncoderCount", c_uint),
- ("sharedJpegCount", c_uint),
- ("sharedOfaCount", c_uint),
- ("gpuInstanceSliceCount", c_uint),
- ("computeInstanceSliceCount", c_uint),
- ("memorySizeMB", c_ulonglong),
- ]
- class c_nvmlRowRemapperHistogramValues(Structure):
- _fields_ = [("max", c_uint),
- ("high", c_uint),
- ("partial", c_uint),
- ("low", c_uint),
- ("none", c_uint)
- ]
- NVML_GPU_CERT_CHAIN_SIZE = 0x1000
- NVML_GPU_ATTESTATION_CERT_CHAIN_SIZE = 0x1400
- NVML_CC_GPU_CEC_NONCE_SIZE = 0x20
- NVML_CC_GPU_ATTESTATION_REPORT_SIZE = 0x2000
- NVML_CC_GPU_CEC_ATTESTATION_REPORT_SIZE = 0x1000
- NVML_CC_CEC_ATTESTATION_REPORT_NOT_PRESENT = 0
- NVML_CC_CEC_ATTESTATION_REPORT_PRESENT = 1
- class c_nvmlConfComputeSystemState_t(Structure):
- _fields_ = [('environment', c_uint),
- ('ccFeature', c_uint),
- ('devToolsMode', c_uint),
- ]
- nvmlSystemConfComputeSettings_v1 = 0x1000014
- class c_nvmlSystemConfComputeSettings_v1_t(Structure):
- _fields_ = [('version', c_uint),
- ('environment', c_uint),
- ('ccFeature', c_uint),
- ('devToolsMode', c_uint),
- ('multiGpuMode', c_uint),
- ]
- def __init__(self):
- super(c_nvmlSystemConfComputeSettings_v1_t, self).__init__(version=nvmlSystemConfComputeSettings_v1)
- class c_nvmlConfComputeSystemCaps_t(Structure):
- _fields_ = [('cpuCaps', c_uint),
- ('gpusCaps', c_uint),
- ]
- class c_nvmlConfComputeMemSizeInfo_t(Structure):
- _fields_ = [('protectedMemSizeKib', c_ulonglong),
- ('unprotectedMemSizeKib', c_ulonglong),
- ]
- class c_nvmlConfComputeGpuCertificate_t(Structure):
- _fields_ = [('certChainSize', c_uint),
- ('attestationCertChainSize', c_uint),
- ('certChain', c_uint8 * NVML_GPU_CERT_CHAIN_SIZE),
- ('attestationCertChain', c_uint8 * NVML_GPU_ATTESTATION_CERT_CHAIN_SIZE),
- ]
- class c_nvmlConfComputeGpuAttestationReport_t(Structure):
- _fields_ = [('isCecAttestationReportPresent', c_uint), # output
- ('attestationReportSize', c_uint), # output
- ('cecAttestationReportSize', c_uint), # output
- ('nonce', c_uint8 * NVML_CC_GPU_CEC_NONCE_SIZE), # input: spdm supports 32 bytes on nonce
- ('attestationReport', c_uint8 * NVML_CC_GPU_ATTESTATION_REPORT_SIZE), # output
- ('cecAttestationReport', c_uint8 * NVML_CC_GPU_CEC_ATTESTATION_REPORT_SIZE), # output
- ]
- class c_nvmlConfComputeSetKeyRotationThresholdInfo_t(Structure):
- _fields_ = [('version', c_uint),
- ('maxAttackerAdvantage', c_ulong),
- ]
- ConfComputeSetKeyRotationThresholdInfo_v1 = 0x1000010
- class c_nvmlConfComputeGetKeyRotationThresholdInfo_t(Structure):
- _fields_ = [('version', c_uint),
- ('attackerAdvantage', c_ulong),
- ]
- ConfComputeGetKeyRotationThresholdInfo_v1 = 0x1000010
- ## string/bytes conversion for ease of use
- def convertStrBytes(func):
- '''
- In python 3, strings are unicode instead of bytes, and need to be converted for ctypes
- Args from caller: (1, 'string', <__main__.c_nvmlDevice_t at 0xFFFFFFFF>)
- Args passed to function: (1, b'string', <__main__.c_nvmlDevice_t at 0xFFFFFFFF)>
- ----
- Returned from function: b'returned string'
- Returned to caller: 'returned string'
- '''
- @wraps(func)
- def wrapper(*args, **kwargs):
- # encoding a str returns bytes in python 2 and 3
- args = [arg.encode() if isinstance(arg, str) else arg for arg in args]
- res = func(*args, **kwargs)
- # In python 2, str and bytes are the same
- # In python 3, str is unicode and should be decoded.
- # Ctypes handles most conversions, this only effects c_char and char arrays.
- if isinstance(res, bytes):
- if isinstance(res, str):
- return res
- return res.decode()
- return res
- if sys.version_info >= (3,):
- return wrapper
- return func
- def throwOnVersionMismatch(func):
- @wraps(func)
- def wrapper(*args, **kwargs):
- try:
- return func(*args, **kwargs)
- except NVMLError_FunctionNotFound:
- raise NVMLLibraryMismatchError("Unversioned function called and the "
- "pyNVML version does not match the NVML lib version. "
- "Either use matching pyNVML and NVML lib versions or "
- "use a versioned function such as " + func.__name__ + "_v2")
- return wrapper
- ## C function wrappers ##
- def nvmlInitWithFlags(flags):
- _LoadNvmlLibrary()
- #
- # Initialize the library
- #
- fn = _nvmlGetFunctionPointer("nvmlInitWithFlags")
- ret = fn(flags)
- _nvmlCheckReturn(ret)
- # Atomically update refcount
- global _nvmlLib_refcount
- libLoadLock.acquire()
- _nvmlLib_refcount += 1
- libLoadLock.release()
- return None
- def nvmlInit():
- nvmlInitWithFlags(0)
- return None
- def _LoadNvmlLibrary():
- '''
- Load the library if it isn't loaded already
- '''
- global nvmlLib
- if (nvmlLib == None):
- # lock to ensure only one caller loads the library
- libLoadLock.acquire()
- try:
- # ensure the library still isn't loaded
- if (nvmlLib == None):
- try:
- if (sys.platform[:3] == "win"):
- # cdecl calling convention
- try:
- # Check for nvml.dll in System32 first for DCH drivers
- nvmlLib = CDLL(os.path.join(os.getenv("WINDIR", "C:/Windows"), "System32/nvml.dll"))
- except OSError as ose:
- # If nvml.dll is not found in System32, it should be in ProgramFiles
- # load nvml.dll from %ProgramFiles%/NVIDIA Corporation/NVSMI/nvml.dll
- nvmlLib = CDLL(os.path.join(os.getenv("ProgramFiles", "C:/Program Files"), "NVIDIA Corporation/NVSMI/nvml.dll"))
- else:
- # assume linux
- nvmlLib = CDLL("libnvidia-ml.so.1")
- except OSError as ose:
- _nvmlCheckReturn(NVML_ERROR_LIBRARY_NOT_FOUND)
- if (nvmlLib == None):
- _nvmlCheckReturn(NVML_ERROR_LIBRARY_NOT_FOUND)
- finally:
- # lock is always freed
- libLoadLock.release()
- def nvmlShutdown():
- #
- # Leave the library loaded, but shutdown the interface
- #
- fn = _nvmlGetFunctionPointer("nvmlShutdown")
- ret = fn()
- _nvmlCheckReturn(ret)
- # Atomically update refcount
- global _nvmlLib_refcount
- libLoadLock.acquire()
- if (0 < _nvmlLib_refcount):
- _nvmlLib_refcount -= 1
- libLoadLock.release()
- return None
- # Added in 2.285
- @convertStrBytes
- def nvmlErrorString(result):
- fn = _nvmlGetFunctionPointer("nvmlErrorString")
- fn.restype = c_char_p # otherwise return is an int
- ret = fn(result)
- return ret
- # Added in 2.285
- @convertStrBytes
- def nvmlSystemGetNVMLVersion():
- c_version = create_string_buffer(NVML_SYSTEM_NVML_VERSION_BUFFER_SIZE)
- fn = _nvmlGetFunctionPointer("nvmlSystemGetNVMLVersion")
- ret = fn(c_version, c_uint(NVML_SYSTEM_NVML_VERSION_BUFFER_SIZE))
- _nvmlCheckReturn(ret)
- return c_version.value
- def nvmlSystemGetCudaDriverVersion():
- c_cuda_version = c_int()
- fn = _nvmlGetFunctionPointer("nvmlSystemGetCudaDriverVersion")
- ret = fn(byref(c_cuda_version))
- _nvmlCheckReturn(ret)
- return c_cuda_version.value
- def nvmlSystemGetCudaDriverVersion_v2():
- c_cuda_version = c_int()
- fn = _nvmlGetFunctionPointer("nvmlSystemGetCudaDriverVersion_v2")
- ret = fn(byref(c_cuda_version))
- _nvmlCheckReturn(ret)
- return c_cuda_version.value
- # Added in 2.285
- @convertStrBytes
- def nvmlSystemGetProcessName(pid):
- c_name = create_string_buffer(1024)
- fn = _nvmlGetFunctionPointer("nvmlSystemGetProcessName")
- ret = fn(c_uint(pid), c_name, c_uint(1024))
- _nvmlCheckReturn(ret)
- return c_name.value
- @convertStrBytes
- def nvmlSystemGetDriverVersion():
- c_version = create_string_buffer(NVML_SYSTEM_DRIVER_VERSION_BUFFER_SIZE)
- fn = _nvmlGetFunctionPointer("nvmlSystemGetDriverVersion")
- ret = fn(c_version, c_uint(NVML_SYSTEM_DRIVER_VERSION_BUFFER_SIZE))
- _nvmlCheckReturn(ret)
- return c_version.value
- # Added in 2.285
- def nvmlSystemGetHicVersion():
- c_count = c_uint(0)
- hics = None
- fn = _nvmlGetFunctionPointer("nvmlSystemGetHicVersion")
- # get the count
- ret = fn(byref(c_count), None)
- # this should only fail with insufficient size
- if ((ret != NVML_SUCCESS) and
- (ret != NVML_ERROR_INSUFFICIENT_SIZE)):
- raise NVMLError(ret)
- # If there are no hics
- if (c_count.value == 0):
- return []
- hic_array = c_nvmlHwbcEntry_t * c_count.value
- hics = hic_array()
- ret = fn(byref(c_count), hics)
- _nvmlCheckReturn(ret)
- return hics
- def nvmlSystemGetDriverBranch():
- c_branchInfo = c_nvmlSystemDriverBranchInfo_v1_t(0)
- c_branchInfo.version = SystemDriverBranchInfo_v1
- fn = _nvmlGetFunctionPointer("nvmlSystemGetDriverBranch")
- ret = fn(byref(c_branchInfo), c_uint(NVML_SYSTEM_DRIVER_VERSION_BUFFER_SIZE))
- _nvmlCheckReturn(ret)
- return c_branchInfo
- ## Unit get functions
- def nvmlUnitGetCount():
- c_count = c_uint()
- fn = _nvmlGetFunctionPointer("nvmlUnitGetCount")
- ret = fn(byref(c_count))
- _nvmlCheckReturn(ret)
- return c_count.value
- def nvmlUnitGetHandleByIndex(index):
- c_index = c_uint(index)
- unit = c_nvmlUnit_t()
- fn = _nvmlGetFunctionPointer("nvmlUnitGetHandleByIndex")
- ret = fn(c_index, byref(unit))
- _nvmlCheckReturn(ret)
- return unit
- def nvmlUnitGetUnitInfo(unit):
- c_info = c_nvmlUnitInfo_t()
- fn = _nvmlGetFunctionPointer("nvmlUnitGetUnitInfo")
- ret = fn(unit, byref(c_info))
- _nvmlCheckReturn(ret)
- return c_info
- def nvmlUnitGetLedState(unit):
- c_state = c_nvmlLedState_t()
- fn = _nvmlGetFunctionPointer("nvmlUnitGetLedState")
- ret = fn(unit, byref(c_state))
- _nvmlCheckReturn(ret)
- return c_state
- def nvmlUnitGetPsuInfo(unit):
- c_info = c_nvmlPSUInfo_t()
- fn = _nvmlGetFunctionPointer("nvmlUnitGetPsuInfo")
- ret = fn(unit, byref(c_info))
- _nvmlCheckReturn(ret)
- return c_info
- def nvmlUnitGetTemperature(unit, type):
- c_temp = c_uint()
- fn = _nvmlGetFunctionPointer("nvmlUnitGetTemperature")
- ret = fn(unit, c_uint(type), byref(c_temp))
- _nvmlCheckReturn(ret)
- return c_temp.value
- def nvmlUnitGetFanSpeedInfo(unit):
- c_speeds = c_nvmlUnitFanSpeeds_t()
- fn = _nvmlGetFunctionPointer("nvmlUnitGetFanSpeedInfo")
- ret = fn(unit, byref(c_speeds))
- _nvmlCheckReturn(ret)
- return c_speeds
- # added to API
- def nvmlUnitGetDeviceCount(unit):
- c_count = c_uint(0)
- # query the unit to determine device count
- fn = _nvmlGetFunctionPointer("nvmlUnitGetDevices")
- ret = fn(unit, byref(c_count), None)
- if (ret == NVML_ERROR_INSUFFICIENT_SIZE):
- ret = NVML_SUCCESS
- _nvmlCheckReturn(ret)
- return c_count.value
- def nvmlUnitGetDevices(unit):
- c_count = c_uint(nvmlUnitGetDeviceCount(unit))
- device_array = c_nvmlDevice_t * c_count.value
- c_devices = device_array()
- fn = _nvmlGetFunctionPointer("nvmlUnitGetDevices")
- ret = fn(unit, byref(c_count), c_devices)
- _nvmlCheckReturn(ret)
- return c_devices
- ## Device get functions
- def nvmlDeviceGetCount():
- c_count = c_uint()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetCount_v2")
- ret = fn(byref(c_count))
- _nvmlCheckReturn(ret)
- return c_count.value
- def nvmlDeviceGetHandleByIndex(index):
- c_index = c_uint(index)
- device = c_nvmlDevice_t()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetHandleByIndex_v2")
- ret = fn(c_index, byref(device))
- _nvmlCheckReturn(ret)
- return device
- # Deprecated
- @convertStrBytes
- def nvmlDeviceGetHandleBySerial(serial):
- c_serial = c_char_p(serial)
- device = c_nvmlDevice_t()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetHandleBySerial")
- ret = fn(c_serial, byref(device))
- _nvmlCheckReturn(ret)
- return device
- @convertStrBytes
- def nvmlDeviceGetHandleByUUID(uuid):
- c_uuid = c_char_p(uuid)
- device = c_nvmlDevice_t()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetHandleByUUID")
- ret = fn(c_uuid, byref(device))
- _nvmlCheckReturn(ret)
- return device
- @convertStrBytes
- def nvmlDeviceGetHandleByUUIDV(uuid, type):
- c_uuid = c_nvmlUUID_t()
- c_uuid.type = type
- if type == NVML_UUID_TYPE_ASCII:
- c_uuid.value.str = uuid
- elif type == NVML_UUID_TYPE_BINARY:
- memmove(c_uuid.value.bytes, uuid, NVML_DEVICE_UUID_BINARY_LEN)
- device = c_nvmlDevice_t()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetHandleByUUIDV")
- ret = fn(byref(c_uuid), byref(device))
- _nvmlCheckReturn(ret)
- return device
- @convertStrBytes
- def nvmlDeviceGetHandleByPciBusId(pciBusId):
- c_busId = c_char_p(pciBusId)
- device = c_nvmlDevice_t()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetHandleByPciBusId_v2")
- ret = fn(c_busId, byref(device))
- _nvmlCheckReturn(ret)
- return device
- @convertStrBytes
- def nvmlDeviceGetName(handle):
- c_name = create_string_buffer(NVML_DEVICE_NAME_V2_BUFFER_SIZE)
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetName")
- ret = fn(handle, c_name, c_uint(NVML_DEVICE_NAME_V2_BUFFER_SIZE))
- _nvmlCheckReturn(ret)
- return c_name.value
- class c_nvmlDevicePerfModes_v1_t(_PrintableStructure):
- _fields_ = [
- ('version', c_uint),
- ('str', c_char * NVML_PERF_MODES_BUFFER_SIZE),
- ]
- nvmlDevicePerfModes_v1 = 0x1000804
- @convertStrBytes
- def nvmlDeviceGetPerformanceModes(handle):
- perfModes = c_nvmlDevicePerfModes_v1_t()
- perfModes.version = nvmlDevicePerfModes_v1
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetPerformanceModes")
- ret = fn(handle, byref(perfModes))
- _nvmlCheckReturn(ret)
- return perfModes.str
- class c_nvmlDeviceCurrentClockFreqs_v1_t(_PrintableStructure):
- _fields_ = [
- ('version', c_uint),
- ('str', c_char * NVML_PERF_MODES_BUFFER_SIZE),
- ]
- nvmlDeviceCurrentClockFreqs_v1 = 0x1000804
- @convertStrBytes
- def nvmlDeviceGetCurrentClockFreqs(handle):
- currentClockFreqs = c_nvmlDeviceCurrentClockFreqs_v1_t()
- currentClockFreqs.version = nvmlDeviceCurrentClockFreqs_v1
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetCurrentClockFreqs")
- ret = fn(handle, byref(currentClockFreqs))
- _nvmlCheckReturn(ret)
- return currentClockFreqs.str
- def nvmlDeviceGetBoardId(handle):
- c_id = c_uint()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetBoardId")
- ret = fn(handle, byref(c_id))
- _nvmlCheckReturn(ret)
- return c_id.value
- def nvmlDeviceGetMultiGpuBoard(handle):
- c_multiGpu = c_uint()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetMultiGpuBoard")
- ret = fn(handle, byref(c_multiGpu))
- _nvmlCheckReturn(ret)
- return c_multiGpu.value
- def nvmlDeviceGetBrand(handle):
- c_type = _nvmlBrandType_t()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetBrand")
- ret = fn(handle, byref(c_type))
- _nvmlCheckReturn(ret)
- return c_type.value
- def nvmlDeviceGetC2cModeInfoV1(handle):
- c_info = c_nvmlC2cModeInfo_v1_t()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetC2cModeInfoV")
- ret = fn(handle, byref(c_info))
- _nvmlCheckReturn(ret)
- return c_info
- def nvmlDeviceGetC2cModeInfoV(handle):
- return nvmlDeviceGetC2cModeInfoV1(handle)
- @convertStrBytes
- def nvmlDeviceGetBoardPartNumber(handle):
- c_part_number = create_string_buffer(NVML_DEVICE_PART_NUMBER_BUFFER_SIZE)
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetBoardPartNumber")
- ret = fn(handle, c_part_number, c_uint(NVML_DEVICE_PART_NUMBER_BUFFER_SIZE))
- _nvmlCheckReturn(ret)
- return c_part_number.value
- @convertStrBytes
- def nvmlDeviceGetSerial(handle):
- c_serial = create_string_buffer(NVML_DEVICE_SERIAL_BUFFER_SIZE)
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetSerial")
- ret = fn(handle, c_serial, c_uint(NVML_DEVICE_SERIAL_BUFFER_SIZE))
- _nvmlCheckReturn(ret)
- return c_serial.value
- def nvmlDeviceGetModuleId(handle, moduleId=c_uint()):
- isReference = type(moduleId) is not c_uint
- moduleIdRef = moduleId if isReference else byref(moduleId)
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetModuleId")
- ret = fn(handle, moduleIdRef)
- if isReference:
- return ret
- else:
- _nvmlCheckReturn(ret)
- return moduleId.value
- def nvmlDeviceGetMemoryAffinity(handle, nodeSetSize, scope):
- affinity_array = c_ulonglong * nodeSetSize
- c_affinity = affinity_array()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetMemoryAffinity")
- ret = fn(handle, nodeSetSize, byref(c_affinity), _nvmlAffinityScope_t(scope))
- _nvmlCheckReturn(ret)
- return c_affinity
- def nvmlDeviceGetCpuAffinityWithinScope(handle, cpuSetSize, scope):
- affinity_array = c_ulonglong * cpuSetSize
- c_affinity = affinity_array()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetCpuAffinityWithinScope")
- ret = fn(handle, cpuSetSize, byref(c_affinity), _nvmlAffinityScope_t(scope))
- _nvmlCheckReturn(ret)
- return c_affinity
- def nvmlDeviceGetCpuAffinity(handle, cpuSetSize):
- affinity_array = c_ulonglong * cpuSetSize
- c_affinity = affinity_array()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetCpuAffinity")
- ret = fn(handle, cpuSetSize, byref(c_affinity))
- _nvmlCheckReturn(ret)
- return c_affinity
- def nvmlDeviceSetCpuAffinity(handle):
- fn = _nvmlGetFunctionPointer("nvmlDeviceSetCpuAffinity")
- ret = fn(handle)
- _nvmlCheckReturn(ret)
- return None
- def nvmlDeviceClearCpuAffinity(handle):
- fn = _nvmlGetFunctionPointer("nvmlDeviceClearCpuAffinity")
- ret = fn(handle)
- _nvmlCheckReturn(ret)
- return None
- def nvmlDeviceGetNumaNodeId(handle):
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetNumaNodeId")
- node = c_int()
- ret = fn(handle, byref(node))
- _nvmlCheckReturn(ret)
- return node.value
- def nvmlDeviceGetAddressingMode(device):
- c_mode = c_nvmlDeviceAddressingMode_t()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetAddressingMode")
- ret = fn(device, byref(c_mode))
- _nvmlCheckReturn(ret)
- return c_mode.value
- def nvmlDeviceGetMinorNumber(handle):
- c_minor_number = c_uint()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetMinorNumber")
- ret = fn(handle, byref(c_minor_number))
- _nvmlCheckReturn(ret)
- return c_minor_number.value
- @convertStrBytes
- def nvmlDeviceGetUUID(handle):
- c_uuid = create_string_buffer(NVML_DEVICE_UUID_V2_BUFFER_SIZE)
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetUUID")
- ret = fn(handle, c_uuid, c_uint(NVML_DEVICE_UUID_V2_BUFFER_SIZE))
- _nvmlCheckReturn(ret)
- return c_uuid.value
- @convertStrBytes
- def nvmlDeviceGetInforomVersion(handle, infoRomObject):
- c_version = create_string_buffer(NVML_DEVICE_INFOROM_VERSION_BUFFER_SIZE)
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetInforomVersion")
- ret = fn(handle, _nvmlInforomObject_t(infoRomObject),
- c_version, c_uint(NVML_DEVICE_INFOROM_VERSION_BUFFER_SIZE))
- _nvmlCheckReturn(ret)
- return c_version.value
- # Added in 4.304
- @convertStrBytes
- def nvmlDeviceGetInforomImageVersion(handle):
- c_version = create_string_buffer(NVML_DEVICE_INFOROM_VERSION_BUFFER_SIZE)
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetInforomImageVersion")
- ret = fn(handle, c_version, c_uint(NVML_DEVICE_INFOROM_VERSION_BUFFER_SIZE))
- _nvmlCheckReturn(ret)
- return c_version.value
- # Added in 4.304
- def nvmlDeviceGetInforomConfigurationChecksum(handle):
- c_checksum = c_uint()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetInforomConfigurationChecksum")
- ret = fn(handle, byref(c_checksum))
- _nvmlCheckReturn(ret)
- return c_checksum.value
- # Added in 4.304
- def nvmlDeviceValidateInforom(handle):
- fn = _nvmlGetFunctionPointer("nvmlDeviceValidateInforom")
- ret = fn(handle)
- _nvmlCheckReturn(ret)
- return None
- def nvmlDeviceGetLastBBXFlushTime(handle):
- c_timestamp = c_ulonglong()
- c_durationUs = c_ulong()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetLastBBXFlushTime")
- ret = fn(handle, byref(c_timestamp), byref(c_durationUs))
- _nvmlCheckReturn(ret)
- return [c_timestamp.value, c_durationUs.value]
- def nvmlDeviceGetDisplayMode(handle):
- c_mode = _nvmlEnableState_t()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetDisplayMode")
- ret = fn(handle, byref(c_mode))
- _nvmlCheckReturn(ret)
- return c_mode.value
- def nvmlDeviceGetDisplayActive(handle):
- c_mode = _nvmlEnableState_t()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetDisplayActive")
- ret = fn(handle, byref(c_mode))
- _nvmlCheckReturn(ret)
- return c_mode.value
- def nvmlDeviceGetPersistenceMode(handle):
- c_state = _nvmlEnableState_t()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetPersistenceMode")
- ret = fn(handle, byref(c_state))
- _nvmlCheckReturn(ret)
- return c_state.value
- def nvmlDeviceGetPciInfoExt(handle, c_info):
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetPciInfoExt")
- ret = fn(handle, c_info)
- _nvmlCheckReturn(ret)
- return None
- def nvmlDeviceGetPciInfo_v3(handle):
- c_info = nvmlPciInfo_t()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetPciInfo_v3")
- ret = fn(handle, byref(c_info))
- _nvmlCheckReturn(ret)
- return c_info
- def nvmlDeviceGetPciInfo(handle):
- return nvmlDeviceGetPciInfo_v3(handle)
- def nvmlDeviceGetClockInfo(handle, type):
- c_clock = c_uint()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetClockInfo")
- ret = fn(handle, _nvmlClockType_t(type), byref(c_clock))
- _nvmlCheckReturn(ret)
- return c_clock.value
- # Added in 2.285
- def nvmlDeviceGetMaxClockInfo(handle, type):
- c_clock = c_uint()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetMaxClockInfo")
- ret = fn(handle, _nvmlClockType_t(type), byref(c_clock))
- _nvmlCheckReturn(ret)
- return c_clock.value
- # Added in 4.304
- # Deprecated
- def nvmlDeviceGetApplicationsClock(handle, type):
- c_clock = c_uint()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetApplicationsClock")
- ret = fn(handle, _nvmlClockType_t(type), byref(c_clock))
- _nvmlCheckReturn(ret)
- return c_clock.value
- def nvmlDeviceGetMaxCustomerBoostClock(handle, type):
- c_clock = c_uint()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetMaxCustomerBoostClock")
- ret = fn(handle, _nvmlClockType_t(type), byref(c_clock))
- _nvmlCheckReturn(ret)
- return c_clock.value
- def nvmlDeviceGetClock(handle, type, id):
- c_clock = c_uint()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetClock")
- ret = fn(handle, _nvmlClockType_t(type), _nvmlClockId_t(id), byref(c_clock))
- _nvmlCheckReturn(ret)
- return c_clock.value
- # Added in 5.319
- # Deprecated
- def nvmlDeviceGetDefaultApplicationsClock(handle, type):
- c_clock = c_uint()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetDefaultApplicationsClock")
- ret = fn(handle, _nvmlClockType_t(type), byref(c_clock))
- _nvmlCheckReturn(ret)
- return c_clock.value
- # Added in 4.304
- def nvmlDeviceGetSupportedMemoryClocks(handle):
- # first call to get the size
- c_count = c_uint(0)
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetSupportedMemoryClocks")
- ret = fn(handle, byref(c_count), None)
- if (ret == NVML_SUCCESS):
- # special case, no clocks
- return []
- elif (ret == NVML_ERROR_INSUFFICIENT_SIZE):
- # typical case
- clocks_array = c_uint * c_count.value
- c_clocks = clocks_array()
- # make the call again
- ret = fn(handle, byref(c_count), c_clocks)
- _nvmlCheckReturn(ret)
- procs = []
- for i in range(c_count.value):
- procs.append(c_clocks[i])
- return procs
- else:
- # error case
- raise NVMLError(ret)
- # Added in 4.304
- def nvmlDeviceGetSupportedGraphicsClocks(handle, memoryClockMHz):
- # first call to get the size
- c_count = c_uint(0)
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetSupportedGraphicsClocks")
- ret = fn(handle, c_uint(memoryClockMHz), byref(c_count), None)
- if (ret == NVML_SUCCESS):
- # special case, no clocks
- return []
- elif (ret == NVML_ERROR_INSUFFICIENT_SIZE):
- # typical case
- clocks_array = c_uint * c_count.value
- c_clocks = clocks_array()
- # make the call again
- ret = fn(handle, c_uint(memoryClockMHz), byref(c_count), c_clocks)
- _nvmlCheckReturn(ret)
- procs = []
- for i in range(c_count.value):
- procs.append(c_clocks[i])
- return procs
- else:
- # error case
- raise NVMLError(ret)
- def nvmlDeviceGetFanSpeed(handle):
- c_speed = c_uint()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetFanSpeed")
- ret = fn(handle, byref(c_speed))
- _nvmlCheckReturn(ret)
- return c_speed.value
- def nvmlDeviceGetFanSpeed_v2(handle, fan):
- c_speed = c_uint()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetFanSpeed_v2")
- ret = fn(handle, fan, byref(c_speed))
- _nvmlCheckReturn(ret)
- return c_speed.value
- class c_nvmlFanSpeedInfo_t(_PrintableStructure):
- _fields_ = [
- ('version', c_uint),
- ('fan', c_uint),
- ('speed', c_uint),
- ]
- nvmlFanSpeedInfo_v1 = 0x100000C
- def nvmlDeviceGetFanSpeedRPM(handle):
- c_fanSpeed = c_nvmlFanSpeedInfo_t()
- c_fanSpeed.fan = 0
- c_fanSpeed.version = nvmlFanSpeedInfo_v1
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetFanSpeedRPM")
- ret = fn(handle, byref(c_fanSpeed))
- _nvmlCheckReturn(ret)
- return c_fanSpeed.speed
- def nvmlDeviceGetTargetFanSpeed(handle, fan):
- c_speed = c_uint()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetTargetFanSpeed")
- ret = fn(handle, fan, byref(c_speed))
- _nvmlCheckReturn(ret)
- return c_speed.value
- def nvmlDeviceGetNumFans(device):
- c_numFans = c_uint()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetNumFans")
- ret = fn(device, byref(c_numFans))
- _nvmlCheckReturn(ret)
- return c_numFans.value
- def nvmlDeviceSetDefaultFanSpeed_v2(handle, index):
- fn = _nvmlGetFunctionPointer("nvmlDeviceSetDefaultFanSpeed_v2");
- ret = fn(handle, index)
- _nvmlCheckReturn(ret)
- return NVML_SUCCESS
- def nvmlDeviceGetMinMaxFanSpeed(handle, minSpeed=c_uint(), maxSpeed=c_uint()):
- isReference = (type(minSpeed) is not c_uint) or (type(maxSpeed) is not c_uint)
- minSpeedRef = minSpeed if isReference else byref(minSpeed)
- maxSpeedRef = maxSpeed if isReference else byref(maxSpeed)
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetMinMaxFanSpeed")
- ret = fn(handle, minSpeedRef, maxSpeedRef)
- _nvmlCheckReturn(ret)
- return NVML_SUCCESS if isReference else [minSpeed.value, maxSpeed.value]
- def nvmlDeviceGetFanControlPolicy_v2(handle, fan, fanControlPolicy=c_uint()):
- isReference = type(fanControlPolicy) is not c_uint
- fanControlPolicyRef = fanControlPolicy if isReference else byref(fanControlPolicy)
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetFanControlPolicy_v2")
- ret = fn(handle, fan, fanControlPolicyRef)
- _nvmlCheckReturn(ret)
- return NVML_SUCCESS if isReference else fanControlPolicy.value
- def nvmlDeviceSetFanControlPolicy(handle, fan, fanControlPolicy):
- fn = _nvmlGetFunctionPointer("nvmlDeviceSetFanControlPolicy")
- ret = fn(handle, fan, _nvmlFanControlPolicy_t(fanControlPolicy))
- _nvmlCheckReturn(ret)
- return NVML_SUCCESS
- class c_nvmlTemperature_v1_t(_PrintableStructure):
- _fields_ = [
- ('version', c_uint),
- ('sensorType', _nvmlTemperatureSensors_t),
- ('temperature', c_int),
- ]
- nvmlTemperature_v1 = 0x100000C
- def nvmlDeviceGetTemperatureV1(handle, sensor):
- c_temp = c_nvmlTemperature_v1_t()
- c_temp.version = nvmlTemperature_v1
- c_temp.sensorType = _nvmlTemperatureSensors_t(sensor)
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetTemperatureV")
- ret = fn(handle, byref(c_temp))
- _nvmlCheckReturn(ret)
- return c_temp.temperature
- def nvmlDeviceGetTemperatureV(handle, sensor, version=nvmlTemperature_v1):
- if version == nvmlTemperature_v1:
- return nvmlDeviceGetTemperatureV1(handle, sensor)
- else:
- raise NVMLError(NVML_ERROR_ARGUMENT_VERSION_MISMATCH)
- # DEPRECATED use nvmlDeviceGetTemperatureV instead
- def nvmlDeviceGetTemperature(handle, sensor):
- c_temp = c_uint()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetTemperature")
- ret = fn(handle, _nvmlTemperatureSensors_t(sensor), byref(c_temp))
- _nvmlCheckReturn(ret)
- return c_temp.value
- def nvmlDeviceGetTemperatureThreshold(handle, threshold):
- c_temp = c_uint()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetTemperatureThreshold")
- ret = fn(handle, _nvmlTemperatureThresholds_t(threshold), byref(c_temp))
- _nvmlCheckReturn(ret)
- return c_temp.value
- def nvmlDeviceSetTemperatureThreshold(handle, threshold, temp):
- c_temp = c_uint()
- c_temp.value = temp
- fn = _nvmlGetFunctionPointer("nvmlDeviceSetTemperatureThreshold")
- ret = fn(handle, _nvmlTemperatureThresholds_t(threshold), byref(c_temp))
- _nvmlCheckReturn(ret)
- return None
- def nvmlDeviceGetMarginTemperature(handle):
- c_marginTempInfo = c_nvmlMarginTemperature_v1_t()
- c_marginTempInfo.version = nvmlMarginTemperature_v1
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetMarginTemperature")
- ret = fn(handle, byref(c_marginTempInfo))
- _nvmlCheckReturn(ret)
- return c_marginTempInfo.marginTemperature
- # DEPRECATED use nvmlDeviceGetPerformanceState
- def nvmlDeviceGetPowerState(handle):
- c_pstate = _nvmlPstates_t()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetPowerState")
- ret = fn(handle, byref(c_pstate))
- _nvmlCheckReturn(ret)
- return c_pstate.value
- def nvmlDeviceGetPerformanceState(handle):
- c_pstate = _nvmlPstates_t()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetPerformanceState")
- ret = fn(handle, byref(c_pstate))
- _nvmlCheckReturn(ret)
- return c_pstate.value
- # Deprecated
- def nvmlDeviceGetPowerManagementMode(handle):
- c_pcapMode = _nvmlEnableState_t()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetPowerManagementMode")
- ret = fn(handle, byref(c_pcapMode))
- _nvmlCheckReturn(ret)
- return c_pcapMode.value
- def nvmlDeviceGetPowerManagementLimit(handle):
- c_limit = c_uint()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetPowerManagementLimit")
- ret = fn(handle, byref(c_limit))
- _nvmlCheckReturn(ret)
- return c_limit.value
- # Added in 4.304
- def nvmlDeviceGetPowerManagementLimitConstraints(handle):
- c_minLimit = c_uint()
- c_maxLimit = c_uint()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetPowerManagementLimitConstraints")
- ret = fn(handle, byref(c_minLimit), byref(c_maxLimit))
- _nvmlCheckReturn(ret)
- return [c_minLimit.value, c_maxLimit.value]
- # Added in 4.304
- def nvmlDeviceGetPowerManagementDefaultLimit(handle):
- c_limit = c_uint()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetPowerManagementDefaultLimit")
- ret = fn(handle, byref(c_limit))
- _nvmlCheckReturn(ret)
- return c_limit.value
- # Added in 331
- def nvmlDeviceGetEnforcedPowerLimit(handle):
- c_limit = c_uint()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetEnforcedPowerLimit")
- ret = fn(handle, byref(c_limit))
- _nvmlCheckReturn(ret)
- return c_limit.value
- def nvmlDeviceGetPowerUsage(handle):
- c_watts = c_uint()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetPowerUsage")
- ret = fn(handle, byref(c_watts))
- _nvmlCheckReturn(ret)
- return c_watts.value
- def nvmlDeviceGetTotalEnergyConsumption(handle):
- c_millijoules = c_uint64()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetTotalEnergyConsumption")
- ret = fn(handle, byref(c_millijoules))
- _nvmlCheckReturn(ret)
- return c_millijoules.value
- # Added in 4.304
- def nvmlDeviceGetGpuOperationMode(handle):
- c_currState = _nvmlGpuOperationMode_t()
- c_pendingState = _nvmlGpuOperationMode_t()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetGpuOperationMode")
- ret = fn(handle, byref(c_currState), byref(c_pendingState))
- _nvmlCheckReturn(ret)
- return [c_currState.value, c_pendingState.value]
- # Added in 4.304
- def nvmlDeviceGetCurrentGpuOperationMode(handle):
- return nvmlDeviceGetGpuOperationMode(handle)[0]
- # Added in 4.304
- def nvmlDeviceGetPendingGpuOperationMode(handle):
- return nvmlDeviceGetGpuOperationMode(handle)[1]
- def nvmlDeviceGetMemoryInfo(handle, version=None):
- if not version:
- c_memory = c_nvmlMemory_t()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetMemoryInfo")
- else:
- c_memory = c_nvmlMemory_v2_t()
- c_memory.version = version
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetMemoryInfo_v2")
- ret = fn(handle, byref(c_memory))
- _nvmlCheckReturn(ret)
- return c_memory
- def nvmlDeviceGetBAR1MemoryInfo(handle):
- c_bar1_memory = c_nvmlBAR1Memory_t()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetBAR1MemoryInfo")
- ret = fn(handle, byref(c_bar1_memory))
- _nvmlCheckReturn(ret)
- return c_bar1_memory
- def nvmlDeviceGetComputeMode(handle):
- c_mode = _nvmlComputeMode_t()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetComputeMode")
- ret = fn(handle, byref(c_mode))
- _nvmlCheckReturn(ret)
- return c_mode.value
- def nvmlDeviceGetCudaComputeCapability(handle):
- c_major = c_int()
- c_minor = c_int()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetCudaComputeCapability")
- ret = fn(handle, byref(c_major), byref(c_minor))
- _nvmlCheckReturn(ret)
- return (c_major.value, c_minor.value)
- def nvmlDeviceGetEccMode(handle):
- c_currState = _nvmlEnableState_t()
- c_pendingState = _nvmlEnableState_t()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetEccMode")
- ret = fn(handle, byref(c_currState), byref(c_pendingState))
- _nvmlCheckReturn(ret)
- return [c_currState.value, c_pendingState.value]
- # added to API
- def nvmlDeviceGetCurrentEccMode(handle):
- return nvmlDeviceGetEccMode(handle)[0]
- # added to API
- def nvmlDeviceGetPendingEccMode(handle):
- return nvmlDeviceGetEccMode(handle)[1]
- def nvmlDeviceGetDefaultEccMode(handle):
- c_defaultState = _nvmlEnableState_t()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetDefaultEccMode")
- ret = fn(handle, byref(c_defaultState))
- _nvmlCheckReturn(ret)
- return [c_defaultState.value]
- def nvmlDeviceGetTotalEccErrors(handle, errorType, counterType):
- c_count = c_ulonglong()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetTotalEccErrors")
- ret = fn(handle, _nvmlMemoryErrorType_t(errorType),
- _nvmlEccCounterType_t(counterType), byref(c_count))
- _nvmlCheckReturn(ret)
- return c_count.value
- # This is deprecated, instead use nvmlDeviceGetMemoryErrorCounter
- def nvmlDeviceGetDetailedEccErrors(handle, errorType, counterType):
- c_counts = c_nvmlEccErrorCounts_t()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetDetailedEccErrors")
- ret = fn(handle, _nvmlMemoryErrorType_t(errorType),
- _nvmlEccCounterType_t(counterType), byref(c_counts))
- _nvmlCheckReturn(ret)
- return c_counts
- # Added in 4.304
- def nvmlDeviceGetMemoryErrorCounter(handle, errorType, counterType, locationType):
- c_count = c_ulonglong()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetMemoryErrorCounter")
- ret = fn(handle,
- _nvmlMemoryErrorType_t(errorType),
- _nvmlEccCounterType_t(counterType),
- _nvmlMemoryLocation_t(locationType),
- byref(c_count))
- _nvmlCheckReturn(ret)
- return c_count.value
- def nvmlDeviceGetUtilizationRates(handle):
- c_util = c_nvmlUtilization_t()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetUtilizationRates")
- ret = fn(handle, byref(c_util))
- _nvmlCheckReturn(ret)
- return c_util
- def nvmlDeviceGetEncoderUtilization(handle):
- c_util = c_uint()
- c_samplingPeriod = c_uint()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetEncoderUtilization")
- ret = fn(handle, byref(c_util), byref(c_samplingPeriod))
- _nvmlCheckReturn(ret)
- return [c_util.value, c_samplingPeriod.value]
- def nvmlDeviceGetDecoderUtilization(handle):
- c_util = c_uint()
- c_samplingPeriod = c_uint()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetDecoderUtilization")
- ret = fn(handle, byref(c_util), byref(c_samplingPeriod))
- _nvmlCheckReturn(ret)
- return [c_util.value, c_samplingPeriod.value]
- def nvmlDeviceGetJpgUtilization(handle):
- c_util = c_uint()
- c_samplingPeriod = c_uint()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetJpgUtilization")
- ret = fn(handle, byref(c_util), byref(c_samplingPeriod))
- _nvmlCheckReturn(ret)
- return [c_util.value, c_samplingPeriod.value]
- def nvmlDeviceGetOfaUtilization(handle):
- c_util = c_uint()
- c_samplingPeriod = c_uint()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetOfaUtilization")
- ret = fn(handle, byref(c_util), byref(c_samplingPeriod))
- _nvmlCheckReturn(ret)
- return [c_util.value, c_samplingPeriod.value]
- def nvmlDeviceGetPcieReplayCounter(handle):
- c_replay = c_uint()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetPcieReplayCounter")
- ret = fn(handle, byref(c_replay))
- _nvmlCheckReturn(ret)
- return c_replay.value
- def nvmlDeviceGetDriverModel(handle):
- c_currModel = _nvmlDriverModel_t()
- c_pendingModel = _nvmlDriverModel_t()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetDriverModel")
- ret = fn(handle, byref(c_currModel), byref(c_pendingModel))
- _nvmlCheckReturn(ret)
- return [c_currModel.value, c_pendingModel.value]
- # added to API
- def nvmlDeviceGetCurrentDriverModel(handle):
- return nvmlDeviceGetDriverModel(handle)[0]
- # added to API
- def nvmlDeviceGetPendingDriverModel(handle):
- return nvmlDeviceGetDriverModel(handle)[1]
- # Added in 2.285
- @convertStrBytes
- def nvmlDeviceGetVbiosVersion(handle):
- c_version = create_string_buffer(NVML_DEVICE_VBIOS_VERSION_BUFFER_SIZE)
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetVbiosVersion")
- ret = fn(handle, c_version, c_uint(NVML_DEVICE_VBIOS_VERSION_BUFFER_SIZE))
- _nvmlCheckReturn(ret)
- return c_version.value
- # Added in 2.285
- def nvmlDeviceGetComputeRunningProcesses_v2(handle):
- # first call to get the size
- c_count = c_uint(0)
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetComputeRunningProcesses_v2")
- ret = fn(handle, byref(c_count), None)
- if (ret == NVML_SUCCESS):
- # special case, no running processes
- return []
- elif (ret == NVML_ERROR_INSUFFICIENT_SIZE):
- # typical case
- # oversize the array incase more processes are created
- c_count.value = c_count.value * 2 + 5
- proc_array = c_nvmlProcessInfo_v2_t * c_count.value
- c_procs = proc_array()
- # make the call again
- ret = fn(handle, byref(c_count), c_procs)
- _nvmlCheckReturn(ret)
- procs = []
- for i in range(c_count.value):
- # use an alternative struct for this object
- obj = nvmlStructToFriendlyObject(c_procs[i])
- if (obj.usedGpuMemory == NVML_VALUE_NOT_AVAILABLE_ulonglong.value):
- # special case for WDDM on Windows, see comment above
- obj.usedGpuMemory = None
- procs.append(obj)
- return procs
- else:
- # error case
- raise NVMLError(ret)
- # Added in 2.285
- def nvmlDeviceGetComputeRunningProcesses_v3(handle):
- # first call to get the size
- c_count = c_uint(0)
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetComputeRunningProcesses_v3")
- ret = fn(handle, byref(c_count), None)
- if (ret == NVML_SUCCESS):
- # special case, no running processes
- return []
- elif (ret == NVML_ERROR_INSUFFICIENT_SIZE):
- # typical case
- # oversize the array incase more processes are created
- c_count.value = c_count.value * 2 + 5
- proc_array = c_nvmlProcessInfo_v3_t * c_count.value
- c_procs = proc_array()
- # make the call again
- ret = fn(handle, byref(c_count), c_procs)
- _nvmlCheckReturn(ret)
- procs = []
- for i in range(c_count.value):
- # use an alternative struct for this object
- obj = nvmlStructToFriendlyObject(c_procs[i])
- if (obj.usedGpuMemory == NVML_VALUE_NOT_AVAILABLE_ulonglong.value):
- # special case for WDDM on Windows, see comment above
- obj.usedGpuMemory = None
- procs.append(obj)
- return procs
- else:
- # error case
- raise NVMLError(ret)
- @throwOnVersionMismatch
- def nvmlDeviceGetComputeRunningProcesses(handle):
- return nvmlDeviceGetComputeRunningProcesses_v3(handle)
- def nvmlDeviceGetGraphicsRunningProcesses_v2(handle):
- # first call to get the size
- c_count = c_uint(0)
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetGraphicsRunningProcesses_v2")
- ret = fn(handle, byref(c_count), None)
- if (ret == NVML_SUCCESS):
- # special case, no running processes
- return []
- elif (ret == NVML_ERROR_INSUFFICIENT_SIZE):
- # typical case
- # oversize the array incase more processes are created
- c_count.value = c_count.value * 2 + 5
- proc_array = c_nvmlProcessInfo_v2_t * c_count.value
- c_procs = proc_array()
- # make the call again
- ret = fn(handle, byref(c_count), c_procs)
- _nvmlCheckReturn(ret)
- procs = []
- for i in range(c_count.value):
- # use an alternative struct for this object
- obj = nvmlStructToFriendlyObject(c_procs[i])
- if (obj.usedGpuMemory == NVML_VALUE_NOT_AVAILABLE_ulonglong.value):
- # special case for WDDM on Windows, see comment above
- obj.usedGpuMemory = None
- procs.append(obj)
- return procs
- else:
- # error case
- raise NVMLError(ret)
- def nvmlDeviceGetGraphicsRunningProcesses_v3(handle):
- # first call to get the size
- c_count = c_uint(0)
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetGraphicsRunningProcesses_v3")
- ret = fn(handle, byref(c_count), None)
- if (ret == NVML_SUCCESS):
- # special case, no running processes
- return []
- elif (ret == NVML_ERROR_INSUFFICIENT_SIZE):
- # typical case
- # oversize the array incase more processes are created
- c_count.value = c_count.value * 2 + 5
- proc_array = c_nvmlProcessInfo_v3_t * c_count.value
- c_procs = proc_array()
- # make the call again
- ret = fn(handle, byref(c_count), c_procs)
- _nvmlCheckReturn(ret)
- procs = []
- for i in range(c_count.value):
- # use an alternative struct for this object
- obj = nvmlStructToFriendlyObject(c_procs[i])
- if (obj.usedGpuMemory == NVML_VALUE_NOT_AVAILABLE_ulonglong.value):
- # special case for WDDM on Windows, see comment above
- obj.usedGpuMemory = None
- procs.append(obj)
- return procs
- else:
- # error case
- raise NVMLError(ret)
- @throwOnVersionMismatch
- def nvmlDeviceGetGraphicsRunningProcesses(handle):
- return nvmlDeviceGetGraphicsRunningProcesses_v3(handle)
- @throwOnVersionMismatch
- def nvmlDeviceGetMPSComputeRunningProcesses(handle):
- return nvmlDeviceGetMPSComputeRunningProcesses_v3(handle)
- def nvmlDeviceGetMPSComputeRunningProcesses_v2(handle):
- # first call to get the size
- c_count = c_uint(0)
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetMPSComputeRunningProcesses_v2")
- ret = fn(handle, byref(c_count), None)
- if (ret == NVML_SUCCESS):
- # special case, no running processes
- return []
- elif (ret == NVML_ERROR_INSUFFICIENT_SIZE):
- # typical case
- # oversize the array incase more processes are created
- c_count.value = c_count.value * 2 + 5
- proc_array = c_nvmlProcessInfo_v2_t * c_count.value
- c_procs = proc_array()
- # make the call again
- ret = fn(handle, byref(c_count), c_procs)
- _nvmlCheckReturn(ret)
- procs = []
- for i in range(c_count.value):
- # use an alternative struct for this object
- obj = nvmlStructToFriendlyObject(c_procs[i])
- if (obj.usedGpuMemory == NVML_VALUE_NOT_AVAILABLE_ulonglong.value):
- # special case for WDDM on Windows, see comment above
- obj.usedGpuMemory = None
- procs.append(obj)
- return procs
- else:
- # error case
- raise NVMLError(ret)
- def nvmlDeviceGetMPSComputeRunningProcesses_v3(handle):
- # first call to get the size
- c_count = c_uint(0)
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetMPSComputeRunningProcesses_v3")
- ret = fn(handle, byref(c_count), None)
- if (ret == NVML_SUCCESS):
- # special case, no running processes
- return []
- elif (ret == NVML_ERROR_INSUFFICIENT_SIZE):
- # typical case
- # oversize the array incase more processes are created
- c_count.value = c_count.value * 2 + 5
- proc_array = c_nvmlProcessInfo_v3_t * c_count.value
- c_procs = proc_array()
- # make the call again
- ret = fn(handle, byref(c_count), c_procs)
- _nvmlCheckReturn(ret)
- procs = []
- for i in range(c_count.value):
- # use an alternative struct for this object
- obj = nvmlStructToFriendlyObject(c_procs[i])
- if (obj.usedGpuMemory == NVML_VALUE_NOT_AVAILABLE_ulonglong.value):
- # special case for WDDM on Windows, see comment above
- obj.usedGpuMemory = None
- procs.append(obj)
- return procs
- else:
- # error case
- raise NVMLError(ret)
- def nvmlDeviceGetRunningProcessDetailList(handle, version, mode):
- c_processDetailList = c_nvmlProcessDetailList_t()
- c_processDetailList.version = version
- c_processDetailList.mode = mode
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetRunningProcessDetailList")
- # first call to get the size
- ret = fn(handle, byref(c_processDetailList))
- if (ret == NVML_SUCCESS):
- # special case, no running processes
- return []
- elif (ret == NVML_ERROR_INSUFFICIENT_SIZE):
- c_procs = c_nvmlProcessDetail_v1_t * c_processDetailList.numProcArrayEntries
- c_processDetailList.procArray = cast((c_procs)(), POINTER(c_nvmlProcessDetail_v1_t))
- # make the call again
- ret = fn(handle, byref(c_processDetailList))
- _nvmlCheckReturn(ret)
- procs = []
- for i in range(c_processDetailList.numProcArrayEntries):
- # use an alternative struct for this object
- obj = c_processDetailList.procArray[i]
- if (obj.usedGpuMemory == NVML_VALUE_NOT_AVAILABLE_ulonglong.value):
- obj.usedGpuMemory = None
- if (obj.usedGpuCcProtectedMemory == NVML_VALUE_NOT_AVAILABLE_ulonglong.value):
- obj.usedGpuCcProtectedMemory = None
- procs.append(obj)
- return procs
- else:
- # error case
- raise NVMLError(ret)
- def nvmlDeviceGetAutoBoostedClocksEnabled(handle):
- c_isEnabled = _nvmlEnableState_t()
- c_defaultIsEnabled = _nvmlEnableState_t()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetAutoBoostedClocksEnabled")
- ret = fn(handle, byref(c_isEnabled), byref(c_defaultIsEnabled))
- _nvmlCheckReturn(ret)
- return [c_isEnabled.value, c_defaultIsEnabled.value]
- #Throws NVML_ERROR_NOT_SUPPORTED if hardware doesn't support setting auto boosted clocks
- ## Set functions
- def nvmlUnitSetLedState(unit, color):
- fn = _nvmlGetFunctionPointer("nvmlUnitSetLedState")
- ret = fn(unit, _nvmlLedColor_t(color))
- _nvmlCheckReturn(ret)
- return None
- def nvmlDeviceSetPersistenceMode(handle, mode):
- fn = _nvmlGetFunctionPointer("nvmlDeviceSetPersistenceMode")
- ret = fn(handle, _nvmlEnableState_t(mode))
- _nvmlCheckReturn(ret)
- return None
- def nvmlDeviceSetComputeMode(handle, mode):
- fn = _nvmlGetFunctionPointer("nvmlDeviceSetComputeMode")
- ret = fn(handle, _nvmlComputeMode_t(mode))
- _nvmlCheckReturn(ret)
- return None
- def nvmlDeviceSetEccMode(handle, mode):
- fn = _nvmlGetFunctionPointer("nvmlDeviceSetEccMode")
- ret = fn(handle, _nvmlEnableState_t(mode))
- _nvmlCheckReturn(ret)
- return None
- def nvmlDeviceClearEccErrorCounts(handle, counterType):
- fn = _nvmlGetFunctionPointer("nvmlDeviceClearEccErrorCounts")
- ret = fn(handle, _nvmlEccCounterType_t(counterType))
- _nvmlCheckReturn(ret)
- return None
- def nvmlDeviceSetDriverModel(handle, model):
- fn = _nvmlGetFunctionPointer("nvmlDeviceSetDriverModel")
- ret = fn(handle, _nvmlDriverModel_t(model))
- _nvmlCheckReturn(ret)
- return None
- def nvmlDeviceSetAutoBoostedClocksEnabled(handle, enabled):
- fn = _nvmlGetFunctionPointer("nvmlDeviceSetAutoBoostedClocksEnabled")
- ret = fn(handle, _nvmlEnableState_t(enabled))
- _nvmlCheckReturn(ret)
- return None
- #Throws NVML_ERROR_NOT_SUPPORTED if hardware doesn't support setting auto boosted clocks
- def nvmlDeviceSetDefaultAutoBoostedClocksEnabled(handle, enabled, flags):
- fn = _nvmlGetFunctionPointer("nvmlDeviceSetDefaultAutoBoostedClocksEnabled")
- ret = fn(handle, _nvmlEnableState_t(enabled), c_uint(flags))
- _nvmlCheckReturn(ret)
- return None
- #Throws NVML_ERROR_NOT_SUPPORTED if hardware doesn't support setting auto boosted clocks
- def nvmlDeviceSetGpuLockedClocks(handle, minGpuClockMHz, maxGpuClockMHz):
- fn = _nvmlGetFunctionPointer("nvmlDeviceSetGpuLockedClocks")
- ret = fn(handle, c_uint(minGpuClockMHz), c_uint(maxGpuClockMHz))
- _nvmlCheckReturn(ret)
- return None
- def nvmlDeviceResetGpuLockedClocks(handle):
- fn = _nvmlGetFunctionPointer("nvmlDeviceResetGpuLockedClocks")
- ret = fn(handle)
- _nvmlCheckReturn(ret)
- return None
- def nvmlDeviceSetMemoryLockedClocks(handle, minMemClockMHz, maxMemClockMHz):
- fn = _nvmlGetFunctionPointer("nvmlDeviceSetMemoryLockedClocks")
- ret = fn(handle, c_uint(minMemClockMHz), c_uint(maxMemClockMHz))
- _nvmlCheckReturn(ret)
- return None
- def nvmlDeviceResetMemoryLockedClocks(handle):
- fn = _nvmlGetFunctionPointer("nvmlDeviceResetMemoryLockedClocks")
- ret = fn(handle)
- _nvmlCheckReturn(ret)
- return None
- def nvmlDeviceGetClkMonStatus(handle, c_clkMonInfo=nvmlClkMonStatus_t()):
- isReference = type(c_clkMonInfo) is not nvmlClkMonStatus_t
- c_clkMonInfoRef = c_clkMonInfo if isReference else byref(c_clkMonInfo)
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetClkMonStatus")
- ret = fn(handle, c_clkMonInfoRef)
- _nvmlCheckReturn(ret)
- return NVML_SUCCESS if isReference else c_clkMonInfo
- # Added in 4.304
- # Deprecated
- def nvmlDeviceSetApplicationsClocks(handle, maxMemClockMHz, maxGraphicsClockMHz):
- fn = _nvmlGetFunctionPointer("nvmlDeviceSetApplicationsClocks")
- ret = fn(handle, c_uint(maxMemClockMHz), c_uint(maxGraphicsClockMHz))
- _nvmlCheckReturn(ret)
- return None
- # Added in 4.304
- # Deprecated
- def nvmlDeviceResetApplicationsClocks(handle):
- fn = _nvmlGetFunctionPointer("nvmlDeviceResetApplicationsClocks")
- ret = fn(handle)
- _nvmlCheckReturn(ret)
- return None
- # Added in 4.304
- def nvmlDeviceSetPowerManagementLimit(handle, limit):
- fn = _nvmlGetFunctionPointer("nvmlDeviceSetPowerManagementLimit")
- ret = fn(handle, c_uint(limit))
- _nvmlCheckReturn(ret)
- return None
- # Added in 4.304
- def nvmlDeviceSetGpuOperationMode(handle, mode):
- fn = _nvmlGetFunctionPointer("nvmlDeviceSetGpuOperationMode")
- ret = fn(handle, _nvmlGpuOperationMode_t(mode))
- _nvmlCheckReturn(ret)
- return None
- # Added in 2.285
- def nvmlEventSetCreate():
- fn = _nvmlGetFunctionPointer("nvmlEventSetCreate")
- eventSet = c_nvmlEventSet_t()
- ret = fn(byref(eventSet))
- _nvmlCheckReturn(ret)
- return eventSet
- # Added in 2.285
- def nvmlDeviceRegisterEvents(handle, eventTypes, eventSet):
- fn = _nvmlGetFunctionPointer("nvmlDeviceRegisterEvents")
- ret = fn(handle, c_ulonglong(eventTypes), eventSet)
- _nvmlCheckReturn(ret)
- return None
- # Added in 2.285
- def nvmlDeviceGetSupportedEventTypes(handle):
- c_eventTypes = c_ulonglong()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetSupportedEventTypes")
- ret = fn(handle, byref(c_eventTypes))
- _nvmlCheckReturn(ret)
- return c_eventTypes.value
- # raises NVML_ERROR_TIMEOUT exception on timeout
- def nvmlEventSetWait_v2(eventSet, timeoutms):
- fn = _nvmlGetFunctionPointer("nvmlEventSetWait_v2")
- data = c_nvmlEventData_t()
- ret = fn(eventSet, byref(data), c_uint(timeoutms))
- _nvmlCheckReturn(ret)
- return data
- def nvmlEventSetWait(eventSet, timeoutms):
- return nvmlEventSetWait_v2(eventSet, timeoutms)
- # Added in 2.285
- def nvmlEventSetFree(eventSet):
- fn = _nvmlGetFunctionPointer("nvmlEventSetFree")
- ret = fn(eventSet)
- _nvmlCheckReturn(ret)
- return None
- # Added in 3.295
- def nvmlDeviceOnSameBoard(handle1, handle2):
- fn = _nvmlGetFunctionPointer("nvmlDeviceOnSameBoard")
- onSameBoard = c_int()
- ret = fn(handle1, handle2, byref(onSameBoard))
- _nvmlCheckReturn(ret)
- return (onSameBoard.value != 0)
- # Added in 3.295
- def nvmlDeviceGetCurrPcieLinkGeneration(handle):
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetCurrPcieLinkGeneration")
- gen = c_uint()
- ret = fn(handle, byref(gen))
- _nvmlCheckReturn(ret)
- return gen.value
- # Added in 3.295
- def nvmlDeviceGetMaxPcieLinkGeneration(handle):
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetMaxPcieLinkGeneration")
- gen = c_uint()
- ret = fn(handle, byref(gen))
- _nvmlCheckReturn(ret)
- return gen.value
- # Added in 3.295
- def nvmlDeviceGetCurrPcieLinkWidth(handle):
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetCurrPcieLinkWidth")
- width = c_uint()
- ret = fn(handle, byref(width))
- _nvmlCheckReturn(ret)
- return width.value
- # Added in 3.295
- def nvmlDeviceGetMaxPcieLinkWidth(handle):
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetMaxPcieLinkWidth")
- width = c_uint()
- ret = fn(handle, byref(width))
- _nvmlCheckReturn(ret)
- return width.value
- def nvmlDeviceGetGpuMaxPcieLinkGeneration(handle):
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetGpuMaxPcieLinkGeneration")
- gen = c_uint()
- ret = fn(handle, byref(gen))
- _nvmlCheckReturn(ret)
- return gen.value
- # Added in 4.304
- # Deprecated
- def nvmlDeviceGetSupportedClocksThrottleReasons(handle):
- c_reasons= c_ulonglong()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetSupportedClocksThrottleReasons")
- ret = fn(handle, byref(c_reasons))
- _nvmlCheckReturn(ret)
- return c_reasons.value
- def nvmlDeviceGetSupportedClocksEventReasons(handle):
- c_reasons= c_ulonglong()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetSupportedClocksEventReasons")
- ret = fn(handle, byref(c_reasons))
- _nvmlCheckReturn(ret)
- return c_reasons.value
- # Added in 4.304
- # Deprecated
- def nvmlDeviceGetCurrentClocksThrottleReasons(handle):
- c_reasons= c_ulonglong()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetCurrentClocksThrottleReasons")
- ret = fn(handle, byref(c_reasons))
- _nvmlCheckReturn(ret)
- return c_reasons.value
- def nvmlDeviceGetCurrentClocksEventReasons(handle):
- c_reasons= c_ulonglong()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetCurrentClocksEventReasons")
- ret = fn(handle, byref(c_reasons))
- _nvmlCheckReturn(ret)
- return c_reasons.value
- # Added in 5.319
- def nvmlDeviceGetIndex(handle):
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetIndex")
- c_index = c_uint()
- ret = fn(handle, byref(c_index))
- _nvmlCheckReturn(ret)
- return c_index.value
- # Added in 5.319
- def nvmlDeviceGetAccountingMode(handle):
- c_mode = _nvmlEnableState_t()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetAccountingMode")
- ret = fn(handle, byref(c_mode))
- _nvmlCheckReturn(ret)
- return c_mode.value
- def nvmlDeviceSetAccountingMode(handle, mode):
- fn = _nvmlGetFunctionPointer("nvmlDeviceSetAccountingMode")
- ret = fn(handle, _nvmlEnableState_t(mode))
- _nvmlCheckReturn(ret)
- return None
- def nvmlDeviceClearAccountingPids(handle):
- fn = _nvmlGetFunctionPointer("nvmlDeviceClearAccountingPids")
- ret = fn(handle)
- _nvmlCheckReturn(ret)
- return None
- def nvmlDeviceGetAccountingStats(handle, pid):
- stats = c_nvmlAccountingStats_t()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetAccountingStats")
- ret = fn(handle, c_uint(pid), byref(stats))
- _nvmlCheckReturn(ret)
- if (stats.maxMemoryUsage == NVML_VALUE_NOT_AVAILABLE_ulonglong.value):
- # special case for WDDM on Windows, see comment above
- stats.maxMemoryUsage = None
- return stats
- def nvmlDeviceGetAccountingPids(handle):
- count = c_uint(nvmlDeviceGetAccountingBufferSize(handle))
- pids = (c_uint * count.value)()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetAccountingPids")
- ret = fn(handle, byref(count), pids)
- _nvmlCheckReturn(ret)
- return list(map(int, pids[0:count.value]))
- def nvmlDeviceGetAccountingBufferSize(handle):
- bufferSize = c_uint()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetAccountingBufferSize")
- ret = fn(handle, byref(bufferSize))
- _nvmlCheckReturn(ret)
- return int(bufferSize.value)
- def nvmlDeviceGetRetiredPages(device, sourceFilter):
- c_source = _nvmlPageRetirementCause_t(sourceFilter)
- c_count = c_uint(0)
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetRetiredPages")
- # First call will get the size
- ret = fn(device, c_source, byref(c_count), None)
- # this should only fail with insufficient size
- if ((ret != NVML_SUCCESS) and
- (ret != NVML_ERROR_INSUFFICIENT_SIZE)):
- raise NVMLError(ret)
- # call again with a buffer
- # oversize the array for the rare cases where additional pages
- # are retired between NVML calls
- c_count.value = c_count.value * 2 + 5
- page_array = c_ulonglong * c_count.value
- c_pages = page_array()
- ret = fn(device, c_source, byref(c_count), c_pages)
- _nvmlCheckReturn(ret)
- return list(map(int, c_pages[0:c_count.value]))
- def nvmlDeviceGetRetiredPages_v2(device, sourceFilter):
- c_source = _nvmlPageRetirementCause_t(sourceFilter)
- c_count = c_uint(0)
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetRetiredPages_v2")
- # First call will get the size
- ret = fn(device, c_source, byref(c_count), None)
- # this should only fail with insufficient size
- if ((ret != NVML_SUCCESS) and
- (ret != NVML_ERROR_INSUFFICIENT_SIZE)):
- raise NVMLError(ret)
- # call again with a buffer
- # oversize the array for the rare cases where additional pages
- # are retired between NVML calls
- c_count.value = c_count.value * 2 + 5
- page_array = c_ulonglong * c_count.value
- c_pages = page_array()
- times_array = c_ulonglong * c_count.value
- c_times = times_array()
- ret = fn(device, c_source, byref(c_count), c_pages, c_times)
- _nvmlCheckReturn(ret)
- return [ { 'address': int(c_pages[i]), 'timestamp': int(c_times[i]) } for i in range(c_count.value) ];
- def nvmlDeviceGetRetiredPagesPendingStatus(device):
- c_pending = _nvmlEnableState_t()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetRetiredPagesPendingStatus")
- ret = fn(device, byref(c_pending))
- _nvmlCheckReturn(ret)
- return int(c_pending.value)
- def nvmlDeviceGetAPIRestriction(device, apiType):
- c_permission = _nvmlEnableState_t()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetAPIRestriction")
- ret = fn(device, _nvmlRestrictedAPI_t(apiType), byref(c_permission))
- _nvmlCheckReturn(ret)
- return int(c_permission.value)
- def nvmlDeviceSetAPIRestriction(handle, apiType, isRestricted):
- fn = _nvmlGetFunctionPointer("nvmlDeviceSetAPIRestriction")
- ret = fn(handle, _nvmlRestrictedAPI_t(apiType), _nvmlEnableState_t(isRestricted))
- _nvmlCheckReturn(ret)
- return None
- def nvmlDeviceGetBridgeChipInfo(handle):
- bridgeHierarchy = c_nvmlBridgeChipHierarchy_t()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetBridgeChipInfo")
- ret = fn(handle, byref(bridgeHierarchy))
- _nvmlCheckReturn(ret)
- return bridgeHierarchy
- def nvmlDeviceGetSamples(device, sampling_type, timeStamp):
- c_sampling_type = _nvmlSamplingType_t(sampling_type)
- c_time_stamp = c_ulonglong(timeStamp)
- c_sample_count = c_uint(0)
- c_sample_value_type = _nvmlValueType_t()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetSamples")
- ## First Call gets the size
- ret = fn(device, c_sampling_type, c_time_stamp, byref(c_sample_value_type), byref(c_sample_count), None)
- # Stop if this fails
- if (ret != NVML_SUCCESS):
- raise NVMLError(ret)
- sampleArray = c_sample_count.value * c_nvmlSample_t
- c_samples = sampleArray()
- ret = fn(device, c_sampling_type, c_time_stamp, byref(c_sample_value_type), byref(c_sample_count), c_samples)
- _nvmlCheckReturn(ret)
- return (c_sample_value_type.value, c_samples[0:c_sample_count.value])
- # Deprecated
- def nvmlDeviceGetViolationStatus(device, perfPolicyType):
- c_perfPolicy_type = _nvmlPerfPolicyType_t(perfPolicyType)
- c_violTime = c_nvmlViolationTime_t()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetViolationStatus")
- ## Invoke the method to get violation time
- ret = fn(device, c_perfPolicy_type, byref(c_violTime))
- _nvmlCheckReturn(ret)
- return c_violTime
- def nvmlDeviceGetPcieThroughput(device, counter):
- c_util = c_uint()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetPcieThroughput")
- ret = fn(device, _nvmlPcieUtilCounter_t(counter), byref(c_util))
- _nvmlCheckReturn(ret)
- return c_util.value
- def nvmlSystemGetTopologyGpuSet(cpuNumber):
- c_count = c_uint(0)
- fn = _nvmlGetFunctionPointer("nvmlSystemGetTopologyGpuSet")
- # First call will get the size
- ret = fn(cpuNumber, byref(c_count), None)
- if ret != NVML_SUCCESS:
- raise NVMLError(ret)
- # call again with a buffer
- device_array = c_nvmlDevice_t * c_count.value
- c_devices = device_array()
- ret = fn(cpuNumber, byref(c_count), c_devices)
- _nvmlCheckReturn(ret)
- return list(c_devices[0:c_count.value])
- def nvmlDeviceGetTopologyNearestGpus(device, level):
- c_count = c_uint(0)
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetTopologyNearestGpus")
- # First call will get the size
- ret = fn(device, level, byref(c_count), None)
- if ret != NVML_SUCCESS:
- raise NVMLError(ret)
- # call again with a buffer
- device_array = c_nvmlDevice_t * c_count.value
- c_devices = device_array()
- ret = fn(device, level, byref(c_count), c_devices)
- _nvmlCheckReturn(ret)
- return list(c_devices[0:c_count.value])
- def nvmlDeviceGetTopologyCommonAncestor(device1, device2):
- c_level = _nvmlGpuTopologyLevel_t()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetTopologyCommonAncestor")
- ret = fn(device1, device2, byref(c_level))
- _nvmlCheckReturn(ret)
- return c_level.value
- # Deprecated
- def nvmlDeviceGetNvLinkUtilizationCounter(device, link, counter):
- c_rxcounter = c_ulonglong()
- c_txcounter = c_ulonglong()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetNvLinkUtilizationCounter")
- ret = fn(device, link, counter, byref(c_rxcounter), byref(c_txcounter))
- _nvmlCheckReturn(ret)
- return (c_rxcounter.value, c_txcounter.value)
- # Deprecated
- def nvmlDeviceFreezeNvLinkUtilizationCounter(device, link, counter, freeze):
- fn = _nvmlGetFunctionPointer("nvmlDeviceFreezeNvLinkUtilizationCounter")
- ret = fn(device, link, counter, freeze)
- _nvmlCheckReturn(ret)
- return None
- # Deprecated
- def nvmlDeviceResetNvLinkUtilizationCounter(device, link, counter):
- fn = _nvmlGetFunctionPointer("nvmlDeviceResetNvLinkUtilizationCounter")
- ret = fn(device, link, counter)
- _nvmlCheckReturn(ret)
- return None
- # Deprecated
- def nvmlDeviceSetNvLinkUtilizationControl(device, link, counter, control, reset):
- fn = _nvmlGetFunctionPointer("nvmlDeviceSetNvLinkUtilizationControl")
- ret = fn(device, link, counter, byref(control), reset)
- _nvmlCheckReturn(ret)
- return None
- # Deprecated
- def nvmlDeviceGetNvLinkUtilizationControl(device, link, counter):
- c_control = nvmlNvLinkUtilizationControl_t()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetNvLinkUtilizationControl")
- ret = fn(device, link, counter, byref(c_control))
- _nvmlCheckReturn(ret)
- return c_control
- def nvmlDeviceGetNvLinkCapability(device, link, capability):
- c_capResult = c_uint()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetNvLinkCapability")
- ret = fn(device, link, capability, byref(c_capResult))
- _nvmlCheckReturn(ret)
- return c_capResult.value
- def nvmlDeviceGetNvLinkErrorCounter(device, link, counter):
- c_result = c_ulonglong()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetNvLinkErrorCounter")
- ret = fn(device, link, counter, byref(c_result))
- _nvmlCheckReturn(ret)
- return c_result.value
- def nvmlDeviceResetNvLinkErrorCounters(device, link):
- fn = _nvmlGetFunctionPointer("nvmlDeviceResetNvLinkErrorCounters")
- ret = fn(device, link)
- _nvmlCheckReturn(ret)
- return None
- def nvmlDeviceGetNvLinkRemotePciInfo(device, link):
- c_pci = nvmlPciInfo_t()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetNvLinkRemotePciInfo_v2")
- ret = fn(device, link, byref(c_pci))
- _nvmlCheckReturn(ret)
- return c_pci
- def nvmlDeviceGetNvLinkRemoteDeviceType(handle, link):
- c_type = _nvmlNvLinkDeviceType_t()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetNvLinkRemoteDeviceType")
- ret = fn(handle, link, byref(c_type))
- _nvmlCheckReturn(ret)
- return c_type.value
- def nvmlDeviceGetNvLinkState(device, link):
- c_isActive = c_uint()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetNvLinkState")
- ret = fn(device, link, byref(c_isActive))
- _nvmlCheckReturn(ret)
- return c_isActive.value
- def nvmlDeviceGetNvLinkVersion(device, link):
- c_version = c_uint()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetNvLinkVersion")
- ret = fn(device, link, byref(c_version))
- _nvmlCheckReturn(ret)
- return c_version.value
- def nvmlDeviceModifyDrainState(pciInfo, newState):
- fn = _nvmlGetFunctionPointer("nvmlDeviceModifyDrainState")
- ret = fn(pointer(pciInfo), newState)
- _nvmlCheckReturn(ret)
- return None
- def nvmlDeviceQueryDrainState(pciInfo):
- c_newState = c_uint()
- fn = _nvmlGetFunctionPointer("nvmlDeviceQueryDrainState")
- ret = fn(pointer(pciInfo), byref(c_newState))
- _nvmlCheckReturn(ret)
- return c_newState.value
- def nvmlDeviceRemoveGpu(pciInfo):
- fn = _nvmlGetFunctionPointer("nvmlDeviceRemoveGpu")
- ret = fn(pointer(pciInfo))
- _nvmlCheckReturn(ret)
- return None
- def nvmlDeviceDiscoverGpus(pciInfo):
- fn = _nvmlGetFunctionPointer("nvmlDeviceDiscoverGpus")
- ret = fn(pointer(pciInfo))
- _nvmlCheckReturn(ret)
- return None
- def nvmlDeviceGetFieldValues(handle, fieldIds):
- values_arr = c_nvmlFieldValue_t * len(fieldIds)
- values = values_arr()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetFieldValues")
- for i, fieldId in enumerate(fieldIds):
- try:
- (values[i].fieldId, values[i].scopeId) = fieldId
- except TypeError:
- values[i].fieldId = fieldId
- ret = fn(handle, c_int32(len(fieldIds)), byref(values))
- _nvmlCheckReturn(ret)
- return values
- def nvmlDeviceClearFieldValues(handle, fieldIds):
- values_arr = c_nvmlFieldValue_t * len(fieldIds)
- values = values_arr()
- fn = _nvmlGetFunctionPointer("nvmlDeviceClearFieldValues")
- for i, fieldId in enumerate(fieldIds):
- try:
- (values[i].fieldId, values[i].scopeId) = fieldId
- except TypeError:
- values[i].fieldId = fieldId
- ret = fn(handle, c_int32(len(fieldIds)), byref(values))
- _nvmlCheckReturn(ret)
- return values
- def nvmlDeviceGetVirtualizationMode(handle):
- c_virtualization_mode = c_ulonglong()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetVirtualizationMode")
- ret = fn(handle, byref(c_virtualization_mode))
- _nvmlCheckReturn(ret)
- return c_virtualization_mode.value
- def nvmlDeviceSetVirtualizationMode(handle, virtualization_mode):
- fn = _nvmlGetFunctionPointer("nvmlDeviceSetVirtualizationMode")
- return fn(handle, virtualization_mode)
- def nvmlDeviceGetVgpuHeterogeneousMode(handle):
- c_vgpuHeterogeneousMode = c_nvmlVgpuHeterogeneousMode_v1_t(0)
- c_vgpuHeterogeneousMode.version = VgpuHeterogeneousMode_v1
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetVgpuHeterogeneousMode")
- ret = fn(handle, byref(c_vgpuHeterogeneousMode))
- _nvmlCheckReturn(ret)
- return c_vgpuHeterogeneousMode.mode
- def nvmlDeviceSetVgpuHeterogeneousMode(handle, heterogeneous_mode):
- c_vgpuHeterogeneousMode = c_nvmlVgpuHeterogeneousMode_v1_t(0)
- c_vgpuHeterogeneousMode.version = VgpuHeterogeneousMode_v1
- c_vgpuHeterogeneousMode.mode = heterogeneous_mode
- fn = _nvmlGetFunctionPointer("nvmlDeviceSetVgpuHeterogeneousMode")
- ret = fn(handle, byref(c_vgpuHeterogeneousMode))
- _nvmlCheckReturn(ret)
- return NVML_SUCCESS
- def nvmlVgpuInstanceGetPlacementId(vgpuInstance):
- c_placement = c_nvmlVgpuPlacementId_v1_t(0)
- c_placement.version = VgpuPlacementId_v1
- fn = _nvmlGetFunctionPointer("nvmlVgpuInstanceGetPlacementId")
- ret = fn(vgpuInstance, byref(c_placement))
- _nvmlCheckReturn(ret)
- return c_placement.placementId
- def nvmlDeviceGetVgpuTypeSupportedPlacements(handle, vgpuTypeId, mode=0, version=1):
- c_max_instances = c_uint(0)
- fn = _nvmlGetFunctionPointer("nvmlVgpuTypeGetMaxInstances")
- ret = fn(handle, vgpuTypeId, byref(c_max_instances))
- _nvmlCheckReturn(ret)
- if version == 2:
- c_vgpu_placements = c_nvmlVgpuPlacementList_v2_t()
- c_vgpu_placements.version = VgpuPlacementList_v2
- c_vgpu_placements.count = c_max_instances.value
- c_vgpu_placements.mode = mode
- elif version == 1:
- c_vgpu_placements = c_nvmlVgpuPlacementList_v1_t()
- c_vgpu_placements.version = VgpuPlacementList_v1
- else:
- raise NVMLError(NVML_ERROR_ARGUMENT_VERSION_MISMATCH)
- c_placements = c_uint * c_max_instances.value
- c_vgpu_placements.placementIds = c_placements()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetVgpuTypeSupportedPlacements")
- ret = fn(handle, vgpuTypeId, byref(c_vgpu_placements))
- _nvmlCheckReturn(ret)
- return c_vgpu_placements
- def nvmlDeviceGetVgpuTypeCreatablePlacements(handle, vgpuTypeId, version=1):
- c_max_instances = c_uint(0)
- fn = _nvmlGetFunctionPointer("nvmlVgpuTypeGetMaxInstances")
- ret = fn(handle, vgpuTypeId, byref(c_max_instances))
- _nvmlCheckReturn(ret)
- if version == 2:
- c_vgpu_placements = c_nvmlVgpuPlacementList_v2_t()
- c_vgpu_placements.version = VgpuPlacementList_v2
- c_vgpu_placements.count = c_max_instances.value
- elif version == 1:
- c_vgpu_placements = c_nvmlVgpuPlacementList_v1_t()
- c_vgpu_placements.version = VgpuPlacementList_v1
- c_placements = c_uint * c_max_instances.value
- c_vgpu_placements.placementIds = c_placements()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetVgpuTypeCreatablePlacements")
- ret = fn(handle, vgpuTypeId, byref(c_vgpu_placements))
- _nvmlCheckReturn(ret)
- return c_vgpu_placements
- def nvmlGetVgpuDriverCapabilities(capability):
- c_capResult = c_uint()
- fn = _nvmlGetFunctionPointer("nvmlGetVgpuDriverCapabilities")
- ret = fn(_nvmlVgpuDriverCapability_t(capability), byref(c_capResult))
- _nvmlCheckReturn(ret)
- return c_capResult.value
- def nvmlDeviceGetVgpuCapabilities(handle, capability):
- c_capResult = c_uint()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetVgpuCapabilities")
- ret = fn(handle, _nvmlDeviceVgpuCapability_t(capability), byref(c_capResult))
- _nvmlCheckReturn(ret)
- return c_capResult.value
- def nvmlDeviceSetVgpuCapabilities(handle, capability, state):
- fn = _nvmlGetFunctionPointer("nvmlDeviceSetVgpuCapabilities")
- ret = fn(handle, _nvmlDeviceVgpuCapability_t(capability), state)
- _nvmlCheckReturn(ret)
- return NVML_SUCCESS
- def nvmlDeviceGetSupportedVgpus(handle):
- # first call to get the size
- c_vgpu_count = c_uint(0)
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetSupportedVgpus")
- ret = fn(handle, byref(c_vgpu_count), None)
- if (ret == NVML_SUCCESS):
- # special case, no supported vGPUs
- return []
- elif (ret == NVML_ERROR_INSUFFICIENT_SIZE):
- # typical case
- vgpu_type_ids_array = _nvmlVgpuTypeId_t * c_vgpu_count.value
- c_vgpu_type_ids = vgpu_type_ids_array()
- # make the call again
- ret = fn(handle, byref(c_vgpu_count), c_vgpu_type_ids)
- _nvmlCheckReturn(ret)
- vgpus = []
- for i in range(c_vgpu_count.value):
- vgpus.append(c_vgpu_type_ids[i])
- return vgpus
- else:
- # error case
- raise NVMLError(ret)
- def nvmlDeviceGetCreatableVgpus(handle):
- # first call to get the size
- c_vgpu_count = c_uint(0)
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetCreatableVgpus")
- ret = fn(handle, byref(c_vgpu_count), None)
- if (ret == NVML_SUCCESS):
- # special case, no supported vGPUs
- return []
- elif (ret == NVML_ERROR_INSUFFICIENT_SIZE):
- # typical case
- vgpu_type_ids_array = _nvmlVgpuTypeId_t * c_vgpu_count.value
- c_vgpu_type_ids = vgpu_type_ids_array()
- # make the call again
- ret = fn(handle, byref(c_vgpu_count), c_vgpu_type_ids)
- _nvmlCheckReturn(ret)
- vgpus = []
- for i in range(c_vgpu_count.value):
- vgpus.append(c_vgpu_type_ids[i])
- return vgpus
- else:
- # error case
- raise NVMLError(ret)
- def nvmlVgpuTypeGetGpuInstanceProfileId(vgpuTypeId):
- c_profile_id = c_uint(0)
- fn = _nvmlGetFunctionPointer("nvmlVgpuTypeGetGpuInstanceProfileId")
- ret = fn(vgpuTypeId, byref(c_profile_id))
- _nvmlCheckReturn(ret)
- return (c_profile_id.value)
- @convertStrBytes
- def nvmlVgpuTypeGetClass(vgpuTypeId):
- c_class = create_string_buffer(NVML_DEVICE_NAME_BUFFER_SIZE)
- c_buffer_size = c_uint(NVML_DEVICE_NAME_BUFFER_SIZE)
- fn = _nvmlGetFunctionPointer("nvmlVgpuTypeGetClass")
- ret = fn(vgpuTypeId, c_class, byref(c_buffer_size))
- _nvmlCheckReturn(ret)
- return c_class.value
- @convertStrBytes
- def nvmlVgpuTypeGetName(vgpuTypeId):
- c_name = create_string_buffer(NVML_DEVICE_NAME_BUFFER_SIZE)
- c_buffer_size = c_uint(NVML_DEVICE_NAME_BUFFER_SIZE)
- fn = _nvmlGetFunctionPointer("nvmlVgpuTypeGetName")
- ret = fn(vgpuTypeId, c_name, byref(c_buffer_size))
- _nvmlCheckReturn(ret)
- return c_name.value
- def nvmlVgpuTypeGetDeviceID(vgpuTypeId):
- c_device_id = c_ulonglong(0)
- c_subsystem_id = c_ulonglong(0)
- fn = _nvmlGetFunctionPointer("nvmlVgpuTypeGetDeviceID")
- ret = fn(vgpuTypeId, byref(c_device_id), byref(c_subsystem_id))
- _nvmlCheckReturn(ret)
- return (c_device_id.value, c_subsystem_id.value)
- def nvmlVgpuTypeGetFramebufferSize(vgpuTypeId):
- c_fb_size = c_ulonglong(0)
- fn = _nvmlGetFunctionPointer("nvmlVgpuTypeGetFramebufferSize")
- ret = fn(vgpuTypeId, byref(c_fb_size))
- _nvmlCheckReturn(ret)
- return c_fb_size.value
- def nvmlVgpuTypeGetNumDisplayHeads(vgpuTypeId):
- c_num_heads = c_uint(0)
- fn = _nvmlGetFunctionPointer("nvmlVgpuTypeGetNumDisplayHeads")
- ret = fn(vgpuTypeId, byref(c_num_heads))
- _nvmlCheckReturn(ret)
- return c_num_heads.value
- def nvmlVgpuTypeGetResolution(vgpuTypeId):
- c_xdim = c_uint(0)
- c_ydim = c_uint(0)
- fn = _nvmlGetFunctionPointer("nvmlVgpuTypeGetResolution")
- ret = fn(vgpuTypeId, 0, byref(c_xdim), byref(c_ydim))
- _nvmlCheckReturn(ret)
- return (c_xdim.value, c_ydim.value)
- @convertStrBytes
- def nvmlVgpuTypeGetLicense(vgpuTypeId):
- c_license = create_string_buffer(NVML_GRID_LICENSE_BUFFER_SIZE)
- c_buffer_size = c_uint(NVML_GRID_LICENSE_BUFFER_SIZE)
- fn = _nvmlGetFunctionPointer("nvmlVgpuTypeGetLicense")
- ret = fn(vgpuTypeId, c_license, c_buffer_size)
- _nvmlCheckReturn(ret)
- return c_license.value
- def nvmlVgpuTypeGetFrameRateLimit(vgpuTypeId):
- c_frl_config = c_uint(0)
- fn = _nvmlGetFunctionPointer("nvmlVgpuTypeGetFrameRateLimit")
- ret = fn(vgpuTypeId, byref(c_frl_config))
- _nvmlCheckReturn(ret)
- return c_frl_config.value
- def nvmlVgpuTypeGetGspHeapSize(vgpuTypeId):
- c_gsp_heap = c_uint(0)
- fn = _nvmlGetFunctionPointer("nvmlVgpuTypeGetGspHeapSize")
- ret = fn(vgpuTypeId, byref(c_gsp_heap))
- _nvmlCheckReturn(ret)
- return c_gsp_heap.value
- def nvmlVgpuTypeGetFbReservation(vgpuTypeId):
- c_fb_reservation = c_uint(0)
- fn = _nvmlGetFunctionPointer("nvmlVgpuTypeGetFbReservation")
- ret = fn(vgpuTypeId, byref(c_fb_reservation))
- _nvmlCheckReturn(ret)
- return c_fb_reservation.value
- def nvmlVgpuInstanceGetRuntimeStateSize(vgpuInstance):
- c_runtime_state = nvmlVgpuRuntimeState_v1_t()
- c_runtime_state.version = VgpuRuntimeState_v1
- fn = _nvmlGetFunctionPointer("nvmlVgpuInstanceGetRuntimeStateSize")
- ret = fn(vgpuInstance, byref(c_runtime_state))
- _nvmlCheckReturn(ret)
- return c_runtime_state
- def nvmlVgpuTypeGetMaxInstances(handle, vgpuTypeId):
- c_max_instances = c_uint(0)
- fn = _nvmlGetFunctionPointer("nvmlVgpuTypeGetMaxInstances")
- ret = fn(handle, vgpuTypeId, byref(c_max_instances))
- _nvmlCheckReturn(ret)
- return c_max_instances.value
- def nvmlVgpuTypeGetMaxInstancesPerVm(vgpuTypeId):
- c_max_instances_per_vm = c_uint(0)
- fn = _nvmlGetFunctionPointer("nvmlVgpuTypeGetMaxInstancesPerVm")
- ret = fn(vgpuTypeId, byref(c_max_instances_per_vm))
- _nvmlCheckReturn(ret)
- return c_max_instances_per_vm.value
- def nvmlVgpuTypeGetBAR1Info(vgpuTypeId):
- c_bar1Info = c_nvmlVgpuTypeBar1Info_v1_t(0)
- c_bar1Info.version = VgpuTypeBar1Info_v1
- fn = _nvmlGetFunctionPointer("nvmlVgpuTypeGetBAR1Info")
- ret = fn(vgpuTypeId, byref(c_bar1Info))
- _nvmlCheckReturn(ret)
- return c_bar1Info
- def nvmlDeviceGetActiveVgpus(handle):
- # first call to get the size
- c_vgpu_count = c_uint(0)
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetActiveVgpus")
- ret = fn(handle, byref(c_vgpu_count), None)
- if (ret == NVML_SUCCESS):
- # special case, no active vGPUs
- return []
- elif (ret == NVML_ERROR_INSUFFICIENT_SIZE):
- # typical case
- vgpu_instance_array = _nvmlVgpuInstance_t * c_vgpu_count.value
- c_vgpu_instances = vgpu_instance_array()
- # make the call again
- ret = fn(handle, byref(c_vgpu_count), c_vgpu_instances)
- _nvmlCheckReturn(ret)
- vgpus = []
- for i in range(c_vgpu_count.value):
- vgpus.append(c_vgpu_instances[i])
- return vgpus
- else:
- # error case
- raise NVMLError(ret)
- @convertStrBytes
- def nvmlVgpuInstanceGetVmID(vgpuInstance):
- c_vm_id = create_string_buffer(NVML_DEVICE_UUID_BUFFER_SIZE)
- c_buffer_size = c_uint(NVML_GRID_LICENSE_BUFFER_SIZE)
- c_vm_id_type = c_uint(0)
- fn = _nvmlGetFunctionPointer("nvmlVgpuInstanceGetVmID")
- ret = fn(vgpuInstance, byref(c_vm_id), c_buffer_size, byref(c_vm_id_type))
- _nvmlCheckReturn(ret)
- return (c_vm_id.value, c_vm_id_type.value)
- @convertStrBytes
- def nvmlVgpuInstanceGetUUID(vgpuInstance):
- c_uuid = create_string_buffer(NVML_DEVICE_UUID_BUFFER_SIZE)
- c_buffer_size = c_uint(NVML_DEVICE_UUID_BUFFER_SIZE)
- fn = _nvmlGetFunctionPointer("nvmlVgpuInstanceGetUUID")
- ret = fn(vgpuInstance, byref(c_uuid), c_buffer_size)
- _nvmlCheckReturn(ret)
- return c_uuid.value
- @convertStrBytes
- def nvmlVgpuInstanceGetMdevUUID(vgpuInstance):
- c_uuid = create_string_buffer(NVML_DEVICE_UUID_BUFFER_SIZE)
- c_buffer_size = c_uint(NVML_DEVICE_UUID_BUFFER_SIZE)
- fn = _nvmlGetFunctionPointer("nvmlVgpuInstanceGetMdevUUID")
- ret = fn(vgpuInstance, byref(c_uuid), c_buffer_size)
- _nvmlCheckReturn(ret)
- return c_uuid.value
- @convertStrBytes
- def nvmlVgpuInstanceGetVmDriverVersion(vgpuInstance):
- c_driver_version = create_string_buffer(NVML_SYSTEM_DRIVER_VERSION_BUFFER_SIZE)
- c_buffer_size = c_uint(NVML_SYSTEM_DRIVER_VERSION_BUFFER_SIZE)
- fn = _nvmlGetFunctionPointer("nvmlVgpuInstanceGetVmDriverVersion")
- ret = fn(vgpuInstance, byref(c_driver_version), c_buffer_size)
- _nvmlCheckReturn(ret)
- return c_driver_version.value
- # Deprecated
- def nvmlVgpuInstanceGetLicenseStatus(vgpuInstance):
- c_license_status = c_uint(0)
- fn = _nvmlGetFunctionPointer("nvmlVgpuInstanceGetLicenseStatus")
- ret = fn(vgpuInstance, byref(c_license_status))
- _nvmlCheckReturn(ret)
- return c_license_status.value
- def nvmlVgpuInstanceGetLicenseInfo_v2(vgpuInstance):
- fn = _nvmlGetFunctionPointer("nvmlVgpuInstanceGetLicenseInfo_v2")
- c_license_info = c_nvmlVgpuLicenseInfo_t()
- ret = fn(vgpuInstance, byref(c_license_info))
- _nvmlCheckReturn(ret)
- return c_license_info
- def nvmlVgpuInstanceGetLicenseInfo(vgpuInstance):
- return nvmlVgpuInstanceGetLicenseInfo_v2(vgpuInstance)
- def nvmlVgpuInstanceGetFrameRateLimit(vgpuInstance):
- c_frl = c_uint(0)
- fn = _nvmlGetFunctionPointer("nvmlVgpuInstanceGetFrameRateLimit")
- ret = fn(vgpuInstance, byref(c_frl))
- _nvmlCheckReturn(ret)
- return c_frl.value
- def nvmlVgpuInstanceGetEccMode(vgpuInstance):
- c_mode = _nvmlEnableState_t()
- fn = _nvmlGetFunctionPointer("nvmlVgpuInstanceGetEccMode")
- ret = fn(vgpuInstance, byref(c_mode))
- _nvmlCheckReturn(ret)
- return c_mode.value
- def nvmlVgpuInstanceGetType(vgpuInstance):
- c_vgpu_type = c_uint(0)
- fn = _nvmlGetFunctionPointer("nvmlVgpuInstanceGetType")
- ret = fn(vgpuInstance, byref(c_vgpu_type))
- _nvmlCheckReturn(ret)
- return c_vgpu_type.value
- def nvmlVgpuInstanceGetEncoderCapacity(vgpuInstance):
- c_encoder_capacity = c_ulonglong(0)
- fn = _nvmlGetFunctionPointer("nvmlVgpuInstanceGetEncoderCapacity")
- ret = fn(vgpuInstance, byref(c_encoder_capacity))
- _nvmlCheckReturn(ret)
- return c_encoder_capacity.value
- def nvmlVgpuInstanceSetEncoderCapacity(vgpuInstance, encoder_capacity):
- fn = _nvmlGetFunctionPointer("nvmlVgpuInstanceSetEncoderCapacity")
- return fn(vgpuInstance, encoder_capacity)
- def nvmlVgpuInstanceGetFbUsage(vgpuInstance):
- c_fb_usage = c_uint(0)
- fn = _nvmlGetFunctionPointer("nvmlVgpuInstanceGetFbUsage")
- ret = fn(vgpuInstance, byref(c_fb_usage))
- _nvmlCheckReturn(ret)
- return c_fb_usage.value
- def nvmlVgpuTypeGetCapabilities(vgpuTypeId, capability):
- c_cap_result = c_uint(0)
- fn = _nvmlGetFunctionPointer("nvmlVgpuTypeGetCapabilities")
- ret = fn(vgpuTypeId, _nvmlVgpuCapability_t(capability), byref(c_cap_result))
- _nvmlCheckReturn(ret)
- return (c_cap_result.value)
- def nvmlVgpuInstanceGetGpuInstanceId(vgpuInstance):
- c_id = c_uint(0)
- fn = _nvmlGetFunctionPointer("nvmlVgpuInstanceGetGpuInstanceId")
- ret = fn(vgpuInstance, byref(c_id))
- _nvmlCheckReturn(ret)
- return (c_id.value)
- @convertStrBytes
- def nvmlVgpuInstanceGetGpuPciId(vgpuInstance):
- c_vgpuPciId = create_string_buffer(NVML_DEVICE_PCI_BUS_ID_BUFFER_SIZE)
- fn = _nvmlGetFunctionPointer("nvmlVgpuInstanceGetGpuPciId")
- ret = fn(vgpuInstance, c_vgpuPciId, byref(c_uint(NVML_DEVICE_PCI_BUS_ID_BUFFER_SIZE)))
- _nvmlCheckReturn(ret)
- return c_vgpuPciId.value
- def nvmlDeviceGetVgpuUtilization(handle, timeStamp):
- # first call to get the size
- c_vgpu_count = c_uint(0)
- c_time_stamp = c_ulonglong(timeStamp)
- c_sample_value_type = _nvmlValueType_t()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetVgpuUtilization")
- ret = fn(handle, c_time_stamp, byref(c_sample_value_type), byref(c_vgpu_count), None)
- if (ret == NVML_SUCCESS):
- # special case, no active vGPUs
- return []
- elif (ret == NVML_ERROR_INSUFFICIENT_SIZE):
- # typical case
- sampleArray = c_vgpu_count.value * c_nvmlVgpuInstanceUtilizationSample_t
- c_samples = sampleArray()
- # make the call again
- ret = fn(handle, c_time_stamp, byref(c_sample_value_type), byref(c_vgpu_count), c_samples)
- _nvmlCheckReturn(ret)
- return c_samples[0:c_vgpu_count.value]
- else:
- # error case
- raise NVMLError(ret)
- def nvmlDeviceGetVgpuInstancesUtilizationInfo(handle, timeStamp):
- # first call to get the size
- c_time_stamp = c_ulonglong(timeStamp)
- c_vgpuUtilInfo = c_nvmlVgpuInstancesUtilizationInfo_v1_t(0)
- c_vgpuUtilInfo.version = VgpuInstancesUtilizationInfo_v1
- c_vgpuUtilInfo.sampleValType = _nvmlValueType_t()
- c_vgpuUtilInfo.vgpuInstanceCount = c_uint(0)
- c_vgpuUtilInfo.lastSeenTimeStamp = c_time_stamp
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetVgpuInstancesUtilizationInfo")
- ret = fn(handle, byref(c_vgpuUtilInfo))
- if (ret == NVML_SUCCESS):
- # special case, no active vGPUs
- return []
- elif (ret == NVML_ERROR_INSUFFICIENT_SIZE):
- # typical case
- sampleArray = c_vgpuUtilInfo.vgpuInstanceCount * c_nvmlVgpuInstanceUtilizationInfo_v1_t
- c_samples = sampleArray()
- c_vgpuUtilInfo.vgpuUtilArray = c_samples
- # make the call again
- ret = fn(handle, byref(c_vgpuUtilInfo))
- _nvmlCheckReturn(ret)
- return c_samples[0:c_vgpuUtilInfo.vgpuInstanceCount]
- else:
- # error case
- raise NVMLError(ret)
- def nvmlDeviceGetP2PStatus(device1, device2, p2pIndex):
- c_p2pstatus = _nvmlGpuP2PStatus_t()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetP2PStatus")
- ret = fn(device1, device2,p2pIndex, byref(c_p2pstatus))
- _nvmlCheckReturn(ret)
- return c_p2pstatus.value
- def nvmlDeviceGetGridLicensableFeatures_v4(handle):
- c_get_grid_licensable_features = c_nvmlGridLicensableFeatures_v4_t()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetGridLicensableFeatures_v4")
- ret = fn(handle, byref(c_get_grid_licensable_features))
- _nvmlCheckReturn(ret)
- return (c_get_grid_licensable_features)
- def nvmlDeviceGetGridLicensableFeatures(handle):
- return nvmlDeviceGetGridLicensableFeatures_v4(handle)
- def nvmlDeviceGetGspFirmwareVersion(handle, version=None):
- isUserDefined = version is not None
- if not isUserDefined:
- version = (c_char * NVML_GSP_FIRMWARE_VERSION_BUF_SIZE)()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetGspFirmwareVersion")
- ret = fn(handle, version)
- _nvmlCheckReturn(ret)
- return NVML_SUCCESS if isUserDefined else version.value
- def nvmlDeviceGetGspFirmwareMode(handle, isEnabled=c_uint(), defaultMode=c_uint()):
- isReference = type(isEnabled) is not c_uint
- isEnabledRef = isEnabled if isReference else byref(isEnabled)
- defaultModeRef = defaultMode if isReference else byref(defaultMode)
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetGspFirmwareMode")
- ret = fn(handle, isEnabledRef, defaultModeRef)
- _nvmlCheckReturn(ret)
- return NVML_SUCCESS if isReference else [isEnabled.value, defaultMode.value]
- def nvmlDeviceGetEncoderCapacity(handle, encoderQueryType):
- c_encoder_capacity = c_ulonglong(0)
- c_encoderQuery_type = _nvmlEncoderQueryType_t(encoderQueryType)
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetEncoderCapacity")
- ret = fn(handle, c_encoderQuery_type, byref(c_encoder_capacity))
- _nvmlCheckReturn(ret)
- return c_encoder_capacity.value
- def nvmlDeviceGetVgpuProcessUtilization(handle, timeStamp):
- # first call to get the size
- c_vgpu_count = c_uint(0)
- c_time_stamp = c_ulonglong(timeStamp)
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetVgpuProcessUtilization")
- ret = fn(handle, c_time_stamp, byref(c_vgpu_count), None)
- if (ret == NVML_SUCCESS):
- # special case, no active vGPUs
- return []
- elif (ret == NVML_ERROR_INSUFFICIENT_SIZE):
- # typical case
- sampleArray = c_vgpu_count.value * c_nvmlVgpuProcessUtilizationSample_t
- c_samples = sampleArray()
- # make the call again
- ret = fn(handle, c_time_stamp, byref(c_vgpu_count), c_samples)
- _nvmlCheckReturn(ret)
- return c_samples[0:c_vgpu_count.value]
- else:
- # error case
- raise NVMLError(ret)
- def nvmlDeviceGetVgpuProcessesUtilizationInfo(handle, timeStamp):
- # first call to get the size
- c_time_stamp = c_ulonglong(timeStamp)
- c_vgpuProcUtilInfo = c_nvmlVgpuProcessesUtilizationInfo_v1_t(0)
- c_vgpuProcUtilInfo.version = VgpuProcessesUtilizationInfo_v1
- c_vgpuProcUtilInfo.vgpuProcessCount = c_uint(0)
- c_vgpuProcUtilInfo.lastSeenTimeStamp = c_time_stamp
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetVgpuProcessesUtilizationInfo")
- ret = fn(handle, byref(c_vgpuProcUtilInfo))
- if (ret == NVML_SUCCESS):
- # special case, no active vGPUs
- return []
- elif (ret == NVML_ERROR_INSUFFICIENT_SIZE):
- # typical case
- sampleArray = c_vgpuProcUtilInfo.vgpuProcessCount * c_nvmlVgpuProcessUtilizationInfo_v1_t
- c_samples = sampleArray()
- c_vgpuProcUtilInfo.vgpuProcUtilArray = c_samples
- # make the call again
- ret = fn(handle, byref(c_vgpuProcUtilInfo))
- _nvmlCheckReturn(ret)
- return c_samples[0:c_vgpuProcUtilInfo.vgpuProcessCount]
- else:
- # error case
- raise NVMLError(ret)
- def nvmlDeviceGetEncoderStats(handle):
- c_encoderCount = c_ulonglong(0)
- c_encodeFps = c_ulonglong(0)
- c_encoderLatency = c_ulonglong(0)
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetEncoderStats")
- ret = fn(handle, byref(c_encoderCount), byref(c_encodeFps), byref(c_encoderLatency))
- _nvmlCheckReturn(ret)
- return (c_encoderCount.value, c_encodeFps.value, c_encoderLatency.value)
- def nvmlDeviceGetEncoderSessions(handle):
- # first call to get the size
- c_session_count = c_uint(0)
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetEncoderSessions")
- ret = fn(handle, byref(c_session_count), None)
- if (ret == NVML_SUCCESS):
- if (c_session_count.value != 0):
- # typical case
- session_array = c_nvmlEncoderSession_t * c_session_count.value
- c_sessions = session_array()
- # make the call again
- ret = fn(handle, byref(c_session_count), c_sessions)
- _nvmlCheckReturn(ret)
- sessions = []
- for i in range(c_session_count.value):
- sessions.append(c_sessions[i])
- return sessions
- else:
- return [] # no active sessions
- else:
- # error case
- raise NVMLError(ret)
- def nvmlDeviceGetFBCStats(handle):
- c_fbcStats = c_nvmlFBCStats_t()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetFBCStats")
- ret = fn(handle, byref(c_fbcStats))
- _nvmlCheckReturn(ret)
- return c_fbcStats
- def nvmlDeviceGetFBCSessions(handle):
- # first call to get the size
- c_session_count = c_uint(0)
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetFBCSessions")
- ret = fn(handle, byref(c_session_count), None)
- if (ret == NVML_SUCCESS):
- if (c_session_count.value != 0):
- # typical case
- session_array = c_nvmlFBCSession_t * c_session_count.value
- c_sessions = session_array()
- # make the call again
- ret = fn(handle, byref(c_session_count), c_sessions)
- _nvmlCheckReturn(ret)
- sessions = []
- for i in range(c_session_count.value):
- sessions.append(c_sessions[i])
- return sessions
- else:
- return [] # no active sessions
- else:
- # error case
- raise NVMLError(ret)
- def nvmlVgpuInstanceGetEncoderStats(vgpuInstance):
- c_encoderCount = c_ulonglong(0)
- c_encodeFps = c_ulonglong(0)
- c_encoderLatency = c_ulonglong(0)
- fn = _nvmlGetFunctionPointer("nvmlVgpuInstanceGetEncoderStats")
- ret = fn(vgpuInstance, byref(c_encoderCount), byref(c_encodeFps), byref(c_encoderLatency))
- _nvmlCheckReturn(ret)
- return (c_encoderCount.value, c_encodeFps.value, c_encoderLatency.value)
- def nvmlVgpuInstanceGetEncoderSessions(vgpuInstance):
- # first call to get the size
- c_session_count = c_uint(0)
- fn = _nvmlGetFunctionPointer("nvmlVgpuInstanceGetEncoderSessions")
- ret = fn(vgpuInstance, byref(c_session_count), None)
- if (ret == NVML_SUCCESS):
- if (c_session_count.value != 0):
- # typical case
- session_array = c_nvmlEncoderSession_t * c_session_count.value
- c_sessions = session_array()
- # make the call again
- ret = fn(vgpuInstance, byref(c_session_count), c_sessions)
- _nvmlCheckReturn(ret)
- sessions = []
- for i in range(c_session_count.value):
- sessions.append(c_sessions[i])
- return sessions
- else:
- return [] # no active sessions
- else:
- # error case
- raise NVMLError(ret)
- def nvmlVgpuInstanceGetFBCStats(vgpuInstance):
- c_fbcStats = c_nvmlFBCStats_t()
- fn = _nvmlGetFunctionPointer("nvmlVgpuInstanceGetFBCStats")
- ret = fn(vgpuInstance, byref(c_fbcStats))
- _nvmlCheckReturn(ret)
- return c_fbcStats
- def nvmlVgpuInstanceGetFBCSessions(vgpuInstance):
- # first call to get the size
- c_session_count = c_uint(0)
- fn = _nvmlGetFunctionPointer("nvmlVgpuInstanceGetFBCSessions")
- ret = fn(vgpuInstance, byref(c_session_count), None)
- if (ret == NVML_SUCCESS):
- if (c_session_count.value != 0):
- # typical case
- session_array = c_nvmlFBCSession_t * c_session_count.value
- c_sessions = session_array()
- # make the call again
- ret = fn(vgpuInstance, byref(c_session_count), c_sessions)
- _nvmlCheckReturn(ret)
- sessions = []
- for i in range(c_session_count.value):
- sessions.append(c_sessions[i])
- return sessions
- else:
- return [] # no active sessions
- else:
- # error case
- raise NVMLError(ret)
- def nvmlDeviceGetProcessUtilization(handle, timeStamp):
- # first call to get the size
- c_count = c_uint(0)
- c_time_stamp = c_ulonglong(timeStamp)
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetProcessUtilization")
- ret = fn(handle, None, byref(c_count), c_time_stamp)
- if (ret == NVML_ERROR_INSUFFICIENT_SIZE):
- # typical case
- sampleArray = c_count.value * c_nvmlProcessUtilizationSample_t
- c_samples = sampleArray()
- # make the call again
- ret = fn(handle, c_samples, byref(c_count), c_time_stamp)
- _nvmlCheckReturn(ret)
- return c_samples[0:c_count.value]
- else:
- # error case
- raise NVMLError(ret)
- def nvmlDeviceGetProcessesUtilizationInfo(handle, timeStamp):
- # first call to get the size
- c_time_stamp = c_ulonglong(timeStamp)
- c_processesUtilInfo = c_nvmlProcessesUtilizationInfo_v1_t(0)
- c_processesUtilInfo.version = ProcessesUtilizationInfo_v1
- c_processesUtilInfo.processSamplesCount = c_uint(0)
- c_processesUtilInfo.lastSeenTimeStamp = c_time_stamp
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetProcessesUtilizationInfo")
- ret = fn(handle, byref(c_processesUtilInfo))
- if (ret == NVML_ERROR_INSUFFICIENT_SIZE):
- # typical case
- sampleArray = c_processesUtilInfo.processSamplesCount * c_nvmlProcessUtilizationInfo_v1_t
- c_samples = sampleArray()
- c_processesUtilInfo.procUtilArray = c_samples
- # make the call again
- ret = fn(handle, byref(c_processesUtilInfo))
- _nvmlCheckReturn(ret)
- return c_samples[0:c_processesUtilInfo.processSamplesCount]
- else:
- # error case
- raise NVMLError(ret)
- def nvmlVgpuInstanceGetMetadata(vgpuInstance):
- fn = _nvmlGetFunctionPointer("nvmlVgpuInstanceGetMetadata")
- c_vgpuMetadata = c_nvmlVgpuMetadata_t()
- c_bufferSize = c_uint(0)
- # Make the first NVML API call to get the c_bufferSize value.
- # We have already allocated required buffer above.
- ret = fn(vgpuInstance, byref(c_vgpuMetadata), byref(c_bufferSize))
- if (ret == NVML_ERROR_INSUFFICIENT_SIZE):
- ret = fn(vgpuInstance, byref(c_vgpuMetadata), byref(c_bufferSize))
- _nvmlCheckReturn(ret)
- else:
- raise NVMLError(ret)
- return c_vgpuMetadata
- def nvmlDeviceGetVgpuMetadata(handle):
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetVgpuMetadata")
- c_vgpuPgpuMetadata = c_nvmlVgpuPgpuMetadata_t()
- c_bufferSize = c_uint(0)
- # Make the first NVML API call to get the c_bufferSize value.
- # We have already allocated required buffer above.
- ret = fn(handle, byref(c_vgpuPgpuMetadata), byref(c_bufferSize))
- if (ret == NVML_ERROR_INSUFFICIENT_SIZE):
- ret = fn(handle, byref(c_vgpuPgpuMetadata), byref(c_bufferSize))
- _nvmlCheckReturn(ret)
- else:
- raise NVMLError(ret)
- return c_vgpuPgpuMetadata
- def nvmlGetVgpuCompatibility(vgpuMetadata, pgpuMetadata):
- fn = _nvmlGetFunctionPointer("nvmlGetVgpuCompatibility")
- c_vgpuPgpuCompatibility = c_nvmlVgpuPgpuCompatibility_t()
- ret = fn(byref(vgpuMetadata), byref(pgpuMetadata), byref(c_vgpuPgpuCompatibility))
- _nvmlCheckReturn(ret)
- return c_vgpuPgpuCompatibility
- @convertStrBytes
- def nvmlDeviceGetPgpuMetadataString(handle):
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetPgpuMetadataString")
- c_pgpuMetadata = create_string_buffer(NVML_VGPU_PGPU_METADATA_OPAQUE_DATA_SIZE)
- c_bufferSize = c_uint(0)
- # Make the first NVML API call to get the c_bufferSize value.
- # We have already allocated required buffer above.
- ret = fn(handle, byref(c_pgpuMetadata), byref(c_bufferSize))
- if (ret == NVML_ERROR_INSUFFICIENT_SIZE):
- ret = fn(handle, byref(c_pgpuMetadata), byref(c_bufferSize))
- _nvmlCheckReturn(ret)
- else:
- raise NVMLError(ret)
- return (c_pgpuMetadata.value, c_bufferSize.value)
- def nvmlDeviceGetVgpuSchedulerLog(handle):
- c_vgpu_sched_log = c_nvmlVgpuSchedulerLog_t()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetVgpuSchedulerLog")
- ret = fn(handle, byref(c_vgpu_sched_log))
- _nvmlCheckReturn(ret)
- return c_vgpu_sched_log
- def nvmlDeviceGetVgpuSchedulerState(handle):
- c_vgpu_sched_state = c_nvmlVgpuSchedulerGetState_t()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetVgpuSchedulerState")
- ret = fn(handle, byref(c_vgpu_sched_state))
- _nvmlCheckReturn(ret)
- return c_vgpu_sched_state
- def nvmlDeviceGetVgpuSchedulerCapabilities(handle):
- c_vgpu_sched_caps = c_nvmlVgpuSchedulerCapabilities_t()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetVgpuSchedulerCapabilities")
- ret = fn(handle, byref(c_vgpu_sched_caps))
- _nvmlCheckReturn(ret)
- return c_vgpu_sched_caps
- def nvmlDeviceSetVgpuSchedulerState(handle, sched_state):
- fn = _nvmlGetFunctionPointer("nvmlDeviceSetVgpuSchedulerState")
- ret = fn(handle, byref(sched_state))
- _nvmlCheckReturn(ret)
- return NVML_SUCCESS
- def nvmlSetVgpuVersion(vgpuVersion):
- fn = _nvmlGetFunctionPointer("nvmlSetVgpuVersion")
- ret = fn(byref(vgpuVersion))
- _nvmlCheckReturn(ret)
- return NVML_SUCCESS
- def nvmlGetVgpuVersion(supported=None, current=None):
- isUserDefined = (supported is not None) or (current is not None)
- if not isUserDefined:
- supported = c_nvmlVgpuVersion_t()
- current = c_nvmlVgpuVersion_t()
- fn = _nvmlGetFunctionPointer("nvmlGetVgpuVersion")
- ret = fn(byref(supported), byref(current))
- _nvmlCheckReturn(ret)
- return NVML_SUCCESS if isUserDefined else [(supported.minVersion,
- supported.maxVersion),
- (current.minVersion,
- current.maxVersion)]
- def nvmlVgpuInstanceGetAccountingMode(vgpuInstance):
- c_mode = _nvmlEnableState_t()
- fn = _nvmlGetFunctionPointer("nvmlVgpuInstanceGetAccountingMode")
- ret = fn(vgpuInstance, byref(c_mode))
- _nvmlCheckReturn(ret)
- return c_mode.value
- def nvmlVgpuInstanceGetAccountingPids(vgpuInstance):
- c_pidCount = c_uint()
- fn = _nvmlGetFunctionPointer("nvmlVgpuInstanceGetAccountingPids")
- ret = fn(vgpuInstance, byref(c_pidCount), None)
- if (ret == NVML_ERROR_INSUFFICIENT_SIZE):
- sampleArray = c_pidCount.value * c_uint
- c_pidArray = sampleArray()
- ret = fn(vgpuInstance, byref(c_pidCount), byref(c_pidArray))
- _nvmlCheckReturn(ret)
- else:
- raise NVMLError(ret)
- return (c_pidCount, c_pidArray)
- def nvmlVgpuInstanceGetAccountingStats(vgpuInstance, pid):
- c_accountingStats = c_nvmlAccountingStats_t()
- fn = _nvmlGetFunctionPointer("nvmlVgpuInstanceGetAccountingStats")
- ret = fn(vgpuInstance, pid, byref(c_accountingStats))
- _nvmlCheckReturn(ret)
- return c_accountingStats
- def nvmlVgpuInstanceClearAccountingPids(vgpuInstance):
- fn = _nvmlGetFunctionPointer("nvmlVgpuInstanceClearAccountingPids")
- ret = fn(vgpuInstance)
- _nvmlCheckReturn(ret)
- return NVML_SUCCESS
- def nvmlGpuInstanceGetCreatableVgpus(gpuInstance, c_vgpus):
- c_vgpus.vgpuCount = 0;
- fn = _nvmlGetFunctionPointer("nvmlGpuInstanceGetCreatableVgpus")
- ret = fn(gpuInstance, byref(c_vgpus))
- if (ret == NVML_SUCCESS):
- # special case, no supported vGPUs
- return c_vgpus
- elif (ret == NVML_ERROR_INSUFFICIENT_SIZE):
- vgpu_type_ids_array = _nvmlVgpuTypeId_t * c_vgpus.vgpuCount
- c_vgpus.vgpuTypeIds = vgpu_type_ids_array()
- ret = fn(gpuInstance, byref(c_vgpus))
- _nvmlCheckReturn(ret)
- return c_vgpus
- else:
- raise NVMLError(ret)
- def nvmlVgpuTypeGetMaxInstancesPerGpuInstance(vgpuTypeId):
- c_max_instances = c_nvmlVgpuTypeMaxInstance_v1_t()
- c_max_instances.version = nvmlVgpuTypeMaxInstance_v1
- c_max_instances.vgpuTypeId = vgpuTypeId
- fn = _nvmlGetFunctionPointer("nvmlVgpuTypeGetMaxInstancesPerGpuInstance")
- ret = fn(byref(c_max_instances))
- _nvmlCheckReturn(ret)
- return c_max_instances.maxInstancePerGI
- def nvmlGpuInstanceGetActiveVgpus(gpuInstance, c_vgpu_instance_info):
- c_vgpu_instance_info.vgpuCount = c_uint(0)
- fn = _nvmlGetFunctionPointer("nvmlGpuInstanceGetActiveVgpus")
- ret = fn(gpuInstance, byref(c_vgpu_instance_info))
- if (ret == NVML_SUCCESS):
- # special case, no active vGPUs
- return c_vgpu_instance_info
- elif (ret == NVML_ERROR_INSUFFICIENT_SIZE):
- # typical case
- vgpu_instance_array = _nvmlVgpuInstance_t * c_vgpu_instance_info.vgpuCount
- c_vgpu_instance_info.vgpuInstances = vgpu_instance_array()
- # make the call again
- ret = fn(gpuInstance, byref(c_vgpu_instance_info))
- _nvmlCheckReturn(ret)
- return c_vgpu_instance_info
- else:
- raise NVMLError(ret)
- def nvmlGpuInstanceSetVgpuSchedulerState(gpuInstance, sched_state):
- fn = _nvmlGetFunctionPointer("nvmlGpuInstanceSetVgpuSchedulerState")
- ret = fn(gpuInstance, byref(sched_state))
- _nvmlCheckReturn(ret)
- return ret
- def nvmlGpuInstanceGetVgpuSchedulerState(gpuInstance, c_vgpu_sched_state_info):
- fn = _nvmlGetFunctionPointer("nvmlGpuInstanceGetVgpuSchedulerState")
- ret = fn(gpuInstance, byref(c_vgpu_sched_state_info))
- _nvmlCheckReturn(ret)
- return c_vgpu_sched_state_info
- def nvmlGpuInstanceGetVgpuSchedulerLog(gpuInstance, c_vgpu_sched_log_info):
- fn = _nvmlGetFunctionPointer("nvmlGpuInstanceGetVgpuSchedulerLog")
- ret = fn(gpuInstance, byref(c_vgpu_sched_log_info))
- _nvmlCheckReturn(ret)
- return c_vgpu_sched_log_info
- def nvmlGpuInstanceGetVgpuTypeCreatablePlacements(gpuInstance, c_vgpu_placements):
- c_max_instances = c_nvmlVgpuTypeMaxInstance_v1_t()
- c_max_instances.version = nvmlVgpuTypeMaxInstance_v1
- c_max_instances.vgpuTypeId = c_vgpu_placements.vgpuTypeId
- fn = _nvmlGetFunctionPointer("nvmlVgpuTypeGetMaxInstancesPerGpuInstance")
- ret = fn(byref(c_max_instances))
- _nvmlCheckReturn(ret)
- c_vgpu_placements.count = c_max_instances.maxInstancePerGI
- c_placements = c_uint * c_max_instances.maxInstancePerGI
- c_vgpu_placements.placementIds = c_placements()
- fn = _nvmlGetFunctionPointer("nvmlGpuInstanceGetVgpuTypeCreatablePlacements")
- ret = fn(gpuInstance, byref(c_vgpu_placements))
- _nvmlCheckReturn(ret)
- return c_vgpu_placements
- def nvmlGpuInstanceGetVgpuHeterogeneousMode(gpuInstance):
- c_vgpuHeterogeneousMode = c_nvmlVgpuHeterogeneousMode_v1_t(0)
- c_vgpuHeterogeneousMode.version = VgpuHeterogeneousMode_v1
- fn = _nvmlGetFunctionPointer("nvmlGpuInstanceGetVgpuHeterogeneousMode")
- ret = fn(gpuInstance, byref(c_vgpuHeterogeneousMode))
- _nvmlCheckReturn(ret)
- return c_vgpuHeterogeneousMode.mode
- def nvmlGpuInstanceSetVgpuHeterogeneousMode(gpuInstance, heterogeneous_mode):
- c_vgpuHeterogeneousMode = c_nvmlVgpuHeterogeneousMode_v1_t(0)
- c_vgpuHeterogeneousMode.version = VgpuHeterogeneousMode_v1
- c_vgpuHeterogeneousMode.mode = heterogeneous_mode
- fn = _nvmlGetFunctionPointer("nvmlGpuInstanceSetVgpuHeterogeneousMode")
- ret = fn(gpuInstance, byref(c_vgpuHeterogeneousMode))
- _nvmlCheckReturn(ret)
- return NVML_SUCCESS
- def nvmlGetExcludedDeviceCount():
- c_count = c_uint()
- fn = _nvmlGetFunctionPointer("nvmlGetExcludedDeviceCount")
- ret = fn(byref(c_count))
- _nvmlCheckReturn(ret)
- return c_count.value
- def nvmlGetExcludedDeviceInfoByIndex(index):
- c_index = c_uint(index)
- info = c_nvmlExcludedDeviceInfo_t()
- fn = _nvmlGetFunctionPointer("nvmlGetExcludedDeviceInfoByIndex")
- ret = fn(c_index, byref(info))
- _nvmlCheckReturn(ret)
- return info
- def nvmlDeviceGetHostVgpuMode(handle):
- c_host_vgpu_mode = _nvmlHostVgpuMode_t()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetHostVgpuMode")
- ret = fn(handle, byref(c_host_vgpu_mode))
- _nvmlCheckReturn(ret)
- return c_host_vgpu_mode.value
- def nvmlDeviceSetMigMode(device, mode):
- c_activationStatus = c_uint()
- fn = _nvmlGetFunctionPointer("nvmlDeviceSetMigMode")
- ret = fn(device, mode, byref(c_activationStatus))
- _nvmlCheckReturn(ret)
- return c_activationStatus.value
- def nvmlDeviceGetMigMode(device):
- c_currentMode = c_uint()
- c_pendingMode = c_uint()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetMigMode")
- ret = fn(device, byref(c_currentMode), byref(c_pendingMode))
- _nvmlCheckReturn(ret)
- return [c_currentMode.value, c_pendingMode.value]
- def nvmlDeviceGetGpuInstanceProfileInfo(device, profile, version=2):
- if version == 2:
- c_info = c_nvmlGpuInstanceProfileInfo_v2_t()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetGpuInstanceProfileInfoV")
- elif version == 1:
- c_info = c_nvmlGpuInstanceProfileInfo_t()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetGpuInstanceProfileInfo")
- else:
- raise NVMLError(NVML_ERROR_FUNCTION_NOT_FOUND)
- ret = fn(device, profile, byref(c_info))
- _nvmlCheckReturn(ret)
- return c_info
- def nvmlDeviceGetGpuInstanceProfileInfoById(device, profileId):
- c_info = c_nvmlGpuInstanceProfileInfo_v2_t()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetGpuInstanceProfileInfoByIdV")
- ret = fn(device, profileId, byref(c_info))
- _nvmlCheckReturn(ret)
- return c_info
- # Define function alias for the API exposed by NVML
- nvmlDeviceGetGpuInstanceProfileInfoV = nvmlDeviceGetGpuInstanceProfileInfo
- nvmlDeviceGetGpuInstanceProfileInfoByIdV = nvmlDeviceGetGpuInstanceProfileInfoById
- def nvmlDeviceGetGpuInstanceRemainingCapacity(device, profileId):
- c_count = c_uint()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetGpuInstanceRemainingCapacity")
- ret = fn(device, profileId, byref(c_count))
- _nvmlCheckReturn(ret)
- return c_count.value
- def nvmlDeviceGetGpuInstancePossiblePlacements(device, profileId, placementsRef, countRef):
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetGpuInstancePossiblePlacements_v2")
- ret = fn(device, profileId, placementsRef, countRef)
- _nvmlCheckReturn(ret)
- return NVML_SUCCESS
- def nvmlDeviceCreateGpuInstance(device, profileId):
- c_instance = c_nvmlGpuInstance_t()
- fn = _nvmlGetFunctionPointer("nvmlDeviceCreateGpuInstance")
- ret = fn(device, profileId, byref(c_instance))
- _nvmlCheckReturn(ret)
- return c_instance
- def nvmlDeviceCreateGpuInstanceWithPlacement(device, profileId, placement):
- c_instance = c_nvmlGpuInstance_t()
- fn = _nvmlGetFunctionPointer("nvmlDeviceCreateGpuInstanceWithPlacement")
- ret = fn(device, profileId, placement, byref(c_instance))
- _nvmlCheckReturn(ret)
- return c_instance
- def nvmlGpuInstanceDestroy(gpuInstance):
- fn = _nvmlGetFunctionPointer("nvmlGpuInstanceDestroy")
- ret = fn(gpuInstance)
- _nvmlCheckReturn(ret)
- return NVML_SUCCESS
- def nvmlDeviceGetGpuInstances(device, profileId, gpuInstancesRef, countRef):
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetGpuInstances")
- ret = fn(device, profileId, gpuInstancesRef, countRef)
- _nvmlCheckReturn(ret)
- return NVML_SUCCESS
- def nvmlDeviceGetGpuInstanceById(device, gpuInstanceId):
- c_instance = c_nvmlGpuInstance_t()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetGpuInstanceById")
- ret = fn(device, gpuInstanceId, byref(c_instance))
- _nvmlCheckReturn(ret)
- return c_instance
- def nvmlGpuInstanceGetInfo(gpuInstance):
- c_info = c_nvmlGpuInstanceInfo_t()
- fn = _nvmlGetFunctionPointer("nvmlGpuInstanceGetInfo")
- ret = fn(gpuInstance, byref(c_info))
- _nvmlCheckReturn(ret)
- return c_info
- def nvmlGpuInstanceGetComputeInstanceProfileInfo(device, profile, engProfile, version=2):
- if version == 2:
- c_info = c_nvmlComputeInstanceProfileInfo_v2_t()
- fn = _nvmlGetFunctionPointer("nvmlGpuInstanceGetComputeInstanceProfileInfoV")
- elif version == 1:
- c_info = c_nvmlComputeInstanceProfileInfo_t()
- fn = _nvmlGetFunctionPointer("nvmlGpuInstanceGetComputeInstanceProfileInfo")
- else:
- raise NVMLError(NVML_ERROR_FUNCTION_NOT_FOUND)
- ret = fn(device, profile, engProfile, byref(c_info))
- _nvmlCheckReturn(ret)
- return c_info
- # Define function alias for the API exposed by NVML
- nvmlGpuInstanceGetComputeInstanceProfileInfoV = nvmlGpuInstanceGetComputeInstanceProfileInfo
- def nvmlGpuInstanceGetComputeInstanceRemainingCapacity(gpuInstance, profileId):
- c_count = c_uint()
- fn = _nvmlGetFunctionPointer("nvmlGpuInstanceGetComputeInstanceRemainingCapacity")
- ret = fn(gpuInstance, profileId, byref(c_count))
- _nvmlCheckReturn(ret)
- return c_count.value
- def nvmlGpuInstanceGetComputeInstancePossiblePlacements(gpuInstance, profileId, placementsRef, countRef):
- fn = _nvmlGetFunctionPointer("nvmlGpuInstanceGetComputeInstancePossiblePlacements")
- ret = fn(gpuInstance, profileId, placementsRef, countRef)
- _nvmlCheckReturn(ret)
- return NVML_SUCCESS
- def nvmlGpuInstanceCreateComputeInstance(gpuInstance, profileId):
- c_instance = c_nvmlComputeInstance_t()
- fn = _nvmlGetFunctionPointer("nvmlGpuInstanceCreateComputeInstance")
- ret = fn(gpuInstance, profileId, byref(c_instance))
- _nvmlCheckReturn(ret)
- return c_instance
- def nvmlGpuInstanceCreateComputeInstanceWithPlacement(gpuInstance, profileId, placement):
- c_instance = c_nvmlComputeInstance_t()
- fn = _nvmlGetFunctionPointer("nvmlGpuInstanceCreateComputeInstanceWithPlacement")
- ret = fn(gpuInstance, profileId, placement, byref(c_instance))
- _nvmlCheckReturn(ret)
- return c_instance
- def nvmlComputeInstanceDestroy(computeInstance):
- fn = _nvmlGetFunctionPointer("nvmlComputeInstanceDestroy")
- ret = fn(computeInstance)
- _nvmlCheckReturn(ret)
- return NVML_SUCCESS
- def nvmlGpuInstanceGetComputeInstances(gpuInstance, profileId, computeInstancesRef, countRef):
- fn = _nvmlGetFunctionPointer("nvmlGpuInstanceGetComputeInstances")
- ret = fn(gpuInstance, profileId, computeInstancesRef, countRef)
- _nvmlCheckReturn(ret)
- return NVML_SUCCESS
- def nvmlGpuInstanceGetComputeInstanceById(gpuInstance, computeInstanceId):
- c_instance = c_nvmlComputeInstance_t()
- fn = _nvmlGetFunctionPointer("nvmlGpuInstanceGetComputeInstanceById")
- ret = fn(gpuInstance, computeInstanceId, byref(c_instance))
- _nvmlCheckReturn(ret)
- return c_instance
- def nvmlComputeInstanceGetInfo_v2(computeInstance):
- c_info = c_nvmlComputeInstanceInfo_t()
- fn = _nvmlGetFunctionPointer("nvmlComputeInstanceGetInfo_v2")
- ret = fn(computeInstance, byref(c_info))
- _nvmlCheckReturn(ret)
- return c_info
- def nvmlComputeInstanceGetInfo(computeInstance):
- return nvmlComputeInstanceGetInfo_v2(computeInstance)
- def nvmlDeviceIsMigDeviceHandle(device):
- c_isMigDevice = c_uint()
- fn = _nvmlGetFunctionPointer("nvmlDeviceIsMigDeviceHandle")
- ret = fn(device, byref(c_isMigDevice))
- _nvmlCheckReturn(ret)
- return c_isMigDevice
- def nvmlDeviceGetGpuInstanceId(device):
- c_gpuInstanceId = c_uint()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetGpuInstanceId")
- ret = fn(device, byref(c_gpuInstanceId))
- _nvmlCheckReturn(ret)
- return c_gpuInstanceId.value
- def nvmlDeviceGetComputeInstanceId(device):
- c_computeInstanceId = c_uint()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetComputeInstanceId")
- ret = fn(device, byref(c_computeInstanceId))
- _nvmlCheckReturn(ret)
- return c_computeInstanceId.value
- def nvmlDeviceGetMaxMigDeviceCount(device):
- c_count = c_uint()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetMaxMigDeviceCount")
- ret = fn(device, byref(c_count))
- _nvmlCheckReturn(ret)
- return c_count.value
- def nvmlDeviceGetMigDeviceHandleByIndex(device, index):
- c_index = c_uint(index)
- migDevice = c_nvmlDevice_t()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetMigDeviceHandleByIndex")
- ret = fn(device, c_index, byref(migDevice))
- _nvmlCheckReturn(ret)
- return migDevice
- def nvmlDeviceGetDeviceHandleFromMigDeviceHandle(migDevice):
- device = c_nvmlDevice_t()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetDeviceHandleFromMigDeviceHandle")
- ret = fn(migDevice, byref(device))
- _nvmlCheckReturn(ret)
- return device
- def nvmlDeviceGetAttributes_v2(device):
- c_attrs = c_nvmlDeviceAttributes()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetAttributes_v2")
- ret = fn(device, byref(c_attrs))
- _nvmlCheckReturn(ret)
- return c_attrs
- def nvmlDeviceGetAttributes(device):
- return nvmlDeviceGetAttributes_v2(device)
- def nvmlDeviceGetRemappedRows(device):
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetRemappedRows")
- c_corr = c_uint()
- c_unc = c_uint()
- c_bpending = c_uint()
- c_bfailure = c_uint()
- ret = fn(device, byref(c_corr), byref(c_unc), byref(c_bpending), byref(c_bfailure))
- _nvmlCheckReturn(ret)
- return (c_corr.value, c_unc.value, c_bpending.value, c_bfailure.value)
- def nvmlDeviceGetRowRemapperHistogram(device):
- c_vals = c_nvmlRowRemapperHistogramValues()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetRowRemapperHistogram")
- ret = fn(device, byref(c_vals))
- _nvmlCheckReturn(ret)
- return c_vals
- def nvmlDeviceGetArchitecture(device):
- arch = _nvmlDeviceArchitecture_t()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetArchitecture")
- ret = fn(device, byref(arch))
- _nvmlCheckReturn(ret)
- return arch.value
- def nvmlDeviceGetBusType(device):
- c_busType = _nvmlBusType_t()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetBusType")
- ret = fn(device, byref(c_busType))
- _nvmlCheckReturn(ret)
- return c_busType.value
- def nvmlDeviceGetIrqNum(device):
- c_irqNum = c_uint()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetIrqNum")
- ret = fn(device, byref(c_irqNum))
- _nvmlCheckReturn(ret)
- return c_irqNum.value
- def nvmlDeviceGetNumGpuCores(device):
- c_numCores = c_uint()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetNumGpuCores")
- ret = fn(device, byref(c_numCores))
- _nvmlCheckReturn(ret)
- return c_numCores.value
- def nvmlDeviceGetPowerSource(device):
- c_powerSource = _nvmlPowerSource_t()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetPowerSource")
- ret = fn(device, byref(c_powerSource))
- _nvmlCheckReturn(ret)
- return c_powerSource.value
- def nvmlDeviceGetMemoryBusWidth(device):
- c_memBusWidth = c_uint()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetMemoryBusWidth")
- ret = fn(device, byref(c_memBusWidth))
- _nvmlCheckReturn(ret)
- return c_memBusWidth.value
- def nvmlDeviceGetPcieLinkMaxSpeed(device):
- c_speed = _nvmlPcieLinkMaxSpeed_t()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetPcieLinkMaxSpeed")
- ret = fn(device, byref(c_speed))
- _nvmlCheckReturn(ret)
- return c_speed.value
- def nvmlDeviceGetAdaptiveClockInfoStatus(device):
- c_adaptiveClockInfoStatus = _nvmlAdaptiveClockInfoStatus_t()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetAdaptiveClockInfoStatus")
- ret = fn(device, byref(c_adaptiveClockInfoStatus))
- _nvmlCheckReturn(ret)
- return c_adaptiveClockInfoStatus.value
- def nvmlDeviceGetPcieSpeed(device):
- c_speed = c_uint()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetPcieSpeed")
- ret = fn(device, byref(c_speed))
- _nvmlCheckReturn(ret)
- return c_speed.value
- def nvmlDeviceGetDynamicPstatesInfo(device, c_dynamicpstatesinfo=c_nvmlGpuDynamicPstatesInfo_t()):
- isReference = type(c_dynamicpstatesinfo) is not c_nvmlGpuDynamicPstatesInfo_t
- dynamicpstatesinfoRef = c_dynamicpstatesinfo if isReference else byref(c_dynamicpstatesinfo)
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetDynamicPstatesInfo");
- ret = fn(device, dynamicpstatesinfoRef)
- _nvmlCheckReturn(ret)
- return NVML_SUCCESS if isReference else c_dynamicpstatesinfo
- def nvmlDeviceSetFanSpeed_v2(handle, index, speed):
- fn = _nvmlGetFunctionPointer("nvmlDeviceSetFanSpeed_v2");
- ret = fn(handle, index, speed)
- _nvmlCheckReturn(ret)
- return NVML_SUCCESS
- def nvmlDeviceGetThermalSettings(device, sensorindex, c_thermalsettings=c_nvmlGpuThermalSettings_t()):
- isReference = type(c_thermalsettings) is not c_nvmlGpuThermalSettings_t
- thermalsettingsRef = c_thermalsettings if isReference else byref(c_thermalsettings)
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetThermalSettings");
- ret = fn(device, sensorindex, thermalsettingsRef)
- _nvmlCheckReturn(ret)
- return NVML_SUCCESS if isReference else c_thermalsettings.sensor[:]
- def nvmlDeviceGetMinMaxClockOfPState(device, clockType, pstate, minClockMHz=c_uint(), maxClockMHz=c_uint()):
- isReference = (type(minClockMHz) is not c_uint) or (type(maxClockMHz) is not c_uint)
- minClockMHzRef = minClockMHz if isReference else byref(minClockMHz)
- maxClockMHzRef = maxClockMHz if isReference else byref(maxClockMHz)
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetMinMaxClockOfPState");
- ret = fn(device, _nvmlClockType_t(clockType), _nvmlClockType_t(pstate), minClockMHzRef, maxClockMHzRef)
- _nvmlCheckReturn(ret)
- return NVML_SUCCESS if isReference else (minClockMHz.value, maxClockMHz.value)
- _nvmlPowerMizerMode_t = c_uint
- NVML_POWER_MIZER_MODE_ADAPTIVE = 0
- NVML_POWER_MIZER_MODE_PREFER_MAXIMUM_PERFORMANCE = 1
- NVML_POWER_MIZER_MODE_AUTO = 2
- NVML_POWER_MIZER_MODE_PREFER_CONSISTENT_PERFORMANCE = 3
- class c_nvmlDevicePowerMizerModes_v1_t(_PrintableStructure):
- _fields_ = [
- ('currentMode', _nvmlPowerMizerMode_t),
- ('mode', _nvmlPowerMizerMode_t),
- ('supportedPowerMizerModes', _nvmlPowerMizerMode_t),
- ]
- def nvmlDeviceGetPowerMizerMode_v1(device, info):
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetPowerMizerMode_v1");
- ret = fn(device, info)
- return ret
- def nvmlDeviceSetPowerMizerMode_v1(device, info):
- fn = _nvmlGetFunctionPointer("nvmlDeviceSetPowerMizerMode_v1");
- ret = fn(device, info)
- return ret
- class c_nvmlClockOffset_t(_PrintableStructure):
- _fields_ = [
- ('version', c_uint),
- ('type', _nvmlClockType_t),
- ('pstate', _nvmlPstates_t),
- ('clockOffsetMHz', c_int),
- ('minClockOffsetMHz', c_int),
- ('maxClockOffsetMHz', c_int),
- ]
- nvmlClockOffset_v1 = 0x1000018
- def nvmlDeviceGetClockOffsets(device, info):
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetClockOffsets");
- ret = fn(device, info)
- return NVML_SUCCESS
- def nvmlDeviceSetClockOffsets(device, info):
- fn = _nvmlGetFunctionPointer("nvmlDeviceSetClockOffsets");
- ret = fn(device, info)
- return NVML_SUCCESS
- def nvmlDeviceGetSupportedPerformanceStates(device):
- pstates = []
- c_count = c_uint(NVML_MAX_GPU_PERF_PSTATES)
- c_size = sizeof(c_uint)*c_count.value
- # NOTE: use 'c_uint' to represent the size of the nvmlPstate_t enumeration.
- pstates_array = _nvmlPstates_t * c_count.value
- c_pstates = pstates_array()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetSupportedPerformanceStates")
- ret = fn(device, c_pstates, c_size)
- _nvmlCheckReturn(ret)
- for value in c_pstates:
- if value != NVML_PSTATE_UNKNOWN:
- pstates.append(value)
- return pstates
- def nvmlDeviceGetGpcClkVfOffset(device):
- offset = c_int32()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetGpcClkVfOffset")
- ret = fn(device, byref(offset))
- _nvmlCheckReturn(ret)
- return offset.value
- # Deprecated
- def nvmlDeviceSetGpcClkVfOffset(device, offset):
- c_offset = c_int32(offset)
- fn = _nvmlGetFunctionPointer("nvmlDeviceSetGpcClkVfOffset")
- ret = fn(device, c_offset)
- _nvmlCheckReturn(ret)
- return NVML_SUCCESS
- def nvmlDeviceGetGpcClkMinMaxVfOffset(device, minOffset=c_int(), maxOffset=c_int()):
- isReference = (type(minOffset) is not c_int) or (type(maxOffset) is not c_int)
- minOffsetRef = minOffset if isReference else byref(minOffset)
- maxOffsetRef = maxOffset if isReference else byref(maxOffset)
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetGpcClkMinMaxVfOffset")
- ret = fn(device, minOffsetRef, maxOffsetRef)
- _nvmlCheckReturn(ret)
- return NVML_SUCCESS if isReference else (minOffset.value, maxOffset.value)
- def nvmlDeviceGetMemClkVfOffset(device):
- offset = c_int32()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetMemClkVfOffset")
- ret = fn(device, byref(offset))
- _nvmlCheckReturn(ret)
- return offset.value
- # Deprecated
- def nvmlDeviceSetMemClkVfOffset(device, offset):
- c_offset = c_int32(offset)
- fn = _nvmlGetFunctionPointer("nvmlDeviceSetMemClkVfOffset")
- ret = fn(device, c_offset)
- _nvmlCheckReturn(ret)
- return NVML_SUCCESS
- def nvmlDeviceGetMemClkMinMaxVfOffset(device, minOffset=c_int(), maxOffset=c_int()):
- isReference = (type(minOffset) is not c_int) or (type(maxOffset) is not c_int)
- minOffsetRef = minOffset if isReference else byref(minOffset)
- maxOffsetRef = maxOffset if isReference else byref(maxOffset)
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetMemClkMinMaxVfOffset")
- ret = fn(device, minOffsetRef, maxOffsetRef)
- _nvmlCheckReturn(ret)
- return NVML_SUCCESS if isReference else (minOffset.value, maxOffset.value)
- def nvmlSystemSetConfComputeGpusReadyState(state):
- c_state = c_uint(state)
- fn = _nvmlGetFunctionPointer("nvmlSystemSetConfComputeGpusReadyState")
- ret = fn(c_state)
- _nvmlCheckReturn(ret)
- return NVML_SUCCESS
- def nvmlSystemGetConfComputeGpusReadyState():
- c_state = c_uint()
- fn = _nvmlGetFunctionPointer("nvmlSystemGetConfComputeGpusReadyState")
- ret = fn(byref(c_state))
- _nvmlCheckReturn(ret)
- return c_state.value
- def nvmlSystemGetConfComputeCapabilities():
- c_ccSysCaps = c_nvmlConfComputeSystemCaps_t()
- fn = _nvmlGetFunctionPointer("nvmlSystemGetConfComputeCapabilities")
- ret = fn(byref(c_ccSysCaps))
- _nvmlCheckReturn(ret)
- return c_ccSysCaps
- def nvmlSystemGetConfComputeState():
- c_state = c_nvmlConfComputeSystemState_t()
- fn = _nvmlGetFunctionPointer("nvmlSystemGetConfComputeState")
- ret = fn(byref(c_state))
- _nvmlCheckReturn(ret)
- return c_state
- def nvmlSystemGetConfComputeSettings(settings):
- fn = _nvmlGetFunctionPointer("nvmlSystemGetConfComputeSettings")
- return fn(settings)
- def nvmlDeviceSetConfComputeUnprotectedMemSize(device, c_ccMemSize):
- fn = _nvmlGetFunctionPointer("nvmlDeviceSetConfComputeUnprotectedMemSize")
- ret = fn(device, c_ccMemSize)
- _nvmlCheckReturn(ret)
- return NVML_SUCCESS
- def nvmlDeviceGetConfComputeMemSizeInfo(device):
- c_ccMemSize = c_nvmlConfComputeMemSizeInfo_t()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetConfComputeMemSizeInfo")
- ret = fn(device, byref(c_ccMemSize))
- _nvmlCheckReturn(ret)
- return c_ccMemSize
- def nvmlDeviceGetConfComputeProtectedMemoryUsage(device):
- c_memory = c_nvmlMemory_t()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetConfComputeProtectedMemoryUsage")
- ret = fn(device, byref(c_memory))
- _nvmlCheckReturn(ret)
- return c_memory
- def nvmlDeviceGetConfComputeGpuCertificate(device):
- c_cert = c_nvmlConfComputeGpuCertificate_t()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetConfComputeGpuCertificate")
- ret = fn(device, byref(c_cert))
- _nvmlCheckReturn(ret)
- return c_cert
- def nvmlDeviceGetConfComputeGpuAttestationReport(device, c_nonce):
- c_attestReport = c_nvmlConfComputeGpuAttestationReport_t()
- c_nonce_arr = (c_uint8 * len(c_nonce))(*(c_nonce))
- setattr(c_attestReport, 'nonce', c_nonce_arr)
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetConfComputeGpuAttestationReport")
- ret = fn(device, byref(c_attestReport))
- _nvmlCheckReturn(ret)
- return c_attestReport
- def nvmlSystemSetConfComputeKeyRotationThresholdInfo(max_atk_adv):
- c_keyRotationThrInfo = c_nvmlConfComputeSetKeyRotationThresholdInfo_t(0)
- c_keyRotationThrInfo.version = ConfComputeSetKeyRotationThresholdInfo_v1
- c_keyRotationThrInfo.maxAttackerAdvantage = max_atk_adv
- fn = _nvmlGetFunctionPointer("nvmlSystemSetConfComputeKeyRotationThresholdInfo")
- ret = fn(byref(c_keyRotationThrInfo))
- _nvmlCheckReturn(ret)
- return NVML_SUCCESS
- def nvmlSystemGetConfComputeKeyRotationThresholdInfo():
- c_keyRotationThrInfo = c_nvmlConfComputeGetKeyRotationThresholdInfo_t(0)
- c_keyRotationThrInfo.version = ConfComputeGetKeyRotationThresholdInfo_v1
- fn = _nvmlGetFunctionPointer("nvmlSystemGetConfComputeKeyRotationThresholdInfo")
- ret = fn(byref(c_keyRotationThrInfo))
- _nvmlCheckReturn(ret)
- return c_keyRotationThrInfo
- ## GPM ##
- #########
- ## Enums/defines
- #### GPM Metric Identifiers
- NVML_GPM_METRIC_GRAPHICS_UTIL = 1 # Percentage of time any compute/graphics app was active on the GPU. 0.0 - 100.0
- NVML_GPM_METRIC_SM_UTIL = 2 # Percentage of SMs that were busy. 0.0 - 100.0
- NVML_GPM_METRIC_SM_OCCUPANCY = 3 # Percentage of warps that were active vs theoretical maximum. 0.0 - 100.0
- NVML_GPM_METRIC_INTEGER_UTIL = 4 # Percentage of time the GPU's SMs were doing integer operations. 0.0 - 100.0
- NVML_GPM_METRIC_ANY_TENSOR_UTIL = 5 # Percentage of time the GPU's SMs were doing ANY tensor operations. 0.0 - 100.0
- NVML_GPM_METRIC_DFMA_TENSOR_UTIL = 6 # Percentage of time the GPU's SMs were doing DFMA tensor operations. 0.0 - 100.0
- NVML_GPM_METRIC_HMMA_TENSOR_UTIL = 7 # Percentage of time the GPU's SMs were doing HMMA tensor operations. 0.0 - 100.0
- NVML_GPM_METRIC_IMMA_TENSOR_UTIL = 9 # Percentage of time the GPU's SMs were doing IMMA tensor operations. 0.0 - 100.0
- NVML_GPM_METRIC_DRAM_BW_UTIL = 10 # Percentage of DRAM bw used vs theoretical maximum. 0.0 - 100.0
- NVML_GPM_METRIC_FP64_UTIL = 11 # Percentage of time the GPU's SMs were doing non-tensor FP64 math. 0.0 - 100.0
- NVML_GPM_METRIC_FP32_UTIL = 12 # Percentage of time the GPU's SMs were doing non-tensor FP32 math. 0.0 - 100.0
- NVML_GPM_METRIC_FP16_UTIL = 13 # Percentage of time the GPU's SMs were doing non-tensor FP16 math. 0.0 - 100.0
- NVML_GPM_METRIC_PCIE_TX_PER_SEC = 20 # PCIe traffic from this GPU in MiB/sec
- NVML_GPM_METRIC_PCIE_RX_PER_SEC = 21 # PCIe traffic to this GPU in MiB/sec
- NVML_GPM_METRIC_NVDEC_0_UTIL = 30 # Percent utilization of NVDEC 0. 0.0 - 100.0
- NVML_GPM_METRIC_NVDEC_1_UTIL = 31 # Percent utilization of NVDEC 1. 0.0 - 100.0
- NVML_GPM_METRIC_NVDEC_2_UTIL = 32 # Percent utilization of NVDEC 2. 0.0 - 100.0
- NVML_GPM_METRIC_NVDEC_3_UTIL = 33 # Percent utilization of NVDEC 3. 0.0 - 100.0
- NVML_GPM_METRIC_NVDEC_4_UTIL = 34 # Percent utilization of NVDEC 4. 0.0 - 100.0
- NVML_GPM_METRIC_NVDEC_5_UTIL = 35 # Percent utilization of NVDEC 5. 0.0 - 100.0
- NVML_GPM_METRIC_NVDEC_6_UTIL = 36 # Percent utilization of NVDEC 6. 0.0 - 100.0
- NVML_GPM_METRIC_NVDEC_7_UTIL = 37 # Percent utilization of NVDEC 7. 0.0 - 100.0
- NVML_GPM_METRIC_NVJPG_0_UTIL = 40 # Percent utilization of NVJPG 0. 0.0 - 100.0
- NVML_GPM_METRIC_NVJPG_1_UTIL = 41 # Percent utilization of NVJPG 1. 0.0 - 100.0
- NVML_GPM_METRIC_NVJPG_2_UTIL = 42 # Percent utilization of NVJPG 2. 0.0 - 100.0
- NVML_GPM_METRIC_NVJPG_3_UTIL = 43 # Percent utilization of NVJPG 3. 0.0 - 100.0
- NVML_GPM_METRIC_NVJPG_4_UTIL = 44 # Percent utilization of NVJPG 4. 0.0 - 100.0
- NVML_GPM_METRIC_NVJPG_5_UTIL = 45 # Percent utilization of NVJPG 5. 0.0 - 100.0
- NVML_GPM_METRIC_NVJPG_6_UTIL = 46 # Percent utilization of NVJPG 6. 0.0 - 100.0
- NVML_GPM_METRIC_NVJPG_7_UTIL = 47 # Percent utilization of NVJPG 7. 0.0 - 100.0
- NVML_GPM_METRIC_NVOFA_0_UTIL = 50 # Percent utilization of NVOFA 0. 0.0 - 100.0
- NVML_GPM_METRIC_NVOFA_1_UTIL = 51 # Percent utilization of NVOFA 1. 0.0 - 100.0
- NVML_GPM_METRIC_NVLINK_TOTAL_RX_PER_SEC = 60 # NvLink read bandwidth for all links in MiB/sec
- NVML_GPM_METRIC_NVLINK_TOTAL_TX_PER_SEC = 61 # NvLink write bandwidth for all links in MiB/sec
- NVML_GPM_METRIC_NVLINK_L0_RX_PER_SEC = 62 # NvLink read bandwidth for link 0 in MiB/sec
- NVML_GPM_METRIC_NVLINK_L0_TX_PER_SEC = 63 # NvLink write bandwidth for link 0 in MiB/sec
- NVML_GPM_METRIC_NVLINK_L1_RX_PER_SEC = 64 # NvLink read bandwidth for link 1 in MiB/sec
- NVML_GPM_METRIC_NVLINK_L1_TX_PER_SEC = 65 # NvLink write bandwidth for link 1 in MiB/sec
- NVML_GPM_METRIC_NVLINK_L2_RX_PER_SEC = 66 # NvLink read bandwidth for link 2 in MiB/sec
- NVML_GPM_METRIC_NVLINK_L2_TX_PER_SEC = 67 # NvLink write bandwidth for link 2 in MiB/sec
- NVML_GPM_METRIC_NVLINK_L3_RX_PER_SEC = 68 # NvLink read bandwidth for link 3 in MiB/sec
- NVML_GPM_METRIC_NVLINK_L3_TX_PER_SEC = 69 # NvLink write bandwidth for link 3 in MiB/sec
- NVML_GPM_METRIC_NVLINK_L4_RX_PER_SEC = 70 # NvLink read bandwidth for link 4 in MiB/sec
- NVML_GPM_METRIC_NVLINK_L4_TX_PER_SEC = 71 # NvLink write bandwidth for link 4 in MiB/sec
- NVML_GPM_METRIC_NVLINK_L5_RX_PER_SEC = 72 # NvLink read bandwidth for link 5 in MiB/sec
- NVML_GPM_METRIC_NVLINK_L5_TX_PER_SEC = 73 # NvLink write bandwidth for link 5 in MiB/sec
- NVML_GPM_METRIC_NVLINK_L6_RX_PER_SEC = 74 # NvLink read bandwidth for link 6 in MiB/sec
- NVML_GPM_METRIC_NVLINK_L6_TX_PER_SEC = 75 # NvLink write bandwidth for link 6 in MiB/sec
- NVML_GPM_METRIC_NVLINK_L7_RX_PER_SEC = 76 # NvLink read bandwidth for link 7 in MiB/sec
- NVML_GPM_METRIC_NVLINK_L7_TX_PER_SEC = 77 # NvLink write bandwidth for link 7 in MiB/sec
- NVML_GPM_METRIC_NVLINK_L8_RX_PER_SEC = 78 # NvLink read bandwidth for link 8 in MiB/sec
- NVML_GPM_METRIC_NVLINK_L8_TX_PER_SEC = 79 # NvLink write bandwidth for link 8 in MiB/sec
- NVML_GPM_METRIC_NVLINK_L9_RX_PER_SEC = 80 # NvLink read bandwidth for link 9 in MiB/sec
- NVML_GPM_METRIC_NVLINK_L9_TX_PER_SEC = 81 # NvLink write bandwidth for link 9 in MiB/sec
- NVML_GPM_METRIC_NVLINK_L10_RX_PER_SEC = 82 # NvLink read bandwidth for link 10 in MiB/sec
- NVML_GPM_METRIC_NVLINK_L10_TX_PER_SEC = 83 # NvLink write bandwidth for link 10 in MiB/sec
- NVML_GPM_METRIC_NVLINK_L11_RX_PER_SEC = 84 # NvLink read bandwidth for link 11 in MiB/sec
- NVML_GPM_METRIC_NVLINK_L11_TX_PER_SEC = 85 # NvLink write bandwidth for link 11 in MiB/sec
- NVML_GPM_METRIC_NVLINK_L12_RX_PER_SEC = 86 # NvLink read bandwidth for link 12 in MiB/sec
- NVML_GPM_METRIC_NVLINK_L12_TX_PER_SEC = 87 # NvLink write bandwidth for link 12 in MiB/sec
- NVML_GPM_METRIC_NVLINK_L13_RX_PER_SEC = 88 # NvLink read bandwidth for link 13 in MiB/sec
- NVML_GPM_METRIC_NVLINK_L13_TX_PER_SEC = 89 # NvLink write bandwidth for link 13 in MiB/sec
- NVML_GPM_METRIC_NVLINK_L14_RX_PER_SEC = 90 # NvLink read bandwidth for link 14 in MiB/sec
- NVML_GPM_METRIC_NVLINK_L14_TX_PER_SEC = 91 # NvLink write bandwidth for link 14 in MiB/sec
- NVML_GPM_METRIC_NVLINK_L15_RX_PER_SEC = 92 # NvLink read bandwidth for link 15 in MiB/sec
- NVML_GPM_METRIC_NVLINK_L15_TX_PER_SEC = 93 # NvLink write bandwidth for link 15 in MiB/sec
- NVML_GPM_METRIC_NVLINK_L16_RX_PER_SEC = 94 # NvLink read bandwidth for link 16 in MiB/sec
- NVML_GPM_METRIC_NVLINK_L16_TX_PER_SEC = 95 # NvLink write bandwidth for link 16 in MiB/sec
- NVML_GPM_METRIC_NVLINK_L17_RX_PER_SEC = 96 # NvLink read bandwidth for link 17 in MiB/sec
- NVML_GPM_METRIC_NVLINK_L17_TX_PER_SEC = 97 # NvLink write bandwidth for link 17 in MiB/sec
- NVML_GPM_METRIC_C2C_TOTAL_TX_PER_SEC = 100
- NVML_GPM_METRIC_C2C_TOTAL_RX_PER_SEC = 101
- NVML_GPM_METRIC_C2C_DATA_TX_PER_SEC = 102
- NVML_GPM_METRIC_C2C_DATA_RX_PER_SEC = 103
- NVML_GPM_METRIC_C2C_LINK0_TOTAL_TX_PER_SEC = 104
- NVML_GPM_METRIC_C2C_LINK0_TOTAL_RX_PER_SEC = 105
- NVML_GPM_METRIC_C2C_LINK0_DATA_TX_PER_SEC = 106
- NVML_GPM_METRIC_C2C_LINK0_DATA_RX_PER_SEC = 107
- NVML_GPM_METRIC_C2C_LINK1_TOTAL_TX_PER_SEC = 108
- NVML_GPM_METRIC_C2C_LINK1_TOTAL_RX_PER_SEC = 109
- NVML_GPM_METRIC_C2C_LINK1_DATA_TX_PER_SEC = 110
- NVML_GPM_METRIC_C2C_LINK1_DATA_RX_PER_SEC = 111
- NVML_GPM_METRIC_C2C_LINK2_TOTAL_TX_PER_SEC = 112
- NVML_GPM_METRIC_C2C_LINK2_TOTAL_RX_PER_SEC = 113
- NVML_GPM_METRIC_C2C_LINK2_DATA_TX_PER_SEC = 114
- NVML_GPM_METRIC_C2C_LINK2_DATA_RX_PER_SEC = 115
- NVML_GPM_METRIC_C2C_LINK3_TOTAL_TX_PER_SEC = 116
- NVML_GPM_METRIC_C2C_LINK3_TOTAL_RX_PER_SEC = 117
- NVML_GPM_METRIC_C2C_LINK3_DATA_TX_PER_SEC = 118
- NVML_GPM_METRIC_C2C_LINK3_DATA_RX_PER_SEC = 119
- NVML_GPM_METRIC_C2C_LINK4_TOTAL_TX_PER_SEC = 120
- NVML_GPM_METRIC_C2C_LINK4_TOTAL_RX_PER_SEC = 121
- NVML_GPM_METRIC_C2C_LINK4_DATA_TX_PER_SEC = 122
- NVML_GPM_METRIC_C2C_LINK4_DATA_RX_PER_SEC = 123
- NVML_GPM_METRIC_C2C_LINK5_TOTAL_TX_PER_SEC = 124
- NVML_GPM_METRIC_C2C_LINK5_TOTAL_RX_PER_SEC = 125
- NVML_GPM_METRIC_C2C_LINK5_DATA_TX_PER_SEC = 126
- NVML_GPM_METRIC_C2C_LINK5_DATA_RX_PER_SEC = 127
- NVML_GPM_METRIC_C2C_LINK6_TOTAL_TX_PER_SEC = 128
- NVML_GPM_METRIC_C2C_LINK6_TOTAL_RX_PER_SEC = 129
- NVML_GPM_METRIC_C2C_LINK6_DATA_TX_PER_SEC = 130
- NVML_GPM_METRIC_C2C_LINK6_DATA_RX_PER_SEC = 131
- NVML_GPM_METRIC_C2C_LINK7_TOTAL_TX_PER_SEC = 132
- NVML_GPM_METRIC_C2C_LINK7_TOTAL_RX_PER_SEC = 133
- NVML_GPM_METRIC_C2C_LINK7_DATA_TX_PER_SEC = 134
- NVML_GPM_METRIC_C2C_LINK7_DATA_RX_PER_SEC = 135
- NVML_GPM_METRIC_C2C_LINK8_TOTAL_TX_PER_SEC = 136
- NVML_GPM_METRIC_C2C_LINK8_TOTAL_RX_PER_SEC = 137
- NVML_GPM_METRIC_C2C_LINK8_DATA_TX_PER_SEC = 138
- NVML_GPM_METRIC_C2C_LINK8_DATA_RX_PER_SEC = 139
- NVML_GPM_METRIC_C2C_LINK9_TOTAL_TX_PER_SEC = 140
- NVML_GPM_METRIC_C2C_LINK9_TOTAL_RX_PER_SEC = 141
- NVML_GPM_METRIC_C2C_LINK9_DATA_TX_PER_SEC = 142
- NVML_GPM_METRIC_C2C_LINK9_DATA_RX_PER_SEC = 143
- NVML_GPM_METRIC_C2C_LINK10_TOTAL_TX_PER_SEC = 144
- NVML_GPM_METRIC_C2C_LINK10_TOTAL_RX_PER_SEC = 145
- NVML_GPM_METRIC_C2C_LINK10_DATA_TX_PER_SEC = 146
- NVML_GPM_METRIC_C2C_LINK10_DATA_RX_PER_SEC = 147
- NVML_GPM_METRIC_C2C_LINK11_TOTAL_TX_PER_SEC = 148
- NVML_GPM_METRIC_C2C_LINK11_TOTAL_RX_PER_SEC = 149
- NVML_GPM_METRIC_C2C_LINK11_DATA_TX_PER_SEC = 150
- NVML_GPM_METRIC_C2C_LINK11_DATA_RX_PER_SEC = 151
- NVML_GPM_METRIC_C2C_LINK12_TOTAL_TX_PER_SEC = 152
- NVML_GPM_METRIC_C2C_LINK12_TOTAL_RX_PER_SEC = 153
- NVML_GPM_METRIC_C2C_LINK12_DATA_TX_PER_SEC = 154
- NVML_GPM_METRIC_C2C_LINK12_DATA_RX_PER_SEC = 155
- NVML_GPM_METRIC_C2C_LINK13_TOTAL_TX_PER_SEC = 156
- NVML_GPM_METRIC_C2C_LINK13_TOTAL_RX_PER_SEC = 157
- NVML_GPM_METRIC_C2C_LINK13_DATA_TX_PER_SEC = 158
- NVML_GPM_METRIC_C2C_LINK13_DATA_RX_PER_SEC = 159
- NVML_GPM_METRIC_HOSTMEM_CACHE_HIT = 160
- NVML_GPM_METRIC_HOSTMEM_CACHE_MISS = 161
- NVML_GPM_METRIC_PEERMEM_CACHE_HIT = 162
- NVML_GPM_METRIC_PEERMEM_CACHE_MISS = 163
- NVML_GPM_METRIC_DRAM_CACHE_HIT = 164
- NVML_GPM_METRIC_DRAM_CACHE_MISS = 165
- NVML_GPM_METRIC_NVENC_0_UTIL = 166,
- NVML_GPM_METRIC_NVENC_1_UTIL = 167,
- NVML_GPM_METRIC_NVENC_2_UTIL = 168,
- NVML_GPM_METRIC_NVENC_3_UTIL = 169,
- NVML_GPM_METRIC_GR0_CTXSW_CYCLES_ELAPSED = 170,
- NVML_GPM_METRIC_GR0_CTXSW_CYCLES_ACTIVE = 171,
- NVML_GPM_METRIC_GR0_CTXSW_REQUESTS = 172,
- NVML_GPM_METRIC_GR0_CTXSW_CYCLES_PER_REQ = 173,
- NVML_GPM_METRIC_GR0_CTXSW_ACTIVE_PCT = 174,
- NVML_GPM_METRIC_GR1_CTXSW_CYCLES_ELAPSED = 175,
- NVML_GPM_METRIC_GR1_CTXSW_CYCLES_ACTIVE = 176,
- NVML_GPM_METRIC_GR1_CTXSW_REQUESTS = 177,
- NVML_GPM_METRIC_GR1_CTXSW_CYCLES_PER_REQ = 178,
- NVML_GPM_METRIC_GR1_CTXSW_ACTIVE_PCT = 179,
- NVML_GPM_METRIC_GR2_CTXSW_CYCLES_ELAPSED = 180,
- NVML_GPM_METRIC_GR2_CTXSW_CYCLES_ACTIVE = 181,
- NVML_GPM_METRIC_GR2_CTXSW_REQUESTS = 182,
- NVML_GPM_METRIC_GR2_CTXSW_CYCLES_PER_REQ = 183,
- NVML_GPM_METRIC_GR2_CTXSW_ACTIVE_PCT = 184,
- NVML_GPM_METRIC_GR3_CTXSW_CYCLES_ELAPSED = 185,
- NVML_GPM_METRIC_GR3_CTXSW_CYCLES_ACTIVE = 186,
- NVML_GPM_METRIC_GR3_CTXSW_REQUESTS = 187,
- NVML_GPM_METRIC_GR3_CTXSW_CYCLES_PER_REQ = 188,
- NVML_GPM_METRIC_GR3_CTXSW_ACTIVE_PCT = 189,
- NVML_GPM_METRIC_GR4_CTXSW_CYCLES_ELAPSED = 190,
- NVML_GPM_METRIC_GR4_CTXSW_CYCLES_ACTIVE = 191,
- NVML_GPM_METRIC_GR4_CTXSW_REQUESTS = 192,
- NVML_GPM_METRIC_GR4_CTXSW_CYCLES_PER_REQ = 193,
- NVML_GPM_METRIC_GR4_CTXSW_ACTIVE_PCT = 194,
- NVML_GPM_METRIC_GR5_CTXSW_CYCLES_ELAPSED = 195,
- NVML_GPM_METRIC_GR5_CTXSW_CYCLES_ACTIVE = 196,
- NVML_GPM_METRIC_GR5_CTXSW_REQUESTS = 197,
- NVML_GPM_METRIC_GR5_CTXSW_CYCLES_PER_REQ = 198,
- NVML_GPM_METRIC_GR5_CTXSW_ACTIVE_PCT = 199,
- NVML_GPM_METRIC_GR6_CTXSW_CYCLES_ELAPSED = 200,
- NVML_GPM_METRIC_GR6_CTXSW_CYCLES_ACTIVE = 201,
- NVML_GPM_METRIC_GR6_CTXSW_REQUESTS = 202,
- NVML_GPM_METRIC_GR6_CTXSW_CYCLES_PER_REQ = 203,
- NVML_GPM_METRIC_GR6_CTXSW_ACTIVE_PCT = 204,
- NVML_GPM_METRIC_GR7_CTXSW_CYCLES_ELAPSED = 205,
- NVML_GPM_METRIC_GR7_CTXSW_CYCLES_ACTIVE = 206,
- NVML_GPM_METRIC_GR7_CTXSW_REQUESTS = 207,
- NVML_GPM_METRIC_GR7_CTXSW_CYCLES_PER_REQ = 208,
- NVML_GPM_METRIC_GR7_CTXSW_ACTIVE_PCT = 209,
- NVML_GPM_METRIC_MAX = 210
- ## Structs
- class c_nvmlUnitInfo_t(_PrintableStructure):
- _fields_ = [
- ('name', c_char * 96),
- ('id', c_char * 96),
- ('serial', c_char * 96),
- ('firmwareVersion', c_char * 96),
- ]
- class struct_c_nvmlGpmSample_t(Structure):
- pass # opaque handle
- c_nvmlGpmSample_t = POINTER(struct_c_nvmlGpmSample_t)
- class c_metricInfo_t(Structure):
- _fields_ = [
- ("shortName", c_char_p),
- ("longName", c_char_p),
- ("unit", c_char_p),
- ]
- class c_nvmlGpmMetric_t(_PrintableStructure):
- _fields_ = [
- ('metricId', c_uint),
- ('nvmlReturn', _nvmlReturn_t),
- ('value', c_double),
- ('metricInfo', c_metricInfo_t)
- ]
- class c_nvmlGpmMetricsGet_t(_PrintableStructure):
- _fields_ = [
- ('version', c_uint),
- ('numMetrics', c_uint),
- ('sample1', c_nvmlGpmSample_t),
- ('sample2', c_nvmlGpmSample_t),
- ('metrics', c_nvmlGpmMetric_t * NVML_GPM_METRIC_MAX)
- ]
- NVML_GPM_METRICS_GET_VERSION = 1
- class c_nvmlGpmSupport_t(_PrintableStructure):
- _fields_ = [
- ('version', c_uint),
- ('isSupportedDevice', c_uint),
- ]
- NVML_GPM_SUPPORT_VERSION = 1
- ## Functions
- def nvmlGpmMetricsGet(metricsGet):
- fn = _nvmlGetFunctionPointer("nvmlGpmMetricsGet")
- ret = fn(byref(metricsGet))
- _nvmlCheckReturn(ret)
- return metricsGet
- def nvmlGpmSampleFree(gpmSample):
- fn = _nvmlGetFunctionPointer("nvmlGpmSampleFree")
- ret = fn(gpmSample)
- _nvmlCheckReturn(ret)
- return
- def nvmlGpmSampleAlloc():
- gpmSample = c_nvmlGpmSample_t()
- fn = _nvmlGetFunctionPointer("nvmlGpmSampleAlloc")
- ret = fn(byref(gpmSample))
- _nvmlCheckReturn(ret)
- return gpmSample
- def nvmlGpmSampleGet(device, gpmSample):
- fn = _nvmlGetFunctionPointer("nvmlGpmSampleGet")
- ret = fn(device, gpmSample)
- _nvmlCheckReturn(ret)
- return gpmSample
- def nvmlGpmMigSampleGet(device, gpuInstanceId, gpmSample):
- fn = _nvmlGetFunctionPointer("nvmlGpmMigSampleGet")
- ret = fn(device, gpuInstanceId, gpmSample)
- _nvmlCheckReturn(ret)
- return gpmSample
- def nvmlGpmQueryDeviceSupport(device):
- gpmSupport = c_nvmlGpmSupport_t()
- gpmSupport.version = NVML_GPM_SUPPORT_VERSION
- fn = _nvmlGetFunctionPointer("nvmlGpmQueryDeviceSupport")
- ret = fn(device, byref(gpmSupport))
- _nvmlCheckReturn(ret)
- return gpmSupport
- def nvmlGpmSetStreamingEnabled(device, state):
- c_state = c_uint(state)
- fn = _nvmlGetFunctionPointer("nvmlGpmSetStreamingEnabled")
- ret = fn(device, c_state)
- _nvmlCheckReturn(ret)
- return NVML_SUCCESS
- def nvmlGpmQueryIfStreamingEnabled(device):
- c_state = c_uint()
- fn = _nvmlGetFunctionPointer("nvmlGpmQueryIfStreamingEnabled")
- ret = fn(device, byref(c_state))
- _nvmlCheckReturn(ret)
- return c_state.value
- # Low Power Structure and Function
- NVML_NVLINK_POWER_STATE_HIGH_SPEED = 0x0
- NVML_NVLINK_POWER_STATE_LOW = 0x1
- NVML_NVLINK_LOW_POWER_THRESHOLD_MIN = 0x1
- NVML_NVLINK_LOW_POWER_THRESHOLD_MAX = 0x1FFF
- NVML_NVLINK_LOW_POWER_THRESHOLD_RESET = 0xFFFFFFFF
- NVML_NVLINK_LOW_POWER_THRESHOLD_DEFAULT = NVML_NVLINK_LOW_POWER_THRESHOLD_RESET
- class c_nvmlNvLinkPowerThres_t(Structure):
- _fields_ = [
- ("lowPwrThreshold", c_uint),
- ]
- def nvmlDeviceSetNvLinkDeviceLowPowerThreshold(device, l1threshold):
- c_info = c_nvmlNvLinkPowerThres_t()
- c_info.lowPwrThreshold = l1threshold
- fn = _nvmlGetFunctionPointer("nvmlDeviceSetNvLinkDeviceLowPowerThreshold")
- ret = fn(device, byref(c_info))
- _nvmlCheckReturn(ret)
- return NVML_SUCCESS
- NVML_GPU_FABRIC_UUID_LEN = 16
- _nvmlGpuFabricState_t = c_uint
- NVML_GPU_FABRIC_STATE_NOT_SUPPORTED = 0
- NVML_GPU_FABRIC_STATE_NOT_STARTED = 1
- NVML_GPU_FABRIC_STATE_IN_PROGRESS = 2
- NVML_GPU_FABRIC_STATE_COMPLETED = 3
- class c_nvmlGpuFabricInfo_t(_PrintableStructure):
- _fields_ = [
- ("clusterUuid", c_uint8 * NVML_DEVICE_UUID_BUFFER_SIZE),
- ("status", _nvmlReturn_t),
- ("cliqueId", c_uint32),
- ("state", _nvmlGpuFabricState_t)
- ]
- NVML_GPU_FABRIC_HEALTH_MASK_DEGRADED_BW_NOT_SUPPORTED = 0
- NVML_GPU_FABRIC_HEALTH_MASK_DEGRADED_BW_TRUE = 1
- NVML_GPU_FABRIC_HEALTH_MASK_DEGRADED_BW_FALSE = 2
- NVML_GPU_FABRIC_HEALTH_MASK_SHIFT_DEGRADED_BW = 0
- NVML_GPU_FABRIC_HEALTH_MASK_WIDTH_DEGRADED_BW = 0x11
- NVML_GPU_FABRIC_HEALTH_MASK_ROUTE_RECOVERY_NOT_SUPPORTED = 0
- NVML_GPU_FABRIC_HEALTH_MASK_ROUTE_RECOVERY_TRUE = 1
- NVML_GPU_FABRIC_HEALTH_MASK_ROUTE_RECOVERY_FALSE = 2
- NVML_GPU_FABRIC_HEALTH_MASK_SHIFT_ROUTE_RECOVERY = 2
- NVML_GPU_FABRIC_HEALTH_MASK_WIDTH_ROUTE_RECOVERY = 0x11
- NVML_GPU_FABRIC_HEALTH_MASK_ROUTE_UNHEALTHY_NOT_SUPPORTED = 0
- NVML_GPU_FABRIC_HEALTH_MASK_ROUTE_UNHEALTHY_TRUE = 1
- NVML_GPU_FABRIC_HEALTH_MASK_ROUTE_UNHEALTHY_FALSE = 2
- NVML_GPU_FABRIC_HEALTH_MASK_SHIFT_ROUTE_UNHEALTHY = 4
- NVML_GPU_FABRIC_HEALTH_MASK_WIDTH_ROUTE_UNHEALTHY = 0x11
- NVML_GPU_FABRIC_HEALTH_MASK_ACCESS_TIMEOUT_RECOVERY_NOT_SUPPORTED = 0
- NVML_GPU_FABRIC_HEALTH_MASK_ACCESS_TIMEOUT_RECOVERY_TRUE = 1
- NVML_GPU_FABRIC_HEALTH_MASK_ACCESS_TIMEOUT_RECOVERY_FALSE = 2
- NVML_GPU_FABRIC_HEALTH_MASK_SHIFT_ACCESS_TIMEOUT_RECOVERY = 6
- NVML_GPU_FABRIC_HEALTH_MASK_WIDTH_ACCESS_TIMEOUT_RECOVERY = 0x11
- NVML_GPU_FABRIC_HEALTH_MASK_INCORRECT_CONFIGURATION_NOT_SUPPORTED = 0
- NVML_GPU_FABRIC_HEALTH_MASK_INCORRECT_CONFIGURATION_NONE = 1
- NVML_GPU_FABRIC_HEALTH_MASK_INCORRECT_CONFIGURATION_INCORRECT_SYSGUID = 2
- NVML_GPU_FABRIC_HEALTH_MASK_INCORRECT_CONFIGURATION_INCORRECT_CHASSIS_SN = 3
- NVML_GPU_FABRIC_HEALTH_MASK_INCORRECT_CONFIGURATION_NO_PARTITION = 4
- NVML_GPU_FABRIC_HEALTH_MASK_INCORRECT_CONFIGURATION_INSUFFICIENT_NVLINKS = 5
- NVML_GPU_FABRIC_HEALTH_MASK_SHIFT_INCORRECT_CONFIGURATION = 8
- NVML_GPU_FABRIC_HEALTH_MASK_WIDTH_INCORRECT_CONFIGURATION = 0xf
- NVML_GPU_FABRIC_HEALTH_SUMMARY_NOT_SUPPORTED = 0
- NVML_GPU_FABRIC_HEALTH_SUMMARY_HEALTHY = 1
- NVML_GPU_FABRIC_HEALTH_SUMMARY_UNHEALTHY = 2
- NVML_GPU_FABRIC_HEALTH_SUMMARY_LIMITED_CAPACITY = 3
- nvmlGpuFabricInfo_v2 = 0x02000024
- class c_nvmlGpuFabricInfo_v2_t(_PrintableStructure):
- _fields_ = [
- ("version", c_uint),
- ("clusterUuid", c_uint8 * NVML_GPU_FABRIC_UUID_LEN),
- ("status", _nvmlReturn_t),
- ("cliqueId", c_uint32),
- ("state", _nvmlGpuFabricState_t),
- ("healthMask", c_uint32)
- ]
- def __init__(self):
- super(c_nvmlGpuFabricInfo_v2_t, self).__init__(version=nvmlGpuFabricInfo_v2)
- c_nvmlGpuFabricInfoV_t = c_nvmlGpuFabricInfo_v2_t
- class c_nvmlGpuFabricInfo_v3_t(_PrintableStructure):
- _fields_ = [
- ("version", c_uint),
- ("clusterUuid", c_uint8 * NVML_GPU_FABRIC_UUID_LEN),
- ("status", _nvmlReturn_t),
- ("cliqueId", c_uint32),
- ("state", _nvmlGpuFabricState_t),
- ("healthMask", c_uint32),
- ("healthSummary", c_uint8)
- ]
- def __init__(self):
- super(c_nvmlGpuFabricInfo_v3_t, self).__init__(version=nvmlGpuFabricInfo_v3)
- nvmlGpuFabricInfo_v3 = 0x3000028
- # Deprecated
- def nvmlDeviceGetGpuFabricInfo(device, gpuFabricInfo):
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetGpuFabricInfo");
- ret = fn(device, gpuFabricInfo)
- _nvmlCheckReturn(ret)
- return NVML_SUCCESS
- def nvmlDeviceGetGpuFabricInfoV(device, gpuFabricInfo):
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetGpuFabricInfoV");
- ret = fn(device, gpuFabricInfo)
- _nvmlCheckReturn(ret)
- return NVML_SUCCESS
- ######################
- ## Enums/defines
- #### NVML GPU NVLINK BW MODE
- NVML_GPU_NVLINK_BW_MODE_FULL = 0x0
- NVML_GPU_NVLINK_BW_MODE_OFF = 0x1
- NVML_GPU_NVLINK_BW_MODE_MIN = 0x2
- NVML_GPU_NVLINK_BW_MODE_HALF = 0x3
- NVML_GPU_NVLINK_BW_MODE_3QUARTER = 0x4
- NVML_GPU_NVLINK_BW_MODE_COUNT = 0x5
- def nvmlSystemSetNvlinkBwMode(mode):
- fn = _nvmlGetFunctionPointer("nvmlSystemSetNvlinkBwMode")
- ret = fn(mode)
- _nvmlCheckReturn(ret)
- return NVML_SUCCESS
- def nvmlSystemGetNvlinkBwMode():
- mode = c_uint()
- fn = _nvmlGetFunctionPointer("nvmlSystemGetNvlinkBwMode")
- ret = fn(byref(mode))
- _nvmlCheckReturn(ret)
- return mode.value
- _nvmlPowerScopeType_t = c_uint
- NVML_POWER_SCOPE_GPU = 0
- NVML_POWER_SCOPE_MODULE = 1
- NVML_POWER_SCOPE_MEMORY = 2
- class c_nvmlPowerValue_v2_t(_PrintableStructure):
- _fields_ = [
- ('version', c_uint),
- ('powerScope', _nvmlPowerScopeType_t),
- ('powerValueMw', c_uint),
- ]
- _fmt_ = {'<default>': "%d B"}
- nvmlPowerValue_v2 = 0x0200000C
- def nvmlDeviceSetPowerManagementLimit_v2(device, powerScope, powerLimit, version=nvmlPowerValue_v2):
- c_powerScope = _nvmlPowerScopeType_t(powerScope)
- c_powerValue = c_nvmlPowerValue_v2_t()
- c_powerValue.version = c_uint(version)
- c_powerValue.powerScope = c_powerScope
- c_powerValue.powerValueMw = c_uint(powerLimit)
- fn = _nvmlGetFunctionPointer("nvmlDeviceSetPowerManagementLimit_v2")
- ret = fn(device, byref(c_powerValue))
- return NVML_SUCCESS
- class c_nvmlEccSramErrorStatus_v1_t(_PrintableStructure):
- _fields_ = [
- ('version', c_uint),
- ('aggregateUncParity', c_ulonglong),
- ('aggregateUncSecDed', c_ulonglong),
- ('aggregateCor', c_ulonglong),
- ('volatileUncParity', c_ulonglong),
- ('volatileUncSecDed', c_ulonglong),
- ('volatileCor', c_ulonglong),
- ('aggregateUncBucketL2', c_ulonglong),
- ('aggregateUncBucketSm', c_ulonglong),
- ('aggregateUncBucketPcie', c_ulonglong),
- ('aggregateUncBucketMcu', c_ulonglong),
- ('aggregateUncBucketOther', c_ulonglong),
- ('bThresholdExceeded', c_uint)
- ]
- def __init__(self):
- super(c_nvmlEccSramErrorStatus_v1_t, self).__init__(version=nvmlEccSramErrorStatus_v1)
- nvmlEccSramErrorStatus_v1 = 0x1000068
- def nvmlDeviceGetSramEccErrorStatus(device, status):
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetSramEccErrorStatus")
- ret = fn(device, status)
- _nvmlCheckReturn(ret)
- return NVML_SUCCESS
- NVML_DEV_CAP_EGM = (1 << 0)
- nvmlDeviceCapabilities_v1 = 0x1000008
- class c_nvmlDeviceCapabilities_v1_t(_PrintableStructure):
- _fields_ = [
- ('version', c_uint),
- ('capMask', c_uint),
- ]
- def __init__(self):
- super(c_nvmlDeviceCapabilities_v1_t, self).__init__(version=nvmlDeviceCapabilities_v1)
- def nvmlDeviceGetCapabilities(device, caps):
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetCapabilities")
- return fn(device, caps)
- class c_nvmlPlatformInfo_v1_t(_PrintableStructure):
- _fields_ = [
- ('version', c_uint),
- ('ibGuid', c_char * 16),
- ('rackGuid', c_char * 16),
- ('chassisPhysicalSlotNumber', c_char),
- ('computeSlotIndex', c_char),
- ('nodeIndex', c_char),
- ('peerType', c_char),
- ('moduleId', c_char)
- ]
- def __init__(self):
- super(c_nvmlPlatformInfo_v1_t, self).__init__(version=nvmlPlatformInfo_v1)
- class c_nvmlPlatformInfo_v2_t(_PrintableStructure):
- _fields_ = [
- ('version', c_uint),
- ('ibGuid', c_char * 16),
- ('chassisSerialNumber', c_char * 16),
- ('slotNumber', c_char),
- ('trayIndex', c_char),
- ('hostId', c_char),
- ('peerType', c_char),
- ('moduleId', c_char)
- ]
- def __init__(self):
- super(c_nvmlPlatformInfo_v2_t, self).__init__(version=nvmlPlatformInfo_v2)
- nvmlPlatformInfo_v1 = 0x100002c
- nvmlPlatformInfo_v2 = 0x200002c
- def nvmlDeviceGetPlatformInfo(device, platformInfo):
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetPlatformInfo")
- ret = fn(device, platformInfo)
- _nvmlCheckReturn(ret)
- return NVML_SUCCESS
- class c_nvmlMask255_t(_PrintableStructure):
- _fields_ = [
- ('mask', c_uint * 8),
- ]
- NVML_WORKLOAD_POWER_MAX_PROFILES = 255
- NVML_POWER_PROFILE_MAX_P = 0
- NVML_POWER_PROFILE_MAX_Q = 1
- NVML_POWER_PROFILE_COMPUTE = 2
- NVML_POWER_PROFILE_MEMORY_BOUND = 3
- NVML_POWER_PROFILE_NETWORK = 4
- NVML_POWER_PROFILE_BALANCED = 5
- NVML_POWER_PROFILE_LLM_INFERENCE = 6
- NVML_POWER_PROFILE_LLM_TRAINING = 7
- NVML_POWER_PROFILE_RBM = 8
- NVML_POWER_PROFILE_DCPCIE = 9
- NVML_POWER_PROFILE_HMMA_SPARSE = 10
- NVML_POWER_PROFILE_HMMA_DENSE = 11
- NVML_POWER_PROFILE_SYNC_BALANCED = 12
- NVML_POWER_PROFILE_HPC = 13
- NVML_POWER_PROFILE_MIG = 14
- NVML_POWER_PROFILE_MAX = 15
- nvmlWorkloadPowerProfileInfo_v1 = 0x100002c
- class c_nvmlWorkloadPowerProfileInfo_v1_t(_PrintableStructure):
- _fields_ = [
- ('version', c_uint),
- ('profileId', c_uint),
- ('priority', c_uint),
- ('conflictingmask', c_nvmlMask255_t)
- ]
- def __init__(self):
- super(c_nvmlWorkloadPowerProfileInfo_v1_t, self).__init__(version=nvmlWorkloadPowerProfileInfo_v1)
- nvmlWorkloadPowerProfileProfilesInfo_v1 = 0x1002bf8
- class c_nvmlWorkloadPowerProfileProfilesInfo_v1_t(_PrintableStructure):
- _fields_ = [
- ('version', c_uint),
- ('perfProfilesMask', c_nvmlMask255_t),
- ('perfProfile', c_nvmlWorkloadPowerProfileInfo_v1_t * NVML_WORKLOAD_POWER_MAX_PROFILES)
- ]
- def __init__(self):
- super(c_nvmlWorkloadPowerProfileProfilesInfo_v1_t, self).__init__(version=nvmlWorkloadPowerProfileProfilesInfo_v1)
- nvmlWorkloadPowerProfileCurrentProfiles_v1 = 0x1000064
- class c_nvmlWorkloadPowerProfileCurrentProfiles_v1_t(_PrintableStructure):
- _fields_ = [
- ('version', c_uint),
- ('perfProfilesMask', c_nvmlMask255_t),
- ('requestedProfilesMask', c_nvmlMask255_t),
- ('enforcedProfilesMask', c_nvmlMask255_t)
- ]
- def __init__(self):
- super(c_nvmlWorkloadPowerProfileCurrentProfiles_v1_t, self).__init__(version=nvmlWorkloadPowerProfileCurrentProfiles_v1)
- nvmlWorkloadPowerProfileRequestedProfiles_v1 = 0x1000024
- class c_nvmlWorkloadPowerProfileRequestedProfiles_v1_t(_PrintableStructure):
- _fields_ = [
- ('version', c_uint),
- ('requestedProfilesMask', c_nvmlMask255_t),
- ]
- def __init__(self):
- super(c_nvmlWorkloadPowerProfileRequestedProfiles_v1_t, self).__init__(version=nvmlWorkloadPowerProfileRequestedProfiles_v1)
- def nvmlDeviceWorkloadPowerProfileGetProfilesInfo(device, profilesInfo):
- fn = _nvmlGetFunctionPointer("nvmlDeviceWorkloadPowerProfileGetProfilesInfo")
- ret = fn(device, profilesInfo)
- _nvmlCheckReturn(ret)
- return NVML_SUCCESS
- def nvmlDeviceWorkloadPowerProfileGetCurrentProfiles(device, currentProfiles):
- fn = _nvmlGetFunctionPointer("nvmlDeviceWorkloadPowerProfileGetCurrentProfiles")
- ret = fn(device, currentProfiles)
- _nvmlCheckReturn(ret)
- return NVML_SUCCESS
- def nvmlDeviceWorkloadPowerProfileSetRequestedProfiles(device, requestedProfiles):
- fn = _nvmlGetFunctionPointer("nvmlDeviceWorkloadPowerProfileSetRequestedProfiles")
- ret = fn(device, requestedProfiles)
- _nvmlCheckReturn(ret)
- return NVML_SUCCESS
- def nvmlDeviceWorkloadPowerProfileClearRequestedProfiles(device, requestedProfiles):
- fn = _nvmlGetFunctionPointer("nvmlDeviceWorkloadPowerProfileClearRequestedProfiles")
- ret = fn(device, requestedProfiles)
- _nvmlCheckReturn(ret)
- return NVML_SUCCESS
- def nvmlDeviceGetNvlinkSupportedBwModes(device, supportedBwModes):
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetNvlinkSupportedBwModes")
- ret = fn(device, supportedBwModes)
- _nvmlCheckReturn(ret)
- return NVML_SUCCESS
- def nvmlDeviceGetNvlinkBwMode(device, getBwMode):
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetNvlinkBwMode")
- ret = fn(device, getBwMode)
- _nvmlCheckReturn(ret)
- return NVML_SUCCESS
- def nvmlDeviceSetNvlinkBwMode(device, setBwMode):
- fn = _nvmlGetFunctionPointer("nvmlDeviceSetNvlinkBwMode")
- ret = fn(device, setBwMode)
- _nvmlCheckReturn(ret)
- return NVML_SUCCESS
- nvmlDramEncryptionInfo_v1 = 0x01000008
- class c_nvmlDramEncryptionInfo_t(_PrintableStructure):
- _fields_ = [
- ('version', c_uint),
- ('encryptionState', _nvmlEnableState_t),
- ]
- def __init__(self):
- super(c_nvmlDramEncryptionInfo_t, self).__init__(version=nvmlDramEncryptionInfo_v1)
- def nvmlDeviceGetDramEncryptionMode(handle):
- c_currState = c_nvmlDramEncryptionInfo_t()
- c_pendingState = c_nvmlDramEncryptionInfo_t()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetDramEncryptionMode")
- ret = fn(handle, byref(c_currState), byref(c_pendingState))
- _nvmlCheckReturn(ret)
- return [c_currState.encryptionState, c_pendingState.encryptionState]
- # added to API
- def nvmlDeviceGetCurrentDramEncryptionMode(handle):
- return nvmlDeviceGetDramEncryptionMode(handle)[0]
- # added to API
- def nvmlDeviceGetPendingDramEncryptionMode(handle):
- return nvmlDeviceGetDramEncryptionMode(handle)[1]
- def nvmlDeviceSetDramEncryptionMode(handle, mode):
- fn = _nvmlGetFunctionPointer("nvmlDeviceSetDramEncryptionMode")
- c_dramEncryptionMode = c_nvmlDramEncryptionInfo_t()
- c_dramEncryptionMode.encryptionState = mode;
- ret = fn(handle, byref(c_dramEncryptionMode))
- _nvmlCheckReturn(ret)
- return None
- # Power Smoothing defines
- NVML_POWER_SMOOTHING_MAX_NUM_PROFILES = 5
- NVML_POWER_SMOOTHING_ADMIN_OVERRIDE_NOT_SET = 0xFFFFFFFF
- NVML_POWER_SMOOTHING_PROFILE_PARAM_PERCENT_TMP_FLOOR = 0
- NVML_POWER_SMOOTHING_PROFILE_PARAM_RAMP_UP_RATE = 1
- NVML_POWER_SMOOTHING_PROFILE_PARAM_RAMP_DOWN_RATE = 2
- NVML_POWER_SMOOTHING_PROFILE_PARAM_RAMP_DOWN_HYSTERESIS = 3
- nvmlPowerSmoothingState_v1=0x1000008
- class c_nvmlPowerSmoothingState_v1_t(_PrintableStructure):
- _fields_ = [
- ('version', c_uint),
- ('state', c_uint),
- ]
- def __init__(self):
- super(c_nvmlPowerSmoothingState_v1_t, self).__init__(version=nvmlPowerSmoothingState_v1)
- nvmlPowerSmoothingProfile_v1=0x1000018
- class c_nvmlPowerSmoothingProfile_v1_t(_PrintableStructure):
- _fields_ = [
- ('version', c_uint),
- ('profileId', c_uint),
- ('paramId', c_uint),
- ('value', c_double),
- ]
- def __init__(self):
- super(c_nvmlPowerSmoothingProfile_v1_t, self).__init__(version=nvmlPowerSmoothingProfile_v1)
- def nvmlDevicePowerSmoothingActivatePresetProfile(device, profile):
- fn = _nvmlGetFunctionPointer("nvmlDevicePowerSmoothingActivatePresetProfile")
- ret = fn(device, profile)
- _nvmlCheckReturn(ret)
- def nvmlDevicePowerSmoothingUpdatePresetProfileParam(device, profile):
- fn = _nvmlGetFunctionPointer("nvmlDevicePowerSmoothingUpdatePresetProfileParam")
- ret = fn(device, profile)
- _nvmlCheckReturn(ret)
- def nvmlDevicePowerSmoothingSetState(device, state):
- fn = _nvmlGetFunctionPointer("nvmlDevicePowerSmoothingSetState")
- ret = fn(device, state)
- _nvmlCheckReturn(ret)
- class c_nvmlEccSramUniqueUncorrectedErrorEntry_v1_t(_PrintableStructure):
- _fields_ = [
- ('unit', c_uint),
- ('location', c_uint),
- ('sublocation', c_uint),
- ('extlocation', c_uint),
- ('address', c_uint),
- ('isParity', c_uint),
- ('count', c_uint)
- ]
- class c_nvmlEccSramUniqueUncorrectedErrorCounts_v1_t(_PrintableStructure):
- _fields_ = [
- ('version', c_uint),
- ('entryCount', c_uint),
- ('entries', POINTER(c_nvmlEccSramUniqueUncorrectedErrorEntry_v1_t))
- ]
- def __init__(self):
- super(c_nvmlEccSramUniqueUncorrectedErrorCounts_v1_t, self).__init__(version=nvmlEccSramUniqueUncorrectedErrorCounts_v1)
- nvmlEccSramUniqueUncorrectedErrorCounts_v1 = 0x1000010
- def nvmlDeviceGetSramUniqueUncorrectedEccErrorCounts(device, counts):
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetSramUniqueUncorrectedEccErrorCounts")
- ret = fn(device, counts)
- _nvmlCheckReturn(ret)
- return NVML_SUCCESS
- def nvmlDeviceGetPdi(device):
- c_pdi = c_nvmlPdi_t()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetPdi")
- ret = fn(device, byref(c_pdi))
- _nvmlCheckReturn(ret)
- return c_pdi.value
- def nvmlDeviceGetNvLinkInfo(device, info):
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetNvLinkInfo");
- ret = fn(device, info)
- _nvmlCheckReturn(ret)
- return NVML_SUCCESS
- def nvmlDeviceGetRepairStatus(device):
- c_status = c_nvmlRepairStatus_t()
- fn = _nvmlGetFunctionPointer("nvmlDeviceGetRepairStatus")
- ret = fn(device, byref(c_status))
- _nvmlCheckReturn(ret)
- return [c_status.bChannelRepairPending, c_status.bTpcRepairPending]
|