我为采矿业构建了一个连续的仿真模型(基于状态)。跟踪设备用于工程和生产目的,其中在发生故障(例如故障,生产事件等)时更新设备状态。使用许多统计分布。为了便于说明,请参见下面的代码,以了解模拟的工作原理。
我正在尝试优化性能。基本上需要运行数千个“案例”。我可以根据可用的物理线程数量并行运行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);
}
答案 0 :(得分:0)
对于我来说,GPU似乎无济于事,因为我的程序在很大程度上依赖于第三方数学库(如果有语句和对象迭代/更新)。以下是使我性能提高50%的原因:
我将投资32线程CPU以大大加快工作速度。