Yes, and CPU implementation is a further subdivision of computer elements and architecture.
Then the details of register use are an even further subdivision.
I've done work in the field since the 70's. The last time I had to worry about CPU architecture was as a junior in college in 1971 when I was porting Spacewar from a PDP-1 to a PDP-8. Mostly these days it's all about algorithms in high level languages.
Aren't these details important to understand for what might be non-obvious reasons?
To give an example, take a look at gaming consoles. Performance and graphics get better over time because programmers write "to the hardware" with increasing precision as the product ages, and this provides a benefit that's almost completely unseen in modern general purpose computing.
The technique of "expanding the loop" to increase performance is a common tactic taken by programmers, no? I know I've done it with scripts before. Are modern compilers simply so good at optimizing binary code that extending this from a high-level language to the assembler it compiles to is simply not a reasonable thing to expect a programmer to be able to do?
I know I'm showing my ignorance on the subject, but of all the things I've ever researched for my own enrichment, C/C++ types of languages constantly fail to make sense to me... and I'd like to know more about the interplay between them and what actually goes on at the level of the CPU assembler-type code itself, but it seems like even getting partially fluent enough to understand what's going on in a dozen lines of ASM is an impossible dream.