I tested the effective RNG quality of this approach using the TestU01 random number generator test suite by constructing a custom RNG which is reseeded with a new sequential seed every 0x1000 steps:
#include <stdlib.h>
#include "ulcg.h"
#include "unif01.h"
#include "bbattery.h"
long long i=1,j=0;
unif01_Gen * gen;
unsigned long myrand()
{
if(++i&0xfff==0)
{
ugfsr_DeleteGen(gen);
gen = ugfsr_CreateMT19937_02(++j, NULL, 0);
}
return gen->GetBits(gen->param, gen->state);
}
int main()
{
unif01_Gen *gen2 = unif01_CreateExternGenBitsL("foo", myrand);
gen = ugfsr_CreateMT19937_02(1, NULL, 0);
bbattery_Crush (gen2);
return 0;
}
Result (after waiting 40 minutes for the tests to complete):
Test p-value
----------------------------------------------
71 LinearComp, r = 0 1 - eps1
72 LinearComp, r = 29 1 - eps1
----------------------------------------------
All other tests were passed
These are the same tests Mersenne Twister fails even when used normally, when not reseeding. So the TestU01 Crush test could not distinguish the sequential seeding scenario from normal usage.
I also tested the approach of reseeding with the output from another Mersenne Twister instead of using sequential integers. The result was exactly the same.
While I did not try the most time-consuming "BigCrush" test (which takes 8 hours), I think it's safe to say that the quality of MT is not significantly impaired by generating sub-RNGs with sequential seeds, as suggested in the question.