0

我对 Cuda C 相当陌生,并且在使用ofstream. 代码运行良好,但性能并不是我所期望的。除了 有没有其他更快的方法fstream?我试过使用ostringstream,但它并没有真正显示出任何改进。

HANDLE_ERROR( cudaMemcpy( sseismo, seismo,sizeof(float)*(DIMX*samp),cudaMemcpyDeviceToHost ) );
sprintf(nmfile, "seismo%ix%itau%08ivz.txt",4000,4000,1 );
std::ofstream outseis(nmfile); // output, normal file
for (int jj=0; jj<4000; jj++) 
{
    for (int ii=0; ii<4000; ii++) 
    {
    int ij=(DIMX)*jj + ii;           
    outseis<<sseismo[ij]<<" ";   
    }
    outseis<<"\n";
}
outseis.close();
4

2 回答 2

2

您可以以二进制格式而不是文本格式输出数据。

outseis.write((char*)sseismo[jj*(DIMX)], 4000*sizeof(sseismo[0]));

否则outseis<<几乎是您可以获得的最快的文本输出。

请参阅此处了解更多信息std::ofstream::write

http://en.cppreference.com/w/cpp/io/basic_ostream/write

于 2013-08-21T17:35:39.157 回答
0

如果写入二进制数据不是一种选择,您可以通过将内部循环写入字符串流并将其写入文件来压缩几百毫秒(我得到 1.317 毫秒而不是 ~1.700 毫秒)。

#include <fstream>
#include <sstream>
int main()
{
    const char nmfile[] = "out.txt";
    std::ofstream outseis(nmfile); // output, normal file

    for (int jj=0; jj<4000; jj++)
    {
            std::stringstream buf;
            for (int ii=0; ii<4000; ii++)
            {
                    int ij = jj + ii;
                    buf<<ij<<" ";
            }
            outseis << buf.str() << "\n";

    }
    outseis.close();
}
于 2013-08-22T05:30:18.040 回答