我写了一个处理GPU上数据的应用程序.代码运行良好,但我有一个问题,输入文件的读取部分(~3GB,文本)是我的应用程序的瓶颈.(从HDD读取速度很快,但逐行处理很慢).
我用getline()读取一行,将第1行复制到向量,将第2行复制到向量,并跳过第3和第4行.依此类推其余11条mio行.
我尝试了几种方法来尽可能地获取文件:
我发现最快的方法是使用boost :: iostreams :: stream
其他人是:
任何建议如何让它运行得更快?
void readfastq(char *filename, int SRlength, uint32_t blocksize){
_filelength = 0; //total datasets (each 4 lines)
_SRlength = SRlength; //length of the 2. line
_blocksize = blocksize;
boost::iostreams::stream<boost::iostreams::file_source>ins(filename);
in = ins;
readNextBlock();
}
void readNextBlock() {
timeval start, end;
gettimeofday(&start, 0);
string name;
string seqtemp;
string garbage;
string phredtemp;
_seqs.empty();
_phred.empty();
_names.empty();
_filelength = 0;
//read only a part of the file i.e the first 4mio lines
while (std::getline(in, …Run Code Online (Sandbox Code Playgroud) 假设地址空间可以覆盖文件,在我看来mmap只是分配一块与要读取的文件一样大的内存块,并在它们相应的块之间创建一对一的关系.但是,为什么这样做会加快文件读取速度?似乎为了实际获取文件的内容,您仍然必须转到磁盘,并读取它上面的所有字节.
与malloc相同大小的内存并手动将整个文件读入malloc区域相比,它有何不同?