clang ++ в 10 раз медленнее, чем g ++

В: Есть ли способ ускорить потоки Clang ++ STD Library? (А кто-нибудь знает, почему он намного медленнее, чем g ++?)

Я пытаюсь обработать очень большие (много ГБ) файлы двоичных данных и с удивлением обнаружил, что производительность оказалась настолько низкой. Сначала я подумал, что это как-то связано с моим кодом. Но я вижу ту же медленную производительность в пригнанном примере.

Я даже пытался выделить буферы разного размера через rdbuf () -> pubsetbuf (), но это, похоже, не имело большого эффекта.

Вот простой пример ввода / вывода:

#include <fstream>

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

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

Вот некоторый код для создания исходного файла объемом 1,3 ГБ. Используйте это, чтобы сгенерировать исходный файл для программы readWrite:

#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';
    }
}

На моей машине (под управлением OSX El Capitan и последней версии Xcode): пример (первый список кодов) занимает приблизительно. 50 секунд для запуска компиляции из командной строки:

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

Однако при компиляции с использованием g ++ и его libstdc ++ программа занимает всего около 5 секунд.

Я даже собрал последнюю версию llvm stdc ++ из llvm.org, и эта сборка была еще медленнее (примерно 90 секунд).

Подводя итог: лязг ++: 50 секунд; г ++: 5 секунд

Ответы на вопрос(0)

Ваш ответ на вопрос