Naja, richtig kann ich Java, sprich mit gui, SQL-Datenbankanbindung etc. C++ bin ich atm am lernen, wobei sichs zu Java nicht wirklich unterscheidet. Dann bischen VisualBasic, HTML und SQL halt noch, wobei das halt nicht wirklich programmieren ist, aber der Vollständigkeit halber mal
Naja, was ich noch etwas kann ist Assembler, allerdings muss ich mich da wirklich dann nochmal richtig reinfuchsen und kann auch nicht flüssig den Quellcode lesen etc. kann aber damit umgehen und mich wieder reinarbeiten. Ich find allerdings auch das Assembler halt wirklich schon sehr heftig ist zu verstehen mit den ganzen registern etc. Aber es ist schon verdammt performant ^^
Als C++ SDK will ich Visual Studio 2010 Prof verwenden, allerdings muss ich sagen, das ich bisher mit Dev-C++ gearbeitet, allerdings hab ich das Problem das die Sachen aus Tutorials irgendwie dort öfters nicht funktionieren.... -.-
Was die System Zeit angeht, so ist diese ungenau, wenn du sehr hohe CPU Auslastungen hast, da die Berechnung der Systemzeit nicht wirklich gut funktioniert, da die Caches ziemlich zugeknallt werden, und zusätzlich noch daran, das die Zeitgeber halt auch nur innerhalb ner gewissen genauigkeit funktionieren.
Es gibt auf jedenfall in C++ und Fortran spezielle Bilbiotheken für die Zeitmessung, die dies extrem genau machen können. Bei so nem Bench mit recht geringer Laufzeit sollte man sowas durchaus verwenden. Z.B. wenn du Cachelines auslesen willst, dann brauchste sowas auch, da du ansonsten die Zugriffszeitenunterschiede zwischen L1 und L2 meist garnicht mehr richtig sehen könntest.
Was meinen Vorschlag zu ner Implementierung eines sinnvollen Benches angeht, so ist dies einfach nen Standartproblem aus der Physik, was relativ einfach zu lösen ist.
Den Code kann ich dir nicht so einfach zuschicken, da ich mich atm selbst erst damit beschäftige, wie man ne Differentialgleichung als Code implementiert, und wie man diese löst, im Prinziep machst du aber nicht anderes als nen Näherungsverfahren.
Was halt auf jedenfall recht interessant hierbei wird, dads du im Normalfall nen Problem hast, das zu lange braucht um auf einem Core gelöst zu werden, aber auch nicht 100% parallelisiert werden kann, da die Berechnungen nicht ganz unabhängig sind.
Stells dir so vor, du hast nen Seil und unterteilst es in 100 Mio Punkte, die die Position des Seiles representieren, dieses unterteilste nu in z.B. 10 Abschnitte, dann sind die inneren Punkte jedes Abschnittes vom entsprechenden Core selbst zu berechnen ohne Hilfe, an den Randpunkten müssen sich aber die Cores immer miteinander austauschen, was Sie denn als Ergebnis haben!
Nen Seil muss ja am Stück bleiben

(hier kommt granularität ins Spiel, was bei Multicoresystemen sehr wichtig wird, da diese das Maß der Kommunikation zwischen den Cores beeinflusst, und hier kann schnell das Netzwerk der Flaschenhals werden, wenn die Granularität zu fein ist.)