从序言中的直接映射缓存获取数据
Getting data from a direct mapped cache in prolog
谓词getDataFromCache(StringAddress,Cache,Data,HopsNum,directMap,BitsNum)
当从缓存中成功检索到数据时应该成功(缓存命中)
HopsNum 表示访问数据所需的跳数
缓存可以根据直接映射缓存映射技术而有所不同,例如
那:
• StringAddress 是表示地址的二进制数的字符串
您需要处理的数据,它是六个二进制位。
• 缓存是使用前面讨论的表示的缓存。
• 数据是发生缓存命中时从缓存中检索的数据。
• HopsNum 从缓存访问数据所需的跃点数。
• BitsNum BitsNum 是索引需要的位数。
getDataFromCache 总是给我错误,尽管一切似乎都正常所以我希望有人修复它
convertAddress(Binary,N,Tag,Idx,directMap):-
Idx is mod(Binary,10**N),
Tag is Binary // 10**N.
getDataFromCache(SA,[item(tag(T),data(D),V,_)|T],Data,HopsNum,directMap,BitsNum):-
convertAddress(SA,BitsNum,Tag,Idx,directMap),
number_string(Tag,Z),
Z==T,
V==1,
Data is D.
getDataFromCache(SA,[item(tag(T),data(D),V,_)|T],Data,HopsNum,directMap,BitsNum):-
convertAddress(SA,BitsNum,Tag,Idx,directMap),
number_string(Tag,Z),
(Z\=T;V==0),
getDataFromCache(SA,T,Data,HopsNum,directMap,BitsNum).
只是 hopsNumber 始终为零
而且你不必遍历,因为它是直接的
您可以使用 nth0 perdicate 访问它
您还两次使用 T 变量
谓词getDataFromCache(StringAddress,Cache,Data,HopsNum,directMap,BitsNum) 当从缓存中成功检索到数据时应该成功(缓存命中) HopsNum 表示访问数据所需的跳数 缓存可以根据直接映射缓存映射技术而有所不同,例如 那: • StringAddress 是表示地址的二进制数的字符串 您需要处理的数据,它是六个二进制位。 • 缓存是使用前面讨论的表示的缓存。 • 数据是发生缓存命中时从缓存中检索的数据。 • HopsNum 从缓存访问数据所需的跃点数。 • BitsNum BitsNum 是索引需要的位数。
getDataFromCache 总是给我错误,尽管一切似乎都正常所以我希望有人修复它
convertAddress(Binary,N,Tag,Idx,directMap):-
Idx is mod(Binary,10**N),
Tag is Binary // 10**N.
getDataFromCache(SA,[item(tag(T),data(D),V,_)|T],Data,HopsNum,directMap,BitsNum):-
convertAddress(SA,BitsNum,Tag,Idx,directMap),
number_string(Tag,Z),
Z==T,
V==1,
Data is D.
getDataFromCache(SA,[item(tag(T),data(D),V,_)|T],Data,HopsNum,directMap,BitsNum):-
convertAddress(SA,BitsNum,Tag,Idx,directMap),
number_string(Tag,Z),
(Z\=T;V==0),
getDataFromCache(SA,T,Data,HopsNum,directMap,BitsNum).
只是 hopsNumber 始终为零 而且你不必遍历,因为它是直接的 您可以使用 nth0 perdicate 访问它 您还两次使用 T 变量