{'fraction_non_alphanumeric': 0.014502307185234015, 'fraction_numerical': 0.0, 'mean_word_length': 6.093457943925234, '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}}
Accelerating Coupled Applications through Register Level Communication between Processing Elements

Early SoCs have boosted parallelism exploitation for a limited number of embedded system applications that can be easily decomposed into multiple independent parts, thus enabling their facile execution on multiple Processing Elements (PEs) in parallel. However, as the computation complexity of the applications increases, the lockstep execution model is increasingly being questioned due to architectural considerations, such as cache misses and branch mispredictions. As a result, it becomes imperative to provide organizational models that are capable of providing flexible execution, adapting to the vicissitudes of the run time environment. In this paper, we provide a new architectural organization framework, capable of extracting as much as possible application information through static analysis, as well as dynamic adjustment of the operations to suit the possible unpredictability in run-time events, all within a negligibly small amount of hardware overhead. Since such flexible execution models have previously had to resort to increasing amounts of communication coherence checking, we additionally propose a novel collaborative communication framework that can be customized on an application basis to reduce the communication overhead between PEs. It is shown that the supporting algorithms are provably correct; furthermore, mathematical analysis confirms the superiority of the proposed techniques.