Share to: share facebook share twitter share wa share telegram print page

AI engine

Esempio di chip su una scheda di accelerazione.

AI engine è un'architettura computazionale creata da AMD (ufficialmente, da Xilinx, acquisita da AMD nel 2022[1]). È comunemente usata in applicazioni di algebra lineare[2], come moltiplicazioni tra matrici, intelligenza artificiale[3][4] , analisi di segnali[5], e, più in generale, computazione ad alte prestazioni, ovvero High-Performance Computing[6][7]. Il primo prodotto a contenere AI engine sono le architetture Versal[8], che combinano componenti scalari, riconfigurabili ed adattivi, tutti connessi attraverso una Network on Chip (NoC)[9].

Gli AI engine si sono evoluti nel tempo, adattati al continuo cambiamento delle applicazioni moderne, trovando spazio in applicazioni di intelligenza artificiale. Tuttavia, l'architettura base resta la stessa, con un singolo engine che integra un processore scalare e vettoriale. Quest'ultimo, offre le capacità Single Instruction Multiple Data (SIMD)[10][11] tipiche degli AI engine. In termini di prodotto, oggi gli AI engine si trovano integrati con diverse architetture, quali FPGA, GPU e CPU, creando una serie di architetture applicate in svariati domini[12][13][14].

"AI" nel nome "AI engine" non è acronimo di "artificial intelligence" o "adaptable intellignent". Infatti, la stessa compagnia, all'interno di un forum, ha specificatamente dichiarato che AI non era pensato come un acronimo[15].

Storia

Rilasciati da Xilinx, una compagnia americana già nota per gli sviluppi con architetture FPGA, gli AI engine hanno come obiettivo iniziale l'accelerazione di applicazioni legate all'analisi di segnali e, più generalmente, tutte quelle applicazioni che possono beneficiare del parallelismo di dati. Inizialmente, gli AI engine erano integrati assieme ad un componente riconfigurabile nelle piattaforme Versal[8]. I primi sistemi, VCK190 e VCK5000, contengono 400 AI engine, collegati ad una FPGA di tipo VC1902. Per collegare tutti i componenti, l'architettura si basa su un nuovo modello di Network on Chip[9].

Nel 2022, il progetto AI engine ha subito un'evoluzione, quando Xilinx è stata ufficialmente acquisita da AMD[1], un'altra compagnia americana già famosa sul mercato delle architetture computazionali. Dopo l'acquisizione, gli AI engine sono stati integrati con altri sistemi computazionali con lo scopo di accelerare un insieme più ampio di applicazioni. Infatti, sebbene potenti, le architetture Versal hanno richiesto un tempo notevole di apprendimento, che ne ha rallentato la diffusione[12]. Per questo motivo, AMD e svariati ricercatori hanno rivolto i loro sforzi anche alla creazione di strumenti e software per semplificare lo sviluppo su AI engine, migliorandone la programmabilità[16][17][18][19].

Consci della sempre maggiore importanza dell'intelligenza artificiale in applicazioni moderne, nel 2023 AMD annuncia una seconda generazione di AI engine, gli AI engine ML (AIE-ML)[20]. Tale generazione presenta un maggiore supporto a tipi di dati tipici in ambito AI, come i bfloat16[21], nonchè un'aumentata memoria per supportare un maggior numero di computazioni intermedie[22]. Da questa generazione, gli AI engine sono stati integrati anche con CPU e GPU, all'interno di architetture denominate Ryzen AI. In questi sistemi, gli AI engine si trovano spesso riferiti come "Compute Tile", all'interno di un componente chiamato XDNA[23]. Tale componente però, presenta anche altri tipo di unità[16][24], chiamati rispettivamente "Memory Tile" e "Shim Tile"[23]. La prima generazione di XDNA è integrata all'interno dei processori Ryzen AI Phoenix. Assieme a questa architettura, AMD ha anche lavorato allo sviluppo di Riallto, uno strumento per semplificare la programmazione di questi dispositivi, fornendo un'interfaccia python per esplicitare la connessione e l'istanziazione dei vari componenti[25].

