{"id":"https://openalex.org/W3041213087","doi":"https://doi.org/10.1007/s10766-020-00667-x","title":"Refactoring GrPPI: Generic Refactoring for Generic Parallelism in C++","display_name":"Refactoring GrPPI: Generic Refactoring for Generic Parallelism in C++","publication_year":2020,"publication_date":"2020-07-10","ids":{"openalex":"https://openalex.org/W3041213087","doi":"https://doi.org/10.1007/s10766-020-00667-x","mag":"3041213087"},"language":"en","primary_location":{"id":"doi:10.1007/s10766-020-00667-x","is_oa":true,"landing_page_url":"https://doi.org/10.1007/s10766-020-00667-x","pdf_url":"https://link.springer.com/content/pdf/10.1007/s10766-020-00667-x.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-020-00667-x.pdf","any_repository_has_fulltext":true},"authorships":[{"author_position":"first","author":{"id":"https://openalex.org/A5063492775","display_name":"Christopher Brown","orcid":"https://orcid.org/0000-0001-6030-2885"},"institutions":[{"id":"https://openalex.org/I16835326","display_name":"University of St Andrews","ror":"https://ror.org/02wn5qz54","country_code":"GB","type":"education","lineage":["https://openalex.org/I16835326"]}],"countries":["GB"],"is_corresponding":true,"raw_author_name":"Christopher Brown","raw_affiliation_strings":["School of Computer Science, University of St Andrews, St Andrews, UK"],"affiliations":[{"raw_affiliation_string":"School of Computer Science, University of St Andrews, St Andrews, UK","institution_ids":["https://openalex.org/I16835326"]}]},{"author_position":"middle","author":{"id":"https://openalex.org/A5102807884","display_name":"Vladimir Janjic","orcid":"https://orcid.org/0000-0001-5134-9032"},"institutions":[{"id":"https://openalex.org/I177639307","display_name":"University of Dundee","ror":"https://ror.org/03h2bxq36","country_code":"GB","type":"education","lineage":["https://openalex.org/I177639307"]}],"countries":["GB"],"is_corresponding":false,"raw_author_name":"Vladimir Janjic","raw_affiliation_strings":["School of Science and Engineering, University of Dundee, Dundee, UK"],"affiliations":[{"raw_affiliation_string":"School of Science and Engineering, University of Dundee, Dundee, UK","institution_ids":["https://openalex.org/I177639307"]}]},{"author_position":"middle","author":{"id":"https://openalex.org/A5056270312","display_name":"Adam D. Barwell","orcid":"https://orcid.org/0000-0003-1236-7160"},"institutions":[{"id":"https://openalex.org/I16835326","display_name":"University of St Andrews","ror":"https://ror.org/02wn5qz54","country_code":"GB","type":"education","lineage":["https://openalex.org/I16835326"]}],"countries":["GB"],"is_corresponding":false,"raw_author_name":"Adam D. Barwell","raw_affiliation_strings":["School of Computer Science, University of St Andrews, St Andrews, UK"],"affiliations":[{"raw_affiliation_string":"School of Computer Science, University of St Andrews, St Andrews, UK","institution_ids":["https://openalex.org/I16835326"]}]},{"author_position":"middle","author":{"id":"https://openalex.org/A5100747301","display_name":"J. Daniel Garc\u00eda","orcid":"https://orcid.org/0000-0002-1873-9706"},"institutions":[{"id":"https://openalex.org/I50357001","display_name":"Universidad Carlos III de Madrid","ror":"https://ror.org/03ths8210","country_code":"ES","type":"education","lineage":["https://openalex.org/I50357001"]}],"countries":["ES"],"is_corresponding":false,"raw_author_name":"J. Daniel Garcia","raw_affiliation_strings":["University Carlos III of Madrid, Leganes, Spain"],"affiliations":[{"raw_affiliation_string":"University Carlos III of Madrid, Leganes, Spain","institution_ids":["https://openalex.org/I50357001"]}]},{"author_position":"last","author":{"id":"https://openalex.org/A5051904275","display_name":"Kenneth MacKenzie","orcid":null},"institutions":[],"countries":[],"is_corresponding":false,"raw_author_name":"Kenneth MacKenzie","raw_affiliation_strings":["IOHK, Hong Kong, China"],"affiliations":[{"raw_affiliation_string":"IOHK, Hong Kong, China","institution_ids":[]}]}],"institutions":[],"countries_distinct_count":2,"institutions_distinct_count":5,"corresponding_author_ids":["https://openalex.org/A5063492775"],"corresponding_institution_ids":["https://openalex.org/I16835326"],"apc_list":{"value":2290,"currency":"EUR","value_usd":2890},"apc_paid":{"value":2290,"currency":"EUR","value_usd":2890},"fwci":1.4144,"has_fulltext":true,"cited_by_count":9,"citation_normalized_percentile":{"value":0.80769773,"is_in_top_1_percent":false,"is_in_top_10_percent":false},"cited_by_percentile_year":{"min":89,"max":97},"biblio":{"volume":"48","issue":"4","first_page":"603","last_page":"625"},"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.9997000098228455,"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.9997000098228455,"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/T10260","display_name":"Software Engineering Research","score":0.9994999766349792,"subfield":{"id":"https://openalex.org/subfields/1710","display_name":"Information Systems"},"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/T10743","display_name":"Software Testing and Debugging Techniques","score":0.9988999962806702,"subfield":{"id":"https://openalex.org/subfields/1712","display_name":"Software"},"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.9105435609817505},{"id":"https://openalex.org/keywords/code-refactoring","display_name":"Code refactoring","score":0.9027080535888672},{"id":"https://openalex.org/keywords/programming-language","display_name":"Programming language","score":0.749681293964386},{"id":"https://openalex.org/keywords/concurrency","display_name":"Concurrency","score":0.6770333647727966},{"id":"https://openalex.org/keywords/programmer","display_name":"Programmer","score":0.6115967631340027},{"id":"https://openalex.org/keywords/parallelism","display_name":"Parallelism (grammar)","score":0.5722244381904602},{"id":"https://openalex.org/keywords/parallel-computing","display_name":"Parallel computing","score":0.5701532363891602},{"id":"https://openalex.org/keywords/abstraction","display_name":"Abstraction","score":0.521729588508606},{"id":"https://openalex.org/keywords/code","display_name":"Code (set theory)","score":0.48545533418655396},{"id":"https://openalex.org/keywords/benchmark","display_name":"Benchmark (surveying)","score":0.4825693666934967},{"id":"https://openalex.org/keywords/rewriting","display_name":"Rewriting","score":0.4783072769641876},{"id":"https://openalex.org/keywords/software","display_name":"Software","score":0.3305433988571167}],"concepts":[{"id":"https://openalex.org/C41008148","wikidata":"https://www.wikidata.org/wiki/Q21198","display_name":"Computer science","level":0,"score":0.9105435609817505},{"id":"https://openalex.org/C152752567","wikidata":"https://www.wikidata.org/wiki/Q116877","display_name":"Code refactoring","level":3,"score":0.9027080535888672},{"id":"https://openalex.org/C199360897","wikidata":"https://www.wikidata.org/wiki/Q9143","display_name":"Programming language","level":1,"score":0.749681293964386},{"id":"https://openalex.org/C193702766","wikidata":"https://www.wikidata.org/wiki/Q1414548","display_name":"Concurrency","level":2,"score":0.6770333647727966},{"id":"https://openalex.org/C2778514511","wikidata":"https://www.wikidata.org/wiki/Q1374194","display_name":"Programmer","level":2,"score":0.6115967631340027},{"id":"https://openalex.org/C2781172179","wikidata":"https://www.wikidata.org/wiki/Q853109","display_name":"Parallelism (grammar)","level":2,"score":0.5722244381904602},{"id":"https://openalex.org/C173608175","wikidata":"https://www.wikidata.org/wiki/Q232661","display_name":"Parallel computing","level":1,"score":0.5701532363891602},{"id":"https://openalex.org/C124304363","wikidata":"https://www.wikidata.org/wiki/Q673661","display_name":"Abstraction","level":2,"score":0.521729588508606},{"id":"https://openalex.org/C2776760102","wikidata":"https://www.wikidata.org/wiki/Q5139990","display_name":"Code (set theory)","level":3,"score":0.48545533418655396},{"id":"https://openalex.org/C185798385","wikidata":"https://www.wikidata.org/wiki/Q1161707","display_name":"Benchmark (surveying)","level":2,"score":0.4825693666934967},{"id":"https://openalex.org/C154690210","wikidata":"https://www.wikidata.org/wiki/Q1668499","display_name":"Rewriting","level":2,"score":0.4783072769641876},{"id":"https://openalex.org/C2777904410","wikidata":"https://www.wikidata.org/wiki/Q7397","display_name":"Software","level":2,"score":0.3305433988571167},{"id":"https://openalex.org/C13280743","wikidata":"https://www.wikidata.org/wiki/Q131089","display_name":"Geodesy","level":1,"score":0.0},{"id":"https://openalex.org/C205649164","wikidata":"https://www.wikidata.org/wiki/Q1071","display_name":"Geography","level":0,"score":0.0},{"id":"https://openalex.org/C138885662","wikidata":"https://www.wikidata.org/wiki/Q5891","display_name":"Philosophy","level":0,"score":0.0},{"id":"https://openalex.org/C111472728","wikidata":"https://www.wikidata.org/wiki/Q9471","display_name":"Epistemology","level":1,"score":0.0},{"id":"https://openalex.org/C177264268","wikidata":"https://www.wikidata.org/wiki/Q1514741","display_name":"Set (abstract data type)","level":2,"score":0.0}],"mesh":[],"locations_count":5,"locations":[{"id":"doi:10.1007/s10766-020-00667-x","is_oa":true,"landing_page_url":"https://doi.org/10.1007/s10766-020-00667-x","pdf_url":"https://link.springer.com/content/pdf/10.1007/s10766-020-00667-x.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:discovery.dundee.ac.uk:publications/8638d464-8581-4d77-9052-2b7c17f93d6e","is_oa":true,"landing_page_url":"https://discovery.dundee.ac.uk/en/publications/8638d464-8581-4d77-9052-2b7c17f93d6e","pdf_url":"https://discovery.dundee.ac.uk/ws/files/50635780/Brown2020_Article_RefactoringGrPPIGenericRefacto.pdf","source":{"id":"https://openalex.org/S4306400523","display_name":"Discovery Research Portal (University of Dundee)","issn_l":null,"issn":null,"is_oa":false,"is_in_doaj":false,"is_core":false,"host_organization":"https://openalex.org/I177639307","host_organization_name":"University of Dundee","host_organization_lineage":["https://openalex.org/I177639307"],"host_organization_lineage_names":[],"type":"repository"},"license":"cc-by","license_id":"https://openalex.org/licenses/cc-by","version":"submittedVersion","is_accepted":false,"is_published":false,"raw_source_name":"Brown, C, Janjic, V, Barwell, A D, Garcia, J D & MacKenzie, K 2020, 'Refactoring GrPPI : Generic Refactoring for Generic Parallelism in C++', International Journal of Parallel Programming, vol. 48, pp. 603-625. https://doi.org/10.1007/s10766-020-00667-x","raw_type":"info:eu-repo/semantics/publishedVersion"},{"id":"pmh:oai:discovery.dundee.ac.uk:publications/8638d464-8581-4d77-9052-2b7c17f93d6e","is_oa":false,"landing_page_url":"http://www.scopus.com/inward/record.url?scp=85087691354&partnerID=8YFLogxK","pdf_url":null,"source":{"id":"https://openalex.org/S4306400523","display_name":"Discovery Research Portal (University of Dundee)","issn_l":null,"issn":null,"is_oa":false,"is_in_doaj":false,"is_core":false,"host_organization":"https://openalex.org/I177639307","host_organization_name":"University of Dundee","host_organization_lineage":["https://openalex.org/I177639307"],"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:e-archivo.uc3m.es:10016/33324","is_oa":true,"landing_page_url":"http://hdl.handle.net/10016/33324","pdf_url":null,"source":{"id":"https://openalex.org/S4306400817","display_name":"e-Archivo (Carlos III University of Madrid)","issn_l":null,"issn":null,"is_oa":false,"is_in_doaj":false,"is_core":false,"host_organization":"https://openalex.org/I50357001","host_organization_name":"Universidad Carlos III de Madrid","host_organization_lineage":["https://openalex.org/I50357001"],"host_organization_lineage_names":[],"type":"repository"},"license":"cc-by","license_id":"https://openalex.org/licenses/cc-by","version":"submittedVersion","is_accepted":false,"is_published":false,"raw_source_name":"","raw_type":"research article"},{"id":"pmh:oai:research-repository.st-andrews.ac.uk:10023/20321","is_oa":true,"landing_page_url":"https://hdl.handle.net/10023/20321","pdf_url":null,"source":{"id":"https://openalex.org/S4306400230","display_name":"St Andrews Research Repository (St Andrews Research Repository)","issn_l":null,"issn":null,"is_oa":false,"is_in_doaj":false,"is_core":false,"host_organization":"https://openalex.org/I16835326","host_organization_name":"University of St Andrews","host_organization_lineage":["https://openalex.org/I16835326"],"host_organization_lineage_names":[],"type":"repository"},"license":"cc-by","license_id":"https://openalex.org/licenses/cc-by","version":"submittedVersion","is_accepted":false,"is_published":false,"raw_source_name":null,"raw_type":"Journal article"}],"best_oa_location":{"id":"doi:10.1007/s10766-020-00667-x","is_oa":true,"landing_page_url":"https://doi.org/10.1007/s10766-020-00667-x","pdf_url":"https://link.springer.com/content/pdf/10.1007/s10766-020-00667-x.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":[],"awards":[{"id":"https://openalex.org/G5169153448","display_name":null,"funder_award_id":"EP/P020631/1","funder_id":"https://openalex.org/F4320334627","funder_display_name":"Engineering and Physical Sciences Research Council"},{"id":"https://openalex.org/G6280419463","display_name":"Discovery: Pattern Discovery and Program Shaping for Manycore Systems","funder_award_id":"EP/P020631/1","funder_id":"https://openalex.org/F4320334627","funder_display_name":"Engineering and Physical Sciences Research Council"},{"id":"https://openalex.org/G6387785971","display_name":null,"funder_award_id":"779882","funder_id":"https://openalex.org/F4320332999","funder_display_name":"Horizon 2020 Framework Programme"},{"id":"https://openalex.org/G8719353587","display_name":null,"funder_award_id":"EP/P0","funder_id":"https://openalex.org/F4320334627","funder_display_name":"Engineering and Physical Sciences Research Council"}],"funders":[{"id":"https://openalex.org/F4320332999","display_name":"Horizon 2020 Framework Programme","ror":"https://ror.org/00k4n6c32"},{"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/W3041213087.pdf","grobid_xml":"https://content.openalex.org/works/W3041213087.grobid-xml"},"referenced_works_count":49,"referenced_works":["https://openalex.org/W76736297","https://openalex.org/W1487664366","https://openalex.org/W1494930385","https://openalex.org/W1536722699","https://openalex.org/W1573676079","https://openalex.org/W1598796492","https://openalex.org/W1606457760","https://openalex.org/W1607699646","https://openalex.org/W1964714157","https://openalex.org/W1975104688","https://openalex.org/W1975535524","https://openalex.org/W1987564528","https://openalex.org/W1990919222","https://openalex.org/W1993635974","https://openalex.org/W1995270665","https://openalex.org/W2023299380","https://openalex.org/W2027627526","https://openalex.org/W2038543880","https://openalex.org/W2039417226","https://openalex.org/W2050259926","https://openalex.org/W2093281430","https://openalex.org/W2096635065","https://openalex.org/W2097699872","https://openalex.org/W2107978495","https://openalex.org/W2114067856","https://openalex.org/W2129106233","https://openalex.org/W2134616937","https://openalex.org/W2154705416","https://openalex.org/W2162544437","https://openalex.org/W2164799751","https://openalex.org/W2164890169","https://openalex.org/W2171383742","https://openalex.org/W2311942676","https://openalex.org/W2336894004","https://openalex.org/W2561675875","https://openalex.org/W2572546943","https://openalex.org/W2582080653","https://openalex.org/W2592318916","https://openalex.org/W2604608020","https://openalex.org/W2618516564","https://openalex.org/W2772612468","https://openalex.org/W2860511309","https://openalex.org/W2935725636","https://openalex.org/W2995287845","https://openalex.org/W3022287855","https://openalex.org/W3203568064","https://openalex.org/W4236021984","https://openalex.org/W4237609491","https://openalex.org/W4299796063"],"related_works":["https://openalex.org/W4313549863","https://openalex.org/W4231266416","https://openalex.org/W2395465245","https://openalex.org/W2072205733","https://openalex.org/W4309804347","https://openalex.org/W2168909313","https://openalex.org/W2974157558","https://openalex.org/W1598818031","https://openalex.org/W4387237598","https://openalex.org/W2487895676"],"abstract_inverted_index":{"Abstract":[0],"The":[1],"Generic":[2],"Reusable":[3],"Parallel":[4],"Pattern":[5],"Interface":[6],"(GrPPI)":[7],"is":[8],"a":[9],"very":[10],"useful":[11],"abstraction":[12],"over":[13],"different":[14,33,147],"parallel":[15,25,133,144],"pattern":[16,148],"libraries,":[17],"allowing":[18],"the":[19,99,112],"programmer":[20],"to":[21,32,48,74,127,140],"write":[22],"generic":[23],"patterned":[24],"code":[26,47,53,100],"that":[27,55,95,123,135],"can":[28,56],"easily":[29],"be":[30,57],"compiled":[31],"backends":[34],"such":[35,106],"as":[36,85,87,107],"FastFlow,":[37],"OpenMP,":[38],"Intel":[39],"TBB":[40],"and":[41,114],"C++":[42,83],"threads.":[43],"However,":[44],"rewriting":[45],"legacy":[46],"use":[49],"GrPPI":[50,79],"still":[51],"involves":[52],"transformations":[54],"highly":[58],"non-trivial,":[59],"especially":[60],"for":[61],"programmers":[62],"who":[63],"are":[64,125],"not":[65,102],"experts":[66],"in":[67],"parallelism.":[68],"This":[69],"paper":[70],"describes":[71],"software":[72],"refactorings":[73,113],"semi-automatically":[75],"introduce":[76,103],"instances":[77],"of":[78,142],"patterns":[80,97],"into":[81,98],"sequential":[82],"code,":[84],"well":[86],"safety":[88],"checking":[89],"static":[90],"analysis":[91],"mechanisms":[92,116],"which":[93],"verify":[94],"introducing":[96],"does":[101],"concurrency-related":[104],"bugs":[105],"race":[108],"conditions.":[109],"We":[110],"demonstrate":[111],"safety-checking":[115],"on":[117],"four":[118],"simple":[119],"benchmark":[120],"applications,":[121],"showing":[122],"we":[124],"able":[126],"obtain,":[128],"with":[129],"little":[130],"effort,":[131],"GrPPI-based":[132],"versions":[134],"accomplish":[136],"good":[137],"speedups":[138],"(comparable":[139],"those":[141],"manually-produced":[143],"versions)":[145],"using":[146],"backends.":[149]},"counts_by_year":[{"year":2025,"cited_by_count":2},{"year":2024,"cited_by_count":1},{"year":2023,"cited_by_count":2},{"year":2022,"cited_by_count":3},{"year":2021,"cited_by_count":1}],"updated_date":"2026-04-10T15:06:20.359241","created_date":"2025-10-10T00:00:00"}
