{'fraction_non_alphanumeric': 0.018197573656845753, 'fraction_numerical': 0.0017331022530329288, 'mean_word_length': 5.243243243243243, '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}}
Programming a pipelined image processor

This paper describes a software system that we have developed to simplify the task of programming the DataCube MV20 image processor. The system presents an abstract view of the hardware's capabilities, allowing the programmer to focus on the computation to be performed rather than the manipulations needed to map the computation onto the hardware. Because it is based on an abstract model of the hardware, the system could be supported on other architectures as well. The core of the programming system is VEIL. a C++ library that provides a dataflow abstraction for programming the underlying machine. VEIL represents computations as directed graphs whose nodes are standard image processing operators (add, subtract, convolve, etc), and whose arcs represent communications channels. User programs construct VEIL graphs procedurally, by calling functions that instantiate nodes and link their inputs and outputs as needed. VEIL automatically maps the nodes and arcs of the graph onto the underlying hardware, breaking the graph into subgraphs if the computation is too complex to be performed in a single cycle.