Illustrating view modifiers on a 1-dimensional array.
#include <unistd.h>
#include <iostream>
#include <cstddef>
#include <sstream>
#include <libdash.h>
int main(int argc, char* argv[])
{
typedef typename Array_t::index_type indx;
int block_size = 10;
Array_t array(nunits * block_size);
for (
int l = 0; l < array.
local.
size(); l++) {
}
for (int u = 0; u <= nunits; u++) {
if (u <= 2 &&
myid == u) {
auto v_subl = dash::sub(2,
block_size - 2,
v_local);
cout << "unit " << u << ": sub(2,blocksize-2, local(array))): \n"
<<
" a.lsize: " << array.
pattern().local_size() <<
'\n' << " begin: " << *v_subl_bi << ": " << v_subl_b << '\n'
<< " end: " << *v_subl_ei << ": " << v_subl_e << '\n'
<< " size: " << v_subl.size() << '\n';
cout << " values:\n";
for (auto i = v_subl.begin(); i != v_subl.end(); ++i) {
cout << " it:" << i << ": "
<< static_cast<int>(*i) << '\n';
}
cout << endl;
}
}
cout << "------------------------------------------------------" << endl;
auto sub_0 = dash::sub(block_size / 2 * (nunits-1),
block_size / 2 * (nunits-1) + block_size,
array);
auto sub_1 = dash::sub(2,
block_size - 2,
sub_0);
cout << "sub_0 = sub(<block range>, array): \n"
<< " size: " << sub_0.size() << '\n'
<< " values:\n";
for (auto i = sub_0.begin(); i != sub_0.end(); ++i) {
cout <<
" index:" <<
dash::index(i) <<
" iterator:" << i <<
": " << static_cast<int>(*i) << '\n';
}
cout << endl;
cout << "sub_1 = sub(2, blocksize-2, sub_0): \n"
<< " size: " << sub_1.size() << '\n'
<< " values:\n";
for (auto i = sub_1.begin(); i != sub_1.end(); ++i) {
cout <<
" index:" <<
dash::index(i) <<
" iterator:" << i <<
": " << static_cast<int>(*i) << '\n';
}
cout << endl;
}
cout << "------------------------------------------------------" << endl;
auto v_sub = dash::sub(3,
block_size + 2,
array);
cout << "sub(3,blocksize+2, array)): \n"
<< " begin: " << *v_sub_bi << ": " << v_sub_b << '\n'
<< " end: " << *v_sub_ei << ": " << v_sub_e << '\n'
<< " size: " << v_sub.size() << '\n';
cout << " values:\n";
for (auto i = v_sub.begin(); i != v_sub.end(); ++i) {
cout << " it:" << i << ": "
<< static_cast<int>(*i) << '\n';
}
cout << "local(sub(3,blocksize+2, array)): \n"
<< " begin: " << *lsub_bi << ": " << lsub_b << '\n'
<< " end: " << *lsub_ei << ": " << lsub_e << '\n'
<< " size: " << lsub.size() << " = " << (lsub_e - lsub_b)
<< endl;
#if 0
cout << " values:\n";
for (auto i = lsub.begin(); i != lsub.end(); ++i) {
cout << " it:" << i << ": "
<< static_cast<int>(*i) << '\n';
}
auto slsub = dash::sub(0,2, lsub);
cout << "sub(0,2, local(sub(3,blocksize+2, array)): \n"
<< " begin: " << *slsub_bi << ": " << slsub_b << '\n'
<< " end: " << *slsub_ei << ": " << slsub_e << '\n'
<< " size: " << slsub.size() << '\n';
cout << " values:\n";
for (auto i = slsub.begin(); i != slsub.end(); ++i) {
cout << " iterator:" << i << ": "
<< static_cast<int>(*i) << '\n';
}
cout << endl;
#endif
}
return EXIT_SUCCESS;
}