{'fraction_non_alphanumeric': 0.016452074391988557, 'fraction_numerical': 0.001430615164520744, 'mean_word_length': 5.245535714285714, '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}}
Nano-Threads Library Design, Implementation and Evaluation

In this report we describe the design and implementation of a user-level thread package based on the nano-threads programming model, whose goal is to efficiently manage the application parallelism at user-level. Some modifications introduced to the model have enhanced its flexibility and have allowed more runtime parallelism. It is a current trend in compiler technology to apply data and control dependence analyses to build an intermediate representation of the parallel application in the form of a hierarchical task graph (HTG); in this graph, nodes are the representation of program structures and edges represent the dependencies between them. The back-end compiler generates executable code from the HTG and the user-level thread package provides the services in order to control the execution of the HTG nodes. Library services are explained showing several translations from sequential to parallel code. We have mainly focused our attention into loop scheduling and functional parallelism. In both cases, the goal is to obtain an efficient parallel execution of the generated nano-threads by accordingly balancing the work assigned to each thread and the thread management overhead. The experiments let us determine which is the appropriate number of operations spread out among the threads to ensure less than 10% of overhead.