LINUX.ORG.RU

История изменений

Исправление sshestov, (текущая версия) :

Я тут это … заморочился и написал на фортране. Страдал 3 дня; вроде как имею неплохой опыт с фортраном, но много подводных камней. Одна из вишенок на торте: чтобы перевести температуру в число сначала использовал стандартную процедуру типа readstr. Считало минуты на 100М-файле. Переписал руками, время сократилось кратно.

В итоге ммаплю файл, параллельность за счет OpenMP. Результат таков:

ergeis@sergeis-pc1850:~/Projects/fortran_file_mmap$ time ./test_mmap 
Storage sizes for char, int(1), int(2), int, int(4), real [bits]: 
                    8     8      16      64    32     32
 File 'measurements.txt' has size           13795786022  bytes

real	0m18.171s
user	4m11.398s
sys	0m0.988s

это на 16 тредах; старт на горячую, но на холодную почти тот же результат; ах да, без финальной сортировки.

На моем компе С-программа от anonymous (1 поток; но несколько старая версия) на холодном старте дает real 0m22.901s

Исправление sshestov, :

Я тут это … заморочился и написал на фортране. Страдал 3 дня; вроде как имею неплохой опыт с фортраном, но много подводных камней. Одна из вишенок на торте: чтобы перевести температуру в число сначала использовал стандартную процедуру типа readstr. Считало минуты на 100М-файле. Переписал руками, время сократилось кратно.

В итоге ммаплю файл, параллельность за счет OpenMP. Результат таков:

ergeis@sergeis-pc1850:~/Projects/fortran_file_mmap$ time ./test_mmap 
Storage sizes for char, int(1), int(2), int, int(4), real [bits]: 
                    8     8      16      64    32     32
 File 'measurements.txt' has size           13795786022  bytes

real	0m18.171s
user	4m11.398s
sys	0m0.988s

(это на 16 тредах; старт на горячую; ах да, без финальной сортировки)

Исправление sshestov, :

Я тут это … заморочился и написал на фортране. Страдал 3 дня; вроде как имею неплохой опыт с фортраном, но много подводных камней. Одна из вишенок на торте: чтобы перевести температуру в число сначала использовал стандартную процедуру типа readstr. Считало минуты на 100М-файле. Переписал руками, время сократилось кратно.

В итоге ммаплю файл, параллельность за счет OpenMP. Результат таков:

ergeis@sergeis-pc1850:~/Projects/fortran_file_mmap$ time ./test_mmap 
Storage sizes for char, int(1), int(2), int, int(4), real [bits]: 
                    8     8      16      64    32     32
 File 'measurements.txt' has size           13795786022  bytes
 ******************* Using C functions to open and mmap the file *******************
FSTAT status: -1
Our C file descriptor FD1 is: 3

 **********  Here we have mmap-ed the file in C and now doing Fortran stuff **********
 
 *************** Looking for new lines ***************
Start:             1    862236621   1724473246   2586709870   3448946491   4311183123   5173419752   6035656379   6897893001   7760129634   8622366259   9484602882  10346839507  11209076124  12071312751  12933549387
Stop:      862236619   1724473244   2586709868   3448946489   4311183121   5173419750   6035656377   6897892999   7760129632   8622366257   9484602880  10346839505  11209076122  12071312749  12933549385  13795786022

real	0m18.171s
user	4m11.398s
sys	0m0.988s

(это на 16 тредах; старт на горячую; ах да, без финальной сортировки)

Исходная версия sshestov, :

Я тут это … заморочился и написал на фортране. Страдал 3 дня; вроде как имею неплохой опыт с фортраном, но много подводных камней. Одна из вишенок на торте: чтобы перевести температуру в число сначала использовал стандартную процедуру типа readstr. Считало минуты на 100М-файле. Переписал руками, время сократилось кратно.

В итоге ммаплю файл, параллельность за счет OpenMP. Результат таков:

ergeis@sergeis-pc1850:~/Projects/fortran_file_mmap$ time ./test_mmap 
Storage sizes for char, int(1), int(2), int, int(4), real [bits]: 
                    8     8      16      64    32     32
 File 'measurements.txt' has size           13795786022  bytes
 ******************* Using C functions to open and mmap the file *******************
FSTAT status: -1
Our C file descriptor FD1 is: 3

 **********  Here we have mmap-ed the file in C and now doing Fortran stuff **********
 
 *************** Looking for new lines ***************
Start:             1    862236621   1724473246   2586709870   3448946491   4311183123   5173419752   6035656379   6897893001   7760129634   8622366259   9484602882  10346839507  11209076124  12071312751  12933549387
Stop:      862236619   1724473244   2586709868   3448946489   4311183121   5173419750   6035656377   6897892999   7760129632   8622366257   9484602880  10346839505  11209076122  12071312749  12933549385  13795786022

real	0m18.171s
user	4m11.398s
sys	0m0.988s

(это на 16 тредах; старт на горячую)