ブロック分割とサイクリック分割の違いを教えてください


データ並列化の用語のようですがブロック分割とサイクリック分割の違いを教えてください




1次元のデータの分割方法です． 1次元配列を分割する例で示します． 長さ`N`の配列`a`を`M`ブロックに分割するとき  
`m`番目のブロックの要素が， `a[i+N/M*m]`で指定されるのがブロック分割，  
`a[N/M*i+m]`なのがサイクリック分割です．  
ここで`i`はどちらも`0~N/M-1`をとります．また簡単のために`N`は`M`でわりきれると仮定しています． 図がわかりやすいのでのせます  
[![画像の説明をここに入力](https://i.stack.imgur.com/THJ9k.png)](https://i.stack.imgur.com/THJ9k.png)

[code]

    [0,0,0,0,0,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4] //ブロック
    [0,1,2,3,4,0,1,2,3,4,0,1,2,3,4,0,1,2,3,4,0,1,2,3,4] //サイクリック
    
[/code]

`N=30`,`M=6`の場合をのせました． 上がブロック分割，下がサイクリック分割です．ここで各色はブロックに対応しています．  
画像処理やcudaでスレッドに分割する場合は2または3次元のデータを考える場合が多いですが，その場合には各次元それぞれブロックまたはサイクリックで分割します．




下記のようなイメージではないでしょうか？

* * *

  * サイクリック分割  
データを1行(または1列)ごとに分割する方式

１ → あいうえお  
２ → かきくけこ  
３ → さしすせそ

* * *

  * ブロック分割  
データを決められたブロックサイズ毎に分割する方式

例：（1ブロック = 8Byte）  
１ → あいうえ  
２ → おかきく  
３ → けこさし  
４ → すせそ

* * *

  * ブロックサイクリック分割  
ブロック分割とサイクリック分割の中間の分割方式  
データを決められた行数(複数行)ごとに分割する方式

１ → あいうえお  
かきくけこ

２ → さしすせそ  
たちつてと

