Se você, assim como eu, programou em Assembler na era clássica, provavelmente já se sentiu assim:
Meu modelo mental de CPUs ficou parado nos anos 80: basicamente, caixas que fazem aritmética, lógica, manipulação de bits, e carregam e colocam coisas na memória. Tenho uma vaga consciência de vários progressos, como instruções vetoriais (SIMD) e a ideia das CPUs terem suporte a virtualização (mas não faço ideia do que isso significa na prática).
Que avanços legais eu perdi? O que as CPUs de hoje podem fazer que as do ano passado não podiam? Ou do retrasado, ou de 5, 10 anos atrás? O que mais me interessa são capacidades que o programador tem que aproveitar manualmente (ou que precisam de reprojeto dos ambientes de programação) para poderem ser utilizadas, e portanto podem não estar sendo utilizadas no momento. Acho que isso não inclui coisas como SMT/Hyper-threading, mas honestamente não tenho certeza. Também me interesso em coisas que as CPUs atuais não podem fazer, mas as do futuro próximo poderão.
Foi essa a pergunta que David Albert fez, e Dan Luu resolveu respondê-la. Leitura obrigatória para qualquer assembleiro que se preze. Leia aqui.