Wątki i alokacja pamięci

0

Piszę pewien program do przetwarzania dużych plików i chciałem spróbować poprawić wydajność tego progamu poprzez zrównoleglenie operacji odczytu i zapisu oraz przeliczania.

Jest plik A oraz plik B, każdy o tej samej wielkości. Program ma pliku P zapisać wynik operacji XOR dotychczasowej zawartości pliku A i pliku P. Ponieważ docelowo program ma pracować z dużymi plikami rzędu dziesiątek i setek GB, próby ładowania całej treści do pamięci nie mają sensu, więc program przetwarza dane kawałkami.

Na potrzeby testu, obliczanie XOR jest celowo wykonywane trzykrotnie, bo zależalo mi na tym, żeby ta czynność trwała gdzieś od 50 do 80% czasu odczytu lub zapisu kawałka. Pliki mają po 2GB, przeprowadziłem dwukrotnie test przy przetwarzaniu 32 kawałków po 64MB oraz 16 kawałków po 128MB. Za każdym razem pliki zostały przetworzone poprawnie, ja to kontrolowałem.

Natomiast nurtują mnie dwie sprawy:

  1. Program, na początku tworzy 6 tablic o wielkości jednego kawałka każda, w trakcie działania nie tworzy ani nie niszczy tablic. Chciałem spróbować dla wielkości kawałka 256MB, ale jak program zaalokował 5 tablic, to przy szóstej wywalił "std::bad_alloc". Cały komputer ma 4GB, jest Windows 8 64-bit, dodatkowo 700MB swapu, bezpośrednio przed uruchomieniem programu było zajęte ok. 25-30% według menedżera zadań. W tym przypadku teoretycznie powinno być możliwe zaalokowanie 6 tablic, czyli 1536MB, a nawet 1700MB licząc interfejs, pozostałe zmienne, kod itp. Dlaczego nie dało się tyle zaalokować pomimo wystarczającej ilości wolnej pamięci?
  2. Pliki A i P są fizycznie na różnych dyskach twardych, ale okazało się, że przy jednoczesnym odczycie tych plików, odczyt każdego pliku z osobna trwa dłużej niż odczyt tych plików jeden po drugim w jednym wątku. W porównaniu do pamięci RAM, transfer dysku jest bardzo powolny, więc skąd wynika to wydłużenie, pomimo, że pliki są na różnych dyskach, więc odczyt jeden po drugim, czy jednocześnie nie powinno wpływać na prędkość odczytu. Z czego wynika dłuższa operacja odczytu przy odczycie dwóch plików z dwóch różnych dysków? Gdyby oba pliki były na tym samym dysku, to przyczyna byłaby oczywista.

Program tworzę w QtCreator, który kompiluje za pomocą MinGW32, program buduję jako Release. Zamieszczam kod najważniejszej klasy i wynik testu. Procedura, którą należy uruchomić, to TestProc(). Czasy wyświetlone na ekranie to czasy w milisekundach dla poszczególnych czynności i czas w milisekundach dla całości. W kodzie jest rozpisana kolejność operacji w czasie dla danych składających się z 4 kawałków. Znak ' w tym opisie oznacza, że operację wykonuje się na buforze [1], a brak znaku ' oznacza, że operacje wykonuje się na buforze [0].

#ifndef APPCORE_H
#define APPCORE_H

#include <string>
#include <thread>
#include <fstream>
#include <iostream>
#include <QTime>

using namespace std;

typedef long long llong;

class AppCore
{
public:
    AppCore();
    ~AppCore();
    void TestProc();
    void TestCalc(char * A, char * P, char * R, llong ChunkNr);
    llong ChunkSize;
    void ChunkRead(string FileName, llong ChunkNr, char * Buf);
    void ChunkWrite(string FileName, llong ChunkNr, char * Buf);
};

#endif // APPCORE_H
#include "appcore.h"

AppCore::AppCore()
{
    ChunkSize = 64 * 1024 * 1024;
}

AppCore::~AppCore()
{

}

///
/// \brief AppCore::ChunkRead - Odczyt elementu danych z pliku
/// \param FileName - Nazwa pliku
/// \param Offset - Numer elementu
/// \param Buf - Bufor
///
void AppCore::ChunkRead(string FileName, llong ChunkNr, char *Buf)
{
    QTime T;
    T.start();
    fstream F(FileName.c_str(), ios::in|ios::binary);
    F.seekg(ChunkNr * ChunkSize);
    F.read(Buf, ChunkSize);
    F.close();
    cout << "Read chunk " << ChunkNr << " from " << FileName << ": " << T.elapsed() << endl;
}

///
/// \brief AppCore::ChunkWrite - Zapis elementu danych do pliku
/// \param FileName - Nazwa pliku
/// \param Offset - Numer elementu
/// \param Buf - Bufor
///
void AppCore::ChunkWrite(string FileName, llong ChunkNr, char *Buf)
{
    QTime T;
    T.start();
    fstream F(FileName.c_str(), ios::in|ios::out|ios::binary);
    F.seekp(ChunkNr * ChunkSize);
    F.write(Buf, ChunkSize);
    F.close();
    cout << "Write chunk " << ChunkNr << " to " << FileName << ":  " << T.elapsed() << endl;
}

///
/// \brief AppCore::TestCalc - Operacje na elemencie
/// \param A - Element A jako dana
/// \param P - Element P jako dana
/// \param Res - Element P jako rezultat w osobnej instancji
///
void AppCore::TestCalc(char *A, char *P, char *R, llong ChunkNr)
{
    QTime T;
    T.start();
    for (llong I = 0; I <= ChunkSize; I++)
    {
        R[I] = A[I] ^ P[I];
    }
    for (llong I = 0; I <= ChunkSize; I++)
    {
        R[I] = A[I] ^ P[I];
    }
    for (llong I = 0; I <= ChunkSize; I++)
    {
        R[I] = A[I] ^ P[I];
    }
    cout << "Process chunk " << ChunkNr << ":            " << T.elapsed() << endl;
}

