Main Content

tocBytes

ticBytes の呼び出し後に転送されたバイト数を読み取る

    説明

    tocBytes(pool) は、ticBytes の呼び出し後に転送されたバイト数を読み取ります。この関数は、ticBytes が最後に実行されてから、並列 pool 内の各ワーカー間で転送された合計バイト数を表示します。

    並列プール内のワーカー間で転送されたデータの量を測定するには、関数 ticBytes (pool) と関数 tocBytes (pool) を共に使用します。ticBytes および tocBytes は、parforspmdparfeval などの並列言語の構成や関数の実行時に使用できます。ticBytes および tocBytes を使用してデータの転送量を減らし、コードを最適化します。

    bytes = tocBytes(pool) は、並列 pool 内の各ワーカー間で転送されたバイト数を返します。

    tocBytes(pool,startState) は、ticBytes コマンドが startState を生成した後に並列 pool 内で転送された合計バイト数を表示します。

    bytes = tocBytes(pool,startState) は、ticBytes コマンドが startState を生成した後に並列 pool 内の各ワーカー間で転送されたバイト数を返します。

    すべて折りたたむ

    tocBytes(gcp,startS) を使用して、転送されたデータの量を測定します。

    a = 0;
    b = rand(100);
    startS = ticBytes(gcp);
    parfor i = 1:100
        a = a + sum(b(:, i));
    end
    tocBytes(gcp,startS)
    Starting parallel pool (parpool) using the 'local' profile ... 
    connected to 4 workers.
    
                 BytesSentToWorkers    BytesReceivedFromWorkers
                 __________________    ________________________
    
        1            42948              7156                   
        2            36548              7156                   
        3            27500              4500                   
        4            27500              4500                   
        Total    1.345e+05             23312                   
    

    各ワーカーで実行するループ反復数が異なる可能性があるため、ワーカーの転送バイト数が異なることがあります。

    bytes = tocBytes(gcp) を使用して、転送されたデータの量を測定します。

    ticBytes(gcp);
    spmd
        rand(100);
    end
    bytes = tocBytes(gcp)
    bytes =
    
           13448        1208
           13448        1208
           13448        1208
           13448        1208          				   

    各ワーカーではループが同数回反復されるため、ワーカーが転送するバイト数は同一です。

    for ループ内に入れ子にされた parfor ループの実行中に転送されたバイト数の、最小値と平均値を測定します。

    REPS = 10;   
    minBytes = Inf;   
    ticBytes(gcp);  % ticBytes, pair 1
    
    for ii=1:REPS
       a = 0;
       b = rand(100);
       startS = ticBytes(gcp)  % ticBytes, pair 2  
       parfor i = 1:100
           a = a + sum(b(:, i));
       end
       bytes = tocBytes(gcp, startS)  % tocBytes, pair 2  
       minBytes = min(bytes, minBytes)
    end
    
    averageBytes = tocBytes(gcp)/REPS  % tocBytes, pair 1 
              

    for ループ内に parfor を入れ子にすると、オーバーヘッドにより低速になることがあります。入れ子にされた for ループから parfor ループへの変換を参照してください。

    入力引数

    すべて折りたたむ

    並列プール。parallel.ProcessPool オブジェクトまたは parallel.ClusterPool オブジェクトとして指定します。

    プロセス プールまたはクラスター プールを作成するには、parpool を使用します。

    例: pool = parpool('local');

    開始状態。ticBytes(pool) により返されます。

    例: startState = ticBytes(gcp);

    出力引数

    すべて折りたたむ

    転送バイト数。numWorkers 行 2 列のサイズの行列として返されます。この行列には、並列プール内の各ワーカー間で転送されたバイト数が含まれます。bytes は、見出しなしでバイト単位での値を返します。コマンド ウィンドウ出力で Sent と Received の見出し、ワーカー数およびバイト単位での値を表示するには、出力引数を指定せずに tocBytes(pool) を使用します。

    例: bytes = tocBytes(pool);

    バージョン履歴

    R2016b で導入