Thanks for the comment. > Why does userspace want to even do this? This is because the optimal settings may differ from application to application. Examples of performance improvements for applications with simple memory access characteristics are described in [merit] section. However, some applications have complex characteristics, so it is difficult to predict if an application will improve without actually trying it out. This is not necessary for all applications. However, I want to provide as a minimal interface that can be used by those who want to improve their application even a little. > How will they do this? I assume to be used to tune a specific core and execute an application on that core. The execution example is as follows. 1) The user tunes the parameters of a specific core before executing the program. ``` # echo 1024 > /sys/devices/system/cpu/cpu12/cache/index0/prefetch_control/stream_detect_prefetcher_dist # echo 1024 > /sys/devices/system/cpu/cpu12/cache/index2/prefetch_control/stream_detect_prefetcher_dist # echo 1024 > /sys/devices/system/cpu/cpu13/cache/index0/prefetch_control/stream_detect_prefetcher_dist # echo 1024 > /sys/devices/system/cpu/cpu13/cache/index2/prefetch_control/stream_detect_prefetcher_dist ``` 2) Execute the program bound to the target core. ``` # taskset -c 12-13 a.out ``` If the interface is exposed, the user can develop a library to execute 1) and 2) operation instead. > What programs will do this? It is assumed to be used by programs that execute many continuous memory access. It may be useful for other applications, but I can't explain them in detail right away. > And why isn't just automatic and why does this hardware require manual > intervention to work properly? It is difficult for the hardware to determine the optimal parameters in advance. Therefore, I think that the register is provided to change the behavior of the hardware.