Computer architecture refers to both the design of a computer's external interfaces (instruction sets) and a computer's internal implementation (microarchitecture). The goal of these design decisions is to optimize speed, power efficiency, size, or cost while satisfying constraints on the rest.
A computer's instruction-set architecture (ISA) is the interface between its hardware and software. The ISA describes the assembly language used to program the machine, and the bit encodings used to represent the assembly instructions in memory. The ISA is a complete specification of the programmer-visible state (registers, memory, I/O interfaces), the operations (instructions) available for changing the programmer-visible state, the implicit and explicit operands to the instructions, and the programmer-visible state changes caused by asynchronous events (interrupts).
Examples of instruction-set architecture reference manuals are:
A computer's microarchitecture, or organization, is the implementation of its interface. The microarchitecture may have substantially more state, in the form of caches, pipeline registers, speculation buffers and predictors, than is visible through the ISA. Microarchitectural design techniques include reuse (e.g., caching), speculation, and parallelization.
While a computer's microarchitecture is not directly visible to the programmer, two computers with the same ISA, implemented in the same technology, but with different microarchitectures, may have an order of magnitude difference in performance, power efficiency or cost for a given application.