Similmente, verso la fine del 2023, inizio 2024, AMD ha annunciato la seconda generazione di XDNA, denominata XDNA 2, all'interno della serie di processori Ryzen AI Strix[26][27]. A differenza della prima generazione, questa seconda generazione offre un numero maggiore di componenti di calcolo, cercando di accelerare specificatamente applicazioni di machine learning e large language models. Assieme a questa architettura, AMD propone anche Ryzen AI SW, uno strumento utile per semplificare l'accelerazione della fase di inferenza dei modelli di machine learning, mappandola sui vari componenti del Ryzen AI[23].

In fine, dal momento che applicazioni di neural processing e deep learning sono sempre più diffuse, ricercatori ed industrie hanno iniziato a riferirsi alle architetture XDNA come Neural Processing Units (NPUs). Tuttavia, il termine include anche tutte quelle architetture pensate per il deep learning[28] e tante aziende, come Huawei[29] e Tesla[30], propongono una alternativa proprietaria[29][30].

Architettura hardware

Singolo AI engine

Dettaglio: singolo componente AI engine di prima generazione, che presenta un'unità vettoriale, una scalare, una memoria da 32KB e svariate connessioni.

Un singolo AI engine è una architettura VLIW[11][31] a 7 strade con capacità sia scalari che vettoriali, che abilitano l'esecuzione in parallela di più operazioni per ciclo di clock. L'architettura include una unità vettoriale con dimensione 128 bit. Questa unità vettoriale offre capacità di tipo Single Instruction Multiple Data (SIMD). In aggiunta, l'architettura offre anche capacità scalari per controllo e logica sequenziale, e un insieme di unità di lettura/scrittura per gli accessi in memoria. La dimensione massima di un registro vettoriale è 1024 bit, opportunamente divisi in un numero di elementi che dipende dal tipo dell'elemento stesso. Ad esempio, se un singolo elemento è 32 bit, il vettore potrà contenere 32 elementi[31] .

Nella prima generazione, un AI engine ha una memoria di 32KB per salvare dati ed una memoria in sola lettura di 16KB destinata al salvataggio delle istruzioni[31].

Un AI engine è un'architettura schedulata staticamente. Come riportato in letteratura, avere un tipo di architettura che gestisce l'assegnamento del carico di lavoro a tempo di compilazione può causare un notevole aumento della dimensione del codice. Questo è particolarmente critico in architetture con una memoria limitata, quali gli AI engine, e richiede svariate ottimizzazioni manuali[19][11].

Il principale linguaggio di programmazione per un singolo AI engine è C++, usato sia per scrivere la funzione accelerata dall'architettura che per specificare le connessioni tra i vari AI engine[32]. Ciò nonostante, diversi strumenti di sviluppo possono supportare diversi linguaggi di programmazione[19].

Prima generazione - componente AI engine nelle architetture Versal

Più AI engine di prima generazione connessi tra loro in un unico macro componente.

La prima generazione di sistemi Versal presenta un gruppo di 400 AI engine connessi attraverso tre interfacce principali, chiamate "cascade", "memory" e stream. Ognuna rappresenta un possibile meccanismo di comunicazione tra AI engine[6].

Ogni AI engine ha una memoria di 32KB che può essere estesa fino ad un massimo di 128 sfruttando la memoria degli AI engine circostanti. Questo però inabilita quegli AI engine, impedendone l'utilizzo come elementi di calcolo[8][19].

Ogni AI engine può eseguire una funzione indipendentemente dagli altri, o anche più di una funzione mediante l'uso di "time multiplexing". La struttura utilizzata per descrivere l'istanziazione ed il collegamento di più AI engine è chiamata AIE graph, o grafo degli AI engine. Il modello di programmazione suggerito da AMD prevede la scrittura in C++ di questo file. Tuttavia, diversi strumenti di sviluppo possono supportare linguaggi diversi per migliorare prestazioni o programmabilità[19][24].

Per compilare l'applicazione, lo strumento principale è "l'AIE compiler", un compilatore proprietario della casa produttrice che esegue in modo sia la fase di istanziazione che di collegamento degli AI engine[33].

Dal momento che la prima generazione di AI engine è integrata all'interno di architetture Versal, è possibile anche sfruttare connessioni dirette con il componente riconfigurabile e la Network on Chip. Tali connessioni dirette però sono limitate e devono essere esplicitate sia nel grafo degli AI engine che, a livello di sistema, nella fase di system-design[19][7].

Seconda generazione - gli AI engine ML