void AppCore::TestProc()
{
    cout << "START" << endl;

    string FA = "G:\\A.dat";
    string FP = "D:\\P.dat";
    llong ChunkQuan = 32;
    llong ChunkQuan1 = ChunkQuan - 1;
    int AlternateBuf;

    char ** BufA = new char*[2];
    char ** BufP = new char*[2];
    char ** BufR = new char*[2];
    BufA[0] = new char[ChunkSize];
    BufP[0] = new char[ChunkSize];
    BufR[0] = new char[ChunkSize];
    BufA[1] = new char[ChunkSize];
    BufP[1] = new char[ChunkSize];
    BufR[1] = new char[ChunkSize];


    cout << "Wersja bez watkow intuicyjna" << endl;
    // Calc  [      C0    |      C1    |      C2   |      C3    ]
    // DataA [R0          |R1          |R2         |R3          ]
    // DataP [   R0    W0 |   R1    W1 |   R2   W2 |   R3    W3 ]
    QTime TotalTime;
    TotalTime.start();
    for (int I = 0; I < ChunkQuan; I++)
    {
        ChunkRead(FA, I, BufA[0]);
        ChunkRead(FP, I, BufP[0]);
        TestCalc(BufA[0], BufP[0], BufR[0], I);
        ChunkWrite(FP, I, BufR[0]);
    }
    cout << "Total time: " << TotalTime.elapsed() << endl << endl;


    cout << "Wersja bez watkow symulujaca wersje z watkami" << endl;
    // Calc  [      C0 |      C1'   |      C2   |      C3'   |   ]
    // DataA [R0       |R1'         |R2         |R3'         |   ]
    // DataP [   R0    |   R1'   W0 |   R2   W1'|   R3'   W2 |W3']
    TotalTime.restart();
    ChunkRead(FA, 0, BufA[0]);
    ChunkRead(FP, 0, BufP[0]);
    TestCalc(BufA[0], BufP[0], BufR[0], 0);
    AlternateBuf = 1;
    for (llong I = 1; I < ChunkQuan; I++)
    {
        ChunkRead(FA, I, BufA[AlternateBuf]);
        ChunkRead(FP, I, BufP[AlternateBuf]);
        TestCalc(BufA[AlternateBuf], BufP[AlternateBuf], BufR[AlternateBuf], I);
        ChunkWrite(FP, I - 1, BufR[1 - AlternateBuf]);

        AlternateBuf = 1 - AlternateBuf;
    }
    ChunkWrite(FP, ChunkQuan1, BufR[1 - AlternateBuf]);
    cout << "Total time: " << TotalTime.elapsed() << endl << endl;


    cout << "Wersja z watkami" << endl;
    // Calc  [   C0 |   C1'|   C2 |   C3'|   ]
    // DataA [R0    |R1'   |R2    |R3'   |   ]
    // DataP [R0    |R1'W0 |R2 W1'|R3'W2 |W3']
    TotalTime.restart();
    thread Thr1Pre(&AppCore::ChunkRead, this, FA, 0, BufA[0]);
    thread Thr2Pre(&AppCore::ChunkRead, this, FP, 0, BufP[0]);
    Thr1Pre.join();
    Thr2Pre.join();
    thread Thr3Pre(&AppCore::TestCalc, this, BufA[0], BufP[0], BufR[0], 0);
    Thr3Pre.join();
    AlternateBuf = 1;
    for (llong I = 1; I < ChunkQuan; I++)
    {
        thread Thr1Loop(&AppCore::ChunkRead, this, FA, I, BufA[AlternateBuf]);
        thread Thr2Loop(&AppCore::ChunkRead, this, FP, I, BufP[AlternateBuf]);
        Thr1Loop.join();
        Thr2Loop.join();
        thread Thr3Loop(&AppCore::TestCalc, this, BufA[AlternateBuf], BufP[AlternateBuf], BufR[AlternateBuf], I);
        thread Thr4Loop(&AppCore::ChunkWrite, this, FP, I - 1, BufR[1 - AlternateBuf]);
        Thr3Loop.join();
        Thr4Loop.join();
        AlternateBuf = 1 - AlternateBuf;
    }
    thread Thr1Post(&AppCore::ChunkWrite, this, FP, ChunkQuan1, BufR[1 - AlternateBuf]);
    Thr1Post.join();
    cout << "Total time: " << TotalTime.elapsed() << endl << endl;

    delete[] BufA[0];
    delete[] BufP[0];
    delete[] BufR[0];
    delete[] BufA[1];
    delete[] BufP[1];
    delete[] BufR[1];
    delete[] BufA;
    delete[] BufP;
    delete[] BufR;

    cout << "STOP" << endl;
}
START
Wersja bez watkow intuicyjna
Read chunk 0 from G:\A.dat: 1205
Read chunk 0 from D:\P.dat: 713
Process chunk 0:            456
Write chunk 0 to D:\P.dat:  592
Read chunk 1 from G:\A.dat: 884
Read chunk 1 from D:\P.dat: 576
Process chunk 1:            426
Write chunk 1 to D:\P.dat:  564
Read chunk 2 from G:\A.dat: 1004
Read chunk 2 from D:\P.dat: 617
Process chunk 2:            427
Write chunk 2 to D:\P.dat:  561
Read chunk 3 from G:\A.dat: 1010
Read chunk 3 from D:\P.dat: 644
Process chunk 3:            426
Write chunk 3 to D:\P.dat:  584
Read chunk 4 from G:\A.dat: 998
Read chunk 4 from D:\P.dat: 803
Process chunk 4:            425
Write chunk 4 to D:\P.dat:  600
Read chunk 5 from G:\A.dat: 957
Read chunk 5 from D:\P.dat: 823
Process chunk 5:            425
Write chunk 5 to D:\P.dat:  597
Read chunk 6 from G:\A.dat: 989
Read chunk 6 from D:\P.dat: 677
Process chunk 6:            425
Write chunk 6 to D:\P.dat:  537
Read chunk 7 from G:\A.dat: 1009
Read chunk 7 from D:\P.dat: 724
Process chunk 7:            425
Write chunk 7 to D:\P.dat:  569
Read chunk 8 from G:\A.dat: 1035
Read chunk 8 from D:\P.dat: 745
Process chunk 8:            425
Write chunk 8 to D:\P.dat:  582
Read chunk 9 from G:\A.dat: 984
Read chunk 9 from D:\P.dat: 649
Process chunk 9:            425
Write chunk 9 to D:\P.dat:  579
Read chunk 10 from G:\A.dat: 951
Read chunk 10 from D:\P.dat: 535
Process chunk 10:            426
Write chunk 10 to D:\P.dat:  674
Read chunk 11 from G:\A.dat: 958
Read chunk 11 from D:\P.dat: 677
Process chunk 11:            426
Write chunk 11 to D:\P.dat:  519
Read chunk 12 from G:\A.dat: 992
Read chunk 12 from D:\P.dat: 799
Process chunk 12:            425
Write chunk 12 to D:\P.dat:  582
Read chunk 13 from G:\A.dat: 999
Read chunk 13 from D:\P.dat: 764
Process chunk 13:            426
Write chunk 13 to D:\P.dat:  607
Read chunk 14 from G:\A.dat: 996
Read chunk 14 from D:\P.dat: 1495
Process chunk 14:            426
Write chunk 14 to D:\P.dat:  565
Read chunk 15 from G:\A.dat: 1050
Read chunk 15 from D:\P.dat: 780
Process chunk 15:            426
Write chunk 15 to D:\P.dat:  570
Read chunk 16 from G:\A.dat: 1112
Read chunk 16 from D:\P.dat: 881
Process chunk 16:            426
Write chunk 16 to D:\P.dat:  706
Read chunk 17 from G:\A.dat: 1040
Read chunk 17 from D:\P.dat: 826
Process chunk 17:            425
Write chunk 17 to D:\P.dat:  558
Read chunk 18 from G:\A.dat: 994
Read chunk 18 from D:\P.dat: 770
Process chunk 18:            427
Write chunk 18 to D:\P.dat:  562
Read chunk 19 from G:\A.dat: 1024
Read chunk 19 from D:\P.dat: 804
Process chunk 19:            425
Write chunk 19 to D:\P.dat:  533
Read chunk 20 from G:\A.dat: 994
Read chunk 20 from D:\P.dat: 871
Process chunk 20:            426
Write chunk 20 to D:\P.dat:  574
Read chunk 21 from G:\A.dat: 1010
Read chunk 21 from D:\P.dat: 854
Process chunk 21:            426
Write chunk 21 to D:\P.dat:  663
Read chunk 22 from G:\A.dat: 1111
Read chunk 22 from D:\P.dat: 823
Process chunk 22:            426
Write chunk 22 to D:\P.dat:  609
Read chunk 23 from G:\A.dat: 1115
Read chunk 23 from D:\P.dat: 758
Process chunk 23:            425
Write chunk 23 to D:\P.dat:  539
Read chunk 24 from G:\A.dat: 906
Read chunk 24 from D:\P.dat: 851
Process chunk 24:            425
Write chunk 24 to D:\P.dat:  561
Read chunk 25 from G:\A.dat: 1018
Read chunk 25 from D:\P.dat: 859
Process chunk 25:            426
Write chunk 25 to D:\P.dat:  641
Read chunk 26 from G:\A.dat: 999
Read chunk 26 from D:\P.dat: 812
Process chunk 26:            426
Write chunk 26 to D:\P.dat:  544
Read chunk 27 from G:\A.dat: 1039
Read chunk 27 from D:\P.dat: 804
Process chunk 27:            427
Write chunk 27 to D:\P.dat:  534
Read chunk 28 from G:\A.dat: 948
Read chunk 28 from D:\P.dat: 849
Process chunk 28:            425
Write chunk 28 to D:\P.dat:  558
Read chunk 29 from G:\A.dat: 968
Read chunk 29 from D:\P.dat: 923
Process chunk 29:            426
Write chunk 29 to D:\P.dat:  584
Read chunk 30 from G:\A.dat: 992
Read chunk 30 from D:\P.dat: 909
Process chunk 30:            425
Write chunk 30 to D:\P.dat:  640
Read chunk 31 from G:\A.dat: 993
Read chunk 31 from D:\P.dat: 789
Process chunk 31:            426
Write chunk 31 to D:\P.dat:  656
Total time: 90088

