Esempio n. 1
0
        public void Run(CartesianModel model)
        {
            FftBuffersPool.PrepareBuffersForModel(model, _memoryProvider, _mpi, _profiler);

            LogSettingsInfo();

            _solver.SetProfiler(_profiler);
            _solver
            .WithMpi(_mpi)
            .With(_project.ObservationLevels);

            int freqCounter = 0;

            foreach (var frequency in _project.Frequencies)
            {
                ForwardLoggerHelper.WriteStatus(_logger, $"\t\t\tFrequecy {frequency}, {++freqCounter} of {_project.Frequencies.Count}");
                var omegaModel = OmegaModelBuilder.BuildOmegaModel(model, frequency);
                _profiler.ClearAllRecords();

                using (var rc = _solver.Solve(omegaModel))
                {
                    if (!_solver.IsParallel || _mpi.IsMaster)
                    {
                        ExportProfiling(model, frequency);
                        Export(rc, frequency);
                    }

                    ForwardLoggerHelper.WriteStatus(_logger, "Finish");
                    ParallelMemoryUtils.ExportMemoryUsage(_project.ResultsPath, _mpi, _memoryProvider, frequency);
                }
            }
        }
Esempio n. 2
0
        private void ExportProfiling(CartesianModel model, double frequency)
        {
            ForwardLoggerHelper.WriteStatus(_logger, "Exporting profiling results");
            var dir     = _project.ResultsPath;
            var freqStr = $"_freq{frequency:####0.0000}";

            if (!Directory.Exists(dir))
            {
                Directory.CreateDirectory(dir);
            }

            //ProfilerResultsTextExporter.SaveRawProfilingResults(Path.Combine(dir, $"rawprofile{freqStr}.xml"), model, _profiler);

            var records = _profiler.GetAllRecords();

            var analizer = new ProfilerStatisticsAnalyzer(records);

            var analisisResult = analizer.PerformAnalysis();


            int numberOfMpi     = _mpi?.Size ?? 1;
            int numberOfThreads = MultiThreadUtils.MaxDegreeOfParallelism;

            var file = Path.Combine(dir, $"profiling_mpi{numberOfMpi:0000}_threads{numberOfThreads}{freqStr}.txt");

            ProfilerResultsTextExporter.SaveProfilingResultsTo(file, model, analisisResult, numberOfMpi, numberOfThreads);

            var file2 = Path.Combine(dir, "..", "common.dat");

            ProfilerResultsTextExporter.SaveProfilingResultsToCommon(file2, model, analisisResult, numberOfMpi, numberOfThreads, _project.ForwardSettings.NumberOfHankels);
        }
Esempio n. 3
0
        public static void SaveWithModel(string path, CartesianModel model, ProfilerRecord[] profilerRecord)
        {
            var xdoc = new XDocument();

            xdoc.Add(new XElement("ProfilingResults",
                                  ModelWriter.ToXElement(model),
                                  new XElement("Records",
                                               profilerRecord.Select(ToXElement))));

            xdoc.Save(path);
        }
Esempio n. 4
0
        public CartesianModel CreateModel(MeshParameters mesh, decimal xCellSize, decimal yCellSize)
        {
            var lateral   = new LateralDimensions(mesh.Nx, mesh.Ny, xCellSize, yCellSize);
            var section1D = CreateSection1D();
            var anomaly   = CreateAnomaly(mesh, lateral);

            var model = new CartesianModel(lateral, section1D, anomaly);


            return(model);
        }
