blocked_range2d#

[algorithms.blocked_range2d]

再帰的に分割可能な 2 次元の半開区間を表すクラス・テンプレート。

blocked_range2d は、半開 2 次元範囲 [i0,j0)×[i1,j1) を表します。範囲の各軸には個別の分割しきい値があります。いずれかの軸が分割可能な場合、blocked_range2d は分割可能です。

blocked_range2d は、Range 要件を満たします。


// <oneapi/tbb/blocked_range2d.h> ヘッダーで定義 
namespace oneapi { 
    namespace tbb { 

        template<typename RowValue, typename ColValue=RowValue> 
        class blocked_range2d { 
        public: 
            // Types 
            using row_range_type = blocked_range<RowValue>; 
            using col_range_type = blocked_range<ColValue>; 

            // Constructors 
            blocked_range2d( 
                RowValue row_begin, RowValue row_end, 
                typename row_range_type::size_type row_grainsize, 
                ColValue col_begin, ColValue col_end, 
                typename col_range_type::size_type col_grainsize); 
            blocked_range2d( RowValue row_begin, RowValue row_end, 
                           ColValue col_begin, ColValue col_end ); 
            // Splitting constructors 
            blocked_range2d( blocked_range2d& r, split ); 
            blocked_range2d( blocked_range2d& r, proportional_split proportion ); 

            // Capacity 
            bool empty() const; 

            // Access 
            bool is_divisible() const; 
            const row_range_type& rows() const; 
            const col_range_type& cols() const; 
        }; 
    } // namespace tbb 
} // namespace oneapi

要件:

  • RowValueColValueblocked_range の要件を満たす必要があります。

メンバーのタイプ

using row_range_type = blocked_range<RowValue>;

RowValue のタイプ。

using col_range_type = blocked_range<ColValue>;

ColValue のタイプ。

メンバー関数


blocked_range2d( 
    RowValue row_begin, RowValue row_end, 
    typename row_range_type::size_type row_grainsize, 
    ColValue col_begin, ColValue col_end, 
    typename col_range_type::size_type col_grainsize);

効果: 値の 2 次元空間を表す blocked_range2d を作成します。空間は、行と列が指定された粒度の半開区間の直積 [row_begin, row_end) x [col_begin, col_end) です。

例: blocked_range2d<char,int> r('a', 'z'+1, 3, 0, 10, 2 ); は、(i, j) 形式のすべての値ペアを含む 2 次元の空間を作成します。ここで、i の範囲は粒度 3 の 'a' から 'z' で、j の範囲は粒度 2 の 0 から 9 です。


blocked_range2d(RowValue row_begin, RowValue row_end, 
                ColValue col_begin, ColValue col_end);

blocked_range2d(row_begin,row_end,1,col_begin,col_end,1) として保存。

blocked_range2d(blocked_range2d& range, split);

基本分割コンストラクター。

要件: is_divisible() は true です。

効果: 範囲を 2 つのサブ範囲に分割します。新しく作成される blocked_range2d は、ほぼ元の range の半分で、range はその残りになるように更新されます。各 subrange の粒度はオリジナルの range と同じです。行または列単位で分割されます。分割する軸の選択は、分割が繰り返された後でサブ範囲がそれぞれの行と列の粒度の比率に近くなることを目的とします。

blocked_range2d(blocked_range2d& range, proportional_split proportion);

比例分割コンストラクター。

要件: is_divisible() は true です。

効果: range を軸の 1 つで指定された proportion (比率) で 2 つのサブ範囲に分割します。分割する軸の選択は基本分割コンストラクターと同じ方法で行われ、選択した軸は比例分割されます。2 番目の軸と各サブ範囲の粒度は元の範囲と同じです。

bool empty() const;

効果: range が空かどうかを判別します。

戻り値: rows().empty()||cols().empty()

bool is_divisible() const;

効果: 範囲がサブ範囲に分割できるかどうかを判別します。

戻り値: rows().is_divisible()||cols().is_divisible()

const row_range_type& rows() const;

戻り値: 値の空間の行を含む 範囲。

const col_range_type& cols() const;

戻り値: 値の空間の列を含む範囲。

参照: