Anomalias de cache FIFO


13

Este é o desafio de acompanhamento deste , se você estiver confuso, verifique esse primeiro.


Primeiro, permita que seja o número de falhas de cache que uma sequência s de acesso a recursos teria assumindo que nosso cache tem capacidade k e usa um esquema de ejeção de FIFO quando estiver cheio.m(s,k)sk

Então, dada uma razão , retorne uma sequência não vazia de recursos que acessa s, de tal forma que exista k > j com m ( s , k ) r m ( s , j ) .r>1sk>jm(s,k)rm(s,j)

Em inglês simples, construa uma sequência de acesso a recursos para que haja dois tamanhos de cache em que o cache maior tenha (pelo menos) r vezes mais falta de cache quando usado para resolver s .srs

Um exemplo para , uma saída válida é a sequência ( 3 , 2 , 1 , 0 , 3 , 2 , 4 , 3 , 2 , 1 , 0 , 4 ) , pois causa 9 falhas de cache para um tamanho de cache de 3 , mas 10 falham para um tamanho de cache 4 .r=1.1(3,2,1,0 0,3,2,4,3,2,1,0 0,4)93104

Não importa qual sequência você retorne, desde que atenda aos requisitos.


O código mais curto em bytes vence.


Leitura de segundo plano: anomalia de
Bélády

Pode ser apenas a exaustão, mas esse desafio não está totalmente claro para mim; você poderia fornecer um exemplo trabalhado e mais alguns casos de teste?
Shaggy

@Shaggy Go, confira o outro desafio e a leitura de segundo plano do outro comentário. O ponto crucial é que um cache FIFO pode piorar à medida que se torna maior para algumas séries de solicitações.
orlp

Respostas:


7

Wolfram Language (Mathematica) , 124 113 101 bytes

Flatten@{s=⌈2#⌉;q=Range[r=2s+1];g=Mod[q s-s,r];{Sort@g[[#+1;;]],g[[;;#]]}&~Array~r,Table[q,s^3]}&

Experimente online!

NOTA: A saída TIO não é a lista real, pois seria muito longa. A função de wrapper no TIO informa o número de falhas de página para duas capacidades de cache.

Para a lista real: Experimente online!

Palavras-chave: arXiv: 1003.1336

Quão?

Vamos assumir uma situação em que temos duas capacidades de cache 3e 4.

Além disso, digamos que o 3-cache paginou {4, 2, 5}e 4-cache paginou {5, 4, 3, 2}. Então, vamos tentar a paginação {1, 2, 3, 4, 5, 1, 2, 3, 4, 5}:

page  3-cache   4-cache
      {4,2,5}  {5,4,3,2}
  1   {1,4,2}  {1,5,4,3}
  2   {1,4,2}  {2,1,5,4}
  3   {3,1,4}  {3,2,1,5}
  4   {3,1,4}  {4,3,2,1}
  5   {5,3,1}  {5,4,3,2}
  1   {5,3,1}  {1,5,4,3}
  2   {2,5,3}  {2,1,5,4}
  3   {2,5,3}  {3,2,1,5}
  4   {4,2,5}  {4,3,2,1}
  5   {4,2,5}  {5,4,3,2}

O 3-cache teve 5 falhas de página, enquanto o 4-cache tinha 10. Também retornamos ao nosso estado original.

Aqui, se repetirmos a paginação {1, 2, 3, 4, 5}, atingiríamos assintoticamente a proporção de 2.

Podemos estender esse fenômeno para capacidades de cache mais altas, para que possamos paginar {1, 2, 3, ... , 2n + 1}e terminar com qualquer proporção.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.