Wersja bez watkow symulujaca wersje z watkami
Read chunk 0 from G:\A.dat: 1190
Read chunk 0 from D:\P.dat: 864
Process chunk 0:            428
Read chunk 1 from G:\A.dat: 897
Read chunk 1 from D:\P.dat: 809
Process chunk 1:            456
Write chunk 0 to D:\P.dat:  578
Read chunk 2 from G:\A.dat: 994
Read chunk 2 from D:\P.dat: 736
Process chunk 2:            427
Write chunk 1 to D:\P.dat:  538
Read chunk 3 from G:\A.dat: 986
Read chunk 3 from D:\P.dat: 828
Process chunk 3:            426
Write chunk 2 to D:\P.dat:  557
Read chunk 4 from G:\A.dat: 995
Read chunk 4 from D:\P.dat: 827
Process chunk 4:            426
Write chunk 3 to D:\P.dat:  671
Read chunk 5 from G:\A.dat: 955
Read chunk 5 from D:\P.dat: 824
Process chunk 5:            427
Write chunk 4 to D:\P.dat:  577
Read chunk 6 from G:\A.dat: 970
Read chunk 6 from D:\P.dat: 719
Process chunk 6:            426
Write chunk 5 to D:\P.dat:  596
Read chunk 7 from G:\A.dat: 1003
Read chunk 7 from D:\P.dat: 754
Process chunk 7:            426
Write chunk 6 to D:\P.dat:  529
Read chunk 8 from G:\A.dat: 1019
Read chunk 8 from D:\P.dat: 771
Process chunk 8:            426
Write chunk 7 to D:\P.dat:  562
Read chunk 9 from G:\A.dat: 999
Read chunk 9 from D:\P.dat: 753
Process chunk 9:            426
Write chunk 8 to D:\P.dat:  567
Read chunk 10 from G:\A.dat: 945
Read chunk 10 from D:\P.dat: 753
Process chunk 10:            427
Write chunk 9 to D:\P.dat:  553
Read chunk 11 from G:\A.dat: 944
Read chunk 11 from D:\P.dat: 748
Process chunk 11:            426
Write chunk 10 to D:\P.dat:  527
Read chunk 12 from G:\A.dat: 996
Read chunk 12 from D:\P.dat: 807
Process chunk 12:            429
Write chunk 11 to D:\P.dat:  551
Read chunk 13 from G:\A.dat: 995
Read chunk 13 from D:\P.dat: 823
Process chunk 13:            426
Write chunk 12 to D:\P.dat:  575
Read chunk 14 from G:\A.dat: 994
Read chunk 14 from D:\P.dat: 791
Process chunk 14:            427
Write chunk 13 to D:\P.dat:  604
Read chunk 15 from G:\A.dat: 1043
Read chunk 15 from D:\P.dat: 761
Process chunk 15:            426
Write chunk 14 to D:\P.dat:  550
Read chunk 16 from G:\A.dat: 1138
Read chunk 16 from D:\P.dat: 827
Process chunk 16:            427
Write chunk 15 to D:\P.dat:  548
Read chunk 17 from G:\A.dat: 1082
Read chunk 17 from D:\P.dat: 836
Process chunk 17:            426
Write chunk 16 to D:\P.dat:  576
Read chunk 18 from G:\A.dat: 993
Read chunk 18 from D:\P.dat: 815
Process chunk 18:            428
Write chunk 17 to D:\P.dat:  559
Read chunk 19 from G:\A.dat: 1230
Read chunk 19 from D:\P.dat: 816
Process chunk 19:            426
Write chunk 18 to D:\P.dat:  546
Read chunk 20 from G:\A.dat: 897
Read chunk 20 from D:\P.dat: 854
Process chunk 20:            429
Write chunk 19 to D:\P.dat:  626
Read chunk 21 from G:\A.dat: 995
Read chunk 21 from D:\P.dat: 830
Process chunk 21:            426
Write chunk 20 to D:\P.dat:  586
Read chunk 22 from G:\A.dat: 1130
Read chunk 22 from D:\P.dat: 828
Process chunk 22:            427
Write chunk 21 to D:\P.dat:  599
Read chunk 23 from G:\A.dat: 1105
Read chunk 23 from D:\P.dat: 742
Process chunk 23:            428
Write chunk 22 to D:\P.dat:  620
Read chunk 24 from G:\A.dat: 984
Read chunk 24 from D:\P.dat: 771
Process chunk 24:            427
Write chunk 23 to D:\P.dat:  531
Read chunk 25 from G:\A.dat: 1018
Read chunk 25 from D:\P.dat: 847
Process chunk 25:            426
Write chunk 24 to D:\P.dat:  569
Read chunk 26 from G:\A.dat: 997
Read chunk 26 from D:\P.dat: 760
Process chunk 26:            427
Write chunk 25 to D:\P.dat:  584
Read chunk 27 from G:\A.dat: 1002
Read chunk 27 from D:\P.dat: 812
Process chunk 27:            426
Write chunk 26 to D:\P.dat:  539
Read chunk 28 from G:\A.dat: 960
Read chunk 28 from D:\P.dat: 832
Process chunk 28:            427
Write chunk 27 to D:\P.dat:  546
Read chunk 29 from G:\A.dat: 959
Read chunk 29 from D:\P.dat: 857
Process chunk 29:            426
Write chunk 28 to D:\P.dat:  586
Read chunk 30 from G:\A.dat: 997
Read chunk 30 from D:\P.dat: 905
Process chunk 30:            426
Write chunk 29 to D:\P.dat:  591
Read chunk 31 from G:\A.dat: 991
Read chunk 31 from D:\P.dat: 854
Process chunk 31:            426
Write chunk 30 to D:\P.dat:  631
Write chunk 31 to D:\P.dat:  589
Total time: 90204

