我想寫一個簡單的函數,讀取一系列文件,並對它們執行一些正則表達式搜索(或只是一個字數),然後返回匹配的數量,我試圖並行運行以加速它,但到目前爲止,我一直無法實現這一點。茱莉亞並行文本處理
如果我用數學運算做一個簡單的循環,我會得到顯着的性能提升。然而,對於grep的功能有類似的想法不提供速度增加:
function open_count(file)
fh = open(file)
text = readall(fh)
length(split(text))
end
tic()
total = 0
for name in files
total += open_count(string(dir,"/",name))
total
end
toc()
elapsed time: 29.474181026 seconds
tic()
total = 0
total = @parallel (+) for name in files
open_count(string(dir,"/",name))
end
toc()
elapsed time: 29.086511895 seconds
我嘗試了不同的版本,但還沒有得到顯著的速度增加。難道我做錯了什麼?
27秒處理文件?我猜這些是相當大的磁盤文件,它們不適合你的處理器的磁盤緩存,每次都必須從磁盤讀取。然後,您希望的最好時間等於從磁盤讀取這兩個文件的時間。通常,磁盤一次只能讀取一個地方 - >磁盤讀取是連續的,因此不會加速。 –
這不是一個單一的文件,它是一個文件列表(總共幾乎是我認爲的GB)。我應該這樣說。但是,謝謝你的解釋。 –
我無法測試這個,因爲我沒有這個尺寸的文件來測試。你能發佈一個腳本來生成具有相同結構和大小的東西嗎?你的操作系統可能在這裏佔用大部分時間。你有考慮關閉open_count()中的文件嗎? – ivarne