{'fraction_non_alphanumeric': 0.014143094841930116, 'fraction_numerical': 0.0, 'mean_word_length': 5.467741935483871, 'pattern_counts': {'":': 0, '<': 0, '<?xml version=': 0, '>': 0, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
Towards Automatic Code Generation for GPUs ⋆

Graphics Processing Units (GPUs) have become highly parallel and programmable systems used as commodity data-parallel coprocessors. Moreover manufacturers have developed new software interfaces that facilitate their use. Thus, new compilation strategies that enable automatic mapping of sequential code would very likely arise in the near future. To open this path, we need to define some performance metrics or heuristics that steer the mapping, as well as to develop new tools that support such metrics or heuristics. In this paper we sketch a new compiler intermediate representation built on top of the hierarchy of computational kernels provided by the XARK compiler framework. In addition, we outline several compilation strategies based on such intermediate representation and present several experiments aimed at analyzing the relative importance of the two principal factors that NVIDIA reports to influence the most on performance of their GPUs: occupancy and memory hierarchy usage. Our results show that taking decisions based only on the optimization of the memory system provide the best performance, even if some resources are underutilized.