La seconda generazione degli AI engine, denominata AI engine ML (AIE-ML), presenta alcune differenze rispetto alla generazione precedente, con lo scopo di accelerare specificatamente applicazioni di machine learning, migliorando sia prestazioni che efficienza[22].

Un AIE-ML possiede circa il doppio della densità computazionale di un AIE di prima generazione, una migliore banda di memoria, un supporto nativo per tipi di dati tipici quando si esegue inferenza di modelli di machine learning, come int8 e blfoat. Grazie a tutte queste ottimizzazioni, le AIE-ML presentano TOPS per watt tre volte superiori rispetto al primo livello di AI engine[3].

Pubblicazioni recenti confermano che gli AIE-ML sono più scalabili, beneficiando della maggiore memoria e potenza computazionale[3], diventando maggiormente idonei all'accelerazione della fase di inferenza in applicazioni di machine learning[22].

Stando alla documentazione ufficiale della compagnia produttrice, è possibile delineare una serie di similarità e differenze tra le due architetture[22].

Differenze principali tra gli AI engine di prima (AIE) e seconda (AIE-ML) generazione[22]
similarità tra AIE-ML ed AIE differenze tra AIE-ML ed AIE
Stesso processo, voltaggio, frequenza, clock e distribuzione di potenza. Gli AIE-ML hanno il doppio della densità computazionale. Inoltre, hanno un collegamento diretto per letture e scrittura all'interno della memoria dei singoli componenti computazionali.
Unica VLIW SIMD per unità computazionale AIE-ML hanno una memoria aumentata (64KB)
Stesse funzionalità di debug AIE-ML hanno una miglior efficienza in termini di potenza (TOPs/W).
Stessa connettività con FPGA e Network on AIE-ML hanno una migliori funzionalità durante la comunicazione, implementando meccanismi di "parity check" tra fonte e destinazione.
Stessa larghezza di banda per connessioni attraverso l'interfaccia Stream. AIE-ML si dispongono all'interno di una griglia nella quale è possibile trasferire dati, attraverso l'interfaccia "cascade" a 512-bit, sia verticalmente (dall'alto verso il basso) che orizzontalmente (da sinistra verso destra). Nella prima generazione il trasferimento era solo orizzontale, con un'interfaccia di 384-bit.

XDNA 1

Diagramma semplificato di un AMD XDNA NPU, come lo si trova in un processore 7040[24]

L'XDNA è il componente hardware che mette assieme tre principali componenti[24][23]:

  • Le unità di computazione, o Compute Tile, che sono responsabili dell'esecuzione, vettoriale o scalare, delle operazioni. Questi componenti sono, di fatto, gli AIE-ML.
  • Le unità di memoria, o Memory Tile, che hanno il ruolo di "cache". Essi possono distribuire i dati alle varie unità di computazione applicando dei pattern specifici.
  • Le unità di interconnessione, o Shim Tile, che gestiscono l'accesso in memoria, accedendo ai dati che vengono poi inviati a Memory e Compute Tile.

Il componente XDNA 1 è combinato assieme a CPU e GPU in un'unica architettura, i Ryzen AI di tipo Phoenix, specializzata per l'accelerazione dell'inferenza in applicazioni legate all'intelligenza artificiale[24].

XDNA 2

La seconda generazione di XDNA, denominata XDNA 2, è rilasciata all'interno dell'architettura Ryzen AI Strix, e stando alla documentazione ufficiale del produttore, è un'architettura specializzata per large language models[23].

Strumenti e paradigma di programmazione

Lo strumento ufficialmente supportato da AMD per lo sviluppo di AI engine è Vitis, che sfrutta tutta la gamma di sotto-componenti già utilizzata per l'accelerazione FPGA[32][34][7].

Vitis offre supporto per sviluppo sia hardware che software in un ambiente di sviluppo unico. Esso include anche sintesi ad alto livello (High-Level Synthesis), sviluppo RTL con verilog o vhdl, e librerie specifiche di dominio. Sfruttando questo strumento, è possibile eseguire applicazioni accelerate su architetture eterogenee[35].

Logo del software AMD Vivado

Nelle architetture più moderne, tuttavia, l'approccio suggerito non prevede il flusso di sviluppo classico usato da Vitis. Infatti, si preferisce sviluppare i singoli componenti sfruttando Vitis, per poi collegarli sfruttando Vivado[36].

