對於在C中實現的數字例程,我需要從文件(ascii)中讀取數據。數據需要作爲數值計算的輸入,並且一般來說太大而不適合存儲器。因此,我需要動態地將它預取到某個數組,以便將其饋送到例程中(否則,讀取文件將會是計算中的僵局)。有沒有建立/簡單的方法來做到這一點使用stdlib,也許posix線程或MPI?我正在使用Linux下的intels MPI庫。用C和stdlib預取文件
例程func
在下面的僞代碼中表示數值核心例程。它被稱爲非常頻繁的,用常微分方程的求解器來說。每次調用i
時,都會調用具有已知值D
的隨機浮動值x[i-1]<x[i]<x[i-1]+D
。因此,有一些關於x
的早期信息,它使我能夠在下一步中大致瞭解文件中需要哪些數據值。
read_file(x,data)
{
/* code to search x-dependent data in file */
data[i]=...;
}
func(x)
{
read_file(x,&data);
/* several data- and x-dependent operations */
result= ...;
return result;
}
雖然塊/* several data- and x-dependent operations */
(和一些外部代碼)被執行我原則上可以預取需要的func
從該文件的下一個呼叫到平行的緩衝器陣列中的數據。在下一次調用中,我可以搜索數組中的信息而不是文件。我詢問需要並行預取數據的代碼,並替換read_file(與文件讀取器通信的部分,下一步需要哪些數據)。理想情況下,如果/* several data- and x-dependent operations */
塊需要大約多於搜索文件的時間,則不會花費任何額外的時間。如果代碼保持在它的執行時間將是約兩倍(忽略外部操作所需的時間)。請注意,如果該塊需要比讀取更多的時間,我可以輕鬆地將其並行化。我不能對現在的讀者做些什麼。
爲什麼要預取它?不會按需閱讀嗎? – alk
看到我上面的額外解釋! – highsciguy
首先我想指出你對安吉爾的回答。其次,瞭解您的應用實際花費多少時間讀取一個計算步驟所需的數據以及後者運行的時間可能會很有趣。瞭解這一點肯定有助於決定是否花時間實施併發運行的數據讀取器。 – alk