Wersja z watkami
Read chunk 0 from G:\A.dat: 1281
Read chunk 0 from D:\P.dat: 1295
Process chunk 0:            425
Read chunk 1 from G:\A.dat: 933
Read chunk 1 from D:\P.dat: 984
Process chunk 1:            428
Write chunk 0 to D:\P.dat:  694
Read chunk 2 from G:\A.dat: 1063
Read chunk 2 from D:\P.dat: 1064
Process chunk 2:            427
Write chunk 1 to D:\P.dat:  534
Read chunk 3 from G:\A.dat: 1069
Read chunk 3 from D:\P.dat: 1123
Process chunk 3:            427
Write chunk 2 to D:\P.dat:  652
Read chunk 4 from G:\A.dat: 1044
Read chunk 4 from D:\P.dat: 1089
Process chunk 4:            428
Write chunk 3 to D:\P.dat:  679
Read chunk 5 from G:\A.dat: 1031
Read chunk 5 from D:\P.dat: 1077
Process chunk 5:            429
Write chunk 4 to D:\P.dat:  642
Read chunk 6 from D:\P.dat: 1051
Read chunk 6 from G:\A.dat: 1053
Process chunk 6:            428
Write chunk 5 to D:\P.dat:  607
Read chunk 7 from G:\A.dat: 1032
Read chunk 7 from D:\P.dat: 1080
Process chunk 7:            428
Write chunk 6 to D:\P.dat:  581
Read chunk 8 from G:\A.dat: 1055
Read chunk 8 from D:\P.dat: 1099
Process chunk 8:            429
Write chunk 7 to D:\P.dat:  663
Read chunk 9 from G:\A.dat: 1055
Read chunk 9 from D:\P.dat: 1149
Process chunk 9:            427
Write chunk 8 to D:\P.dat:  678
Read chunk 10 from G:\A.dat: 1017
Read chunk 10 from D:\P.dat: 1085
Process chunk 10:            427
Write chunk 9 to D:\P.dat:  623
Read chunk 11 from G:\A.dat: 1013
Read chunk 11 from D:\P.dat: 1014
Process chunk 11:            427
Write chunk 10 to D:\P.dat:  679
Read chunk 12 from G:\A.dat: 1067
Read chunk 12 from D:\P.dat: 1124
Process chunk 12:            429
Write chunk 11 to D:\P.dat:  770
Read chunk 13 from D:\P.dat: 1055
Read chunk 13 from G:\A.dat: 1057
Process chunk 13:            429
Write chunk 12 to D:\P.dat:  604
Read chunk 14 from G:\A.dat: 1072
Read chunk 14 from D:\P.dat: 1108
Process chunk 14:            429
Write chunk 13 to D:\P.dat:  679
Read chunk 15 from G:\A.dat: 1127
Read chunk 15 from D:\P.dat: 1212
Process chunk 15:            428
Write chunk 14 to D:\P.dat:  698
Read chunk 16 from G:\A.dat: 1203
Read chunk 16 from D:\P.dat: 1204
Process chunk 16:            428
Write chunk 15 to D:\P.dat:  581
Read chunk 17 from G:\A.dat: 1115
Read chunk 17 from D:\P.dat: 1171
Process chunk 17:            428
Write chunk 16 to D:\P.dat:  688
Read chunk 18 from G:\A.dat: 1052
Read chunk 18 from D:\P.dat: 1101
Process chunk 18:            427
Write chunk 17 to D:\P.dat:  705
Read chunk 19 from D:\P.dat: 1087
Read chunk 19 from G:\A.dat: 1090
Process chunk 19:            428
Write chunk 18 to D:\P.dat:  586
Read chunk 20 from G:\A.dat: 1057
Read chunk 20 from D:\P.dat: 1126
Process chunk 20:            427
Write chunk 19 to D:\P.dat:  627
Read chunk 21 from G:\A.dat: 1086
Read chunk 21 from D:\P.dat: 1130
Process chunk 21:            428
Write chunk 20 to D:\P.dat:  768
Read chunk 22 from G:\A.dat: 1177
Read chunk 22 from D:\P.dat: 1178
Process chunk 22:            426
Write chunk 21 to D:\P.dat:  666
Read chunk 23 from G:\A.dat: 1178
Read chunk 23 from D:\P.dat: 1230
Process chunk 23:            427
Write chunk 22 to D:\P.dat:  696
Read chunk 24 from G:\A.dat: 1038
Read chunk 24 from D:\P.dat: 1096
Process chunk 24:            428
Write chunk 23 to D:\P.dat:  756
Read chunk 25 from D:\P.dat: 1041
Read chunk 25 from G:\A.dat: 1043
Process chunk 25:            429
Write chunk 24 to D:\P.dat:  604
Read chunk 26 from G:\A.dat: 1004
Read chunk 26 from D:\P.dat: 1110
Process chunk 26:            428
Write chunk 25 to D:\P.dat:  664
Read chunk 27 from G:\A.dat: 1040
Read chunk 27 from D:\P.dat: 1094
Process chunk 27:            428
Write chunk 26 to D:\P.dat:  966
Read chunk 28 from G:\A.dat: 1020
Read chunk 28 from D:\P.dat: 1025
Process chunk 28:            427
Write chunk 27 to D:\P.dat:  555
Read chunk 29 from G:\A.dat: 1055
Read chunk 29 from D:\P.dat: 1150
Process chunk 29:            428
Write chunk 28 to D:\P.dat:  623
Read chunk 30 from G:\A.dat: 1077
Read chunk 30 from D:\P.dat: 1124
Process chunk 30:            427
Write chunk 29 to D:\P.dat:  771
Read chunk 31 from G:\A.dat: 1086
Read chunk 31 from D:\P.dat: 1088
Process chunk 31:            428
Write chunk 30 to D:\P.dat:  659
Write chunk 31 to D:\P.dat:  547
Total time: 57286

STOP


START
Wersja bez watkow intuicyjna
Read chunk 0 from G:\A.dat: 1199
Read chunk 0 from D:\P.dat: 875
Process chunk 0:            446
Write chunk 0 to D:\P.dat:  549
Read chunk 1 from G:\A.dat: 895
Read chunk 1 from D:\P.dat: 666
Process chunk 1:            427
Write chunk 1 to D:\P.dat:  540
Read chunk 2 from G:\A.dat: 996
Read chunk 2 from D:\P.dat: 742
Process chunk 2:            427
Write chunk 2 to D:\P.dat:  529
Read chunk 3 from G:\A.dat: 1000
Read chunk 3 from D:\P.dat: 784
Process chunk 3:            427
Write chunk 3 to D:\P.dat:  570
Read chunk 4 from G:\A.dat: 968
Read chunk 4 from D:\P.dat: 808
Process chunk 4:            426
Write chunk 4 to D:\P.dat:  642
Read chunk 5 from G:\A.dat: 958
Read chunk 5 from D:\P.dat: 911
Process chunk 5:            426
Write chunk 5 to D:\P.dat:  629
Read chunk 6 from G:\A.dat: 987
Read chunk 6 from D:\P.dat: 799
Process chunk 6:            426
Write chunk 6 to D:\P.dat:  637
Read chunk 7 from G:\A.dat: 1001
Read chunk 7 from D:\P.dat: 836
Process chunk 7:            426
Write chunk 7 to D:\P.dat:  562
Read chunk 8 from G:\A.dat: 1039
Read chunk 8 from D:\P.dat: 887
Process chunk 8:            426
Write chunk 8 to D:\P.dat:  581
Read chunk 9 from G:\A.dat: 1009
Read chunk 9 from D:\P.dat: 760
Process chunk 9:            426
Write chunk 9 to D:\P.dat:  633
Read chunk 10 from G:\A.dat: 977
Read chunk 10 from D:\P.dat: 778
Process chunk 10:            428
Write chunk 10 to D:\P.dat:  543
Read chunk 11 from G:\A.dat: 954
Read chunk 11 from D:\P.dat: 768
Process chunk 11:            427
Write chunk 11 to D:\P.dat:  543
Read chunk 12 from G:\A.dat: 995
Read chunk 12 from D:\P.dat: 789
Process chunk 12:            427
Write chunk 12 to D:\P.dat:  582
Read chunk 13 from G:\A.dat: 1007
Read chunk 13 from D:\P.dat: 842
Process chunk 13:            427
Write chunk 13 to D:\P.dat:  615
Read chunk 14 from G:\A.dat: 1005
Read chunk 14 from D:\P.dat: 841
Process chunk 14:            426
Write chunk 14 to D:\P.dat:  575
Read chunk 15 from G:\A.dat: 1070
Read chunk 15 from D:\P.dat: 764
Process chunk 15:            426
Write chunk 15 to D:\P.dat:  540
Read chunk 16 from G:\A.dat: 1110
Read chunk 16 from D:\P.dat: 887
Process chunk 16:            425
Write chunk 16 to D:\P.dat:  577
Read chunk 17 from G:\A.dat: 1055
Read chunk 17 from D:\P.dat: 819
Process chunk 17:            425
Write chunk 17 to D:\P.dat:  562
Read chunk 18 from G:\A.dat: 998
Read chunk 18 from D:\P.dat: 841
Process chunk 18:            426
Write chunk 18 to D:\P.dat:  541
Read chunk 19 from G:\A.dat: 975
Read chunk 19 from D:\P.dat: 804
Process chunk 19:            426
Write chunk 19 to D:\P.dat:  546
Read chunk 20 from G:\A.dat: 885
Read chunk 20 from D:\P.dat: 862
Process chunk 20:            426
Write chunk 20 to D:\P.dat:  568
Read chunk 21 from G:\A.dat: 996
Read chunk 21 from D:\P.dat: 860
Process chunk 21:            425
Write chunk 21 to D:\P.dat:  618
Read chunk 22 from G:\A.dat: 1096
Read chunk 22 from D:\P.dat: 890
Process chunk 22:            427
Write chunk 22 to D:\P.dat:  656
Read chunk 23 from G:\A.dat: 1107
Read chunk 23 from D:\P.dat: 752
Process chunk 23:            426
Write chunk 23 to D:\P.dat:  525
Read chunk 24 from G:\A.dat: 998
Read chunk 24 from D:\P.dat: 777
Process chunk 24:            427
Write chunk 24 to D:\P.dat:  561
Read chunk 25 from G:\A.dat: 1007
Read chunk 25 from D:\P.dat: 763
Process chunk 25:            426
Write chunk 25 to D:\P.dat:  565
Read chunk 26 from G:\A.dat: 989
Read chunk 26 from D:\P.dat: 752
Process chunk 26:            426
Write chunk 26 to D:\P.dat:  558
Read chunk 27 from G:\A.dat: 988
Read chunk 27 from D:\P.dat: 741
Process chunk 27:            427
Write chunk 27 to D:\P.dat:  525
Read chunk 28 from G:\A.dat: 949
Read chunk 28 from D:\P.dat: 752
Process chunk 28:            426
Write chunk 28 to D:\P.dat:  599
Read chunk 29 from G:\A.dat: 963
Read chunk 29 from D:\P.dat: 793
Process chunk 29:            426
Write chunk 29 to D:\P.dat:  565
Read chunk 30 from G:\A.dat: 1010
Read chunk 30 from D:\P.dat: 824
Process chunk 30:            426
Write chunk 30 to D:\P.dat:  598
Read chunk 31 from G:\A.dat: 1004
Read chunk 31 from D:\P.dat: 823
Process chunk 31:            426
Write chunk 31 to D:\P.dat:  574
Total time: 90050

