{'fraction_non_alphanumeric': 0.021808851828094934, 'fraction_numerical': 0.0025657472738935213, 'mean_word_length': 5.24, '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}}
Tuning Principal Component Analysis for GRASS GIS on Multi-core and GPU Architectures

This paper presents optimizations to Principal Component Analysis (PCA) in GRASS GIS. The current implementation of PCA in GRASS is based on eigenvalue decomposition, which does not have high memory requirements but it can suffer from low runtime performance. In modern computers, significant performance improvements can be achieved by appropriately taking advantage of the memory configuration (hierarchy). A common way of doing this is data reuse for frequent operations. The GRASS PCA is only reusing data at a very high level, i.e., at main memory and I/O level. We can improve the implementation of the PCA methodology by re-arranging the computations of matrix operations, and using available high performance packages that use block algorithms to optimize data reuse. We can achieve further optimizations by taking advantage of the now popular multi-core architectures and the use of Graphic Processing Units (GPU). By taking into account all these key supercomputing components, GRASS GIS can leverage massively parallel computing without requiring a supercomputer. The speed-up that can be achieved by using multi-core CPU and GPU architectures will greatly improve the efficiency of GRASS GIS for its users. We use imaging spectrometer data to demonstrate the performance improvements attained by our implementation, which reduced runtime by nearly 99% using only multi-core related optimizations and an additional 50% reduction using GPU related optimizations.