1

1 TB のファイルを処理するには、1 台のマシンと 5 台のネットワーク マシンのどちらが高速ですか? (「処理する」とは、その 1TB ファイルで最も多く出現する単一の UTF-16 文字を見つけることを指します)。データ転送速度は 1 ギガビット/秒、1 TB のファイル全体が 1 台のコンピューターに格納され、各コンピューターにはクアッド コア CPU が搭載されています。

以下は、文字数を追跡するために long の配列 (配列サイズは 2^16) を使用して質問を試みたものです。2^16 x 2^3 (long のサイズ) = 2^19 = 0.5MB なので、これは 1 台のマシンのメモリに収まるはずです。どんな助け(リンク、コメント、提案)も大歓迎です。私は Jeff Dean が引用した待ち時間を使用し、私が知っている最良の概算を使用するために最善を尽くしました。最終的な答えは次のとおりです。

1 台のマシン: 5.8 時間 (ディスクからの読み取りが遅いため)
5 台のネットワーク マシン: 7.64 時間 (ディスクとネットワークからの読み取りのため)

1) Single Machine
 a) Time to Read File from Disk --> 5.8 hrs
   -If it takes 20ms to read 1MB seq from disk, 
    then to read 1TB from disk takes: 
    20ms/1MB x 1024MB/GB x 1024GB/TB = 20,972 secs 
    = 350 mins = 5.8 hrs 

 b) Time needed to fill array w/complete count data 
    --> 0 sec since it is computed while doing step 1a
    -At 0.5 MB, the count array fits into L2 cache. 
     Since L2 cache takes only 7 ns to access, 
     the CPU can read & write to the count array 
     while waiting for the disk read. 
     Time: 0 sec since it is computed while doing step 1a

 c) Iterate thru entire array to find max count --> 0.00625ms
   -Since it takes 0.0125ms to read & write 1MB from 
    L2 cache and array size is 0.5MB, then the time 
    to iterate through the array is: 
    0.0125ms/MB x 0.5MB = 0.00625ms  

 d) Total Time 
    Total=a+b+c=~5.8 hrs (due to slowness of reading from disk)

2) 5 Networked Machines   
   a) Time to transfr 1TB over 1Gbit/s --> 6.48 hrs
      1TB x 1024GB/TB x 8bits/B x 1s/Gbit 
      = 8,192s = 137m = 2.3hr
      But since the original machine keeps a fifth of the data, it
      only needs to send (4/5)ths of data, so the time required is: 
      2.3 hr x 4/5 = 1.84 hrs
      *But to send the data, the data needs to be read, which
       is (4/5)(answer 1a) = (4/5)(5.8 hrs) = 4.64 hrs
       So total time = 1.84hrs + 4.64 hrs = 6.48 hrs

   b) Time to fill array w/count data from original machine --> 1.16 hrs
      -The original machine (that had the 1TB file) still needs to
       read the remainder of the data in order to fill the array with
       count data. So this requires (1/5)(answer 1a)=1.16 hrs.  
       The CPU time to read & write to the array is negligible, as 
       shown in 1b.      

   c) Time to fill other machine's array w/counts --> not counted   
      -As the file is being transferred, the count array can be 
       computed. This time is not counted. 

   d) Time required to receive 4 arrays --> (2^-6)s
      -Each count array is 0.5MB
       0.5MB x 4 arrays x 8bits/B x 1s/Gbit 
       = 2^20B/2 x 2^2 x 2^3 bits/B x 1s/2^30bits 
       = 2^25/2^31s = (2^-6)s 

   d) Time to merge arrays  
      --> 0 sec(since it can be merge while receiving)

   e) Total time 
      Total=a+b+c+d+e =~ a+b =~ 6.48 hrs + 1.16 hrs = 7.64 hrs 
4

2 に答える 2

1

これは答えではなく、単なる長いコメントです。周波数配列のサイズを誤って計算しました。1 TiB ファイルには 550 個の Gsym が含まれており、予想される頻度については何も述べられていないため、少なくとも 64 ビット整数 (つまり 8 バイト/要素) のカウント配列が必要になります。この周波数配列の合計サイズは、2^16 * 8 = 2^19計算を誤った 4 GiB ではなく、バイトまたはちょうど 512 KiB になります。このデータを 1 Gbps リンクで送信するのに約 4.3 ミリ秒しかかかりません (MTU が 1500 バイトの TCP/IP over Ethernet を使用する場合、プロトコル ヘッダーは約 3% かかります/ジャンボ フレームではそれ以下ですが、広くサポートされていません/)。また、この配列サイズは CPU キャッシュに完全に収まります。

データを処理して周波数を抽出するのにかかる時間を大幅に過大評価しており、ディスク読み取りがオーバーラップする可能性があるという事実も見落としています。実際、CPU キャッシュに常駐する頻度配列を更新するのは非常に高速であるため、そのほとんどが低速のディスク読み取りとオーバーラップするため、計算時間は無視できます。しかし、データの読み取りにかかる時間を過小評価しています。マルチコア CPU を使用しても、ハード ドライブへのパスは 1 つしかないため、1 台のマシンの場合、データを読み取るのに 5.8 時間かかることになります。

実際、これは、ネットワーク化された並列処理や複数の CPU コアを持つことの恩恵を受けないデータ処理の例です。これが、スーパーコンピューターやその他の高速ネットワーク処理システムが、数 GB/秒の総読み取り/書き込み速度を実現できる分散型並列ファイル ストレージを使用する理由です。

于 2012-07-14T20:39:14.210 に答える
1

ソース マシンが 5 の一部である場合、0.8 TB を送信するだけで済みます。

データを他のマシンに送信しても意味がない場合があります。このことを考慮:

ソース マシンがデータを送信するには、データをネットワーク経由で送信する前に、まずディスクをヒットしてデータをメイン メモリに読み込む必要があります。データがすでにメイン メモリにあり、処理されていない場合は、その機会を無駄にしています。

したがって、CPU キャッシュへのロードは、ネットワークを介したディスクからメモリへのロードやデータへのロードよりもはるかに安価であるという仮定の下で(エイリアン ハードウェアを扱っていない限り、これは真実です)、ソース マシンでロードするだけの方が良いでしょう。タスクを分割する唯一の場所は、「ファイル」が最初から分散された方法で何らかの方法で作成/入力されている場合です。

したがって、L1/L2 キャッシュと CPU ops のわずかなオーバーヘッドを考慮して、1Tb ファイルのディスク読み取り時間のみをカウントする必要があります。キャッシュ アクセス パターンはシーケンシャルであるため最適であり、キャッシュ ミスはデータごとに 1 回だけです。

ここでの主なポイントは、ディスクが他のすべてを覆い隠す主要なボトルネックであるということです。

于 2012-07-17T02:20:23.757 に答える