Wersja bez watkow symulujaca wersje z watkami
Read chunk 0 from G:\A.dat: 1222
Read chunk 0 from D:\P.dat: 906
Process chunk 0:            426
Read chunk 1 from G:\A.dat: 930
Read chunk 1 from D:\P.dat: 700
Process chunk 1:            452
Write chunk 0 to D:\P.dat:  563
Read chunk 2 from G:\A.dat: 1012
Read chunk 2 from D:\P.dat: 735
Process chunk 2:            427
Write chunk 1 to D:\P.dat:  608
Read chunk 3 from G:\A.dat: 997
Read chunk 3 from D:\P.dat: 758
Process chunk 3:            423
Write chunk 2 to D:\P.dat:  529
Read chunk 4 from G:\A.dat: 980
Read chunk 4 from D:\P.dat: 788
Process chunk 4:            426
Write chunk 3 to D:\P.dat:  638
Read chunk 5 from G:\A.dat: 955
Read chunk 5 from D:\P.dat: 881
Process chunk 5:            423
Write chunk 4 to D:\P.dat:  581
Read chunk 6 from G:\A.dat: 996
Read chunk 6 from D:\P.dat: 755
Process chunk 6:            426
Write chunk 5 to D:\P.dat:  601
Read chunk 7 from G:\A.dat: 975
Read chunk 7 from D:\P.dat: 814
Process chunk 7:            422
Write chunk 6 to D:\P.dat:  540
Read chunk 8 from G:\A.dat: 1024
Read chunk 8 from D:\P.dat: 873
Process chunk 8:            426
Write chunk 7 to D:\P.dat:  569
Read chunk 9 from G:\A.dat: 1025
Read chunk 9 from D:\P.dat: 785
Process chunk 9:            424
Write chunk 8 to D:\P.dat:  600
Read chunk 10 from G:\A.dat: 964
Read chunk 10 from D:\P.dat: 823
Process chunk 10:            426
Write chunk 9 to D:\P.dat:  554
Read chunk 11 from G:\A.dat: 958
Read chunk 11 from D:\P.dat: 836
Process chunk 11:            423
Write chunk 10 to D:\P.dat:  568
Read chunk 12 from G:\A.dat: 989
Read chunk 12 from D:\P.dat: 872
Process chunk 12:            426
Write chunk 11 to D:\P.dat:  558
Read chunk 13 from G:\A.dat: 998
Read chunk 13 from D:\P.dat: 903
Process chunk 13:            422
Write chunk 12 to D:\P.dat:  583
Read chunk 14 from G:\A.dat: 1001
Read chunk 14 from D:\P.dat: 815
Process chunk 14:            425
Write chunk 13 to D:\P.dat:  702
Read chunk 15 from G:\A.dat: 1022
Read chunk 15 from D:\P.dat: 754
Process chunk 15:            423
Write chunk 14 to D:\P.dat:  562
Read chunk 16 from G:\A.dat: 1270
Read chunk 16 from D:\P.dat: 829
Process chunk 16:            426
Write chunk 15 to D:\P.dat:  531
Read chunk 17 from G:\A.dat: 1062
Read chunk 17 from D:\P.dat: 849
Process chunk 17:            422
Write chunk 16 to D:\P.dat:  602
Read chunk 18 from G:\A.dat: 1004
Read chunk 18 from D:\P.dat: 802
Process chunk 18:            425
Write chunk 17 to D:\P.dat:  564
Read chunk 19 from G:\A.dat: 1003
Read chunk 19 from D:\P.dat: 804
Process chunk 19:            423
Write chunk 18 to D:\P.dat:  613
Read chunk 20 from G:\A.dat: 885
Read chunk 20 from D:\P.dat: 862
Process chunk 20:            426
Write chunk 19 to D:\P.dat:  528
Read chunk 21 from G:\A.dat: 998
Read chunk 21 from D:\P.dat: 899
Process chunk 21:            423
Write chunk 20 to D:\P.dat:  588
Read chunk 22 from G:\A.dat: 1101
Read chunk 22 from D:\P.dat: 901
Process chunk 22:            425
Write chunk 21 to D:\P.dat:  621
Read chunk 23 from G:\A.dat: 1110
Read chunk 23 from D:\P.dat: 749
Process chunk 23:            423
Write chunk 22 to D:\P.dat:  599
Read chunk 24 from G:\A.dat: 977
Read chunk 24 from D:\P.dat: 769
Process chunk 24:            426
Write chunk 23 to D:\P.dat:  524
Read chunk 25 from G:\A.dat: 990
Read chunk 25 from D:\P.dat: 784
Process chunk 25:            423
Write chunk 24 to D:\P.dat:  560
Read chunk 26 from G:\A.dat: 991
Read chunk 26 from D:\P.dat: 767
Process chunk 26:            427
Write chunk 25 to D:\P.dat:  577
Read chunk 27 from G:\A.dat: 1015
Read chunk 27 from D:\P.dat: 745
Process chunk 27:            423
Write chunk 26 to D:\P.dat:  539
Read chunk 28 from G:\A.dat: 945
Read chunk 28 from D:\P.dat: 769
Process chunk 28:            427
Write chunk 27 to D:\P.dat:  541
Read chunk 29 from G:\A.dat: 967
Read chunk 29 from D:\P.dat: 789
Process chunk 29:            423
Write chunk 28 to D:\P.dat:  548
Read chunk 30 from G:\A.dat: 1009
Read chunk 30 from D:\P.dat: 836
Process chunk 30:            426
Write chunk 29 to D:\P.dat:  598
Read chunk 31 from G:\A.dat: 968
Read chunk 31 from D:\P.dat: 771
Process chunk 31:            423
Write chunk 30 to D:\P.dat:  631
Write chunk 31 to D:\P.dat:  548
Total time: 90348

