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

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

int main() {
 constexpr std::size_t n=5, block=4;
 const auto blocks=n/block+(n%block!=0);
 std::vector<int> visits(n,0); std::size_t skipped=0;
 for(std::size_t b=0;b<blocks;++b) for(std::size_t t=0;t<block;++t) {
  const auto i=b*block+t; if(i<n) ++visits[i]; else ++skipped;
 }
 for(int count:visits) require(count==1);
 require(skipped==3);
 std::cout<<"blocks="<<blocks<<" valid="<<n<<" skipped="<<skipped<<'\n';
}

