FMI ja sama simulatsioon kõikjal
Mudel ei tohiks omandada isiksust
Simulatsioonimudel peaks olema igav ühel väga konkreetsel moel: sama sisend, sama mudel, sama väljund. See kõlab ilmselgena, kuni mudel liigub tööjaamast klastrisse, sülearvutist riistvara-silmusesse, ühest kompilaatorist teise või müüja tööriistast ohutusosakonda, kes ei hinda tõlgendavat tantsu. Siis saavad pisikestest arvulistest erinevustest koosolekud. Koosolekutest saavad vastavusse viimise tabelid. Vastavusse viimise tabelid on see kalmistu, kus head inseneripärastlõunad surevad.
FMI on loodud selleks, et muuta mudelivahetus ja kaassimulatsioon tööriistade vahel praktiliseks. Functional Mock-up Interface annab meeskondadele standardse viisi mudelite pakendamiseks ja käitamiseks, selle asemel et käsitsi haprat integratsioonikoodi ühest simulatsioonikeskkonnast teise tassida. See on juba kasulik. Kuid standardne liides ei muuda automaatselt aritmeetikat deterministlikuks. Traditsioonilised FMI-töövood tuginevad sageli IEEE 754 ujukomaarvude käitumisele, platvormi teekidele, kompilaatori valikutele, täitmisjärjekorrale ja taustsüsteemide erinevustele. Enamasti on see okei. Siis ei ole see enam okei ja erinevuse avastab tavaliselt keegi, kellel on tähtaeg ja nägu, mis ütleb, et hankija lubas, et see saab olema lihtne.
Dweve FMI keskendub igavale ja kallile osale: korratavusele. Sait kirjeldab Rust-põhist FMI-rakendust Model Exchange ja Co-Simulation jaoks deterministliku fikseeritud punktiga aritmeetikaga, mis on ehitatud Numerusele. Rakenduse struktuur on laiem kui demo: mitme crate'iga FMI-tööruum mudeli esituse, skeemi parsimise, impordi, ekspordi, käitusaja, lahendaja, orkestreerimise, mälu, CPU-, GPU-, FPGA-, serva- ja hajutatud täitmise taustsüsteemide, FFI, fuzzimise, võrdlusuuringute, dokumentatsiooni ja testidega. See sõltub Numeruse crate'idest fikseeritud punktiga ja kümnendaritmeetika jaoks, pluss tavaline Dweve-virn simulatsiooni, logimise, veakäsitluse, transpordi, tensorite ja salvestuse jaoks.
Eesmärk ei ole muuta simulatsiooni müstiliseks. Eesmärk on tagada, et sama FMU ei räägiks veidi erinevaid lugusid sellepärast, et see ärkas üles teises masinas.
FMI annab ümbriku, aritmeetika kirjutab ikka tšeki
FMU on kasulik ümbrik. See kannab mudeli kirjeldust, binaar- või lähtekoodi artefakte, ressursse, muutujaid, olekuid, kellasid, sõltuvusi ja piisavalt metaandmeid, et teine tööriist saaks mudeli instantsi luua ja seda sammhaaval käitada. FMI 3.0 lisab rikkalikumad kellad, ajastatud täitmise, parema muutujatüüpimise ja kaassimulatsiooni mehhanismid. Dweve FMI lähtekood on korraldatud selle ümberiku ümber: fmi-schema parseldab ja valideerib mudeli kirjeldusi, fmi-import laadib FMU-arhiive, fmi-export ehitab arhiive, fmi-model esindab muutujaid ja mudeli olekut ning fmi-runtime haldab elutsüklit, muutujate juurdepääsu, kellasid, sündmusi, tuletisi ja oleku salvestamist või taastamist.
See ümbrik on vajalik, kuid mitte piisav. Selle all olev aritmeetika otsustab ikkagi, kas käitus on korratav. Käitusaja dokumentatsioon ütleb, et fikseeritud punktiga aritmeetika kasutab deterministliku arvutuse jaoks Numerus Q31_32. Tööruumi metaandmed nimetavad Q31.32 vaikimisi fikseeritud formaadiks, Dec64_6 vaikimisi kümnendformaadiks ja Q16.16 ajaks. Avalik leht räägib Q31.32, Q16.16 ja Dec64_6 profiilidest, kusjuures MPFR on kasutusel võrdlusmarsruudina. See annab projektile selge lepingu: reaalväärtuslik simulatsioon tuleks kaardistada deterministlikesse numbrilistesse profiilidesse, selle asemel et jätta iga taustsüsteem improviseerima.
Siin on oluline aususpunkt. FMI poole suunatud API-d ja ühilduvuspinnad võivad siiski ujukoma väärtusi vastu võtta või väljastada, sest standard ja olemasolevad tööriistad seda ootavad. Oluline väide ei ole teatraalne puhtus igal piiril. Oluline väide on see, et põhiline deterministlik tee on üles ehitatud Numeruse fikseeritud punkti profiilide ümber ja valideerimine toimub kõrge täpsusega referentsi vastu seal, kus võrdlus on mõttekas. Ääre-adapterid võivad rääkida välismaailma keelt. Sisemine leping ei tohiks muutuda õlakehituseks.
Numbriline profiil on mudeli otsus
Fikseeritud punkt ei ole üks maagiline seadistus. Mudel, mis vajab kompaktseid ajaväärtusi, mudel laiade füüsikaliste vahemikega ja mudel, mis esitab kümnendkoguseid, ei ole sama surve all. Q16.16, Q31.32 ja Dec64_6 ei ole kleebised slaidile. Need on erinevad lepingud vahemiku, eraldusvõime, esitusviisi ja selle kohta, kus vigadel lubatakse olla.
Siin muutuvad simulatsioonimeeskonnad sageli liiga lohakaks. Nad kohtlevad numbrilist käitumist tööriista omadusena, mitte mudeli omadusena. Siis tööriist muutub, taustsüsteem muutub või mudel manustatakse, ja äkki saab vana eeldus valideerimiskoormaks. Dweve FMI teeb numbrilise profiili arhitektuuri osaks, mitte taustailmaks. See on vähem glamuursem kui suur demo. Hea. Suured demod selgitavad harva, kellele kuulub ümardamispiir.
Solveri kast räägib sama lugu. See avab ODE-süsteemi tunnused, RK4, RKF45, Euleri, BDF-suunitlusega konfiguratsiooni, adaptiivse sammukontrolli, sündmuste tuvastamise ja deterministliku solveri aja. Käitusaja kast omab FMU elutsüklit, sündmuse ja pideva aja režiime, muutujate juurdepääsu, sisendite tuletisi, suuna ja adjungeeritud tuletisi, Jacobi maatriksi vahemällu salvestamist, kellasid ja oleku serialiseerimist. Ükski sellest pole kasulik, kui numbrilist kihti ei saa usaldada, kui see liigub üle riistvara. Solver võib olla nutikas. Mudel võib olla elegantne. Kui sama käitus vajab kolme ühildamist, on elegants enamasti mööbel.
Koossimulatsioon on koht, kus väikesed valed muutuvad kalliks
Üks FMU on juba piisavalt tööd. Mitu omavahel ühendatud FMU-d on koht, kus numbrilised ja operatiivsed vead muutuvad sotsiaalseks. Termomudel toidab juhtimismudelit, juhtimismudel toidab ajamimudelit, ajamimudel toidab mehaanilist mudelit ja kõik loodavad, et sammude järjekord ei tekita vaikselt mõttetust. Koossimulatsioon vajab ühenduste haldust, täitmise järjekorda, andmevahetust, sammude koordineerimist, algebraliste tsüklite käsitlemist ja viisi öelda ei, kui graaf on vale.
Allikas on fmi-orchestration selle töö jaoks. See haldab mitme FMU koossimulatsiooni, ühendusi, tsükli tuvastamist, topoloogilist sorteerimist, partitsioonide ajastamist, algebraliste tsüklite tuvastamist ja lahendamist, väärtuste ajalugu, täitmise järjekorda, simulatsiooniaega ja orkestreerimisstatistikat. On fmi-cc ühendatud FMU-de vaheliseks suhtluseks ja fmi-dist hajutatud täitmiseks koordinaatorite, sõlmede registreerimise, sõnumite, sammutaotluste, sammu vastuste ja olekuväärtustega. See on selline masinavärk, mille inimesed unustavad, kui nad ütlevad, et integratsioon on lihtsalt väljundite ühendamine sisenditega. See on ühendamine, jah. See on ka ajastus, sõltuvuste haldus, olek, rike ja tõestus, et ühendamine tegi seda, mida ta ütles.
Koossimulatsioon muudab determinismi veelgi olulisemaks, mitte vähem. Kui üks FMU hälbib veidi ja see väärtus jõuab teise FMU-sse, võib lahknevus levida. Kui täitmise järjekord muutub sõlmede vahel, võib lahknevus varjata end kuni hilisema sammuni. Kui üks backend kasutab veidi erinevat matemaatikateed, võib lahknevus näida mudeli käitumisena. Nii juhtubki, et meeskonnad hakkavad füüsikat siluma koosolekute protokollide abil. Keegi ei peaks seda tegema, välja arvatud juhul, kui ta on eelmises elus väga pahandusi teinud.
Backendid on juurutamise valikud, mitte uued tõed
Lähtepuu jagab täitmise sihtmärgid backend-kraatideks: CPU, GPU, FPGA, edge ja hajutatud. Edge-backend keskendub piiratud ressurssidega seadmetele, piiratud mälule ja väikesele üldkulule. FPGA-backend tegeleb fikseeritud punktiga aritmeetika, DMA-ülekannete, bitivoogude haldamise, kernelite täitmise ja riistvara-in-the-loop simulatsiooniga. Hajutatud krate koordineerib mitut sõlme. Avalik leht kirjeldab CPU SIMD, GPU, FPGA, edge ja hajutatud teid. See ei tähenda, et iga sihtmärk on iga töökoormuse jaoks võrdselt küps. See tähendab, et arhitektuur käsitleb backend-valikut esmaklassilise küsimusena.
Peamine disainipõhimõte on, et juurutamine peaks muutma seda, kus simulatsioon töötab, mitte seda, mida simulatsioon tähendab. CPU-tee võib olla kõige lihtsam autorluseks ja kontrollimiseks. GPU-tee võib olla mõistlik suurte paralleelsete töökoormuste jaoks. FPGA-tee võib olla vajalik reaalajas või riistvara-in-the-loop simulatsiooniks. Edge-tee võib olla vajalik masina lähedal. Hajutatud täitmine võib olla vajalik suurte ühendatud süsteemide jaoks. Need on operatiivsed valikud. Need ei tohiks luua mudelile uut numbrilist identiteeti.
Siin on ka see, miks avatud lähtekood on oluline. Ohutuse, energeetika, robootika, meditsiiniseadmete, autotööstuse, kosmosetööstuse, tööstusjuhtimise ja digitaalsete kaksikute valdkonnas ei saa reprodutseeritavuse väited elada ainult müüja slaididel. Keegi peab kontrollima teostust, kinnitama versiooni, käivitama testid, lugema läbi ebaõnnestumiste juhtumid ja otsustama, kas tõendid on piisavad. Avatud lähtekoodiga FMI teostus annab meeskondadele parema tee nende tõenditeni. See ei sertifitseeri midagi maagiliselt. See muudab töö kontrollitavaks, mis on esimene kasulik samm.
Valideerimine peaks olema värav, mitte armatuurlaud
Dweve FMI valideerimislugu ei seisne ainult ilusates jälgedes. README ja veebileht kirjeldavad MPFR referentskontrolli, backendidevahelist samaväärsust, deterministlikku taasesitust, vastavusteste, fuzzimist ja tüpiseeritud tõrkeid. Lähtekoodis on fmi-test, fmi-fuzz, fmi-bench, fmi-conformance, omadustestid, fuzz-harnessid ja oleku serialiseerimine. See on õige suund. Simulatsiooni infrastruktuuris ei tohiks valideerimine olla armatuurlaud, kus punane joon tundub murettekitav ja keegi lubab seda jälgida. See peaks olema värav.
Väraval on mitu osa. Import peab parsimise käigus õigesti tõlgendama FMU-arhiivi ja modelDescription. Skeemi valideerimine peab tagasi lükkama kehtetud muutujamääratlused, sõltuvused, kellad ja atribuudid. Numbrilised kontrollid vajavad oraaklit, kui väide on täpsus. Backendite võrdsus vajab sama olekut kõigi täitmise sihtmärkide lõikes. Taasesitus vajab salvestatud olekut ja sündmuste logisid, et käivitust uuesti üles ehitada. Tõrge vajab tüpiseeritud vigu, mitte salapärast mittevastavuse aruannet, mis saadab meeskonna logidesse tuhnima. Mittevastavus peaks blokeerima väljalasketee, kuni see on mõistetud või selgesõnaliselt aktsepteeritud. See tundub karm ainult siis, kui alternatiiv pole teile veel arvet esitanud.
Kus see esimesena oluline on
Ilmsed valdkonnad on need, kus simulatsioonivead muutuvad füüsilisteks vigadeks: autotööstus, lennundus, tööstusautomaatika, meditsiiniseadmed, energeetika, robootika ja taristu. Pidurimudel, pumba kontroller, elektrivõrgu mudel, robotirakk, tootmisliin või HVAC-kontroller ei muutu turvalisemaks sellepärast, et slaidil on kirjas digitaalne kaksik. See muutub turvalisemaks siis, kui mudel, sisendid, numbriline profiil, tagarakendus, versioon ja taasesitusjälg on piisavalt kontrollitud, et neid uurida.
On ka hankimise vaatenurk, sest loomulikult on. Kui iga tagarakendus nõuab eraldi valideerimislugu, muutub iga riistvaramuudatus väikeseks uuesti sertifitseerimise harjutuseks. Kui sama FMU-d saab tõestada üks kord ja seejärel käitada sihtmärgil, mis sobib operatiivse piiranguga, saavad meeskonnad vabaduse ilma teeskluseta, et valideerimine on tasuta. Sait sõnastab selle kui tõesta üks kord ja käita kõikjal. Inseneritõlge on veidi vähem romantiline: vähenda kohtade arvu, kus sama mudel võib iseendaga eriarvamusele jääda.
See on eriti oluline Euroopas. Suveräänsus ei tähenda ainult seda, kus server asub. See tähendab ka seda, kas ohutusjuhtumit saab kontrollida, korrata ja teisaldada ilma, et peaks ühelt tarnijalt luba kerjama. Avatud teostus, deterministlik aritmeetika, reprodutseeritav taasesitus ja tagarakenduste võrdsus ei lahenda poliitikat iseenesest. Nad muudavad tehnilise osa vähem sõltuvaks mustast kastist, mille küljes on müügimeeskond.
Mida enne usaldamist üle vaadata
Esimene ülevaatusküsimus on, milliseid FMI 3.0 pindu teie mudel tegelikult kasutab. Model Exchange, Co-Simulation, Scheduled Execution, kellad, tuletised, sündmused, binaarsed muutujad, stringid, massiivid ja sõltuvused ei ole sama töökoormus. Lihtne FMU ja seotud mitme FMU simulatsioon panevad käitusajale ja orkestreerijale erineva surve.
Teine küsimus on, millise numbrilise profiili mudel deklareerib ja miks. Kui vastus on see vaikimisi, mis näites töötas, pole see disain. Profiil peaks vastama vahemikule, eraldusvõimele, aja esitusele, tolerantsile ja juurutamise sihtmärgile. See peaks olema piisavalt nähtav, et ülevaataja saaks seda vaidlustada ilma tervet lahendajat läbi lugemata.
Kolmas küsimus on, milline tõendusmaterjal tulemuse juurde kuulub. Milline lähtekoodi versioon? Milline FMU versioon? Milline modelDescription? Milline Numerus profiil? Milline tagarakendus? Millised orraaklikontrollid? Milline taasesituse olek? Millised vastavus- või omadustestid? Kui need vastused on laiali wiki ja kellegi mälus, pole simulatsioon veel valmis, et seda tõsises töövoos usaldada.
Õppetund
Dweve FMI õppetund ei ole see, et simulatsioonistandardid on igavad. Nad on igavad täpselt samamoodi, nagu sillad on igavad siis, kui nad püsivad püsti. FMI annab vahetusümbriku. Numerus-põhine fikseeritud punkt annab deterministliku aritmeetika hoiaku. Käitusaja ja lahendaja kastid panevad mudeli sammuma. Orkestreerimine ühendab FMUsid ilma teeskluseta, et ajastus on triviaalne. Tagarakendused viivad käitamise riistvarale, mis sobib tööga. Valideerimine muudab samasuse väravaks lootuse asemel.
See on töö. Mitte suur väide, et numbrid on igaveseks lahendatud. Mitte läikiv demo, kus kõik klapib, sest testitud on ainult ühte rada. Simulatsioonisüsteem, mis tunneb oma vorminguid, deklareerib oma numbrilise lepingu, töötab üle tagarakenduste ja ebaõnnestub valjult, kui sama mudel lakkab olemast sama mudel.
Mudel ei tohiks arendada isiksust. Meil on neid koosolekutel piisavalt.