私のHacker's Delightのコピーは家にあり、私が見つけたWebリソースはこの詳細について明確ではありません.
よく知られている「行と列の正方形」アルゴリズムを使用して、次の 8 レベルの LRU を作成しました。(もっと良い名前はありますか?)。
#include <stdint.h>
typedef union {
uint8_t rows[8];
uint64_t cols;
} lru_state;
void lru_init(lru_state *this) {
this->cols=0;
}
void lru_up(lru_state *this, int used /* in 0..7 */) {
this->rows[used]=0xff;
this->cols &= ~(0x0101010101010101 << used);
}
int lru_get(lru_state *this) {
int i;
for (i=1; i<8 ; i++) {
if (0==(this->rows[i])) return i;
}
return 0;
}
最も使用頻度の低い行はすべてゼロになるという私の仮定の確認をお願いします。うまくいくようですが、満足のいくものであることを証明する数学がありません。
それで、これは正しいですか?または、各行の最小ハミング重みを計算する必要がありますか?