我為采礦業(yè)構(gòu)建了一個(gè)連續(xù)模擬模型(基于狀態(tài))。出于工程和生產(chǎn)目的跟蹤設(shè)備,當(dāng)事件發(fā)生時(shí)更新設(shè)備狀態(tài),例如故障、生產(chǎn)事件等。使用了許多統(tǒng)計(jì)分布。出于說明目的,請參閱下面的代碼以了解模擬的工作原理。我正在嘗試優(yōu)化性能?;旧闲枰\(yùn)行數(shù)以千計(jì)的“案例”。根據(jù)我可用的物理線程數(shù)量,我可以并行運(yùn)行 x 個(gè)案例。因此 CPU 工作在 100%。運(yùn)行 1000 個(gè)案例可能需要一天以上的時(shí)間。從應(yīng)用的結(jié)構(gòu)上,有沒有機(jī)會(huì)引入GPU計(jì)算?我從來沒有用 GPU 編程過,想知道我是否有機(jī)會(huì)以某種方式將 GPU 包含在我的計(jì)算中。任何其他建議也將不勝感激。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);}
連續(xù)模擬 - 性能調(diào)優(yōu) - GPU/CPU
ibeautiful
2021-10-23 17:03:45