Skip to content

Commit 2aa5c04

Browse files
committed
+ fix Vectorization ver2
1 parent 18a45ca commit 2aa5c04

1 file changed

Lines changed: 13 additions & 36 deletions

File tree

src/Geopack/Geopack.Recalc.cs

Lines changed: 13 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -236,49 +236,26 @@ private static (double[] G, double[] H) Interpolate(
236236
Vector<double> vF2 = new(F2);
237237
int vectorSize = Vector<double>.Count;
238238

239-
int i = 0;
240-
while (GeopackConstants.IgrfCoefficientCount - i >= vectorSize)
239+
int vectorizationStartPosition = 0;
240+
while (GeopackConstants.IgrfCoefficientCount - vectorizationStartPosition >= vectorSize)
241241
{
242-
Vector<double> vG1 = new(G1, i);
243-
Vector<double> vG2 = new(G2, i);
244-
Vector<double> vH1 = new(H1, i);
245-
Vector<double> vH2 = new(H2, i);
242+
Vector<double> vG1 = new(G1, vectorizationStartPosition);
243+
Vector<double> vG2 = new(G2, vectorizationStartPosition);
244+
Vector<double> vH1 = new(H1, vectorizationStartPosition);
245+
Vector<double> vH2 = new(H2, vectorizationStartPosition);
246246

247-
(vG1 * vF1 + vG2 * vF2).CopyTo(G, i);
248-
(vH1 * vF1 + vH2 * vF2).CopyTo(H, i);
247+
(vG1 * vF1 + vG2 * vF2).CopyTo(G, vectorizationStartPosition);
248+
(vH1 * vF1 + vH2 * vF2).CopyTo(H, vectorizationStartPosition);
249249

250-
i += vectorSize;
250+
vectorizationStartPosition += vectorSize;
251251
}
252252

253-
if (i >= GeopackConstants.IgrfCoefficientCount)
253+
while (vectorizationStartPosition < GeopackConstants.IgrfCoefficientCount)
254254
{
255-
return (G, H);
256-
}
257-
258-
int remaining = GeopackConstants.IgrfCoefficientCount - i;
259-
if (remaining >= vectorSize / 2)
260-
{
261-
Vector<double> vG1 = new(G1, i);
262-
Vector<double> vG2 = new(G2, i);
263-
Vector<double> vH1 = new(H1, i);
264-
Vector<double> vH2 = new(H2, i);
255+
G[vectorizationStartPosition] = G1[vectorizationStartPosition] * F1 + G2[vectorizationStartPosition] * F2;
256+
H[vectorizationStartPosition] = H1[vectorizationStartPosition] * F1 + H2[vectorizationStartPosition] * F2;
265257

266-
Vector<double> vG = vG1 * vF1 + vG2 * vF2;
267-
Vector<double> vH = vH1 * vF1 + vH2 * vF2;
268-
269-
for (int j = 0; j < remaining; j++)
270-
{
271-
G[i + j] = vG[j];
272-
H[i + j] = vH[j];
273-
}
274-
}
275-
else
276-
{
277-
for (; i < GeopackConstants.IgrfCoefficientCount; i++)
278-
{
279-
G[i] = G1[i] * F1 + G2[i] * F2;
280-
H[i] = H1[i] * F1 + H2[i] * F2;
281-
}
258+
vectorizationStartPosition++;
282259
}
283260

284261
return (G, H);

0 commit comments

Comments
 (0)