Computer architecture, hardware-software interaction and optimization