clang ++ fstreamet 10X langsamer als g ++

F: Gibt es eine Möglichkeit, die Geschwindigkeit von clang ++ STD Library-Streams zu erhöhen? (Und weiß jemand, warum es so viel langsamer ist als g ++?)

Ich versuche, sehr große (viele GB) Binärdatendateien zu verarbeiten, und war überrascht, dass die Leistung so schlecht war. Zuerst dachte ich, dass es etwas mit meinem Code zu tun hat. Aber ich sehe die gleiche langsame Leistung in einem heruntergekommenen Beispiel.

Ich habe sogar versucht, Puffer unterschiedlicher Größe über rdbuf () -> pubsetbuf () zuzuweisen, aber dies schien keine große Wirkung zu haben.

Hier ist ein einfaches Ein- / Ausgabebeispiel:

#include <fstream>

int main() {
    std::ifstream is {"bigSourceFile"};
    std::ofstream os {"bigSourceFileCopy"};

    std::string line;
    while (std::getline (is, line) ) {
        os << line;
    }
}

Hier ist ein Code zum Generieren einer 1,3-GB-Quelldatei. Verwenden Sie dies, um die Quelldatei für das readWrite-Programm zu generieren:

#include <fstream>
#include <string>

std::string createTailStr () {
    std::string result {"__"};
    for (auto i (0); i< 58; ++i) {
        result += 'A'+i;
    }

    return result;
}

int main() {

    std::string tail {createTailStr()};

    std::ofstream os {"bigSourceFile"};

    constexpr auto Lines (20000000ul);
    for (auto i (0); i < Lines; ++i) {
        os << i << tail << '\n';
    }
}

Auf meinem Computer (mit OSX El Capitan und dem neuesten Xcode): Das Beispiel (die erste Codeauflistung) dauert ca. 1 Stunde. 50 Sekunden, um die Kompilierung über die Befehlszeile auszuführen:

clang ++ -std = c ++ 11 -o readWrite readWrite.cpp

Beim Kompilieren mit g ++ und libstdc ++ dauert das Programm jedoch nur etwa 5 Sekunden.

Ich habe sogar die neueste Version von llvm stdc ++ von llvm.org erstellt und diese Erstellung war sogar noch langsamer (ca. 90 Sekunden).

Zur Zusammenfassung: clang ++: 50 Sekunden; g ++: 5 Sekunden

Antworten auf die Frage(0)

Ihre Antwort auf die Frage