Wersja z watkami
Read chunk 0 from D:\P.dat: 1249
Read chunk 0 from G:\A.dat: 1255
Process chunk 0:            426
Read chunk 1 from G:\A.dat: 925
Read chunk 1 from D:\P.dat: 1012
Process chunk 1:            425
Write chunk 0 to D:\P.dat:  586
Read chunk 2 from G:\A.dat: 1046
Read chunk 2 from D:\P.dat: 1090
Process chunk 2:            429
Write chunk 1 to D:\P.dat:  574
Read chunk 3 from G:\A.dat: 1094
Read chunk 3 from D:\P.dat: 1138
Process chunk 3:            424
Write chunk 2 to D:\P.dat:  560
Read chunk 4 from G:\A.dat: 1040
Read chunk 4 from D:\P.dat: 1095
Process chunk 4:            428
Write chunk 3 to D:\P.dat:  569
Read chunk 5 from D:\P.dat: 1007
Read chunk 5 from G:\A.dat: 1009
Process chunk 5:            424
Write chunk 4 to D:\P.dat:  640
Read chunk 6 from G:\A.dat: 1030
Read chunk 6 from D:\P.dat: 1074
Process chunk 6:            428
Write chunk 5 to D:\P.dat:  653
Read chunk 7 from G:\A.dat: 1052
Read chunk 7 from D:\P.dat: 1113
Process chunk 7:            425
Write chunk 6 to D:\P.dat:  603
Read chunk 8 from G:\A.dat: 1065
Read chunk 8 from D:\P.dat: 1124
Process chunk 8:            430
Write chunk 7 to D:\P.dat:  617
Read chunk 9 from D:\P.dat: 1051
Read chunk 9 from G:\A.dat: 1053
Process chunk 9:            425
Write chunk 8 to D:\P.dat:  582
Read chunk 10 from G:\A.dat: 1000
Read chunk 10 from D:\P.dat: 1040
Process chunk 10:            429
Write chunk 9 to D:\P.dat:  651
Read chunk 11 from G:\A.dat: 989
Read chunk 11 from D:\P.dat: 1046
Process chunk 11:            425
Write chunk 10 to D:\P.dat:  662
Read chunk 12 from G:\A.dat: 1067
Read chunk 12 from D:\P.dat: 1117
Process chunk 12:            429
Write chunk 11 to D:\P.dat:  674
Read chunk 13 from G:\A.dat: 1084
Read chunk 13 from D:\P.dat: 1163
Process chunk 13:            424
Write chunk 12 to D:\P.dat:  674
Read chunk 14 from G:\A.dat: 1043
Read chunk 14 from D:\P.dat: 1095
Process chunk 14:            428
Write chunk 13 to D:\P.dat:  695
Read chunk 15 from G:\A.dat: 1119
Read chunk 15 from D:\P.dat: 1173
Process chunk 15:            425
Write chunk 14 to D:\P.dat:  652
Read chunk 16 from G:\A.dat: 1174
Read chunk 16 from D:\P.dat: 1236
Process chunk 16:            429
Write chunk 15 to D:\P.dat:  609
Read chunk 17 from G:\A.dat: 1106
Read chunk 17 from D:\P.dat: 1166
Process chunk 17:            426
Write chunk 16 to D:\P.dat:  752
Read chunk 18 from G:\A.dat: 1037
Read chunk 18 from D:\P.dat: 1088
Process chunk 18:            428
Write chunk 17 to D:\P.dat:  627
Read chunk 19 from D:\P.dat: 1001
Read chunk 19 from G:\A.dat: 1068
Process chunk 19:            425
Write chunk 18 to D:\P.dat:  658
Read chunk 20 from G:\A.dat: 1006
Read chunk 20 from D:\P.dat: 1098
Process chunk 20:            428
Write chunk 19 to D:\P.dat:  693
Read chunk 21 from G:\A.dat: 1049
Read chunk 21 from D:\P.dat: 1099
Process chunk 21:            425
Write chunk 20 to D:\P.dat:  679
Read chunk 22 from G:\A.dat: 1154
Read chunk 22 from D:\P.dat: 1154
Process chunk 22:            428
Write chunk 21 to D:\P.dat:  632
Read chunk 23 from G:\A.dat: 1164
Read chunk 23 from D:\P.dat: 1252
Process chunk 23:            424
Write chunk 22 to D:\P.dat:  724
Read chunk 24 from G:\A.dat: 1039
Read chunk 24 from D:\P.dat: 1081
Process chunk 24:            428
Write chunk 23 to D:\P.dat:  639
Read chunk 25 from D:\P.dat: 1076
Read chunk 25 from G:\A.dat: 1079
Process chunk 25:            425
Write chunk 24 to D:\P.dat:  586
Read chunk 26 from G:\A.dat: 1067
Read chunk 26 from D:\P.dat: 1108
Process chunk 26:            428
Write chunk 25 to D:\P.dat:  705
Read chunk 27 from G:\A.dat: 1088
Read chunk 27 from D:\P.dat: 1137
Process chunk 27:            425
Write chunk 26 to D:\P.dat:  691
Read chunk 28 from G:\A.dat: 1016
Read chunk 28 from D:\P.dat: 1017
Process chunk 28:            429
Write chunk 27 to D:\P.dat:  547
Read chunk 29 from G:\A.dat: 1028
Read chunk 29 from D:\P.dat: 1028
Process chunk 29:            424
Write chunk 28 to D:\P.dat:  552
Read chunk 30 from G:\A.dat: 1051
Read chunk 30 from D:\P.dat: 1136
Process chunk 30:            428
Write chunk 29 to D:\P.dat:  690
Read chunk 31 from G:\A.dat: 1082
Read chunk 31 from D:\P.dat: 1134
Process chunk 31:            424
Write chunk 30 to D:\P.dat:  736
Write chunk 31 to D:\P.dat:  583
Total time: 56449

STOP



START
Wersja bez watkow intuicyjna
Read chunk 0 from G:\A.dat: 2596
Read chunk 0 from D:\P.dat: 1688
Process chunk 0:            910
Write chunk 0 to D:\P.dat:  1377
Read chunk 1 from G:\A.dat: 1910
Read chunk 1 from D:\P.dat: 1424
Process chunk 1:            846
Write chunk 1 to D:\P.dat:  1268
Read chunk 2 from G:\A.dat: 1939
Read chunk 2 from D:\P.dat: 1654
Process chunk 2:            847
Write chunk 2 to D:\P.dat:  1436
Read chunk 3 from G:\A.dat: 1990
Read chunk 3 from D:\P.dat: 1543
Process chunk 3:            846
Write chunk 3 to D:\P.dat:  1268
Read chunk 4 from G:\A.dat: 2022
Read chunk 4 from D:\P.dat: 1544
Process chunk 4:            847
Write chunk 4 to D:\P.dat:  1319
Read chunk 5 from G:\A.dat: 1933
Read chunk 5 from D:\P.dat: 1516
Process chunk 5:            847
Write chunk 5 to D:\P.dat:  1248
Read chunk 6 from G:\A.dat: 2000
Read chunk 6 from D:\P.dat: 1712
Process chunk 6:            848
Write chunk 6 to D:\P.dat:  1367
Read chunk 7 from G:\A.dat: 2929
Read chunk 7 from D:\P.dat: 1515
Process chunk 7:            847
Write chunk 7 to D:\P.dat:  1273
Read chunk 8 from G:\A.dat: 2198
Read chunk 8 from D:\P.dat: 1570
Process chunk 8:            848
Write chunk 8 to D:\P.dat:  1330
Read chunk 9 from G:\A.dat: 2043
Read chunk 9 from D:\P.dat: 2053
Process chunk 9:            847
Write chunk 9 to D:\P.dat:  1263
Read chunk 10 from G:\A.dat: 2023
Read chunk 10 from D:\P.dat: 1669
Process chunk 10:            848
Write chunk 10 to D:\P.dat:  1480
Read chunk 11 from G:\A.dat: 2227
Read chunk 11 from D:\P.dat: 1578
Process chunk 11:            847
Write chunk 11 to D:\P.dat:  1334
Read chunk 12 from G:\A.dat: 2013
Read chunk 12 from D:\P.dat: 1573
Process chunk 12:            847
Write chunk 12 to D:\P.dat:  1316
Read chunk 13 from G:\A.dat: 2009
Read chunk 13 from D:\P.dat: 1532
Process chunk 13:            846
Write chunk 13 to D:\P.dat:  1300
Read chunk 14 from G:\A.dat: 1929
Read chunk 14 from D:\P.dat: 1551
Process chunk 14:            847
Write chunk 14 to D:\P.dat:  1341
Read chunk 15 from G:\A.dat: 2005
Read chunk 15 from D:\P.dat: 1619
Process chunk 15:            847
Write chunk 15 to D:\P.dat:  1357
Total time: 94401

