É totalmente possível, dependendo dos recursos aos quais você está se referindo, a abordagem é um pouco diferente.
Por exemplo, para um aplicativo matemático, você pode detectar o número de processadores e / ou núcleos e fazer com que cada núcleo manipule partes diferentes do cálculo. A parte difícil é garantir que os dados de dados sejam síncronos ou assíncronos, dependendo da tarefa em questão.
E, como dito antes, como MMX, o SSE2 pode ser verificado e, em seguida, executado por caminhos de código diferentes, algo como:
if (CPU.Supports SSE2) {then use SSE2 Libraries}
else if (CPU.Supports SSE) {Then use SSE Libraries}
else {use pre-SSE LIbraries}
Além disso, para coisas como architechture (x86 x x64), existem algumas maneiras que podem ser manipuladas. Se você usa JAVA ou C #, por exemplo, o compilador JIT pode otimizar o código para qualquer arquitetura quando o aplicativo é iniciado, provavelmente não é tão rápido quanto um aplicativo C ++ nativo e bem otimizado, mas a desvantagem é que com C ++ você teria ter uma versão x64 e x86 separada.