История изменений
Исправление 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 тредах; старт на горячую)