Heim >Backend-Entwicklung >C++ >Wie kann ich das Float-Parsing für große Datensätze optimieren?

Wie kann ich das Float-Parsing für große Datensätze optimieren?

Linda Hamilton
Linda HamiltonOriginal
2024-11-25 07:31:19737Durchsuche

How Can I Optimize Float Parsing for Large Datasets?

Optimieren des Float-Parsings für große Datensätze

Das Parsen von durch Leerzeichen getrennten Floats aus großen Dateien kann eine zeitaufwändige Aufgabe sein. Dies gilt insbesondere dann, wenn Millionen von Zeilen mit mehreren Floats pro Zeile verarbeitet werden. Um dieser Herausforderung zu begegnen, ist es wichtig, effiziente Parsing-Techniken einzusetzen, die Leistungsengpässe minimieren.

Messung der Parsing-Geschwindigkeit

Um die Wirksamkeit verschiedener Parsing-Methoden zu bewerten, wurde ein Benchmark erstellt durchgeführt unter Verwendung einer 515 MB großen Eingabedatei, die Millionen durch Leerzeichen getrennte Gleitkommazahlen enthält. Die Ergebnisse zeigten erhebliche Unterschiede in der Parsing-Zeit zwischen verschiedenen Ansätzen.

Boost Spirit: Ein Top-Performer

Überraschenderweise erwies sich Boost Spirit als die schnellste Parsing-Lösung. Diese leistungsstarke Bibliothek bietet mehrere Vorteile gegenüber herkömmlichen Methoden:

  • Fehlerbehandlung: Spirit-Parser erkennen und melden Parsing-Fehler automatisch.
  • Umfangreiche Funktionsunterstützung: Sie unterstützt variable Leerzeichen, /-Inf, und NaN-Werte.
  • Elegante Syntax: Die Syntax von Spirit ist unkompliziert und leicht zu verwenden verstehen.

Andere Parsing-Techniken

Während Boost Spirit bei der Parsing-Geschwindigkeit die Führung übernahm, zeigten auch andere Techniken vielversprechende Ergebnisse.

  • Eigen: Diese C-Bibliothek bietet effiziente Matrix- und Vektoroperationen, einschließlich Float-Parsing Funktionen.
  • C 14 Reguläre Ausdrücke: Mit den Regex-Verbesserungen von C 14 kann das Parsen mit regulären Ausdrücken durchgeführt werden.
  • mmap: Speicherabgebildet Dateien können den Dateizugriff beschleunigen, die Parsing-Geschwindigkeit jedoch möglicherweise nicht verbessern erheblich.

Benchmark-Ergebnisse

Das folgende Diagramm fasst die Analysezeiten für verschiedene Methoden unter Verwendung von speicherabgebildeten Dateien zusammen:

[Bild von Analysezeit-Benchmark-Ergebnisse]

Das Richtige wählen Ansatz

Die beste Parsing-Methode hängt von den spezifischen Anforderungen der Anwendung ab. Wenn Geschwindigkeit und Genauigkeit im Vordergrund stehen, ist Boost Spirit eine ausgezeichnete Wahl. Für einfachere Szenarien können Eigen- oder C 14-reguläre Ausdrücke ausreichen.

.hpp-Datei (alte Implementierung)

std::vector<data> read_float3_data(std::string const &in)
{
  namespace spirit = boost::spirit;
  namespace qi = boost::spirit::qi;
  typedef std::vector<data> list;

  qi::rule<it, list(), qi::locals<bool>, data> triplet_rule =
      qi::phrase(
          (qi::double_ > qi::double_ > qi::double_) % qi::eol, qi::space, data());

  it first = in.begin();
  it last = in.end();
  it err  = in.end();
  bool parsing_ok = qi::phrase_parse(first, last, triplet_rule, qi::space,
                                            data(), qi::_pass, err);
  assert(parsing_ok && first == last);
  (void)err;
  return data();
}

Das obige ist der detaillierte Inhalt vonWie kann ich das Float-Parsing für große Datensätze optimieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn