En FYI: autovektorisering kommer nästan aldrig kicka in för flyttal då de inte är associativa, vilket betyder att resultatet kan bli annorlunda från fallet om man följer C++ specifikationen. Så en kompilator är då inte tillåten att göra en sådan optimering, det vore en bug.
Det brukar finnas flaggor för att runda sådant sökte snabbt och -ffast-math, /fp:fas (MSVC) ser ut och strunta i avrundningsfel, finns en del #pragma med, inte kollat upp nu men det skulle förvåna om det inte går.
Det går att säga åt kompilatorn att förutsätta att flyttal följer matematikens regler med -ffast-math flaggan.
precis
Precis som @jclr skriver ovan kompileras den inre loopen i din "SIMD-vänliga kod" till detta
Koden jag skrev var för att visa principen, att "ordna data". Har inte testat just det här för att se om det går att också få den vektoriserad men det finns en hel del i C++ som man kan ta till för att berätta för kompilatorn att det är ok att vectorisera koden och även om det inte skulle gå idag, blir kompilatorer bättre och bättre.
Har prövat en hel del annan kod och den normala reaktionen är att man blir förvånad över hur duktig kompilatorn är på att snabba upp koden, inte det motsatta.
Enligt mig är det inte en bra strategi att välja tekniker där man i princip kan räkna ut att logiken snart finns direkt i språket. Har man gjort den tabben några gånger gör man den inte igen.
Skrev nära nog ett helt eget stl mellan 2001-2004 ungefär (om jag minns rätt) och orsaken var att stl då var segt, exempelvis har jag för mig att std::string inte lagrade text med extra utrymme, varenda förändring allokerade om till en ny sträng. Microsoft hade flera år tidigare släppt MFC som hade sin CString med referensräknare. Den var då mycket snabbare än stl kod. Så tog ideer från MFC och lite annat och gjorde något som passade stl. STL gick alltså inte att använda något som behövde minsta lilla snabbhet.
Saker som "move" konstruktörer som gjort livet enklare för utvecklare vad ju ett stort problem då
Jämför med stl idag, det är nästan som att jämföra python med C++
Exemeplvis är AVX512 så nytt (tänker då på att dra nytta av det med full hastighet) så det kommer säkert ta ett tag innan annat hinner ikapp och när det andra hunnit ikapp finns det nya saker igen.