// Original CPU teaching model; not a device simulator or benchmark.
#include <iostream>
#include <vector>
#include <numeric>
#include <stdexcept>

void require(bool ok) { if (!ok) throw std::runtime_error("model check failed"); }

int main() {
 const std::vector<std::vector<int>> local{{2,4},{6,8},{10,12}};
 std::vector<int> partial;
 for(const auto& values:local) partial.push_back(std::accumulate(values.begin(),values.end(),0));
 const int total=std::accumulate(partial.begin(),partial.end(),0);
 require(partial==std::vector<int>({6,14,22}) && total==42);
 std::cout<<"partials="<<partial[0]<<' '<<partial[1]<<' '<<partial[2]<<" total="<<total<<'\n';
}

