Elektrotehniški vestnik 87(5): 235-242, 2020 Izvirni znanstveni članek Pospeševanje množenja matrik z vezjem FPGA in razvojnim okoljem Vitis Miloš Ljubotina1, Andrej Žemva2, Anton Biasizzo1 1 Institut "Jožef Stefan", Jamova c. 39, 1000 Ljubljana, Slovenija 2 Univerza v Ljubljani, Fakulteta za elektrotehniko, Tržaška c. 25, 1000 Ljubljana, Slovenija E-pošta: milos.ljubotina@gmail.com Povzetek. Namen opravljenega dela je ovrednotiti programsko okolje Vitis Unified Software Platform za pospeševanje opravil, kot je mnoZenje matrik. V vezju FPGA na razširitveni kartici PCI-e v gostiteljskem računalniku je z omenjenim orodjem implementiran sistolicen sistem za mnoZenje matrik. Njegova zmogljivost je primerjana z zmogljivostjo obstoječe rešitve Intel MKL. Primerjava temelji na izmerjenih hitrostih izvajanja operacij in izračunanem številu opravljenih aritmetičnih operacij na enoto časa ter izkoriščenosti sredstev integriranih vezij. Rezultati kazejo v korist implementiranih sistemov, a je treba upoštevati, da se uporabljen podatkovni tip med uporabljenimi rešitvami razlikuje. Bistvo je, da je zmogljivost primerljiva in programsko okolje vitis zmore proizvesti uporabne rezultate. Ključne besede: programirljivo polje logičnih vrat, mnozenje matrik, Vitis Unified Software Platform, sistolično polje, pospeševanje algoritmov, načrtovanje digitalnih vezij Accelerating matrix multiplication with an FPGA device and the Vitis development environment The intent of this work is to evaluate the Vitis Unified Software Platform development environment for acceleration of tasks like matrix multiplication. For that, a system for multiplying matrices is implemented in an FPGA device on a PCI-e extension card in a host computer with the aforementioned development tools. The system performance is compared with the performance of an existing intel MKL solution. The basis for the comparison are the measured execution speed, and the calculated number of performed arithmeric operations per unit time and integrated circuit resource utilisation efficiency. The results favor the implemented systems, however, the data type used in each solution is different. The key takeaway is that the performance is comparable and the Vitis development platform is able to provide useful results. 1 Uvod Jedro tako rekoč vsakega računalnika je centralna procesna enota (angl. central processing unit oziroma CPU) ali procesor. To je integrirano vezje, ki med delovanjem računalnika vrši ukaze programov in obdeluje podatke. V kontekstu računske znanosti je procesor orodje, s katerim izvajamo algoritme oziroma rešujemo računske probleme. Kljub veliki zmogljivosti modernih procesorjev uporabljamo metode za pospesševanje izvajanja algoritmov, kajti to omogoča reševanje tezjih in bolj kompleksnih problemov. K temu lahko pristopimo z uporabo različne dodatne strojne opreme. Na področju visokozmogljivega računalništva (angl. high performance computing) se v ta namen uporabljajo Prejet 10. avgust, 2020 Odobren 3. september, 2020 grafični procesorji, centralne procesne enote, programir-ljiva polja logičnih vrat (angl. field-programmable gate array oziroma FPGA) in posebej načrtovana integrirana vezja. Lastnosti naštetih rešitev se razlikujejo [1]. Moderne centralne procesne enote so zelo zmogljive, a so namenjene širokemu spektru aplikacij. Imajo zelo kompleksno arhitekturo, ki jo je za posamezno aplikacijo tezško maksimalno izkoristiti. Vsebujejo namrecš elemente, ki niso potrebni pri vseh aplikacijah. Grafični procesorji so podobni centralnim procesnim enotam, a so namenjeni ozjemu naboru aplikacij. Posledično so v okviru tega nabora bolj zmogljivi. Arhitektura FPGA-jev je spremenljiva; delujejo pri nizji delovni frekvenci, a jih je mogoče prilagajati aplikacijam. To omogoča boljši izkoristek sredstev integriranega vezja in manjšo porabo električne energije kot pri splošnonamenskih procesorjih. za aplikacije, ki so dobro podprte tudi v splošnonamenskih procesorjih, pa niso nujno hitrejši. Pogosto omenjena slaba stran FPGA-jev je njihova kompleksnost za uporabo. Nacšrtovanje in implementacija logičnega vezja v FPGA lahko trajata veliko več časa kot razvoj programske opreme. Poleg tega zahtevata tudi globlje znanje o strojni platformi in razvojnih orodjih. Pred razvojem visokonivojskih orodij je bilo za realizacijo sistema v FPGA potrebnih več korakov: načrtovanje logičnega vezja, opis vezja v jeziku za opis digitalnih vezij, kot je VHDL (angl. very high speed integrated circuit hardware description language), sistemska integracija, vodenje postopka implementacije in morebiten razvoj gonilnikov za pospeševalnik [1]. Novejša orodja, kot je Vivado HLS (angl. high le- 236 LJUBOTINA, ŽEMVA, BIASIZZO vel synthesis), omogočajo visokonivojsko sintezo opisa vezja iz izvorne kode v prilagojeni obliki programskih jezikov C in C++ [2]. Pri pospeševanju algoritmov se glavni program običajno izvaja v centralni procesni enoti, računsko zahtevni del pa v pospeševalniku. Zato implementacija algoritma v pospeševalniku sama po sebi ne zadostuje. Realizirati je treba celovit sistem, ki omogoca predvidljivo delovanje pospeševalnika in komunikacijo s procesorjem. To pomeni, da so še vedno potrebni sistemska integracija, implementacija in razvoj gonilnikov. Moderna orodja, kot je Vitis Unified Software Platform ali Vitis, poleg visokonivojske sinteze ponujajo tudi avtomatiziran postopek sistemske integracije in implementacije ter gonilnike za pospeševalnik [3]. Uporabnik orodju poda le opis algoritma v jeziku za opis digitalnih vezij ali izvorno kodo za visokonivojsko sintezo. Orodje realizira jedra (angl. kernels), kot pravimo implementacijam algoritmov v pospesševalniku, v vezju FPGA in sistem, ki uporabniku omogoca dostop do jeder preko standardnega aplikacijskega programskega vmesnika OpenCL [1]. To omogoca hitrejši razvoj aplikacij in zmanjša obseg potrebnega znanja za pospeševanje algoritmov z vezji FPGA. Povod za opravljeno raziskovalno delo je bila zelja po pospeševanju ucenja nevronskih mrez z vezjem FPGA. V prvem koraku smo se odlocili za implementacijo mnozenja matrik, saj je to poglavitni del racunske zahtevnosti ucenja nevronskih mrez in se uporablja tudi na drugih podrocjih znanosti. Za realizacijo sistema smo se odlocili uporabiti visokonivojsko razvojno okolje Vitis. Ker je okolje novo, nas je zanimal potek dela z orodjem in kakovost rezultatov. Cilj dela je zato ovrednotiti razvojno okolje Vitis za pospeševanje opravil, kot je mnozenje matrik. Za ta namen smo v vezju FPGA na razsširitveni kartici z vodilom PCI-e (angl. peripheral component interconnect express) realizirali dva sistema za mnozšenje matrik in njune zmogljivosti primerjali z zmogljivostjo obstojece rešitve, Intel MKL. Nacrtovali smo tudi primerjavo z rešitvijo Vitis BLAS, a so bili rezultati operacij s to knjiznico nepravilni, zato smo realizirana sistema primerjali le s knjiznico Intel MKL. 2 Množenje matrik Matrike so pravokotna polja elementov, ki so razporejeni v vrstice in stolpce. Mnozenje matrik lahko opišemo z enacbama 1: C = AB, E k=1 ai,k bk, (1) kjer je r število stolpcev matrike A oziroma vrstic matrike B. Element v i-ti vrstici in j-tem stolpcu matrike C je enak vsoti zmnoZkov soleZnih elementov i-te vrstice leve matrike in j-tega stolpca desne matrike. Od tu sledi naiven algoritem za mnoZenje matrik z računsko zahtevnostjo O(nmr), pri čemer so matrike A, B in C velikosti n x r, r x m in n x m. Za vsak element matrike C je treba izvesti O(r) seštevanj in mnozenj, elementov pa je nm. Ce predpostavimo, da so matrike kvadratne, dobimo kubicšno zahtevnost, O(n3). Obstajajo tudi algoritmi, kot sta Strassenov in Coppersmith-Winogradov algoritem, ki po asimptoticni notaciji zahtevajo manjše število operacij [4], [5]. Kljub temu se v praksi vecšinoma uporabljajo algoritmi z racunsko zahtevnostjo O(n3), Coppersmith-Winogradov algoritem namrec postane hitrejši šele pri velikosti matrik, ki s trenutno tehnologijo ni dosegljiva, Strassenov algoritem pa se uporablja samo pri zelo velikih matrikah, ker je za manjše matrike tezaven za implementacijo v moderni strojni opremi [5], [6]. Za implementacijo mnozenja matrik v vezju FPGA smo uporabili enostavno sistolicno polje. To je planarna mreza med seboj povezanih procesnih elementov (PE), ki sinhrono prenašajo in obdelujejo podatke [7]. Pri nacrtovanju smo se zgledovali po obstojecih raziskavah o implementiranju mnozenja matrik s sistolicnim poljem [8], [9]. Na sliki 1 je prikazan diagram uporabljenega polja, s katerim je mogoce socasno racunati nm elementov produkta dveh matrik. Slika 1: Diagram enostavnega sistolicnega polja za mnozenje matrik. Naj bo matrika C enaka zmnozku matrik A in B, razseznosti n x r ter r x m. V eni periodi ure vsak PE zmnozši podatka na svojih podatkovnih vhodih in rezultat prisšteje vrednosti v notranjem registru oziroma akumulatorju. Na podatkovne vhode polja sta vsak cikel ure pripeljana stolpec matrike A in vrstica matrike B. Po r urinih ciklih akumulatorji procesnih elementov vsebujejo elemente matrike C. Taka arhitektura polja za kvadratne matrike zahteva n2 procesnih elementov in n urinih ciklov, v katerih izvede n3 operacij, a je lahko tezšavna za implementacijo v vezju FPGA. Vhodni podatki morajo priti do vsakega PE, kar pri vecjih poljih povzroca vecjo obremenitev izhodov (angl. fan- POSPEŠEVANJE MNOŽENJA MATRIK Z VEZJEM FPGA IN RAZVOJNIM OKOLJEM VITIS 237 out) ter zahteva vecji delež in gostoto infrastrukture za povezovanje blokov vezja FPGA. Podobno velja za branje rezultatov iz akumulatorjev procesnih elementov. To lahko omeji maksimalno delovno frekvenco implementacije, ali, ce infrastruktura ne premore zadostne gostote povezav, to celo prepreči. Bolj primerne so arhitekture, pri katerih povezave tecejo le med sosednjimi elementi polja. Tako potrebna gostota povezav in fan-out podatkovnih linij nista odvisna od velikosti polja. Zgled tega prikazuje slika 2. stimo arhitekturo modernih procesorjev [10]. Enostaven nacin deljenja je ponazorjen z enacbo 2. Podmatrike so velikosti nsys xr in r xnsys, pri cemer nsys oznacuje velikost kvadratnega polja procesnih elementov. Ce število vrstic leve matrike ali število stolpcev desne ni deljivo z nsys, matriko dopolnimo z niclami. Posamezne produkte podmatrik je nato treba sestaviti v ustrezno celoto. AB Ai A2 [Bi B2 B M An_ A1B1 A2B1 Ai B2 A2B2 AiBM A2BM AnBi AnB2 ... AnB M (2) Dobra lastnost sistolicnih polj je ucinkovita raba podatkov. Med neprekinjenim delovanjem opisanih polj je vsak cikel vstavljenih 2nsys elementov, opravi pa se operacij. Vsak element, ki pride na vhod polja, sys Slika 2: Primer sistolicnega polja za mnozenje matrik, ki je primerno za vezja FPGA. Prikazani so le vrstni redi prenosa podatkov za posamezne podatkovne poti, ne pa njihova medsebojna odvisnost. je uporabljen nsys-krat. Veckrat je podatek uporabljen znotraj polja, manjkrat mora biti pripeljan do polja. Posledicšno je podatkovna pot zunaj polja manj obremenjena oziroma je lahko bolj enostavna. To ne le olajsša delo nacšrtovalca, ampak tudi omogocša bolj kakovosten rezultat implementacije vezja v FPGA. Moznih je še mnogo drugih arhitektur sistolicnih polj za mnozenje matrik, ki se razlikujejo po številu procesnih elementov, zakasnitvi, pretoku podatkov, kompleksnosti za implementacijo in ustreznosti za realizacijo v vezju FPGA. Racuna se produkt, C, matrik A in B, razseznosti n x r ter r x n. V prvem urinem ciklu sta v polje vstavljeni le vrednosti an in bn, katerih produkt je izracšunan v prvem procesnem elementu. V naslednjem ciklu je vrednost an posredovana naslednjemu procesnemu elementu v prvi vrstici, vrednost bn pa naslednjemu elementu v prvem stolpcu. Vstavljene so vrednosti a12, a21, b21 in b12 ter izracunani produkti a12b21, a21 b11 in a11b12. Po r korakih je v akumulatorju prvega PE vrednost c11, v naslednjem sta v sosednjih PE na voljo vrednosti c12 in c21, po nadaljnjih 2n — 3 ciklov pa tudi cnn v zadnjem procesnem elementu. Po tem, ko se izracun posameznega elementa matrike C zakljuci, je ta postopoma prenesen do podatkovnega izhoda polja. Za izracšun in ekstrakcijo zmnozška kvadratnih matrik s takim sistolicnim poljem je potrebnih n2 procesnih elementov in 4n — 3 urinih ciklov, a je z ustrezno nadzorno logiko mogocše ustvariti cevovod, ki omogocša enak pretok podatkov kot v primeru na sliki 1. Ker je število procesnih elementov, ki jih premorejo vezja FPGA, omejeno, je na tak nacšin mogocše mnozšiti le majhne matrike. Za vecšje matrike se lahko uporabi pristop deljenja na podmatrike, kar se uporablja tudi pri centralnih procesnih enotah, ker lahko tako bolje izkori- 3 Strojna platforma Za realizacijo sistemov smo uporabili računalnik z razširitveno kartico Alveo U250, ki je namenjena pospeševanju računsko zahtevnih aplikacij [11]. Kartica vključuje vezje FPGA Virtex UltraScale+ XCU250-2LFIGD2104E, štiri med seboj neodvisne module DIMM (angl. dual in-line memory module) pomnilnika DDR4-2400 ECC (angl. error-correcting code) s skupno kapaciteto 64 GiB in druge elemente [12]. V tabeli 1 so našteta pomembnejša sredstva, ki jih ponujata kartica in vezje FPGA. Poleg komunikacijskih vodil in pomnilnika so v tabeli tudi vnosi za vpogledne tabele (angl. lookup table oziroma LUT), bistabilne multivibratorje (FF), digitalne signalne procesorje (DSP), bloke staticšnega bralno-pisalnega pomnilnika (angl. block random-access memory oziroma BRAM) in bloke pomnilnika UltraRAM (URAM) [1]. Celotno vezje FPGA je izdelano s tehnologijo ŠŠI (angl. stacked silicon interconnect), kar pomeni, da je sestavljeno iz vec integriranih vezij, ki so med seboj povezana preko skupne rezine silicija [13]. Uporabljeno vezje FPGA vkljucuje štiri integrirana vezja oziroma regije SLR (angl. super logic region). Ker so povezave 238 LJUBOTINA, ŽEMVA, BIASIZZO Tabela 1: Razpoložljiva sredstva razširitvene kartice Alveo U250 in vsebovanega vezja FPGA. Sredstvo vmesnik PCI-e omrežni vmesnik zunanji pomnilnik LUT FF DSP BRAM URAM Količina Gen3 x16 2 x QSFP28 4 x 16 GiB DDR4-2400 1727040 3 454 080 12 288 2688 1280 med regijami daljše in počasnejše kot povezave znotraj regij, je dobro, da se posamezno jedro ne razpenja preko vec regij. To ima velik vpliv pri načrtovanju arhitekture sistema za tako vezje FPGA. Pri uporabi razširitvene kartice z visokonivojskim programskim okoljem Vitis del sredstev vezja FPGA zavzame statičen del načrta, ki ga lahko obravnavamo kot del strojne platforme. Na sliki 3 je prikazana topologija regij in pomembnejših zunanjih povezav. V vsaki regiji je na voljo priblizno četrtina sredstev rekonfigurabilnega dela vezja. razširitveno kartičo prenašajo v vrstnem redu vrstič in stolpčev, torej ne v transponirani obliki. Z vsakim ukazom je mogoče pospeševalniku podati več parov matrik. To v situačijah, v katerih je treba izvesti več neodvisnih operačij, skrajša potreben rezijski čas (angl. overhead) in omogoča večji pretok podatkov. Arhitektura realiziranega sistema temelji na enostavnem sistoličšnem polju, ki je bilo predstavljeno v poglavju 2, velikosti 64 x 64 [1]. Implementirano je bilo tudi drugo predstavljeno polje, a je rezultat slabši. Vzrok za to je verjetno neusklajenost interpretačije opisa vezja med načrtovalčem in prevajalnikom. Za pročesne elemente so uporabljeni digitalni signalni pročesorji, ki izvajajo operačijo MAC (angl. multiply-aččumulate). Ker je teh znotraj ene regije premalo za čelotno polje, je to razdeljeno na štiri manjša polja velikosti 32 x 32. Tako je v posamezni regiji mogoče implementirati dve polji, širina podatkovnih priključkov polj pa je enaka širini vodil pomnilniških vmesnikov, ki je 512 bitov. S tem so lahko sširine vseh podatkovnih poti enake, kar poenostavi nadzorno logiko, dovoljuje bolj varčno uporabo sredstev in lahko pomeni višjo delovno frekvenčo implementačije. Na sliki 4 je prikazana topologija realiziranega sistema. Bloki čtl_k1, mul_k1, mul_k2, mul_k3 in mul_k4 so računske enote oziroma posamezne realizačije jeder, lupina pa je ime za statičšni del vezja in nadzoruje delovanje računskih enot. Blok čtl_k1 skrbi za pretok podatkov med zunanjimi vodili in preostalimi računskimi enotami, ki vsebujejo sistolična polja. Prva dva modula zunanjega pomnilnika sta uporabljena za podajanje operandov, tretji za rezultate in zadnji za prenos informačij o velikosti matrik. Računska enota čtl_k1 je postavljena v regijo SLR1, mul_k1 in mul_k2 v regijo SLR0 ter mul_k3 in mul_k4 v regijo SLR2. Slika 3: Topologija regij in pomembnejših zunanjih povezav za uporabljeno strojno platformo. 4 Arhitektura Slika 4: Topologija realiziranega sistema. Realiziran sistem podpira mnozenje matrik velikosti n x r in r x m, pri čemer so parametri n, r in m večkratniki števila 64 ter niso večji od 1024. Matrike, ki ne zadoščajo tem pogojem, je mogoče ustrezno dopolniti z ničlami oziroma razdeliti na podmatrike. Uporabljena je 16-bitna predstavitev podatkov s fiksno vejičo. Po-zičija vejiče je podana pred implementačijo sistema, zato ne more biti spremenjena med obratovanjem po-speševalnika. Elementi matrik se med gostiteljem in 5 Implementacija Za prevajanje izvorne kode je bil poleg obveznih parametrov prevajalniku v++ podan še opis topologije sistema in sledeče nastavitve za optimizačijo: -O3 — vivado . prop : run . impl_1 . STEPS . PHYS OPT DESIGN . IS ENABLED= t r u e POSPEŠEVANJE MNOŽENJA MATRIK Z VEZJEM FPGA IN RAZVOJNIM OKOLJEM VITIS 239 — vivado . prop : run . impl_1 . STEPS . PHYS_OPT_DESIGN. ARGS. DIRECTIVE^ Explore Privzeta delovna frekvenca jeder na izbrani platformi je 300 MHz, vendar se samodejno zmanjša, Ce prevajalniku ne uspe zadostiti Časovnim zahtevam. Realiziran sistem deluje pri frekvenci 231 MHz in zaseda sredstva vezja FPGA, kot je zapisano v tabeli 2. Del vpoglednih tabel je uporabljen kot porazdeljeni pomnilnik (DRAM) ali pomikalni register (SRL), kar je prikazano ločeno. Tabela 3: Zasedenost sredstev za alternativno različico imple-mentiranega sistema. ime razpoložljiva uporabljena sredstva količina količina LUT 1499 566 255 465 (17,2%) DRAM ali SRL 765 160 6162 (0,8%) FF 3112 686 622 238 (20,2%) BRAM 2281 874 (39,5 %) URAM 1280 256 (20,0%) DSP 12 272 8196 (66,8%) Tabela 2: Zasedenost sredstev za implementiran sistem. ime sredstva LUT DRAM ali SRL FF BRAM URAM DSP razpoložljiva količina 1 499 566 765 160 3112 686 2281 1280 12 272 uporabljena količina 128 028 (8,5%) 3081 (0,4%) 311539 (10,0%) 437 (19,2%) 128 (10,0%) 4098 (33,4%) Ker je bila implementacija uspešna in je na voljo dovolj sredstev, smo realizirali še alternativno razlicico sistema z dvema neodvisnima podsistemoma. Ta sta enaka Ze predstavljenemu sistemu, le topologija celote je drugačna, kot je vidno na sliki 5. Modula pomnilnika DDR[0] in DDR[3] sta uporabljena za posredovanje elementov levih matrik in informacij o velikosti matrik, DDR[1] in DDR[2] pa za elemente desnih matrik in rezultate. V regiji SLR0 sta racunski enoti mul_k1 in mul_k2, v regiji SLR1 so ctl_k1, mul_k7 in mul_k8, v regiji SLR2 so ctl_k2, mul_k3 in mul_k4, v regiji SLR3 pa mul_k5 in mul_k6. Dosezena je bila delovna frekvenca 187 MHz in uporaba sredstev, kot je prikazana v tabeli 3. Slika 5: Topologija alternativne različice sistema. 6 Meritve Primerjava zmogljivosti obstojecih rešitev in razvitih sistemov temelji na hitrosti obdelave podatkov posamezne rešitve. Hitrosti so bile dolocene empiricno, pri cemer sta bila upoštevana dva razlicna primera uporabe mnozenja matrik. Pri prvem je bil merjen cas izolirane operacije oziroma njena sekvencna zakasnitev, pri drugem pa najvecja prepustnost (angl. throughput) sistema. Za slednjega velja predpostavka, da je treba izvršiti vec neodvisnih operacij hkrati, torej da so vsi vhodni podatki na voljo pred zacetkom izracunov in je mogoce izkoristiti cevovodne in paralelne znacilnosti strojne opreme. V obeh primerih je bilo na podlagi meritev in znanega števila operacij, potrebnih za izracun rezultatov, doloceno število opravljenih aritmeticnih operacij na enoto casa. Poleg tega je bila dolocena tudi izkorišcenost sredstev integriranih vezij kot razmerje med izmerjenim številom aritmeticnih operacij na enoto casa in teoreticnim maksimumom. Spremenljivke tsek, Nsek in Ysek predstavljajo cas izvedbe mnozenja dveh matrik, število operacij na enoto casa in izkorišcenost sredstev za prvi tip meritve, tpre, Npre in Ypre pa za drugega. Vse meritve so bile ponovljene 100-krat in rezultati povpreceni. Pri meritvah sekvencne zakasnitve je bil merjen cas ene operacije mnozenja kvadratnih matrik velikosti n x n, pri meritvah prepustnosti pa cas mnozenja M parov matrik velikosti n x n. Stevilo M je bilo doloceno tako, da je bilo trajanje vsake meritve razreda 100 ms. Kolicine tsek, tpre, Nsek, Npre, Ysek in Ypre so definirane z relacijami 3: tsek = izmerjen čas, tpre = izmerjen Cas M Nsek . , Nnre Y sek = tsek Nsek Yvre Mt N (3) 'vre pre N ' ,pre~ N -Lim.n.x -L v max kjer je P število izvršenih aritmeticnih operacij, Nmax pa teoreticno najvecje mozno število izvršenih aritmeticnih operacij na enoto casa. Za meritve casa je bila uporabljena centralna procesna enota posamezne platforme. S sistemskim klicem clock_getres je bilo ugotovljeno, da sistemski klic 240 LJUBOTINA, ŽEMVA, BIASIZZO clock_gettime omogoča merjenje casa z ločljivostjo 1 ns. Uporabljen je bil tip ure CLOCK_MONOTONIC_RAW, ki omogoča dostop do strojne ure brez sinhronizacijskih popravkov in vpliva sistema NTP (angl. network time protocol). Meritve realiziranih sistemov so bile opravljene na platformi z razširitveno kartico Alveo U250, meritve s knjiznico Intel MKL pa na sistemih z Intelovimi procesorji: i7 4700HQ, Xeon Gold 6144, Xeon Gold 6154 in Xeon Platinum 8180 [1]. Delovna frekvenca prvega je bila nastavljena na njegovo nominalno frekvenco, 2,4 GHz, frekvence preostalih pa na njihove nominalne frekvence za nabor ukazov AVX-512 (angl. advanced vector extensions 512). Ta je za procesor Intel Xeon Gold 6144 enaka 2,2 GHz, za Intel Xeon Gold 6154 2,1 GHz in za Intel Xeon Platinum 8180 1,7 GHz. Ker knjiznica Intel MKL ne podpira 16-bitnega podatkovnega tipa s fiksno vejico, je bil uporabljen 32-bitni tip s plavajoco vejico. Pri uporabi knjiznice Vitis BLAS je prišlo do tezav, zaradi katerih je izvzeta iz primerjave. Pri mnozenju vec parov matrik, cetudi ne takoj enega za drugim, je zakasnitev mnozenja z vsakim parom narascala in rezultati so bili nepravilni. 4,0 3,5 3,0 m 2,5 j3