small changed
This commit is contained in:
@@ -44,5 +44,21 @@ namespace StgSharp.Common.HighPerformance.ProcessorAbstraction
|
||||
/// </summary>
|
||||
public readonly uint NumaNodeId;
|
||||
|
||||
internal LogicalCore(
|
||||
uint globalCpuId,
|
||||
uint numaGroupId,
|
||||
uint numaNodeId
|
||||
)
|
||||
{
|
||||
GlobalCpuId = globalCpuId;
|
||||
NumaGroupId = numaGroupId;
|
||||
NumaNodeId = numaNodeId;
|
||||
}
|
||||
|
||||
[Obsolete(
|
||||
"Do not manually create instances of LogicalCore. Use NumaNode to obtain LogicalCore instances.",
|
||||
true)]
|
||||
public LogicalCore() { }
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -47,9 +47,9 @@ namespace StgSharp.Common.HighPerformance.ProcessorAbstraction
|
||||
[UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])]
|
||||
[DefaultDllImportSearchPaths(DllImportSearchPath.AssemblyDirectory)]
|
||||
public static partial int GetNumaEach(
|
||||
int numaId,
|
||||
Span<ulong> coreCountInNuma,
|
||||
Span<ulong> globalCpuIdInNuma
|
||||
uint numaId,
|
||||
Span<ulong> CpuIndexInNuma,
|
||||
Span<uint> globalCpuIdInNuma
|
||||
);
|
||||
|
||||
[LibraryImport(Native.LibName, EntryPoint = "sn_get_numa_overall")]
|
||||
@@ -68,12 +68,22 @@ namespace StgSharp.Common.HighPerformance.ProcessorAbstraction
|
||||
throw new InvalidOperationException("Failed to get NUMA overall information.");
|
||||
}
|
||||
_numaNodes = new NumaNode[numaNodeCount];
|
||||
for (int i = 0; i < numaNodeCount; i++)
|
||||
{
|
||||
NumaNode node = new(coreCountInNuma[i]);
|
||||
GetNumaEach(i, coreCountInNuma, node.GlobalCpuIds);
|
||||
for (uint i = 0; i < numaNodeCount; i++) {
|
||||
_numaNodes[i] = InitNumaNode(i, coreCountInNuma[(int)i]);
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.NoInlining)]
|
||||
private static NumaNode InitNumaNode(
|
||||
uint numaId,
|
||||
int count
|
||||
)
|
||||
{
|
||||
Span<uint> globalIndex = stackalloc uint[count];
|
||||
Span<ulong> groupIndex = stackalloc ulong[count];
|
||||
_ = GetNumaEach(numaId, groupIndex, globalIndex);
|
||||
return new(numaId, count, globalIndex);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,11 +39,17 @@ namespace StgSharp.Common.HighPerformance.ProcessorAbstraction
|
||||
|
||||
private LogicalCore[] _logicalCores;
|
||||
|
||||
public NumaNode(
|
||||
int count
|
||||
internal NumaNode(
|
||||
uint numaId,
|
||||
int count,
|
||||
Span<uint> logicalCoreIds
|
||||
|
||||
)
|
||||
{
|
||||
_logicalCores = new LogicalCore[count];
|
||||
for (int i = 0; i < count; i++) {
|
||||
_logicalCores[i] = new LogicalCore(1, numaId, logicalCoreIds[i]);
|
||||
}
|
||||
}
|
||||
|
||||
public int LogicalCoreCount => _logicalCores.Length;
|
||||
|
||||
Reference in New Issue
Block a user