Esempio n. 5
0
        public static void SaveProfilingResultsToCommon(string fileName, CartesianModel model, ProfilerStatistics[] analisisResult, int numberOfMpi, int numberOfThreads, int nhank)
        {
            if (analisisResult == null)
            {
                throw new ArgumentNullException();
            }

            try
            {
                Func <string, int, string> padStr = (str, p) => str.PadRight(p);
                Func <string, string>      pad    = (str) => padStr(str, 15);
                Func <TimeSpan, string>    toStr  = (ts) => padStr(ts.TotalSeconds.ToString("0.00000"), 15);

                if (!File.Exists(fileName))
                {
                    File.AppendAllText(fileName, $"{pad("Date")}{padStr("Time", 12)}" +
                                       $"{padStr("nx", 6)}{padStr("ny", 6)}{padStr("nz", 6)}" +
                                       $"{padStr("nhank", 6)}" +
                                       $"{padStr("mpi_size", 9)}{padStr("nthreads", 9)}" +
                                       $"{pad("AtoA_Green")}{pad("polX")}{pad("polY")}" +
                                       $"{pad("AtoO_Green")}{pad("AtoO_calc_X")}{pad("AtoO_calc_Y")}\n");
                }


                var atoa = GetTimeSpan(analisisResult, ProfilerEvent.GreenAtoATotal, 0);
                var polX = GetTimeSpan(analisisResult, ProfilerEvent.SolveCie, 0);
                var polY = GetTimeSpan(analisisResult, ProfilerEvent.SolveCie, 1);
                var atoo = GetTotalTime(analisisResult, ProfilerEvent.AtoOGreenCalc);

                var atoc1 = GetTimeSpan(analisisResult, ProfilerEvent.AtoOFields, 0);
                var atoc2 = GetTimeSpan(analisisResult, ProfilerEvent.AtoOFields, 1);

                var now = DateTime.Now;

                var line = $"{pad(now.ToShortDateString())}{padStr(now.ToShortTimeString(), 12)}" +
                           $"{padStr(model.Nx.ToString(), 6)}{padStr(model.Ny.ToString(), 6)}{padStr(model.Nz.ToString(), 6)}" +
                           $"{padStr(nhank.ToString(), 6)}" +
                           $"{padStr(numberOfMpi.ToString(), 9)}{padStr(numberOfThreads.ToString(), 9)}" +
                           $"{toStr(atoa)}{toStr(polX)}{toStr(polY)}" +
                           $"{toStr(atoo)}{toStr(atoc1)}{toStr(atoc2)}\n";

                File.AppendAllText(fileName, line);
            }

            catch (Exception ex)
            {
                Console.WriteLine($"Scalability profiling export {ex.Message} {ex.StackTrace}");


                //   throw;
            }
        }
Esempio n. 6
0
        public static void SaveProfilingResultsTo(string path, CartesianModel model, ProfilerStatistics[] analisisResult, int nMpi, int nThreads)
        {
            if (path == null)
            {
                throw new ArgumentNullException(nameof(path));
            }
            if (analisisResult == null)
            {
                throw new ArgumentNullException(nameof(analisisResult));
            }
            if (model == null)
            {
                throw new ArgumentNullException(nameof(model));
            }

            new ProfilerResultsTextExporter(analisisResult, model)
            .SaveProfilingResultsTo(path, nMpi, nThreads);
        }
Esempio n. 7
0
        public static void PrepareBuffersForModel(CartesianModel model, INativeMemoryProvider memoryProvider, Mpi mpi = null, IProfiler profiler = null)
        {
            var modelSize = new ModelSize(model.Nx, model.Ny, model.Nz);

            PrepareBuffersForModel(modelSize, memoryProvider, mpi, profiler);
        }
Esempio n. 8
0
 public static void SaveRawProfilingResults(string path, CartesianModel cartesianModel, Profiler profiler)
 {
     profiler.GetAllRecords().SaveWithModel(path, cartesianModel);
 }
Esempio n. 9
0
 private ProfilerResultsTextExporter(ProfilerStatistics[] analisisResult, CartesianModel model)
 {
     _analisisResult = analisisResult;
     _model          = model;
 }
Esempio n. 10
0
 public static void SaveWithModel(this ProfilerRecord[] profilerRecord, string path, CartesianModel model)
 {
     SaveWithModel(path, model, profilerRecord);
 }