Velocità del loop Mega 2560

Ho scoperto dove è il collo di bottiglia, è la gestione della seriale, se si elimina la serial.begin il ciclo del conteggio viaggia a oltre 500 kHz, se si attiva la serial.begin la velocità crolla a meno di 128 kHz, il valore è inteso come ciclo costituito dalla cnt++ e la if, ovviamente non tiene conto della fine con relativo invio sulla seriale.

unsigned int cnt = 0;
const unsigned int CNT_MAX = 65000;

unsigned long prevMillis = 0;

Sketch usato per il test, commentando/decommentando opportunamente le varie PORTB = 0xxx tramite il DSO misuro la durata dell'impulso positivo che a sua volta rappresenta il tempo di esecuzione di una singola porzione del programma.
void setup() {
    Serial.begin(115200);
    pinMode (13, OUTPUT);
}


void loop() {
    PORTB=0xff;
    cnt++;
    //PORTB=0x00;

    //PORTB=0xff;

    if (cnt > CNT_MAX)  {
        //Serial.println(millis() - prevMillis);
        prevMillis = millis();
        cnt = 0;
    }
    PORTB=0x00;
}

Come confronto di valori tra UNO e MEGA2560 ho questi risultati riferiti alla singola riga CNT++ e la IF

UNO MEGA2560

cnt++ 688.5 ns 688.5 ns

if 313 ns 313 ns

Mi pare ovvio che i tempi di esecuzione delle singole righe sono identici sia sulla UNO che sulla MEGA 2560, la differenza enorme è sul tempo del ciclo completo della loop con seriale attiva,sulla UNO dura 3.69 us e sulla MEGA2560 dura 7.75 us, disattivando la seriale sulla MEGA2560 il tempo del ciclo crolla a solo 1.95 us.
Adesso tocca capire perché attivare la seriale, e solo la prima, porta questo rallentamento sull'esecuzione del ciclo.