Юлия - Параллелизм для чтения большого файла - PullRequest
0 голосов
/ 25 февраля 2019

В Julia v1.1 предположим, что у меня очень большой текстовый файл (30 ГБ), и я хочу, чтобы параллелизм (многопоточность) читал каждую строку, как я могу это сделать?

Этот код является попыткойсделать это после проверки документации Джулии о многопоточности , но она совсем не работает

open("pathtofile", "r") do file
    # Count number of lines in file
    seekend(file)
    fileSize = position(file)
    seekstart(file)

    # skip nseekchars first characters of file
    seek(file, nseekchars)

    # progress bar, because it's a HUGE file
    p = Progress(fileSize, 1, "Reading file...", 40)
    Threads.@threads for ln in eachline(file)
        # do something on ln
        u, v = map(x->parse(UInt32, x), split(ln))
        .... # other interesting things
        update!(p, position(file))
    end    
end

Примечание 1: вам нужно using ProgressMeter (я хочу, чтобы мой код отображал прогрессбар при параллельном чтении файла)

Примечание 2: nseekchars - это Int и число символов, которое я хочу пропустить в начале в моем файле

Примечание 3: код работает, но не работаетпареллизма без макроса Threads.@threads рядом с циклом for

1 Ответ

0 голосов
/ 26 февраля 2019

Для максимальной производительности ввода-вывода:

  1. Распараллелить аппаратное обеспечение - то есть использовать дисковые массивы, а не один диск.Попробуйте найти производительность рейда , чтобы найти множество превосходных объяснений (или задайте отдельный вопрос)

  2. Используйте механизм отображения памяти Julia

s = open("my_file.txt","r")
using Mmap
a = Mmap.mmap(s)
После отображения памяти выполните обработку параллельно.Остерегайтесь ложного обмена для потоков (зависит от вашего реального сценария).
...