In[]:=
In[]:=
resTimes=computeAllParts[1000000,100];​​
100 iterations left
2037.97
99 iterations left
2046.84
98 iterations left
2080.74
97 iterations left
2104.92
96 iterations left
2092.95
95 iterations left
2091.02
94 iterations left
2093.96
93 iterations left
2108.07
92 iterations left
2094.3
91 iterations left
2112.21
90 iterations left
2107.8
89 iterations left
2112.57
88 iterations left
2142.3
87 iterations left
2140.21
86 iterations left
2139.85
85 iterations left
2130.47
84 iterations left
2145.89
83 iterations left
2158.36
82 iterations left
2215.7
81 iterations left
2219.07
80 iterations left
2161.04
79 iterations left
2157.74
78 iterations left
2168.08
77 iterations left
2169.06
76 iterations left
2171.03
75 iterations left
2175.62
74 iterations left
2182.39
73 iterations left
2175.16
72 iterations left
2173.72
71 iterations left
2179.4
70 iterations left
2176.92
69 iterations left
2181.62
68 iterations left
2184.16
67 iterations left
2191.99
66 iterations left
2188.57
65 iterations left
2184.91
64 iterations left
2191.81
63 iterations left
​​
​
(*Timing[MRB2=MRBFromPartsStream[1000000,1000];​​N[mtest-MRB2,30]]*)
ClearAll[MRBStreamBlocked];​​​​MRBStreamBlocked[pre_Integer,parts_Integer,block_Integer:1000]:=Module[{pr=Floor[1.005pre],n,d,files,L=0,need,b,c,s,sb,i,file,chunk,k,x,blkCount=0},n=Floor[1.32pr];​​d=SetPrecision[ChebyshevT[n,3],pr];​​(*globalaccumulators*)s=SetPrecision[0,pr];​​b=SetPrecision[-1,pr];​​c=-d;​​need=n;​​files=Table["terms"<>ToString[i]<>".wxf",{i,parts}];​​Do[If[need≤0,Break[]];​​If[!FileExistsQ[file],Continue[]];​​chunk=Import[file,"WXF"];​​Do[If[need≤0,Break[]];​​x=SetPrecision[chunk[[k]],pr];​​(*recurrence*)c=b-c;​​s+=c*(x-1);​​b*=2(L+n)(L-n)/((L+1)(2L+1));​​L++;need--;blkCount++;​​(*renormalizeeveryblocksteps*)If[Mod[blkCount,block]0,b=SetPrecision[b,pr];​​c=SetPrecision[c,pr];​​s=SetPrecision[s,pr];];,{k,Length[chunk]}];,{file,files}];​​If[need>0,Return[Failure["NotEnoughTerms",<|"Have"L,"Need"n|>]]];​​N[-s/d,pr]];​​
MRB2=MRBStreamBlocked[1000000,100,10000];​​
resTimes=computeAllParts[7000000,1000];​​
​​​​
​​​​​​​​​​​​​​​​​​
In[]:=
(*Max[Join[AbsoluteTiming[Print[AbsoluteTiming[computePart[10000,5,1];][[1]],​​AbsoluteTiming[computePart[10000,5,2];][[1]],​​AbsoluteTiming[computePart[10000,5,3];][[1]],​​AbsoluteTiming[computePart[10000,5,4];][[1]],​​AbsoluteTiming[computePart[10000,5,5];][[1]]]]]]*)​​​​​​(*MRB2=MRBFromPartsStream[10000,5];​​N[mtest-MRB2,30]*)​​