Gast
#5134690
Hallo alle zusammen! Ich bin gerade dran auf einem STM32F4 board 64 bit operationen auszuführen (bitte nicht mit assembler anfangen, ich weiß das man damit das Problem lösen kann). Ich führe eine einfache Addition in einer Schleife aus, hierbei ist zu beachten dass erstmal der Fall beachtet wird, bei dem e aus kleinen Zahlen besteht! Also wird Poly[j] vorerst (bis auf sonderfälle die hier nicht betrachtet werden) nicht größer als 32 bit. Bitte nicht fragen wieso 64 bit benutzt wird => wird für den Sonderfall benötigt. int64_t Poly = {0}; int32_t e = ....; //mit Zahlen gefüllt, pos und negativ for (uint16_t i = 0; i < PARAM_W; i++) { for (uint16_t j = 0; j < PARAM_N; j++) { Poly[j] += e[PARAM_N - c[i] + j]; } c ist ein Array der Länge PARAM_W. Wenn ich die Anzahl der benötigten clock cycles für den Schritt Poly[j] += e[PARAM_N - c[i] + j]; mir ausgeben lasse auf dem STM32F4 board, variiert diese um 5 clock cycles! Hier noch die Compiler Optionen/flags -Wall -g -std=c99 -O3 mfloat-abi=softfp Optimazation flag ändern ändert nichts, variiert trotzdem um 5 cc. Hat jemand eine erklärung wieso das so ist? Warum dauert genau die selbe addition länger? Kann es sein, dass es der Fall ist, wenn Poly[j] durch die addition eines Wertes sich im Vorzeichen ändert? Woran könnte es sonst liegen? Danke schon einmal für die Hilfe! Beste Grüße Nate