{"id":"https://openalex.org/W7133233636","doi":"https://doi.org/10.1007/s10766-025-00809-z","title":"Optimising Stencil Code on FPGAs by Trading Data Movement for Compute using Compiler Rewrite Rules","display_name":"Optimising Stencil Code on FPGAs by Trading Data Movement for Compute using Compiler Rewrite Rules","publication_year":2026,"publication_date":"2026-03-02","ids":{"openalex":"https://openalex.org/W7133233636","doi":"https://doi.org/10.1007/s10766-025-00809-z"},"language":"en","primary_location":{"id":"doi:10.1007/s10766-025-00809-z","is_oa":true,"landing_page_url":"https://doi.org/10.1007/s10766-025-00809-z","pdf_url":"https://link.springer.com/content/pdf/10.1007/s10766-025-00809-z.pdf","source":{"id":"https://openalex.org/S148521650","display_name":"International Journal of Parallel Programming","issn_l":"0885-7458","issn":["0885-7458","1573-7640"],"is_oa":false,"is_in_doaj":false,"is_core":true,"host_organization":"https://openalex.org/P4310319900","host_organization_name":"Springer Science+Business Media","host_organization_lineage":["https://openalex.org/P4310319900","https://openalex.org/P4310319965"],"host_organization_lineage_names":["Springer Science+Business Media","Springer Nature"],"type":"journal"},"license":"cc-by","license_id":"https://openalex.org/licenses/cc-by","version":"publishedVersion","is_accepted":true,"is_published":true,"raw_source_name":"International Journal of Parallel Programming","raw_type":"journal-article"},"type":"article","indexed_in":["crossref"],"open_access":{"is_oa":true,"oa_status":"hybrid","oa_url":"https://link.springer.com/content/pdf/10.1007/s10766-025-00809-z.pdf","any_repository_has_fulltext":true},"authorships":[{"author_position":"first","author":{"id":"https://openalex.org/A5018480227","display_name":"Robert Szafarczyk","orcid":"https://orcid.org/0009-0007-8883-1747"},"institutions":[{"id":"https://openalex.org/I7882870","display_name":"University of Glasgow","ror":"https://ror.org/00vtgdb53","country_code":"GB","type":"education","lineage":["https://openalex.org/I7882870"]}],"countries":["GB"],"is_corresponding":false,"raw_author_name":"Robert Szafarczyk","raw_affiliation_strings":["School of Computing Science, University of Glasgow, Glasgow, UK"],"raw_orcid":null,"affiliations":[{"raw_affiliation_string":"School of Computing Science, University of Glasgow, Glasgow, UK","institution_ids":["https://openalex.org/I7882870"]}]},{"author_position":"middle","author":{"id":"https://openalex.org/A5075369228","display_name":"Syed Waqar Nabi","orcid":"https://orcid.org/0000-0003-3835-4851"},"institutions":[{"id":"https://openalex.org/I7882870","display_name":"University of Glasgow","ror":"https://ror.org/00vtgdb53","country_code":"GB","type":"education","lineage":["https://openalex.org/I7882870"]}],"countries":["GB"],"is_corresponding":false,"raw_author_name":"Syed Waqar Nabi","raw_affiliation_strings":["School of Computing Science, University of Glasgow, Glasgow, UK"],"raw_orcid":null,"affiliations":[{"raw_affiliation_string":"School of Computing Science, University of Glasgow, Glasgow, UK","institution_ids":["https://openalex.org/I7882870"]}]},{"author_position":"last","author":{"id":"https://openalex.org/A5127840787","display_name":"Wim Vanderbauwhede","orcid":null},"institutions":[{"id":"https://openalex.org/I7882870","display_name":"University of Glasgow","ror":"https://ror.org/00vtgdb53","country_code":"GB","type":"education","lineage":["https://openalex.org/I7882870"]}],"countries":["GB"],"is_corresponding":true,"raw_author_name":"Wim Vanderbauwhede","raw_affiliation_strings":["School of Computing Science, University of Glasgow, Glasgow, UK"],"raw_orcid":null,"affiliations":[{"raw_affiliation_string":"School of Computing Science, University of Glasgow, Glasgow, UK","institution_ids":["https://openalex.org/I7882870"]}]}],"institutions":[],"countries_distinct_count":1,"institutions_distinct_count":1,"corresponding_author_ids":["https://openalex.org/A5127840787"],"corresponding_institution_ids":["https://openalex.org/I7882870"],"apc_list":{"value":2990,"currency":"USD","value_usd":2990},"apc_paid":{"value":2990,"currency":"USD","value_usd":2990},"fwci":0.0,"has_fulltext":true,"cited_by_count":0,"citation_normalized_percentile":{"value":0.13570336,"is_in_top_1_percent":false,"is_in_top_10_percent":false},"cited_by_percentile_year":null,"biblio":{"volume":"54","issue":"1-2","first_page":null,"last_page":null},"is_retracted":false,"is_paratext":false,"is_xpac":false,"primary_topic":{"id":"https://openalex.org/T10054","display_name":"Parallel Computing and Optimization Techniques","score":0.4562000036239624,"subfield":{"id":"https://openalex.org/subfields/1708","display_name":"Hardware and Architecture"},"field":{"id":"https://openalex.org/fields/17","display_name":"Computer Science"},"domain":{"id":"https://openalex.org/domains/3","display_name":"Physical Sciences"}},"topics":[{"id":"https://openalex.org/T10054","display_name":"Parallel Computing and Optimization Techniques","score":0.4562000036239624,"subfield":{"id":"https://openalex.org/subfields/1708","display_name":"Hardware and Architecture"},"field":{"id":"https://openalex.org/fields/17","display_name":"Computer Science"},"domain":{"id":"https://openalex.org/domains/3","display_name":"Physical Sciences"}},{"id":"https://openalex.org/T11697","display_name":"Numerical Methods and Algorithms","score":0.1720000058412552,"subfield":{"id":"https://openalex.org/subfields/1703","display_name":"Computational Theory and Mathematics"},"field":{"id":"https://openalex.org/fields/17","display_name":"Computer Science"},"domain":{"id":"https://openalex.org/domains/3","display_name":"Physical Sciences"}},{"id":"https://openalex.org/T10126","display_name":"Logic, programming, and type systems","score":0.16609999537467957,"subfield":{"id":"https://openalex.org/subfields/1702","display_name":"Artificial Intelligence"},"field":{"id":"https://openalex.org/fields/17","display_name":"Computer Science"},"domain":{"id":"https://openalex.org/domains/3","display_name":"Physical Sciences"}}],"keywords":[{"id":"https://openalex.org/keywords/stencil","display_name":"Stencil","score":0.8981999754905701},{"id":"https://openalex.org/keywords/compiler","display_name":"Compiler","score":0.7477999925613403},{"id":"https://openalex.org/keywords/fortran","display_name":"Fortran","score":0.6953999996185303},{"id":"https://openalex.org/keywords/field-programmable-gate-array","display_name":"Field-programmable gate array","score":0.4968000054359436},{"id":"https://openalex.org/keywords/transformation","display_name":"Transformation (genetics)","score":0.40700000524520874},{"id":"https://openalex.org/keywords/set","display_name":"Set (abstract data type)","score":0.3944999873638153},{"id":"https://openalex.org/keywords/code","display_name":"Code (set theory)","score":0.3675999939441681},{"id":"https://openalex.org/keywords/reduction","display_name":"Reduction (mathematics)","score":0.3296000063419342},{"id":"https://openalex.org/keywords/digital-signal-processing","display_name":"Digital signal processing","score":0.32249999046325684}],"concepts":[{"id":"https://openalex.org/C76752949","wikidata":"https://www.wikidata.org/wiki/Q7607499","display_name":"Stencil","level":2,"score":0.8981999754905701},{"id":"https://openalex.org/C41008148","wikidata":"https://www.wikidata.org/wiki/Q21198","display_name":"Computer science","level":0,"score":0.8561999797821045},{"id":"https://openalex.org/C169590947","wikidata":"https://www.wikidata.org/wiki/Q47506","display_name":"Compiler","level":2,"score":0.7477999925613403},{"id":"https://openalex.org/C2778241615","wikidata":"https://www.wikidata.org/wiki/Q83303","display_name":"Fortran","level":2,"score":0.6953999996185303},{"id":"https://openalex.org/C173608175","wikidata":"https://www.wikidata.org/wiki/Q232661","display_name":"Parallel computing","level":1,"score":0.6818000078201294},{"id":"https://openalex.org/C42935608","wikidata":"https://www.wikidata.org/wiki/Q190411","display_name":"Field-programmable gate array","level":2,"score":0.4968000054359436},{"id":"https://openalex.org/C204241405","wikidata":"https://www.wikidata.org/wiki/Q461499","display_name":"Transformation (genetics)","level":3,"score":0.40700000524520874},{"id":"https://openalex.org/C177264268","wikidata":"https://www.wikidata.org/wiki/Q1514741","display_name":"Set (abstract data type)","level":2,"score":0.3944999873638153},{"id":"https://openalex.org/C2776760102","wikidata":"https://www.wikidata.org/wiki/Q5139990","display_name":"Code (set theory)","level":3,"score":0.3675999939441681},{"id":"https://openalex.org/C111335779","wikidata":"https://www.wikidata.org/wiki/Q3454686","display_name":"Reduction (mathematics)","level":2,"score":0.3296000063419342},{"id":"https://openalex.org/C84462506","wikidata":"https://www.wikidata.org/wiki/Q173142","display_name":"Digital signal processing","level":2,"score":0.32249999046325684},{"id":"https://openalex.org/C185798385","wikidata":"https://www.wikidata.org/wiki/Q1161707","display_name":"Benchmark (surveying)","level":2,"score":0.32010000944137573},{"id":"https://openalex.org/C2778514511","wikidata":"https://www.wikidata.org/wiki/Q1374194","display_name":"Programmer","level":2,"score":0.31949999928474426},{"id":"https://openalex.org/C26517878","wikidata":"https://www.wikidata.org/wiki/Q228039","display_name":"Key (lock)","level":2,"score":0.31869998574256897},{"id":"https://openalex.org/C115537543","wikidata":"https://www.wikidata.org/wiki/Q165596","display_name":"Cache","level":2,"score":0.29429998993873596},{"id":"https://openalex.org/C459310","wikidata":"https://www.wikidata.org/wiki/Q117801","display_name":"Computational science","level":1,"score":0.2883000075817108},{"id":"https://openalex.org/C199360897","wikidata":"https://www.wikidata.org/wiki/Q9143","display_name":"Programming language","level":1,"score":0.28380000591278076},{"id":"https://openalex.org/C2777062904","wikidata":"https://www.wikidata.org/wiki/Q545406","display_name":"Toolchain","level":3,"score":0.2831999957561493},{"id":"https://openalex.org/C74912251","wikidata":"https://www.wikidata.org/wiki/Q6815727","display_name":"Memory footprint","level":2,"score":0.2791999876499176},{"id":"https://openalex.org/C83283714","wikidata":"https://www.wikidata.org/wiki/Q121117","display_name":"Supercomputer","level":2,"score":0.2768000066280365},{"id":"https://openalex.org/C45374587","wikidata":"https://www.wikidata.org/wiki/Q12525525","display_name":"Computation","level":2,"score":0.2759000062942505},{"id":"https://openalex.org/C2778361913","wikidata":"https://www.wikidata.org/wiki/Q7248437","display_name":"Program transformation","level":2,"score":0.2687000036239624},{"id":"https://openalex.org/C2778770139","wikidata":"https://www.wikidata.org/wiki/Q1966904","display_name":"Solver","level":2,"score":0.2680000066757202},{"id":"https://openalex.org/C96147967","wikidata":"https://www.wikidata.org/wiki/Q190686","display_name":"Subroutine","level":2,"score":0.2678000032901764},{"id":"https://openalex.org/C12186640","wikidata":"https://www.wikidata.org/wiki/Q6815743","display_name":"Memory model","level":3,"score":0.266400009393692},{"id":"https://openalex.org/C106131492","wikidata":"https://www.wikidata.org/wiki/Q3072260","display_name":"Filter (signal processing)","level":2,"score":0.2615000009536743}],"mesh":[],"locations_count":2,"locations":[{"id":"doi:10.1007/s10766-025-00809-z","is_oa":true,"landing_page_url":"https://doi.org/10.1007/s10766-025-00809-z","pdf_url":"https://link.springer.com/content/pdf/10.1007/s10766-025-00809-z.pdf","source":{"id":"https://openalex.org/S148521650","display_name":"International Journal of Parallel Programming","issn_l":"0885-7458","issn":["0885-7458","1573-7640"],"is_oa":false,"is_in_doaj":false,"is_core":true,"host_organization":"https://openalex.org/P4310319900","host_organization_name":"Springer Science+Business Media","host_organization_lineage":["https://openalex.org/P4310319900","https://openalex.org/P4310319965"],"host_organization_lineage_names":["Springer Science+Business Media","Springer Nature"],"type":"journal"},"license":"cc-by","license_id":"https://openalex.org/licenses/cc-by","version":"publishedVersion","is_accepted":true,"is_published":true,"raw_source_name":"International Journal of Parallel Programming","raw_type":"journal-article"},{"id":"pmh:oai:eprints.gla.ac.uk:376405","is_oa":true,"landing_page_url":"https://eprints.gla.ac.uk/view/author/65491.html>,","pdf_url":null,"source":{"id":"https://openalex.org/S4210235606","display_name":"ENLIGHTEN (Jurnal Bimbingan dan Konseling Islam)","issn_l":"2622-8912","issn":["2622-8912","2622-8920"],"is_oa":true,"is_in_doaj":true,"is_core":false,"host_organization":null,"host_organization_name":null,"host_organization_lineage":[],"host_organization_lineage_names":[],"type":"journal"},"license":"cc-by-sa","license_id":"https://openalex.org/licenses/cc-by-sa","version":"acceptedVersion","is_accepted":true,"is_published":false,"raw_source_name":null,"raw_type":"Articles"}],"best_oa_location":{"id":"doi:10.1007/s10766-025-00809-z","is_oa":true,"landing_page_url":"https://doi.org/10.1007/s10766-025-00809-z","pdf_url":"https://link.springer.com/content/pdf/10.1007/s10766-025-00809-z.pdf","source":{"id":"https://openalex.org/S148521650","display_name":"International Journal of Parallel Programming","issn_l":"0885-7458","issn":["0885-7458","1573-7640"],"is_oa":false,"is_in_doaj":false,"is_core":true,"host_organization":"https://openalex.org/P4310319900","host_organization_name":"Springer Science+Business Media","host_organization_lineage":["https://openalex.org/P4310319900","https://openalex.org/P4310319965"],"host_organization_lineage_names":["Springer Science+Business Media","Springer Nature"],"type":"journal"},"license":"cc-by","license_id":"https://openalex.org/licenses/cc-by","version":"publishedVersion","is_accepted":true,"is_published":true,"raw_source_name":"International Journal of Parallel Programming","raw_type":"journal-article"},"sustainable_development_goals":[{"display_name":"Sustainable cities and communities","id":"https://metadata.un.org/sdg/11","score":0.773827075958252}],"awards":[{"id":"https://openalex.org/G4574710077","display_name":null,"funder_award_id":"00855959","funder_id":"https://openalex.org/F4320334627","funder_display_name":"Engineering and Physical Sciences Research Council"}],"funders":[{"id":"https://openalex.org/F4320334627","display_name":"Engineering and Physical Sciences Research Council","ror":"https://ror.org/0439y7842"}],"has_content":{"pdf":true,"grobid_xml":true},"content_urls":{"pdf":"https://content.openalex.org/works/W7133233636.pdf","grobid_xml":"https://content.openalex.org/works/W7133233636.grobid-xml"},"referenced_works_count":35,"referenced_works":["https://openalex.org/W224992144","https://openalex.org/W1480183640","https://openalex.org/W1716417268","https://openalex.org/W1968935261","https://openalex.org/W1976721730","https://openalex.org/W2002871272","https://openalex.org/W2003798513","https://openalex.org/W2012827905","https://openalex.org/W2078113878","https://openalex.org/W2084917734","https://openalex.org/W2124304012","https://openalex.org/W2133113860","https://openalex.org/W2134573462","https://openalex.org/W2145108549","https://openalex.org/W2154078685","https://openalex.org/W2168795429","https://openalex.org/W2479997015","https://openalex.org/W2517689844","https://openalex.org/W2585164556","https://openalex.org/W2790684706","https://openalex.org/W2800663209","https://openalex.org/W2891447580","https://openalex.org/W2899691047","https://openalex.org/W2963541958","https://openalex.org/W2987684178","https://openalex.org/W2988155571","https://openalex.org/W3007436455","https://openalex.org/W3108085245","https://openalex.org/W3138353446","https://openalex.org/W3152199537","https://openalex.org/W3180904400","https://openalex.org/W3213009109","https://openalex.org/W4249968602","https://openalex.org/W4251637954","https://openalex.org/W4280623011"],"related_works":[],"abstract_inverted_index":{"Abstract":[0],"FPGAs":[1,31],"are":[2],"promising":[3],"accelerators":[4],"for":[5,13,19,73,189],"scientific":[6,42],"computing":[7],"tasks":[8],"because":[9],"of":[10,35,58,78,84,107,122,134,140,210],"their":[11],"potential":[12],"delivering":[14],"high":[15],"performance-per-Watt.":[16],"However,":[17],"programming":[18],"optimal":[20],"performance":[21,233],"remains":[22],"a":[23,50,64,82,138,161,167,174,182,208,236,243],"complex":[24],"task.":[25],"Our":[26,155],"goal":[27],"is":[28,81,224],"to":[29,53,117,127],"bring":[30],"within":[32],"the":[33,92,105,115,132,185,204,220,228],"reach":[34],"domain":[36,247],"scientists":[37],"by":[38,207],"developing":[39],"compilers":[40],"targeting":[41],"Fortran":[43,61,222,230],"code.":[44],"In":[45],"this":[46,79],"paper,":[47],"we":[48],"present":[49],"novel":[51],"approach":[52,136],"aggressively":[54],"reduce":[55],"memory":[56,71,108,205],"utilisation":[57],"stencil-based":[59],"finite-difference":[60],"code":[62],"through":[63],"compiler-based":[65],"automatic":[66],"program":[67],"transformation":[68,156],"that":[69,88,192],"trades":[70],"accesses":[72],"computation.":[74],"The":[75,110,213],"key":[76],"contribution":[77],"work":[80],"set":[83,139],"type-driven":[85],"rewrite":[86],"rules":[87],"identify":[89],"and":[90,98,124,126,143,173,232],"eliminate":[91],"intermediate":[93,198],"arrays":[94,199],"in":[95,114,160,164,170,177,201],"stencil":[96,119,145],"computations":[97],"replace":[99],"them":[100],"with":[101,235],"re-computation,":[102],"thus":[103],"reducing":[104,203],"number":[106],"accesses.":[109],"main":[111],"novelty":[112],"lies":[113],"transformations":[116],"move":[118],"operations":[120],"out":[121],"maps":[123],"folds":[125],"fuse":[128],"stencils.":[129],"We":[130,179],"demonstrate":[131],"effectiveness":[133],"our":[135,193],"using":[137],"five":[141],"3-D":[142],"2-D":[144],"benchmarks":[146],"evaluated":[147],"on":[148,158,181],"an":[149],"Intel":[150],"Arria":[151],"10":[152],"FPGA":[153,215,239],"board.":[154],"result":[157],"average":[159],"$$2.5\\times$$":[162],"reduction":[163],"DRAM":[165],"usage,":[166,172],"$$3.4\\times$$":[168],"increase":[169],"DSP":[171],"$$25\\times$$":[175],"improvement":[176],"throughput.":[178],"show":[180],"real-world":[183],"exemplar,":[184],"Large":[186],"Eddy":[187],"Simulator":[188],"Urban":[190],"Flows,":[191],"algorithm":[194],"successfully":[195],"removes":[196],"all":[197],"(18":[200],"total),":[202],"footprint":[206],"factor":[209],"$$4.5\\times$$":[211],".":[212],"memory-reduced":[214],"code,":[216,231],"automatically":[217],"transpiled":[218],"from":[219],"original":[221,229],"source,":[223],"$$9.7\\times$$":[225],"faster":[226],"than":[227],"competitive":[234],"hand":[237],"optimised":[238],"version":[240],"while":[241],"supporting":[242],"four":[244],"times":[245],"larger":[246],"size.":[248]},"counts_by_year":[],"updated_date":"2026-08-23T07:36:19.812096","created_date":"2026-03-03T00:00:00"}
