我正在尝试使用 LTSpice 模拟数据构建 ML 模型。我在 64 核 Centos linux 机器上使用 Wine 运行 64 个 LTSpice 并发模拟,以获取理想的数百万个数据点。典型的模拟大约需要 2-4 秒。但是,我发现在数百个并发模拟之后,服务器速度显着降低,模拟时间增加到 120 多秒。
我正在寻找一些关于如何提高性能和加快模拟时间的建议。据我所知,在对 LTSpice 进行数百次模拟后,性能会下降。但是,每个模拟的单个内存使用量并不大,但总的来说它可能会占用系统。我跑到顶部查看进程内存使用情况,我没有看到 CPU 或内存使用情况太不正常。我的想法是 Wine 或 LTSpice 可能正在泄漏内存,但我无法确定问题所在。
这是我迄今为止尝试过的:
- LTSpice 模拟以批处理模式运行,每个模拟都在一个单独的目录中。在完成每个模拟后,我删除了所有中间文件(LTSpice 和 Wine)。这是我正在运行的命令:
WINEDLLOVERRIDES=winemenubuilder.exe=d WINEDEBUG=-all wine-preloader /usr/local/bin/wine ~/.wine/drive_c/Program\\ Files/LTC/LTspiceXVII/XVIIx64.exe -Run -b [ltspice_file.asc]
- 我使用虚拟帧缓冲区 (XVFB) 来输出任何显示窗口。这对性能产生了一些重大影响。
export DISPLAY=:1
Xvfb :1 -noreset &
- 我最初使用 python,但发现性能很糟糕,所以我切换到 C++ 多线程,这显着提高了性能。我正在使用 OMP 和动态调度来分配模拟。请注意,每个循环都基于 500 个模拟配置的固定块大小,跨 64 个线程运行。
#pragma omp parallel for schedule(dynamic,1)
for ( int i = 0; i < (int)sim_config.size(); i++ )
{
#pragma omp critical
{
++pid;
}
// run the LTspice simulation using configuration settings
run_simulation(pid, sim_config[i]);
}
- 每进行 500 次模拟,我就杀死 wineserver(和相关的 windows exe 文件)并重置 Xvfb 应用程序以清除内存:
system("wineserver -k; pkill .+\\.exe; pkill Xvfb; Xvfb :1 -noreset &")
- 我也尝试过刷新 linux 缓存:
sync; echo 3 > sudo /proc/sys/vm/drop_caches && sudo swapoff -a && sudo swapon -a
- 我尝试运行更少的线程和更小的块大小,但这似乎并没有提高性能。
我很感激任何关于如何/在哪里可以减少内存泄漏的反馈或想法。
谢谢!