Ich würde sagen, beides ist abhängig von der gewählten Programmiersprache.
Mit Delphi (ich arbeite mit 6.0) sind mehrere Threads, also eine Optimierung auf SMP/SMT sehr einfach erstellt. Für jeden Thread erzeugt man ein getrenntes Objekt vom Typ TThread. Wichtig ist dabei die richtige Syncronisation der Threads (es können nicht beide Threads beispielsweise gleichzeitig auf eine Variable schreibend zugreifen). Dafür stehen in Delphi auch schon praktische Objektklassen zur Verfügung. Für andere Sprachen kann ich im Moment nicht reden, da ich dort noch nicht SMT programmiert habe.
Bei 64 Bit ist vor allem der richtige Compiler notwendig, welcher 64 Bit Code erzeugen kann. Dann ist es erforderlich, dort nur 64 Bit ints zu nutzen, wo sie Vorteile bringen, denn diese brauchen beispielsweise eine längere zeit bei der Multiplikation (beim Opteron 5 statt 3 Takte). Ansonsten dürfte der Rest vom Compiler erledigt werden, solange man nicht in Assembler opimieren will.
Da für dich Performance eine große Rolle zu spielen scheint, dürfte auch die richtige Programmiersprache eine entscheidende Rolle spielen. Solange du nicht mit ASM per Hand optimierst, wird C++ wohl eine nicht schlechte Wahl sein. Aber am besten berät dich dabei intel_hasser.