Hirdetés

Keresés

Új hozzászólás Aktív témák

  • joysefke

    veterán

    válasz DrojDtroll #9331 üzenetére

    for (int i = 0; i < heigth; i++)
    {
        for (int j = 0; j < width; j++)
        {
            result[j, i] = reader.ReadUInt16();
        }
    }

    Itt van még egy olyan probléma (mindkét példádban), hogy úgy iterálsz át egy nagy többdimenziós tömbön, hogy a belső ciklusod nem a tömb legjobboldalibb dimenzióján iterál.

    C#-ban a többdimenziós tömbök (A[,,,]) row-major ként vannak a memóriában, tehát a legjobb oldalibb dimenzió egymás melletti elemei a memóriában egymás mellett lesznek. az A[100, 50] elem mellett az A[100,51] elem van. Ezzel szemben az A[101,50] az teljesen máshol van, a te esetedben (2048) elemmel később mint az A[100,50], tehát mivel int tömbről van szó, 8KB-tal később van. Az hogy itt csak írsz és nem olvasol kb mindegy, mert nyilván egy egész cache line lesz írva/olvasva.

    A helyzeten cache-line szempontből még (valószínűleg) tovább ront itt, hogy kettő hatványonként iterálsz. ilyen problémák nagy mátrixok szorzásánál vannak

  • joysefke

    veterán

    válasz DrojDtroll #9331 üzenetére

    Nincs időm kipróbálni, de nekem egyáltalán nem szimpatikus egy ilyen nagy fájlnak a mini adagokban való szekvenciális olvasgatása.

    1, Miért nem a sima stream Read metódussal olvasol azonnal byte[] tömbbe?
    2, Én megpróbálnám a bufferméreteket manuálisan feljebb húzni. Alapból csak valami ici-pici bufferekkel dolgozik. (nekem pár 10KB rémlik)
    3, Nem mintha itt számítania kellene de te itt ugye 4M elemen iterálsz át egy szoros for () ciklusban => ha nem fájlműveletet végeznél, akkor már ez is bizonyos helyzetekben indokolatlanul lassú (4M tömbhatár ellenőrzés az indexerekre+ ellenőrzés az iterátoron, szerk: mondjuk 4M az még nem túl sok..)
    (4, miért int tömbben-ben tárolod a short értékeidet?)

    5, a két kód ránézésre nem ugyanazt csinálja. a második konkrétan elcseszettnek tűnik.
    64bitenként olvasol és ugyanúgy 4M-szor mint amikor 16 bitenként olvastál????

Új hozzászólás Aktív témák