{"id":"https://openalex.org/W1997978901","doi":"https://doi.org/10.1145/2784731.2784754","title":"Generating performance portable code using rewrite rules: from high-level functional expressions to high-performance OpenCL code","display_name":"Generating performance portable code using rewrite rules: from high-level functional expressions to high-performance OpenCL code","publication_year":2015,"publication_date":"2015-08-26","ids":{"openalex":"https://openalex.org/W1997978901","doi":"https://doi.org/10.1145/2784731.2784754","mag":"1997978901"},"language":"en","primary_location":{"id":"doi:10.1145/2784731.2784754","is_oa":false,"landing_page_url":"https://doi.org/10.1145/2784731.2784754","pdf_url":null,"source":null,"license":null,"license_id":null,"version":"publishedVersion","is_accepted":true,"is_published":true,"raw_source_name":"Proceedings of the 20th ACM SIGPLAN International Conference on Functional Programming","raw_type":"proceedings-article"},"type":"article","indexed_in":["crossref"],"open_access":{"is_oa":true,"oa_status":"green","oa_url":"https://www.pure.ed.ac.uk/ws/files/19948074/gpu_rewrite.pdf","any_repository_has_fulltext":true},"authorships":[{"author_position":"first","author":{"id":"https://openalex.org/A5016319844","display_name":"Michel Steuwer","orcid":"https://orcid.org/0000-0001-5048-0741"},"institutions":[{"id":"https://openalex.org/I22465464","display_name":"University of M\u00fcnster","ror":"https://ror.org/00pd74e08","country_code":"DE","type":"education","lineage":["https://openalex.org/I22465464"]},{"id":"https://openalex.org/I98677209","display_name":"University of Edinburgh","ror":"https://ror.org/01nrxwf90","country_code":"GB","type":"education","lineage":["https://openalex.org/I98677209"]}],"countries":["DE","GB"],"is_corresponding":true,"raw_author_name":"Michel Steuwer","raw_affiliation_strings":["University of Edinburgh, UK / University of M\u00fcnster, Germany"],"affiliations":[{"raw_affiliation_string":"University of Edinburgh, UK / University of M\u00fcnster, Germany","institution_ids":["https://openalex.org/I22465464","https://openalex.org/I98677209"]}]},{"author_position":"middle","author":{"id":"https://openalex.org/A5012290201","display_name":"Christian Fensch","orcid":null},"institutions":[{"id":"https://openalex.org/I32062511","display_name":"Heriot-Watt University","ror":"https://ror.org/04mghma93","country_code":"GB","type":"education","lineage":["https://openalex.org/I32062511"]}],"countries":["GB"],"is_corresponding":false,"raw_author_name":"Christian Fensch","raw_affiliation_strings":["Heriot-Watt University, UK","Heriot Watt University, UK#TAB#"],"affiliations":[{"raw_affiliation_string":"Heriot-Watt University, UK","institution_ids":["https://openalex.org/I32062511"]},{"raw_affiliation_string":"Heriot Watt University, UK#TAB#","institution_ids":["https://openalex.org/I32062511"]}]},{"author_position":"middle","author":{"id":"https://openalex.org/A5061903791","display_name":"Sam Lindley","orcid":"https://orcid.org/0000-0002-1360-4714"},"institutions":[{"id":"https://openalex.org/I98677209","display_name":"University of Edinburgh","ror":"https://ror.org/01nrxwf90","country_code":"GB","type":"education","lineage":["https://openalex.org/I98677209"]}],"countries":["GB"],"is_corresponding":false,"raw_author_name":"Sam Lindley","raw_affiliation_strings":["University of Edinburgh, UK","University of Edinburgh (UK)"],"affiliations":[{"raw_affiliation_string":"University of Edinburgh, UK","institution_ids":["https://openalex.org/I98677209"]},{"raw_affiliation_string":"University of Edinburgh (UK)","institution_ids":["https://openalex.org/I98677209"]}]},{"author_position":"last","author":{"id":"https://openalex.org/A5050229154","display_name":"Christophe Dubach","orcid":"https://orcid.org/0000-0003-4811-2469"},"institutions":[{"id":"https://openalex.org/I98677209","display_name":"University of Edinburgh","ror":"https://ror.org/01nrxwf90","country_code":"GB","type":"education","lineage":["https://openalex.org/I98677209"]}],"countries":["GB"],"is_corresponding":false,"raw_author_name":"Christophe Dubach","raw_affiliation_strings":["University of Edinburgh, UK","University of Edinburgh (UK)"],"affiliations":[{"raw_affiliation_string":"University of Edinburgh, UK","institution_ids":["https://openalex.org/I98677209"]},{"raw_affiliation_string":"University of Edinburgh (UK)","institution_ids":["https://openalex.org/I98677209"]}]}],"institutions":[],"countries_distinct_count":2,"institutions_distinct_count":4,"corresponding_author_ids":["https://openalex.org/A5016319844"],"corresponding_institution_ids":["https://openalex.org/I22465464","https://openalex.org/I98677209"],"apc_list":null,"apc_paid":null,"fwci":14.5125,"has_fulltext":true,"cited_by_count":119,"citation_normalized_percentile":{"value":0.99291821,"is_in_top_1_percent":true,"is_in_top_10_percent":true},"cited_by_percentile_year":{"min":97,"max":100},"biblio":{"volume":null,"issue":null,"first_page":"205","last_page":"217"},"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.9998999834060669,"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.9998999834060669,"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/T10126","display_name":"Logic, programming, and type systems","score":0.9969000220298767,"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"}},{"id":"https://openalex.org/T12127","display_name":"Software System Performance and Reliability","score":0.995199978351593,"subfield":{"id":"https://openalex.org/subfields/1705","display_name":"Computer Networks and Communications"},"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/computer-science","display_name":"Computer science","score":0.8949817419052124},{"id":"https://openalex.org/keywords/software-portability","display_name":"Software portability","score":0.7926360964775085},{"id":"https://openalex.org/keywords/compiler","display_name":"Compiler","score":0.6914131045341492},{"id":"https://openalex.org/keywords/programming-language","display_name":"Programming language","score":0.6148105263710022},{"id":"https://openalex.org/keywords/code-generation","display_name":"Code generation","score":0.5812453031539917},{"id":"https://openalex.org/keywords/parallel-computing","display_name":"Parallel computing","score":0.556671679019928},{"id":"https://openalex.org/keywords/code","display_name":"Code (set theory)","score":0.5084351897239685},{"id":"https://openalex.org/keywords/multi-core-processor","display_name":"Multi-core processor","score":0.5040270686149597},{"id":"https://openalex.org/keywords/correctness","display_name":"Correctness","score":0.4827565550804138},{"id":"https://openalex.org/keywords/functional-programming","display_name":"Functional programming","score":0.45703282952308655},{"id":"https://openalex.org/keywords/instruction-set","display_name":"Instruction set","score":0.439973384141922},{"id":"https://openalex.org/keywords/programming-paradigm","display_name":"Programming paradigm","score":0.42767333984375},{"id":"https://openalex.org/keywords/benchmark","display_name":"Benchmark (surveying)","score":0.42063283920288086},{"id":"https://openalex.org/keywords/implementation","display_name":"Implementation","score":0.4186667501926422},{"id":"https://openalex.org/keywords/computer-architecture","display_name":"Computer architecture","score":0.34565573930740356},{"id":"https://openalex.org/keywords/set","display_name":"Set (abstract data type)","score":0.2982625961303711},{"id":"https://openalex.org/keywords/operating-system","display_name":"Operating system","score":0.1360706090927124}],"concepts":[{"id":"https://openalex.org/C41008148","wikidata":"https://www.wikidata.org/wiki/Q21198","display_name":"Computer science","level":0,"score":0.8949817419052124},{"id":"https://openalex.org/C63000827","wikidata":"https://www.wikidata.org/wiki/Q3080428","display_name":"Software portability","level":2,"score":0.7926360964775085},{"id":"https://openalex.org/C169590947","wikidata":"https://www.wikidata.org/wiki/Q47506","display_name":"Compiler","level":2,"score":0.6914131045341492},{"id":"https://openalex.org/C199360897","wikidata":"https://www.wikidata.org/wiki/Q9143","display_name":"Programming language","level":1,"score":0.6148105263710022},{"id":"https://openalex.org/C133162039","wikidata":"https://www.wikidata.org/wiki/Q1061077","display_name":"Code generation","level":3,"score":0.5812453031539917},{"id":"https://openalex.org/C173608175","wikidata":"https://www.wikidata.org/wiki/Q232661","display_name":"Parallel computing","level":1,"score":0.556671679019928},{"id":"https://openalex.org/C2776760102","wikidata":"https://www.wikidata.org/wiki/Q5139990","display_name":"Code (set theory)","level":3,"score":0.5084351897239685},{"id":"https://openalex.org/C78766204","wikidata":"https://www.wikidata.org/wiki/Q555032","display_name":"Multi-core processor","level":2,"score":0.5040270686149597},{"id":"https://openalex.org/C55439883","wikidata":"https://www.wikidata.org/wiki/Q360812","display_name":"Correctness","level":2,"score":0.4827565550804138},{"id":"https://openalex.org/C42383842","wikidata":"https://www.wikidata.org/wiki/Q193076","display_name":"Functional programming","level":2,"score":0.45703282952308655},{"id":"https://openalex.org/C202491316","wikidata":"https://www.wikidata.org/wiki/Q272683","display_name":"Instruction set","level":2,"score":0.439973384141922},{"id":"https://openalex.org/C34165917","wikidata":"https://www.wikidata.org/wiki/Q188267","display_name":"Programming paradigm","level":2,"score":0.42767333984375},{"id":"https://openalex.org/C185798385","wikidata":"https://www.wikidata.org/wiki/Q1161707","display_name":"Benchmark (surveying)","level":2,"score":0.42063283920288086},{"id":"https://openalex.org/C26713055","wikidata":"https://www.wikidata.org/wiki/Q245962","display_name":"Implementation","level":2,"score":0.4186667501926422},{"id":"https://openalex.org/C118524514","wikidata":"https://www.wikidata.org/wiki/Q173212","display_name":"Computer architecture","level":1,"score":0.34565573930740356},{"id":"https://openalex.org/C177264268","wikidata":"https://www.wikidata.org/wiki/Q1514741","display_name":"Set (abstract data type)","level":2,"score":0.2982625961303711},{"id":"https://openalex.org/C111919701","wikidata":"https://www.wikidata.org/wiki/Q9135","display_name":"Operating system","level":1,"score":0.1360706090927124},{"id":"https://openalex.org/C205649164","wikidata":"https://www.wikidata.org/wiki/Q1071","display_name":"Geography","level":0,"score":0.0},{"id":"https://openalex.org/C13280743","wikidata":"https://www.wikidata.org/wiki/Q131089","display_name":"Geodesy","level":1,"score":0.0},{"id":"https://openalex.org/C26517878","wikidata":"https://www.wikidata.org/wiki/Q228039","display_name":"Key (lock)","level":2,"score":0.0}],"mesh":[],"locations_count":5,"locations":[{"id":"doi:10.1145/2784731.2784754","is_oa":false,"landing_page_url":"https://doi.org/10.1145/2784731.2784754","pdf_url":null,"source":null,"license":null,"license_id":null,"version":"publishedVersion","is_accepted":true,"is_published":true,"raw_source_name":"Proceedings of the 20th ACM SIGPLAN International Conference on Functional Programming","raw_type":"proceedings-article"},{"id":"pmh:oai:eprints.gla.ac.uk:146605","is_oa":false,"landing_page_url":null,"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":false,"is_in_doaj":true,"is_core":false,"host_organization":null,"host_organization_name":null,"host_organization_lineage":[],"host_organization_lineage_names":[],"type":"journal"},"license":null,"license_id":null,"version":"acceptedVersion","is_accepted":true,"is_published":false,"raw_source_name":"","raw_type":"Conference Proceedings"},{"id":"pmh:oai:pure.ed.ac.uk:publications/fec6df64-6c0e-4129-a367-0e8156e6c2b4","is_oa":true,"landing_page_url":"https://dl.acm.org/doi/10.1145/2784731.2784754","pdf_url":"https://www.pure.ed.ac.uk/ws/files/19948074/gpu_rewrite.pdf","source":{"id":"https://openalex.org/S4406922455","display_name":"Edinburgh Research Explorer","issn_l":null,"issn":null,"is_oa":false,"is_in_doaj":false,"is_core":false,"host_organization":null,"host_organization_name":null,"host_organization_lineage":[],"host_organization_lineage_names":[],"type":"repository"},"license":null,"license_id":null,"version":"submittedVersion","is_accepted":false,"is_published":false,"raw_source_name":"","raw_type":""},{"id":"pmh:oai:CiteSeerX.psu:10.1.1.714.5018","is_oa":false,"landing_page_url":"http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.714.5018","pdf_url":null,"source":null,"license":null,"license_id":null,"version":"submittedVersion","is_accepted":false,"is_published":false,"raw_source_name":"http://homepages.inf.ed.ac.uk/slindley/papers/gpu-rewrite.pdf","raw_type":"text"},{"id":"pmh:oai:pure.ed.ac.uk:openaire/fec6df64-6c0e-4129-a367-0e8156e6c2b4","is_oa":true,"landing_page_url":"https://www.research.ed.ac.uk/en/publications/fec6df64-6c0e-4129-a367-0e8156e6c2b4","pdf_url":null,"source":{"id":"https://openalex.org/S4406922455","display_name":"Edinburgh Research Explorer","issn_l":null,"issn":null,"is_oa":false,"is_in_doaj":false,"is_core":false,"host_organization":null,"host_organization_name":null,"host_organization_lineage":[],"host_organization_lineage_names":[],"type":"repository"},"license":"other-oa","license_id":"https://openalex.org/licenses/other-oa","version":"submittedVersion","is_accepted":false,"is_published":false,"raw_source_name":"Steuwer, M, Fensch, C, Lindley, S & Dubach, C 2015, Generating Performance Portable Code using Rewrite Rules: From High-Level Functional Expressions to High-Performance OpenCL Code. in Proceedings of the 20th ACM SIGPLAN International Conference on Functional Programming. ACM SIGPLAN Notices, no. 9, vol. 50, Vancouver, BC, Canada, pp. 205-217, 20th ACM SIGPLAN International Conference on Functional Programming, Vancouver, British Columbia, Canada, 31/08/15. https://doi.org/10.1145/2784731.2784754","raw_type":"contributionToPeriodical"}],"best_oa_location":{"id":"pmh:oai:pure.ed.ac.uk:publications/fec6df64-6c0e-4129-a367-0e8156e6c2b4","is_oa":true,"landing_page_url":"https://dl.acm.org/doi/10.1145/2784731.2784754","pdf_url":"https://www.pure.ed.ac.uk/ws/files/19948074/gpu_rewrite.pdf","source":{"id":"https://openalex.org/S4406922455","display_name":"Edinburgh Research Explorer","issn_l":null,"issn":null,"is_oa":false,"is_in_doaj":false,"is_core":false,"host_organization":null,"host_organization_name":null,"host_organization_lineage":[],"host_organization_lineage_names":[],"type":"repository"},"license":null,"license_id":null,"version":"submittedVersion","is_accepted":false,"is_published":false,"raw_source_name":"","raw_type":""},"sustainable_development_goals":[],"awards":[{"id":"https://openalex.org/G1798638720","display_name":"From Data Types to Session Types---A Basis for Concurrency and Distribution","funder_award_id":"EP/K034413/1","funder_id":"https://openalex.org/F4320334627","funder_display_name":"Engineering and Physical Sciences Research Council"},{"id":"https://openalex.org/G5811753289","display_name":null,"funder_award_id":"EP/M507258/1","funder_id":"https://openalex.org/F4320334627","funder_display_name":"Engineering and Physical Sciences Research Council"},{"id":"https://openalex.org/G7918631928","display_name":null,"funder_award_id":"EP/K034413/1","funder_id":"https://openalex.org/F4320334627","funder_display_name":"Engineering and Physical Sciences Research Council"}],"funders":[{"id":"https://openalex.org/F4320320005","display_name":"Royal Academy of Engineering","ror":"https://ror.org/0526snb40"},{"id":"https://openalex.org/F4320334627","display_name":"Engineering and Physical Sciences Research Council","ror":"https://ror.org/0439y7842"}],"has_content":{"grobid_xml":true,"pdf":true},"content_urls":{"pdf":"https://content.openalex.org/works/W1997978901.pdf","grobid_xml":"https://content.openalex.org/works/W1997978901.grobid-xml"},"referenced_works_count":45,"referenced_works":["https://openalex.org/W84930537","https://openalex.org/W1489689515","https://openalex.org/W1502641600","https://openalex.org/W1558180172","https://openalex.org/W1568192366","https://openalex.org/W1574790150","https://openalex.org/W1607380961","https://openalex.org/W2000873501","https://openalex.org/W2005192022","https://openalex.org/W2014325923","https://openalex.org/W2016888570","https://openalex.org/W2039227678","https://openalex.org/W2055312318","https://openalex.org/W2058692170","https://openalex.org/W2061313045","https://openalex.org/W2065887019","https://openalex.org/W2077143534","https://openalex.org/W2080592089","https://openalex.org/W2081124914","https://openalex.org/W2081418732","https://openalex.org/W2083310717","https://openalex.org/W2102262922","https://openalex.org/W2104958979","https://openalex.org/W2107096626","https://openalex.org/W2108464053","https://openalex.org/W2112866468","https://openalex.org/W2115148068","https://openalex.org/W2127907012","https://openalex.org/W2130179171","https://openalex.org/W2135106356","https://openalex.org/W2136952590","https://openalex.org/W2138163628","https://openalex.org/W2140375692","https://openalex.org/W2146123953","https://openalex.org/W2147654959","https://openalex.org/W2149234156","https://openalex.org/W2157089785","https://openalex.org/W2164106630","https://openalex.org/W2170631546","https://openalex.org/W2170634604","https://openalex.org/W2173213060","https://openalex.org/W2258596252","https://openalex.org/W2402849745","https://openalex.org/W3149591378","https://openalex.org/W4300937065"],"related_works":["https://openalex.org/W2127497159","https://openalex.org/W2111416043","https://openalex.org/W76619263","https://openalex.org/W3004782279","https://openalex.org/W4243399827","https://openalex.org/W3169832545","https://openalex.org/W4296878212","https://openalex.org/W1585224757","https://openalex.org/W4234789292","https://openalex.org/W2286281461"],"abstract_inverted_index":{"Computers":[0],"have":[1],"become":[2],"increasingly":[3],"complex":[4],"with":[5,143,149,202],"the":[6,24,69,111,158,161],"emergence":[7],"of":[8,26,71,98,127,160],"heterogeneous":[9],"hardware":[10],"combining":[11],"multicore":[12,207],"CPUs":[13,208],"and":[14,36,85,209],"GPUs.":[15],"These":[16],"parallel":[17],"systems":[18],"exhibit":[19],"tremendous":[20],"computational":[21],"power":[22],"at":[23,68],"cost":[25],"increased":[27],"programming":[28,113],"effort":[29],"resulting":[30],"in":[31,44,59,168],"a":[32,45,60,75,89,95,105,125,144,150,172,200],"tension":[33],"between":[34],"performance":[35,55,177,198],"code":[37,40,83,118,205],"portability.":[38],"Typically,":[39],"is":[41,57,119],"either":[42],"tuned":[43,204],"low-level":[46,106],"imperative":[47,178],"language":[48,64],"using":[49],"hardware-specific":[50,136,189],"optimizations":[51],"to":[52,65,79,101,110,134,156],"achieve":[53,66],"maximum":[54],"or":[56],"written":[58,211],"high-level,":[61],"possibly":[62],"functional,":[63],"portability":[67],"expense":[70],"performance.":[72],"We":[73,139,164],"propose":[74],"novel":[76],"approach":[77],"aiming":[78],"combine":[80],"high-level":[81,90,194],"programming,":[82],"portability,":[84],"high-performance.":[86],"Starting":[87],"from":[88,115,191],"functional":[91,107,193],"expression":[92],"we":[93,131,154,185],"apply":[94],"simple":[96,192],"set":[97],"rewrite":[99,122,162],"rules":[100,123],"transform":[102],"it":[103],"into":[104],"representation,":[108],"close":[109],"OpenCL":[112,117,137,179],"model,":[114],"which":[116,130,153,174],"generated.":[120],"Our":[121,181],"define":[124],"space":[126],"possible":[128],"implementations":[129,190],"automatically":[132,187],"explore":[133],"generate":[135],"implementations.":[138],"formalize":[140],"our":[141,166],"system":[142],"core":[145],"dependently-typed":[146],"lambda-calculus":[147],"along":[148],"denotational":[151],"semantics":[152],"use":[155],"prove":[157],"correctness":[159],"rules.":[163],"test":[165],"design":[167],"practice":[169],"by":[170,212],"implementing":[171],"compiler":[173],"generates":[175],"high":[176],"code.":[180],"experiments":[182],"show":[183],"that":[184],"can":[186],"derive":[188],"algorithmic":[195],"expressions":[196],"offering":[197],"on":[199],"par":[201],"highly":[203],"for":[206],"GPUs":[210],"experts.":[213]},"counts_by_year":[{"year":2025,"cited_by_count":4},{"year":2024,"cited_by_count":6},{"year":2023,"cited_by_count":6},{"year":2022,"cited_by_count":13},{"year":2021,"cited_by_count":9},{"year":2020,"cited_by_count":12},{"year":2019,"cited_by_count":25},{"year":2018,"cited_by_count":12},{"year":2017,"cited_by_count":14},{"year":2016,"cited_by_count":14},{"year":2015,"cited_by_count":4}],"updated_date":"2026-04-05T17:49:38.594831","created_date":"2025-10-10T00:00:00"}
