fix severe bug
This commit is contained in:
@@ -2,8 +2,8 @@
|
|||||||
// -----------------------------------------------------------------------
|
// -----------------------------------------------------------------------
|
||||||
// file="L4.Prefetch"
|
// file="L4.Prefetch"
|
||||||
// Project: StgSharp
|
// Project: StgSharp
|
||||||
// AuthorGroup: Nitload Space
|
// AuthorGroup: Nitload
|
||||||
// Copyright (c) Nitload Space. All rights reserved.
|
// Copyright (c) Nitload. All rights reserved.
|
||||||
//
|
//
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
@@ -25,13 +25,6 @@
|
|||||||
//
|
//
|
||||||
// -----------------------------------------------------------------------
|
// -----------------------------------------------------------------------
|
||||||
// -----------------------------------------------------------------------
|
// -----------------------------------------------------------------------
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Security.Cryptography.X509Certificates;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace StgSharp.HighPerformance.Memory
|
namespace StgSharp.HighPerformance.Memory
|
||||||
{
|
{
|
||||||
public unsafe partial class L4
|
public unsafe partial class L4
|
||||||
@@ -67,17 +60,22 @@ namespace StgSharp.HighPerformance.Memory
|
|||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (!TryGetEmptyLine(out int index)) {
|
|
||||||
|
// TODO 未经初始化的_idMux可能会导致TryGetEmptyLine失败,导致无法预取,最好添加末尾指针计数
|
||||||
|
if (!TryGetEmptyLine(out int index))
|
||||||
|
{
|
||||||
throw new OverflowException("L4 has no empty cache line.");
|
throw new OverflowException("L4 has no empty cache line.");
|
||||||
}
|
}
|
||||||
CacheLineHead* head = &_head[index];
|
CacheLineHead* head = &_head[index];
|
||||||
|
|
||||||
// pre fetch them here
|
// pre fetch them here
|
||||||
PrefetchPredict.Prefetch(head->_origin, _head->_profile, _head->_address);
|
_ = PrefetchPredict.Prefetch(head->_origin, head->_profile, head->_address);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private partial bool TestHit(nuint origin)
|
private partial bool TestHit(
|
||||||
|
nuint origin
|
||||||
|
)
|
||||||
{
|
{
|
||||||
if (_map.TryGet(origin, out nuint handle))
|
if (_map.TryGet(origin, out nuint handle))
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -78,7 +78,7 @@ namespace StgSharp.HighPerformance.Memory
|
|||||||
_prediction = (CacheLinePrediction*)ptr;
|
_prediction = (CacheLinePrediction*)ptr;
|
||||||
ptr += predictionSize;
|
ptr += predictionSize;
|
||||||
_map = SwissTable.Create(_baseAddress + cacheSize + entrySize, _ => { });
|
_map = SwissTable.Create(_baseAddress + cacheSize + entrySize, _ => { });
|
||||||
_prediction = (CacheLinePrediction*)ptr;
|
ptr += mapSize;
|
||||||
_eviction = (EvictionArray*)ptr;
|
_eviction = (EvictionArray*)ptr;
|
||||||
ptr += rrpvSize;
|
ptr += rrpvSize;
|
||||||
_idMux = new UnmanagedStack<int>((int*)ptr, CacheLineCount, _ => { });
|
_idMux = new UnmanagedStack<int>((int*)ptr, CacheLineCount, _ => { });
|
||||||
@@ -132,6 +132,7 @@ namespace StgSharp.HighPerformance.Memory
|
|||||||
_prefetching = 0;
|
_prefetching = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Thread.Sleep(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
while (true)
|
while (true)
|
||||||
|
|||||||
Reference in New Issue
Block a user