[gelöst]große preComputed hash tabelle einbinden in das programm



  • Wenn Du das effizient einliest nicht.



  • simon.gysi schrieb:

    Wenn Du das effizient einliest nicht.

    da die shorts im array ja als 0-65536 abgespeichert sind, wäre es nicht effizienter das im binär system zu speichern? was meinst du?



  • phazz schrieb:

    simon.gysi schrieb:

    Kannst Du nicht beim Aufstarten die Datei einlesen und im Array abspeichern?
    So würde ich das machen. Sonst hast Du ja auch ein riesiges Exe...

    hmm wäre auch eine idee, ist aber da nicht das problem, dass das starten des programms dann ewigkeiten dauern würde??

    und eine ~300mb grosse exe datei zu laden passiert sofort?
    natuerlich dauert das einlesen der werte seine zeit, aber das ist bei 280mb an daten nur logisch.

    wenn du kurze lade zeiten willst, darfst du eben keine 280mb an daten in den ram schreiben sondern nur segmente daraus und dynamisch nachladen was noetig ist.



  • Shade Of Mine schrieb:

    wenn du kurze lade zeiten willst, darfst du eben keine 280mb an daten in den ram schreiben sondern nur segmente daraus und dynamisch nachladen was noetig ist.

    Topic ist "precomputed hash tabelle". Hört sich so an, als ob er alles auf einmal braucht.



  • Shade Of Mine schrieb:

    phazz schrieb:

    simon.gysi schrieb:

    Kannst Du nicht beim Aufstarten die Datei einlesen und im Array abspeichern?
    So würde ich das machen. Sonst hast Du ja auch ein riesiges Exe...

    hmm wäre auch eine idee, ist aber da nicht das problem, dass das starten des programms dann ewigkeiten dauern würde??

    und eine ~300mb grosse exe datei zu laden passiert sofort?
    natuerlich dauert das einlesen der werte seine zeit, aber das ist bei 280mb an daten nur logisch.

    wenn du kurze lade zeiten willst, darfst du eben keine 280mb an daten in den ram schreiben sondern nur segmente daraus und dynamisch nachladen was noetig ist.

    das mit der exe laden, geht schneller als alles aus der datei auszulesen....(zumindest die datei im jetzigen zustand)

    scheinbar bleibt mir keine andere wahl als die tabelle während der laufzeit in den speicher zu laden..... (muss aber als gesamtes geladen werden)
    wie wäre es die tabelle komplett binär auszugeben, und genau so wieder ein zu lesen, dann wären 2*8bits ein index, würde an sich am schnellsten gehen(im vergleich zur string to int umformung etc.)

    //andere idee: wie wäre es die tabelle in einer statischen lib abzulegen(ist dann nunmal etwas groß), und diese dann einbinden???
    => bräuchte dann nur noch einen der das schafft zu kompilieren xD xD xD



  • phazz schrieb:

    das mit der exe laden, geht schneller als alles aus der datei auszulesen....(zumindest die datei im jetzigen zustand)

    bist du dir da sicher? hast du es gemessen? wie viel länger dauert es denn (oder soll es dauern), die 280 mb große datei zu laden, statt der 280 (+x) mb großen exe?



  • suma dartson schrieb:

    phazz schrieb:

    das mit der exe laden, geht schneller als alles aus der datei auszulesen....(zumindest die datei im jetzigen zustand)

    bist du dir da sicher? hast du es gemessen? wie viel länger dauert es denn (oder soll es dauern), die 280 mb große datei zu laden, statt der 280 (+x) mb großen exe?

    hehe wie gesagt: es steht: zumindest im jetzigen zustand der datei die ich einlesen will! wobei man selbst da beachten muss, dass die datei keine 280 mb groß ist , sondern mehr ca 680mb, weil die datei wie in meinem ersten post beschrieben folgendes format hat:

    unsigned short großeTabelle[140.000.000] = {
    1524,2641,.... werte ....42,1,7500
    };

    es war nämlich geplant die tabelle in die exe einzubinden oder von mir aus per lib.

    um die tabelle während der laufzeit einzubauen,müsste man jetzt z,b erst mal die ganzen werte von char to int umwandeln mit der begrenzung "," und das kann ich dir garantieren dauert ewigkeiten!
    deshalb habe ich die idee geäußert, aufgebaut auf euren ideen, die datei im binärsystem zu erzeugen! die datei wäre somit viel kleiner == 280mb ca.
    das letzte problem was mir nun bevorsteht ist, wie lese ich das ganze effizient aus?
    per ifstream? oder hat jmd was besseres, schnelleres=?
    mfg



  • ah ok, da hab ich nicht aufgepasst. die konvertierung in ein binäres format habe ich mal als selbstverständlich vorausgesetzt.

    Bashar schrieb:

    Memory Mapped I/O fiele mir da ein.

    ich unterstütze den vorschlag.



  • suma dartson schrieb:

    ah ok, da hab ich nicht aufgepasst. die konvertierung in ein binäres format habe ich mal als selbstverständlich vorausgesetzt.

    Bashar schrieb:

    Memory Mapped I/O fiele mir da ein.

    ich unterstütze den vorschlag.

    okay werde nun mal bis morgen testen was sich als besserer vorschlag darstellt,
    und euch bericht erstatten 😛
    habe leider keine erfahrung mit "Memory Mapped I/O" (werde mir es mal aneignen ;))

    ich danke euch für die "kreativen" vorschläge und natürlich für eure zeit!



  • memory mapped IO und "table in der exe" haben beide den selben nachteil: es wird die tabelle "häppchenweise" geladen, und dadurch entstehen unnötige seek-zeiten.

    wenn du die tabelle dagegen in ein datenfile schreibst, und dieses bei programmstart komplett in den speicher lädst, sparst du dir diese seek-zeiten.

    was das "speicherabbild" angeht: schreib die tabelle einfach so in das file wie sie im speicher steht, und lade sie genauso wieder rein. dann dauert das mit aktuellen festplatten keine 5 sekunden. mit einem schnellen RAID 0 wahrscheinlich unter 2 sekunden.


Anmelden zum Antworten