我为采矿业构建了一个连续模拟模型(基于状态)。出于工程和生产目的跟踪设备,当事件发生时更新设备状态,例如故障、生产事件等。使用了许多统计分布。出于说明目的,请参阅下面的代码以了解模拟的工作原理。
我正在尝试优化性能。基本上需要运行数以千计的“案例”。根据我可用的物理线程数量,我可以并行运行 x 个案例。因此 CPU 工作在 100%。
运行 1000 个案例可能需要一天以上的时间。
从应用的结构上,有没有机会引入GPU计算?我从来没有用 GPU 编程过,想知道我是否有机会以某种方式将 GPU 包含在我的计算中。任何其他建议也将不胜感激。
public static void RunAll()
{
//This list contains thousands cases
List<SimCase> simCases = ImportCases()
//List which contains simulation results
ConcurrentBag<Results> resultsList = new ConcurrentBag<Results>();
//Runs cases in parallel (consumes all threads)
Parallel.ForEach(simCases, simCase =>
{
var results = RunSimulation(simCase);
resultsList.Add(results);
});
//Interpret results and build report
}
public static Results RunSimulation(SimCase simCase)
{
Results results = new Results();
DateTime currentDate = new DateTime(2018,1,1);
DateTime finalDate= new DateTime(2018,12,31);
while (currentDate < finalDate)
{
//Many if statements
//Many object updates
//Many functions calls to libraries for statistical calcs
//Updates simulation time
currentDate = currentDate.addSeconds(1);
}
return(results);
}
繁星淼淼
相关分类