gpt4 book ai didi

c - C 程序导致 CPU 急剧下降

转载 作者:太空宇宙 更新时间:2023-11-04 05:06:16 25 4
gpt4 key购买 nike

我的程序的性能急剧下降。它基本上是一对嵌套的 for 循环,对一对数据集进行操作,然后写入结果。问题是,在 300,000 对中的大约 500 对之后,它从 0.07 秒/对减慢到 5 秒/对,CPU 使用率从近 100% 下降到 ~4%。整个过程中使用的所有内存在嵌套循环之前分配并在循环之后释放。

这是伪代码,希望您能理解:

for (i=0; i<759; i++) {
read_binary_data(data_file_1, data_1);
read_binary_header(header_file_1, header_1);
for (j=i+1; j<760;j++) {
read_binary_data(data_file_2, data_2);
read_binary_header(header_file_2, header_2);

do_operation(data_1, data_2, out_data);
update_header_data(header_1, header_2, out_header);

write_binary_data_and_header(out_data, out_header);
}
}

我已经在第二个 for 循环的开始和结束处放置了计时标志,以查看上面引用的计时,但我想知道是否有更好的调试选项来告诉我为什么操作变慢了。到目前为止我唯一的想法是文件系统阻塞,但每次运行我只打开 5-6 个文件,每个文件都在其子例程结束时关闭。

晚上 10:15 更新太平洋时间:
经过各种测试,我发现罪魁祸首似乎在 read_binary_data 部分。许多文件可能需要超过 3 秒的时间。我将尝试将所有二进制数据打包到一个文件中并一次读取所有文件,因此我只需要读取一个。我打赌我会用完内存,但它值得一试,如果发生这种情况,我会不那么雄心勃勃,并尝试一次在数组中做少于 760 * 2 * 31 * 43201 个 float (我猜应该是 16 GB 左右?)。

最佳答案

您是否正在释放保存数据的缓冲区?听起来你已经耗尽内存并在 500 个文件后切换到交换。您的内存使用情况如何?

关于c - C 程序导致 CPU 急剧下降,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3400890/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com