Wersja bez watkow symulujaca wersje z watkami
Read chunk 0 from G:\A.dat: 2204
Read chunk 0 from D:\P.dat: 1684
Process chunk 0:            847
Read chunk 1 from G:\A.dat: 1949
Read chunk 1 from D:\P.dat: 1505
Process chunk 1:            907
Write chunk 0 to D:\P.dat:  1271
Read chunk 2 from G:\A.dat: 1963
Read chunk 2 from D:\P.dat: 1634
Process chunk 2:            850
Write chunk 1 to D:\P.dat:  1277
Read chunk 3 from G:\A.dat: 2023
Read chunk 3 from D:\P.dat: 1587
Process chunk 3:            844
Write chunk 2 to D:\P.dat:  1363
Read chunk 4 from G:\A.dat: 2016
Read chunk 4 from D:\P.dat: 1573
Process chunk 4:            846
Write chunk 3 to D:\P.dat:  1248
Read chunk 5 from G:\A.dat: 1940
Read chunk 5 from D:\P.dat: 1527
Process chunk 5:            847
Write chunk 4 to D:\P.dat:  1280
Read chunk 6 from G:\A.dat: 2004
Read chunk 6 from D:\P.dat: 1649
Process chunk 6:            847
Write chunk 5 to D:\P.dat:  1235
Read chunk 7 from G:\A.dat: 2273
Read chunk 7 from D:\P.dat: 1528
Process chunk 7:            845
Write chunk 6 to D:\P.dat:  1357
Read chunk 8 from G:\A.dat: 2187
Read chunk 8 from D:\P.dat: 1607
Process chunk 8:            847
Write chunk 7 to D:\P.dat:  1296
Read chunk 9 from G:\A.dat: 2029
Read chunk 9 from D:\P.dat: 1512
Process chunk 9:            845
Write chunk 8 to D:\P.dat:  1300
Read chunk 10 from G:\A.dat: 2025
Read chunk 10 from D:\P.dat: 1674
Process chunk 10:            846
Write chunk 9 to D:\P.dat:  1242
Read chunk 11 from G:\A.dat: 2221
Read chunk 11 from D:\P.dat: 1634
Process chunk 11:            845
Write chunk 10 to D:\P.dat:  1349
Read chunk 12 from G:\A.dat: 2014
Read chunk 12 from D:\P.dat: 1573
Process chunk 12:            847
Write chunk 11 to D:\P.dat:  1288
Read chunk 13 from G:\A.dat: 2015
Read chunk 13 from D:\P.dat: 1570
Process chunk 13:            844
Write chunk 12 to D:\P.dat:  1315
Read chunk 14 from G:\A.dat: 1928
Read chunk 14 from D:\P.dat: 1597
Process chunk 14:            847
Write chunk 13 to D:\P.dat:  1269
Read chunk 15 from G:\A.dat: 2019
Read chunk 15 from D:\P.dat: 1620
Process chunk 15:            846
Write chunk 14 to D:\P.dat:  1299
Write chunk 15 to D:\P.dat:  1352
Total time: 92628

Wersja z watkami
Read chunk 0 from G:\A.dat: 2315
Read chunk 0 from D:\P.dat: 2315
Process chunk 0:            848
Read chunk 1 from D:\P.dat: 1978
Read chunk 1 from G:\A.dat: 1985
Process chunk 1:            850
Write chunk 0 to D:\P.dat:  1283
Read chunk 2 from G:\A.dat: 2079
Read chunk 2 from D:\P.dat: 2080
Process chunk 2:            851
Write chunk 1 to D:\P.dat:  1266
Read chunk 3 from D:\P.dat: 2093
Read chunk 3 from G:\A.dat: 2107
Process chunk 3:            849
Write chunk 2 to D:\P.dat:  1519
Read chunk 4 from G:\A.dat: 2126
Read chunk 4 from D:\P.dat: 2129
Process chunk 4:            852
Write chunk 3 to D:\P.dat:  1345
Read chunk 5 from D:\P.dat: 2031
Read chunk 5 from G:\A.dat: 2037
Process chunk 5:            849
Write chunk 4 to D:\P.dat:  1357
Read chunk 6 from G:\A.dat: 2116
Read chunk 6 from D:\P.dat: 2165
Process chunk 6:            849
Write chunk 5 to D:\P.dat:  1261
Read chunk 7 from G:\A.dat: 2140
Read chunk 7 from D:\P.dat: 2177
Process chunk 7:            848
Write chunk 6 to D:\P.dat:  1471
Read chunk 8 from G:\A.dat: 2273
Read chunk 8 from D:\P.dat: 2276
Process chunk 8:            851
Write chunk 7 to D:\P.dat:  1262
Read chunk 9 from G:\A.dat: 2135
Read chunk 9 from D:\P.dat: 2172
Process chunk 9:            851
Write chunk 8 to D:\P.dat:  1299
Read chunk 10 from G:\A.dat: 2127
Read chunk 10 from D:\P.dat: 2142
Process chunk 10:            850
Write chunk 9 to D:\P.dat:  1254
Read chunk 11 from G:\A.dat: 2325
Read chunk 11 from D:\P.dat: 2430
Process chunk 11:            849
Write chunk 10 to D:\P.dat:  1370
Read chunk 12 from G:\A.dat: 2099
Read chunk 12 from D:\P.dat: 2125
Process chunk 12:            850
Write chunk 11 to D:\P.dat:  1311
Read chunk 13 from G:\A.dat: 2125
Read chunk 13 from D:\P.dat: 2127
Process chunk 13:            850
Write chunk 12 to D:\P.dat:  1359
Read chunk 14 from D:\P.dat: 2062
Read chunk 14 from G:\A.dat: 2072
Process chunk 14:            850
Write chunk 13 to D:\P.dat:  1287
Read chunk 15 from G:\A.dat: 2144
Read chunk 15 from D:\P.dat: 2221
Process chunk 15:            849
Write chunk 14 to D:\P.dat:  1339
Write chunk 15 to D:\P.dat:  1340
Total time: 56772

STOP


