Högnivåsyntesen (HLS) utlovar en betydande förkortning av FPGA-designcykeln genom att höja abstraktionsnivån för designingången till språk på hög nivå såsom C/C++. Men applikationer som använder dynamiska, pekarbaserade datastrukturer och dynamisk minnesallokering är fortfarande svåra att genomföra väl, men sådana konstruktioner används i stor utsträckning i programvara. Automatiserade optimeringar som utnyttjar FPGA:s minnesbandbredd genom att distribuera applikationsdata över separata banker av on-chip-minne är ofta ineffektiva i närvaro av dynamiska datastrukturer på grund av bristen på en automatiserad analys av pekarbaserade minnesåtkomster. I detta arbete tar vi ett steg mot att minska denna klyfta. Vi presenterar en statisk analys för pekarmanipuleringsprogram som automatiskt delar upp högallokerade datastrukturer i separata, oberoende regioner. Analysen drar nytta av de senaste framstegen i separationslogiken, en teoretisk ram för resonemang om högallokerade data som framgångsrikt har tillämpats i de senaste verktygen för programvaruverifiering. Vår algoritm fokuserar på dynamiska datastrukturer som nås i slingor och åtföljs av automatiserade omvandlingar från källa till källa som möjliggör automatisk parallellisering av slingor och minnespartitionering genom offthe-shelf HLS-verktyg. Vi demonstrerar den framgångsrika loopparallaliseringen och minnespartitionen genom vårt verktygsflöde med hjälp av tre verkliga applikationer som bygger, korsar, uppdaterar och avyttrar dynamiskt fördelade datastrukturer. Våra fallstudier, som jämför den automatiskt parallelliserade till de direkta HLS-implementationer, visar en genomsnittlig latent minskning med en faktor på 2× över våra riktmärken.
Separation logik används i REF för statisk analys och transformation möjliggör parallellisering av program med dynamiska datastrukturer och pekarbaserade minnesåtkomster.
Separation Logic for High-Level Synthesis
{'venue': 'TRETS', 'journal': None, 'mag_field_of_study': ['Computer Science']}