Skip to content

Commit

Permalink
Pw transform reduce (#8)
Browse files Browse the repository at this point in the history
* univariate pairwise transform reduce init version added

* initial checkin of bivariate_pairwise_transformReduce

* dividing by 3 elements in vector for piecwiese transform reduce, to bring on rounding error.

* tweak test tolerance
  • Loading branch information
andyD123 authored Sep 1, 2023
1 parent 7d7ed91 commit e099546
Show file tree
Hide file tree
Showing 3 changed files with 648 additions and 0 deletions.
12 changes: 12 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -55,3 +55,15 @@
/out/build/x64-Debug
/lattice/x64
/dancingAVX512/x64
/cmake-build-debug
/curveExample/Intel® VTune™ Profiler Results/curveExample
/curveExample/My Advisor Results - curveExample
/curveExample/x64/clang-cl/curveExample.tlog
/curveExample/x64/clang-cl
/.idea
/curveExample/x64
/scratch/x64/Debug
/scratch/x64
/Vectorisation/cmake-build-debug/Testing/Temporary
/Vectorisation/cmake-build-debug
/lattice/cmake-build-debug
110 changes: 110 additions & 0 deletions VectorTest/TestAccumulator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@


#include <numeric>
#include <algorithm>


void setEpsilonTransformAccumulate(long double& val)
Expand Down Expand Up @@ -472,3 +473,112 @@ TEST(TestAccumulator, simple_pairwise)
evalAccumulateUR_X_pairwise(159, 159);

}



////////////////////////////////////////////////////

void evalTransformAccumulateUR_X_pairwise(int startLen, int endLen)
{
Numeric testEpsilon;
setEpsilonAccumulate(testEpsilon);


for (int SZ = startLen; SZ <= endLen; SZ++)
{
std::vector<Numeric> v(SZ, asNumber(0.0));
for (int i = 0; i < SZ; i++)
{
v[i] -= asNumber(500.0 - i);
}

VecXX test(v);
auto Sum = [](auto lhs, auto rhs) { return lhs + rhs; };
auto SQR = [](auto lhs) { return lhs * lhs; };
Numeric resSTL = std::inner_product(v.begin(), v.end(), v.begin(), 0.0);
Numeric resAcc1 = ApplyTransformAccumulate2UR_X_pairwise(test, SQR,Sum);
testEpsilon *= (abs(resSTL) + abs(resAcc1));
EXPECT_NEAR(resSTL, resAcc1, testEpsilon);
}

}

TEST(TestAccumulator, simple_pairwise_transformReduce)
{
EXPECT_EQ(1, 1);
EXPECT_TRUE(true);

evalTransformAccumulateUR_X_pairwise(32, 32);
evalTransformAccumulateUR_X_pairwise(64, 64);
evalTransformAccumulateUR_X_pairwise(128, 128);
evalTransformAccumulateUR_X_pairwise(256, 256);
evalTransformAccumulateUR_X_pairwise(512, 512);
evalTransformAccumulateUR_X_pairwise(1024, 1024);

evalTransformAccumulateUR_X_pairwise(1, 31);

evalTransformAccumulateUR_X_pairwise(32, 80);

evalTransformAccumulateUR_X_pairwise(957, 1043);


evalTransformAccumulateUR_X_pairwise(159, 159);

}



void evalTransformAccumulateUR_X_bivariate_pairwise(int startLen, int endLen)
{
Numeric testEpsilon;
setEpsilonAccumulate(testEpsilon);

//rounding errors in stl


for (int SZ = startLen; SZ <= endLen; SZ++)
{
std::vector<Numeric> v(SZ, asNumber(0.0));

auto v2 = v;
for (int i = 0; i < SZ; i++)
{
v[i] -= asNumber(500.0 - i) / 3.0;
v2[i] = 2 * v[i];
}

VecXX test(v);
VecXX test2 = asNumber(2.0) * test;

auto Sum = [](auto lhs, auto rhs) { return lhs + rhs; };
auto mult = [](auto lhs,auto rhs) { return lhs * rhs; };
Numeric resSTL = std::inner_product(v.begin(), v.end(), v2.begin(), 0.0);
Numeric resAcc1 = ApplyTransformAccumulate2UR_X_pairwise(test, test2, mult, Sum);

testEpsilon *= (abs(resSTL) + abs(resAcc1));
EXPECT_NEAR(resSTL, resAcc1, testEpsilon);
}

}

TEST(TestAccumulator, bivariate_pairwise_transformReduce)
{
EXPECT_EQ(1, 1);
EXPECT_TRUE(true);

evalTransformAccumulateUR_X_bivariate_pairwise(32, 32);
evalTransformAccumulateUR_X_bivariate_pairwise(64, 64);
evalTransformAccumulateUR_X_bivariate_pairwise(128, 128);
evalTransformAccumulateUR_X_bivariate_pairwise(256, 256);
evalTransformAccumulateUR_X_bivariate_pairwise(512, 512);
evalTransformAccumulateUR_X_bivariate_pairwise(1024, 1024);

evalTransformAccumulateUR_X_bivariate_pairwise(1, 31);
evalTransformAccumulateUR_X_bivariate_pairwise(32, 80);

evalTransformAccumulateUR_X_bivariate_pairwise(957, 1043);
evalTransformAccumulateUR_X_bivariate_pairwise(159, 159);

}


Loading

0 comments on commit e099546

Please sign in to comment.