START
Wersja bez watkow intuicyjna
Read chunk 0 from G:\A.dat: 2339
Read chunk 0 from D:\P.dat: 1638
Process chunk 0:            883
Write chunk 0 to D:\P.dat:  1310
Read chunk 1 from G:\A.dat: 1887
Read chunk 1 from D:\P.dat: 1461
Process chunk 1:            853
Write chunk 1 to D:\P.dat:  1362
Read chunk 2 from G:\A.dat: 2018
Read chunk 2 from D:\P.dat: 1661
Process chunk 2:            853
Write chunk 2 to D:\P.dat:  1443
Read chunk 3 from G:\A.dat: 1992
Read chunk 3 from D:\P.dat: 1538
Process chunk 3:            853
Write chunk 3 to D:\P.dat:  1318
Read chunk 4 from G:\A.dat: 2030
Read chunk 4 from D:\P.dat: 1567
Process chunk 4:            855
Write chunk 4 to D:\P.dat:  1292
Read chunk 5 from G:\A.dat: 1942
Read chunk 5 from D:\P.dat: 1571
Process chunk 5:            853
Write chunk 5 to D:\P.dat:  1250
Read chunk 6 from G:\A.dat: 2010
Read chunk 6 from D:\P.dat: 1597
Process chunk 6:            852
Write chunk 6 to D:\P.dat:  1382
Read chunk 7 from G:\A.dat: 2051
Read chunk 7 from D:\P.dat: 1346
Process chunk 7:            853
Write chunk 7 to D:\P.dat:  1285
Read chunk 8 from G:\A.dat: 2169
Read chunk 8 from D:\P.dat: 1452
Process chunk 8:            855
Write chunk 8 to D:\P.dat:  1298
Read chunk 9 from G:\A.dat: 2030
Read chunk 9 from D:\P.dat: 1407
Process chunk 9:            852
Write chunk 9 to D:\P.dat:  1235
Read chunk 10 from G:\A.dat: 2008
Read chunk 10 from D:\P.dat: 1606
Process chunk 10:            854
Write chunk 10 to D:\P.dat:  1415
Read chunk 11 from G:\A.dat: 2215
Read chunk 11 from D:\P.dat: 1580
Process chunk 11:            853
Write chunk 11 to D:\P.dat:  1285
Read chunk 12 from G:\A.dat: 2028
Read chunk 12 from D:\P.dat: 1601
Process chunk 12:            853
Write chunk 12 to D:\P.dat:  1402
Read chunk 13 from G:\A.dat: 2010
Read chunk 13 from D:\P.dat: 1536
Process chunk 13:            852
Write chunk 13 to D:\P.dat:  1242
Read chunk 14 from G:\A.dat: 1943
Read chunk 14 from D:\P.dat: 1590
Process chunk 14:            853
Write chunk 14 to D:\P.dat:  1295
Read chunk 15 from G:\A.dat: 2029
Read chunk 15 from D:\P.dat: 1614
Process chunk 15:            853
Write chunk 15 to D:\P.dat:  1340
Total time: 92305

Wersja bez watkow symulujaca wersje z watkami
Read chunk 0 from G:\A.dat: 2195
Read chunk 0 from D:\P.dat: 1668
Process chunk 0:            853
Read chunk 1 from G:\A.dat: 1948
Read chunk 1 from D:\P.dat: 1474
Process chunk 1:            905
Write chunk 0 to D:\P.dat:  1270
Read chunk 2 from G:\A.dat: 1960
Read chunk 2 from D:\P.dat: 1656
Process chunk 2:            857
Write chunk 1 to D:\P.dat:  1268
Read chunk 3 from G:\A.dat: 2017
Read chunk 3 from D:\P.dat: 1525
Process chunk 3:            846
Write chunk 2 to D:\P.dat:  1371
Read chunk 4 from G:\A.dat: 2020
Read chunk 4 from D:\P.dat: 1612
Process chunk 4:            853
Write chunk 3 to D:\P.dat:  1257
Read chunk 5 from G:\A.dat: 1957
Read chunk 5 from D:\P.dat: 1531
Process chunk 5:            846
Write chunk 4 to D:\P.dat:  1310
Read chunk 6 from G:\A.dat: 2018
Read chunk 6 from D:\P.dat: 1667
Process chunk 6:            853
Write chunk 5 to D:\P.dat:  1242
Read chunk 7 from G:\A.dat: 2064
Read chunk 7 from D:\P.dat: 1549
Process chunk 7:            846
Write chunk 6 to D:\P.dat:  1349
Read chunk 8 from G:\A.dat: 2184
Read chunk 8 from D:\P.dat: 1579
Process chunk 8:            854
Write chunk 7 to D:\P.dat:  1253
Read chunk 9 from G:\A.dat: 2033
Read chunk 9 from D:\P.dat: 1518
Process chunk 9:            845
Write chunk 8 to D:\P.dat:  1305
Read chunk 10 from G:\A.dat: 2003
Read chunk 10 from D:\P.dat: 1608
Process chunk 10:            854
Write chunk 9 to D:\P.dat:  1237
Read chunk 11 from G:\A.dat: 2236
Read chunk 11 from D:\P.dat: 1637
Process chunk 11:            845
Write chunk 10 to D:\P.dat:  1348
Read chunk 12 from G:\A.dat: 2001
Read chunk 12 from D:\P.dat: 1596
Process chunk 12:            853
Write chunk 11 to D:\P.dat:  1363
Read chunk 13 from G:\A.dat: 2004
Read chunk 13 from D:\P.dat: 1560
Process chunk 13:            845
Write chunk 12 to D:\P.dat:  1317
Read chunk 14 from G:\A.dat: 1936
Read chunk 14 from D:\P.dat: 1599
Process chunk 14:            853
Write chunk 13 to D:\P.dat:  1273
Read chunk 15 from G:\A.dat: 2030
Read chunk 15 from D:\P.dat: 1674
Process chunk 15:            845
Write chunk 14 to D:\P.dat:  1317
Write chunk 15 to D:\P.dat:  1348
Total time: 92542

Wersja z watkami
Read chunk 0 from G:\A.dat: 2318
Read chunk 0 from D:\P.dat: 2323
Process chunk 0:            852
Read chunk 1 from G:\A.dat: 2019
Read chunk 1 from D:\P.dat: 2021
Process chunk 1:            850
Write chunk 0 to D:\P.dat:  1259
Read chunk 2 from G:\A.dat: 2073
Read chunk 2 from D:\P.dat: 2101
Process chunk 2:            858
Write chunk 1 to D:\P.dat:  1332
Read chunk 3 from G:\A.dat: 2119
Read chunk 3 from D:\P.dat: 2120
Process chunk 3:            849
Write chunk 2 to D:\P.dat:  1378
Read chunk 4 from G:\A.dat: 2128
Read chunk 4 from D:\P.dat: 2179
Process chunk 4:            856
Write chunk 3 to D:\P.dat:  1262
Read chunk 5 from G:\A.dat: 2035
Read chunk 5 from D:\P.dat: 2043
Process chunk 5:            849
Write chunk 4 to D:\P.dat:  1293
Read chunk 6 from G:\A.dat: 2089
Read chunk 6 from D:\P.dat: 2186
Process chunk 6:            857
Write chunk 5 to D:\P.dat:  1259
Read chunk 7 from G:\A.dat: 2176
Read chunk 7 from D:\P.dat: 2201
Process chunk 7:            850
Write chunk 6 to D:\P.dat:  1399
Read chunk 8 from G:\A.dat: 2299
Read chunk 8 from D:\P.dat: 2326
Process chunk 8:            857
Write chunk 7 to D:\P.dat:  1259
Read chunk 9 from G:\A.dat: 2116
Read chunk 9 from D:\P.dat: 2174
Process chunk 9:            850
Write chunk 8 to D:\P.dat:  1319
Read chunk 10 from G:\A.dat: 2109
Read chunk 10 from D:\P.dat: 2140
Process chunk 10:            856
Write chunk 9 to D:\P.dat:  1253
Read chunk 11 from G:\A.dat: 2324
Read chunk 11 from D:\P.dat: 2339
Process chunk 11:            851
Write chunk 10 to D:\P.dat:  1481
Read chunk 12 from G:\A.dat: 2103
Read chunk 12 from D:\P.dat: 2117
Process chunk 12:            856
Write chunk 11 to D:\P.dat:  1412
Read chunk 13 from G:\A.dat: 2143
Read chunk 13 from D:\P.dat: 2146
Process chunk 13:            850
Write chunk 12 to D:\P.dat:  1438
Read chunk 14 from D:\P.dat: 2060
Read chunk 14 from G:\A.dat: 2062
Process chunk 14:            857
Write chunk 13 to D:\P.dat:  1333
Read chunk 15 from G:\A.dat: 2152
Read chunk 15 from D:\P.dat: 2195
Process chunk 15:            850
Write chunk 14 to D:\P.dat:  1298
Write chunk 15 to D:\P.dat:  1450
Total time: 56981

STOP
0

W tym przypadku teoretycznie powinno być możliwe zaalokowanie 6 tablic, czyli 1536MB, a nawet 1700MB licząc interfejs, pozostałe zmienne, kod itp. Dlaczego nie dało się tyle zaalokować pomimo wystarczającej ilości wolnej pamięci?

ld --large-address-aware

1 użytkowników online, w tym zalogowanych: 0, gości: 1