Vivado, anch'esso parte dell'infrastruttura di AMD a seguito dell'acquisizione di Xilinx, è principalmente utilizzato per lo sviluppo RTL e per l'integrazione di singoli componenti, denominati IP. Nelle ultime generazioni di architetture, di fatti, il flusso di sviluppo prevede la creazione di singoli IP tramite il linguaggio di sviluppo hardware scelto e l'integrazione di più IP tramite Vivado. Proprio in questa fase di integrazione è possibile collegare anche il componente rappresentante gli AI engine[36].

Per quanto riguarda gli AI engine, il principale linguaggio di sviluppo, sia per la singola funzione eseguita dal componente che per la dichiarazione di connessioni tra più unità AI engine, è C++[32].

Strumenti di sviluppo dal mondo della ricerca

Parallelamente allo sviluppo di strumenti e flussi di programmazione da parte di AMD, ricercatori, università e AMD stessa hanno lavorato ad altri strumenti di sviluppo con lo scopo di migliorare la programmabilità, le prestazioni, o semplificare lo sviluppo quando ci si concentra su un sottoinsieme di applicazioni[19][37][24][18].

Di seguito, alcuni degli strumenti principali vengono brevemente descritti[38][19][37][18]:

  • IRON è uno strumento sviluppato da AMD in collaborazione con vari ricercatori. Il codice sorgente di IRON è pubblico, permettendo a ricercatori ed esperti esterni di suggerire modifiche e migliorie[38]. Dal punto di vista dell'utente, IRON permette attraverso un'interfaccia Python di dichiarare i componenti AI engine e le loro connessioni. Successivamente, il codice python è tradotto in MLIR, una rappresentazione intermedia che viene poi convertita nell'eseguibile per AI engine. All'interno di IRON è possibile utilizzare due diversi compilatori: sia un compilatore interno di AMD, presente anche all'interno di Vitis, sia il compilatore Peano, il cui codice è pubblico[24].
  • ARIES ( l'acronimo sta per "An Agile MLIR-Based Compilation Flow for Reconfigurable Devices with AI engine") è un paradigma di programmazione ad alto livello che sfrutta anch'esso la rappresentazione intermedia MLIR. L'idea di ARIES è partire da un codice Python che specifica non solo le connessioni ma anche il codice da eseguire sulla singola unità di computazione. Successivamente, un componente si occupa di vettorizzare il codice Python, trasformandolo in un codice C++ per AI engine[19].
  • EA4RCA è un tool di sviluppo specializzato per algoritmi di tipo "Communication-Avoiding". Esso introduce un ambiente di sviluppo che abbraccia l'eterogeneità dei dispositivi Versal, enfatizzando le performance degli AI engne e fornendo astrazione per l'implementazione di comunicazione ad alte prestazioni tra i componenti. Lo scopo principale di EA4RCA è sfruttare la comunicazione regolare di questi algoritmi per migliorare le prestazioni[37].
  • CHARM è un framework per comporre svariati acceleratori basati su moltiplicazioni tra matrici. Esso include anche un modello analitico che guida l'esplorazione dello spazio dei parametri per determinare la miglior configurazione dell'acceleratore[18].

Voci correlate

Note

  1. ^ a b (EN) AMD Completes Acquisition of Xilinx, su ir.amd.com, 14 febbraio 2022.
  2. ^ Developing a BLAS library for the AMD AI Engine Extended Abstract, su arxiv.org.
  3. ^ a b c Kaustubh Mhatre, GAMA: High-Performance GEMM Acceleration on AMD Versal ML-Optimized AI Engines, arXiv, 15 aprile 2025, DOI:10.48550/arXiv.2504.09688, arXiv:2504.09688.
  4. ^ Paul Chen, Exploiting On-Chip Heterogeneity of Versal Architecture for GNN Inference Acceleration, in International Conference on Field-Programmable Logic and Applications (FPL), IEEE, 4 settembre 2023, pp. 219–227, DOI:10.1109/FPL60245.2023.00038.
  5. ^ Fernando Flores, Evaluation of the Versal Intelligent Engines for Digital Signal Processing Basic Core Units, in 2024 39th Conference on Design of Circuits and Integrated Systems (DCIS), IEEE, 13 novembre 2024, pp. 1–6, DOI:10.1109/DCIS62603.2024.10769170.
  6. ^ a b AI Engine: Meeting the Compute Demands of Next-Generation Applications, su amd.com.
  7. ^ a b c Johannes Menzel, Efficient and Distributed Computation of Electron Repulsion Integrals on AMD AI Engines, in 2025 IEEE 33rd Annual International Symposium on Field-Programmable Custom Computing Machines, 4 maggio 2025, pp. 95–104, DOI:10.1109/FCCM62733.2025.00044.
  8. ^ a b c Kees Vissers, Versal: The Xilinx Adaptive Compute Acceleration Platform (ACAP), in Proceedings of the 2019 ACM/SIGDA International Symposium on Field-Programmable Gate Arrays, Association for Computing Machinery, 20 febbraio 2019, p. 83, DOI:10.1145/3289602.3294007.
  9. ^ a b Ian Swarbrick, Network-on-Chip Programmable Platform in VersalTM ACAP Architecture, in Proceedings of the 2019 ACM/SIGDA International Symposium on Field-Programmable Gate Arrays, Association for Computing Machinery, 20 febbraio 2019, pp. 212–221, DOI:10.1145/3289602.3293908.
  10. ^ Jatin Chhugani, Efficient implementation of sorting on multi-core SIMD CPU architecture, in Proc. VLDB Endow., vol. 1, n. 2, 1º agosto 2008, pp. 1313–1324, DOI:10.14778/1454159.1454171.
  11. ^ a b c John L. Hennessy, Computer architecture: a quantitative approach, Krste Asanović, Sixth, Cambridge, Mass, Morgan Kaufmann Publishers, an imprint of Elsevier, 2019, ISBN 978-0-12-811905-1.
  12. ^ a b Nick Brown, Exploring the Versal AI Engines for Accelerating Stencil-based Atmospheric Advection Simulation, in Proceedings of the 2023 ACM/SIGDA International Symposium on Field Programmable Gate Arrays, Association for Computing Machinery, 12 febbraio 2023, pp. 91–97, DOI:10.1145/3543622.3573047.
  13. ^ Kotaro Shimamura, Exploring the Versal AI Engine for 3D Gaussian Splatting, arXiv, 17 febbraio 2025, DOI:10.48550/arXiv.2502.11782, arXiv:2502.11782.
  14. ^ Nick Brown, Seamless acceleration of Fortran intrinsics via AMD AI engines, arXiv, 14 febbraio 2025, DOI:10.48550/arXiv.2502.10254, arXiv:2502.10254.
  15. ^ AMD Customer Community - AI engine name, su adaptivesupport.amd.com.
  16. ^ a b Maksim Levental, An End-to-End Programming Model for AI Engine Architectures, in Proceedings of the 14th International Symposium on Highly Efficient Accelerators and Reconfigurable Technologies, Association for Computing Machinery, 19 giugno 2024, pp. 135–136, DOI:10.1145/3665283.3665294.
  17. ^ Tan Nguyen, SPADES: A Productive Design Flow for Versal Programmable Logic, in 2023 33rd International Conference on Field-Programmable Logic and Applications (FPL), 4 settembre 2023, pp. 65–71, DOI:10.1109/FPL60245.2023.00017.
  18. ^ a b c d Jinming Zhuang, CHARM: Composing Heterogeneous AcceleRators for Matrix Multiply on Versal ACAP Architecture, in Proceedings of the 2023 ACM/SIGDA International Symposium on Field Programmable Gate Arrays, Association for Computing Machinery, 12 febbraio 2023, pp. 153–164, DOI:10.1145/3543622.3573210.
  19. ^ a b c d e f g h i Jinming Zhuang, ARIES: An Agile MLIR-Based Compilation Flow for Reconfigurable Devices with AI Engines, in Proceedings of the 2025 ACM/SIGDA International Symposium on Field Programmable Gate Arrays, Association for Computing Machinery, 27 febbraio 2025, pp. 92–102, DOI:10.1145/3706628.3708870.
  20. ^ Elliott Delaye, CGRA4HPC 2022 Invited Speaker: Mapping ML to the AMD/Xilinx AIE-ML architecture, in 2022 IEEE International Parallel and Distributed Processing Symposium Workshops (IPDPSW), 30 maggio 2022, pp. 628–628, DOI:10.1109/IPDPSW55747.2022.00109.
  21. ^ Dhiraj Kalamkar, A Study of BFLOAT16 for Deep Learning Training, arXiv, 13 giugno 2019, DOI:10.48550/arXiv.1905.12322, arXiv:1905.12322.
  22. ^ a b c d e AMD Technical Information Portal - AIE-ML comparison with AIE, su docs.amd.com.
  23. ^ a b c d e Alejandro Rico, AMD XDNA NPU in Ryzen AI Processors, in IEEE Micro, vol. 44, n. 6, 10 luglio 2024, pp. 73–82, DOI:10.1109/MM.2024.3423692.
  24. ^ a b c d e f g Erika Hunhoff, Efficiency, Expressivity, and Extensibility in a Close-to-Metal NPU Programming Interface, in The 33rd IEEE International Symposium on Field-Programmable Custom Computing Machines, IEEE, 4 maggio 2025, pp. 85–94, DOI:10.1109/FCCM62733.2025.00043.
  25. ^ Andrew Schmidt, RAW 2024 Invited Talk-9: Riallto: An Open-Source Exploratory Framework for Ryzen AI™, in International Parallel and Distributed Processing Symposium Workshops, IEEE, 27 maggio 2024, pp. 91–91, DOI:10.1109/IPDPSW63119.2024.00030.
  26. ^ Paul Alcorn, AMD deep-dives Zen 5 architecture — Ryzen 9000 and AI 300 benchmarks, RDNA 3.5 GPU, XDNA 2, and more, su anandtech.com, July 15, 2024 (archiviato dall'url originale il 24 luglio 2025).
  27. ^ Gavin Bonshor, The AMD Zen 5 Microarchitecture: Powering Ryzen AI 300 Series For Mobile and Ryzen 9000 for Desktop, su anandtech.com (archiviato dall'url originale il 16 luglio 2024).
  28. ^ Kyuho J. Lee, Chapter Seven - Architecture of neural processing unit for deep neural networks, vol. 122, Elsevier, 1º gennaio 2021, pp. 217–245, DOI:10.1016/bs.adcom.2020.11.001.
  29. ^ a b Heng Liao, Ascend: a Scalable and Unified Architecture for Ubiquitous Deep Neural Network Computing : Industry Track Paper, in 2021 IEEE International Symposium on High-Performance Computer Architecture (HPCA), 27 febbraio 2021, pp. 789–801, DOI:10.1109/HPCA51647.2021.00071.
  30. ^ a b Emil Talpes, Compute Solution for Tesla's Full Self-Driving Computer, in IEEE Micro, vol. 40, n. 2, 24 marzo 2020, pp. 25–35, DOI:10.1109/MM.2020.2975764.
  31. ^ a b c (EN) Very Long Instruction Word (VLIW) Architecture, su geeksforgeeks.org, 1º dicembre 2020.
  32. ^ a b c AMD Technical Information Portal - Tools, su docs.amd.com.
  33. ^ AMD Technical Information Portal - AI engine compiler, su docs.amd.com.
  34. ^ AMD Technical Information Portal - AI Engine programming model, su docs.amd.com.
  35. ^ Vinod Kathail, Xilinx Vitis Unified Software Platform, in Proceedings of the 2020 ACM/SIGDA International Symposium on Field-Programmable Gate Arrays, Association for Computing Machinery, 24 febbraio 2020, pp. 173–174, DOI:10.1145/3373087.3375887.
  36. ^ a b Zhipeng Zhao, Using Vivado-HLS for Structural Design: a NoC Case Study (Abstract Only), in Proceedings of the 2017 ACM/SIGDA International Symposium on Field-Programmable Gate Arrays, Association for Computing Machinery, 22 febbraio 2017, p. 289, DOI:10.1145/3020078.3021772.
  37. ^ a b c Wenbo Zhang, EA4RCA: Efficient AIE accelerator design framework for regular Communication-Avoiding Algorithm, in ACM Trans. Archit. Code Optim., vol. 21, n. 4, 19 novembre 2024, pp. 71:1–71:24, DOI:10.1145/3678010.
  38. ^ a b Chris Lattner, MLIR: Scaling Compiler Infrastructure for Domain Specific Computation, in 2021 IEEE/ACM International Symposium on Code Generation and Optimization (CGO), 21 febbraio 2021, pp. 2–14, DOI:10.1109/CGO51591.2021.9370308.

Bibliografia

Collegamenti esterni

Kembali kehalaman sebelumnya