FIFOキャッシュの異常


13

これはからのフォローの挑戦である。この1あなたが最初の1つをチェックしてみてください混同している場合、。


まず、を、キャッシュに容量kがあり、いっぱいになったときに先入れ先出し(FIFO)排出方式を使用すると想定したリソースアクセスのシーケンスsが持つキャッシュミスの数とします。m(s、k)sk

次いで比与えられ、リソースアクセスの空でないシーケンスを返すSが存在するように、K > JとM (S 、K )≥ R ⋅ M (S 、jは)。r>1sk>jm(s、k)≥r⋅m(s、j)

平易な英語では、シーケンス構築リソースのが大きなキャッシュは(少なくとも)は2つのキャッシュサイズがありますようにアクセスするのR倍以上解決するために使用するときにキャッシュ・ミスを秒。srs

たとえば、有効な出力は配列である(3 、2 、1 、0 、3 、2 、4 、3 、2 、1 、0 、4 )、それが原因として9つのキャッシュ・サイズのキャッシュミスを3ですが、キャッシュサイズが4の場合は10ミスです。r=1.1(3、2、1、0、3、2、4、3、2、1、0、4)93104

要件を満たしている限り、どのシーケンスを返すかは関係ありません。


バイト単位の最短コードが優先されます。



疲労だけかもしれませんが、この挑戦​​は私には完全に明確ではありません。実用的な例とさらに2つのテストケースを提供できますか?
— シャギー

@Shaggy Goは、他の課題と、他のコメントから読んだ背景をチェックします。重要なのは、FIFOキャッシュが一連の要求に対して大きくなるにつれて悪化する可能性があることです。
— orlp

回答:


7

タングステン言語(Mathematicaの)、124の 113 101バイト

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

オンラインでお試しください!

注:TIO出力は非常に長いため、実際のリストではありません。TIOのラッパー関数は、2つのキャッシュ容量のページフォールトの数を示します。

実際のリストについては、オンラインでお試しください!

関連:arXiv:1003.1336

どうやって?

我々は2つのキャッシュ容量を持っている状況を想定してみましょう、3と4。

また、3-cacheが{4, 2, 5}ページングされ、4-cacheが{5, 4, 3, 2}ページングされたとします。次に、ページングを試してみましょう{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}

3一方で-cacheは、5ページフォールトを持っていた4-cacheは10我々はまた、私たちの元の状態に戻っていました。

ここで、ページングを繰り返す{1, 2, 3, 4, 5}と、漸近的にの比率に達し2ます。

この現象をより高いキャッシュ容量に拡張して、ページング{1, 2, 3, ... , 2n + 1}して最終的に任意の比率にすることができます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.