aboutsummaryrefslogtreecommitdiff
path: root/ARMeilleure/Translation/PTC
diff options
context:
space:
mode:
Diffstat (limited to 'ARMeilleure/Translation/PTC')
-rw-r--r--ARMeilleure/Translation/PTC/DegreeOfParallelism.cs50
-rw-r--r--ARMeilleure/Translation/PTC/Ptc.cs23
2 files changed, 15 insertions, 58 deletions
diff --git a/ARMeilleure/Translation/PTC/DegreeOfParallelism.cs b/ARMeilleure/Translation/PTC/DegreeOfParallelism.cs
deleted file mode 100644
index e4752c5e..00000000
--- a/ARMeilleure/Translation/PTC/DegreeOfParallelism.cs
+++ /dev/null
@@ -1,50 +0,0 @@
-using System;
-
-namespace ARMeilleure.Translation.PTC
-{
- class DegreeOfParallelism
- {
- public double GiBRef { get; } // GiB.
- public double WeightRef { get; } // %.
- public double IncrementByGiB { get; } // %.
- private double _coefficient;
-
- public DegreeOfParallelism(double gibRef, double weightRef, double incrementByGiB)
- {
- GiBRef = gibRef;
- WeightRef = weightRef;
- IncrementByGiB = incrementByGiB;
-
- _coefficient = weightRef - (incrementByGiB * gibRef);
- }
-
- public int GetDegreeOfParallelism(int min, int max)
- {
- double degreeOfParallelism = (GetProcessorCount() * GetWeight(GetAvailableMemoryGiB())) / 100d;
-
- return Math.Clamp((int)Math.Round(degreeOfParallelism), min, max);
- }
-
- public static double GetProcessorCount()
- {
- return (double)Environment.ProcessorCount;
- }
-
- public double GetWeight(double gib)
- {
- return (IncrementByGiB * gib) + _coefficient;
- }
-
- public static double GetAvailableMemoryGiB()
- {
- GCMemoryInfo gcMemoryInfo = GC.GetGCMemoryInfo();
-
- return FromBytesToGiB(gcMemoryInfo.TotalAvailableMemoryBytes - gcMemoryInfo.MemoryLoadBytes);
- }
-
- private static double FromBytesToGiB(long bytes)
- {
- return Math.ScaleB((double)bytes, -30);
- }
- }
-} \ No newline at end of file
diff --git a/ARMeilleure/Translation/PTC/Ptc.cs b/ARMeilleure/Translation/PTC/Ptc.cs
index 9f07ca01..1ed54945 100644
--- a/ARMeilleure/Translation/PTC/Ptc.cs
+++ b/ARMeilleure/Translation/PTC/Ptc.cs
@@ -9,7 +9,6 @@ using Ryujinx.Common.Configuration;
using Ryujinx.Common.Logging;
using System;
using System.Buffers.Binary;
-using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
@@ -28,7 +27,7 @@ namespace ARMeilleure.Translation.PTC
private const string OuterHeaderMagicString = "PTCohd\0\0";
private const string InnerHeaderMagicString = "PTCihd\0\0";
- private const uint InternalVersion = 2228; //! To be incremented manually for each change to the ARMeilleure project.
+ private const uint InternalVersion = 2515; //! To be incremented manually for each change to the ARMeilleure project.
private const string ActualDir = "0";
private const string BackupDir = "1";
@@ -776,9 +775,7 @@ namespace ARMeilleure.Translation.PTC
_translateCount = 0;
_translateTotalCount = profiledFuncsToTranslate.Count;
- int degreeOfParallelism = new DegreeOfParallelism(4d, 75d, 12.5d).GetDegreeOfParallelism(0, 32);
-
- if (_translateTotalCount == 0 || degreeOfParallelism == 0)
+ if (_translateTotalCount == 0)
{
ResetCarriersIfNeeded();
@@ -787,6 +784,14 @@ namespace ARMeilleure.Translation.PTC
return;
}
+ int degreeOfParallelism = Environment.ProcessorCount;
+
+ // If there are enough cores lying around, we leave one alone for other tasks.
+ if (degreeOfParallelism > 4)
+ {
+ degreeOfParallelism--;
+ }
+
Logger.Info?.Print(LogClass.Ptc, $"{_translateCount} of {_translateTotalCount} functions translated | Thread count: {degreeOfParallelism}");
PtcStateChanged?.Invoke(PtcLoadingState.Start, _translateCount, _translateTotalCount);
@@ -825,8 +830,6 @@ namespace ARMeilleure.Translation.PTC
break;
}
}
-
- Translator.DisposePools();
}
List<Thread> threads = new List<Thread>();
@@ -839,6 +842,8 @@ namespace ARMeilleure.Translation.PTC
threads.Add(thread);
}
+ Stopwatch sw = Stopwatch.StartNew();
+
threads.ForEach((thread) => thread.Start());
threads.ForEach((thread) => thread.Join());
@@ -847,9 +852,11 @@ namespace ARMeilleure.Translation.PTC
progressReportEvent.Set();
progressReportThread.Join();
+ sw.Stop();
+
PtcStateChanged?.Invoke(PtcLoadingState.Loaded, _translateCount, _translateTotalCount);
- Logger.Info?.Print(LogClass.Ptc, $"{_translateCount} of {_translateTotalCount} functions translated | Thread count: {degreeOfParallelism}");
+ Logger.Info?.Print(LogClass.Ptc, $"{_translateCount} of {_translateTotalCount} functions translated | Thread count: {degreeOfParallelism} in {sw.Elapsed.TotalSeconds} s");
Thread preSaveThread = new Thread(PreSave);
preSaveThread.IsBackground = true;