Add std, and fix fft, ifft bug for cuda

This commit is contained in:
kradchen
2023-12-19 13:12:20 +08:00
parent ea68e6c5af
commit 81078bd69f
5 changed files with 552 additions and 313 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -39,7 +39,7 @@ TEST_F(Function2D_Cuda_Test, min)
B = Aurora::Matrix::fromRawData(dataB, 4096, 41472);
dB = B.toDeviceMatrix();
long r,c;
// column
auto ret1 = Aurora::min(B, Aurora::Column,r,c);
auto ret2 = Aurora::min(dB, Aurora::Column,r,c);
@@ -53,7 +53,7 @@ TEST_F(Function2D_Cuda_Test, min)
ASSERT_FLOAT_EQ(ret1[i], ret2.getValue(i))<<", index at :"<<i;
}
//row
ret1 = Aurora::min(B, Aurora::FunctionDirection::Row,r,c);
ret2 = Aurora::min(dB, Aurora::FunctionDirection::Row,r,c);
@@ -66,6 +66,23 @@ TEST_F(Function2D_Cuda_Test, min)
{
ASSERT_FLOAT_EQ(ret1[i], ret2.getValue(i))<<", index at :"<<i;
}
//ALL
long r1,c1;
ret1 = Aurora::min(B, Aurora::All,r,c);
ret2 = Aurora::min(dB, Aurora::All,r1,c1);
ASSERT_EQ(ret1.getDimSize(0),ret2.getDimSize(0));
ASSERT_EQ(ret1.getDimSize(1),ret2.getDimSize(1));
ASSERT_EQ(ret1.getDimSize(2),ret2.getDimSize(2));
ASSERT_EQ(r, r1);
ASSERT_EQ(c, c1);
for (size_t i = 0; i < ret1.getDataSize(); i++)
{
ASSERT_FLOAT_EQ(ret1[i], ret2.getValue(i))<<", index at :"<<i;
}
}
// different size speed
// Aurora::Matrix Aurora::min(const Aurora::Matrix &aMatrix,
@@ -100,6 +117,22 @@ TEST_F(Function2D_Cuda_Test, min)
ASSERT_EQ(ret1.getDimSize(1),ret2.getDimSize(1));
ASSERT_EQ(ret1.getDimSize(2),ret2.getDimSize(2));
for (size_t i = 0; i < ret1.getDataSize(); i++)
{
ASSERT_FLOAT_EQ(ret1[i], ret2.getValue(i))<<", index at :"<<i;
}
//ALL
long r1,c1;
ret1 = Aurora::min(B, Aurora::All,r,c);
ret2 = Aurora::min(dB, Aurora::All,r1,c1);
ASSERT_EQ(ret1.getDimSize(0),ret2.getDimSize(0));
ASSERT_EQ(ret1.getDimSize(1),ret2.getDimSize(1));
ASSERT_EQ(ret1.getDimSize(2),ret2.getDimSize(2));
ASSERT_EQ(r, r1);
ASSERT_EQ(c, c1);
for (size_t i = 0; i < ret1.getDataSize(); i++)
{
ASSERT_FLOAT_EQ(ret1[i], ret2.getValue(i))<<", index at :"<<i;
@@ -254,6 +287,22 @@ TEST_F(Function2D_Cuda_Test, max)
ASSERT_EQ(ret1.getDimSize(1),ret2.getDimSize(1));
ASSERT_EQ(ret1.getDimSize(2),ret2.getDimSize(2));
for (size_t i = 0; i < ret1.getDataSize(); i++)
{
ASSERT_FLOAT_EQ(ret1[i], ret2.getValue(i))<<", index at :"<<i;
}
//ALL
long r1,c1;
ret1 = Aurora::max(B, Aurora::All,r,c);
ret2 = Aurora::max(dB, Aurora::All,r1,c1);
ASSERT_EQ(ret1.getDimSize(0),ret2.getDimSize(0));
ASSERT_EQ(ret1.getDimSize(1),ret2.getDimSize(1));
ASSERT_EQ(ret1.getDimSize(2),ret2.getDimSize(2));
ASSERT_EQ(r, r1);
ASSERT_EQ(c, c1);
for (size_t i = 0; i < ret1.getDataSize(); i++)
{
ASSERT_FLOAT_EQ(ret1[i], ret2.getValue(i))<<", index at :"<<i;
@@ -296,6 +345,23 @@ TEST_F(Function2D_Cuda_Test, max)
{
ASSERT_FLOAT_EQ(ret1[i], ret2.getValue(i))<<", index at :"<<i;
}
//ALL
long r1,c1;
ret1 = Aurora::max(B, Aurora::All,r,c);
ret2 = Aurora::max(dB, Aurora::All,r1,c1);
ASSERT_EQ(ret1.getDimSize(0),ret2.getDimSize(0));
ASSERT_EQ(ret1.getDimSize(1),ret2.getDimSize(1));
ASSERT_EQ(ret1.getDimSize(2),ret2.getDimSize(2));
ASSERT_EQ(r, r1);
ASSERT_EQ(c, c1);
for (size_t i = 0; i < ret1.getDataSize(); i++)
{
ASSERT_FLOAT_EQ(ret1[i], ret2.getValue(i))<<", index at :"<<i;
}
}
// test
// Aurora::Matrix Aurora::max(const Aurora::Matrix &aMatrix, float aValue)
@@ -907,4 +973,14 @@ TEST_F(Function2D_Cuda_Test, ifft_symmetric) {
{
EXPECT_FLOAT_AE(result1[i], result2[i]);
}
}
}
TEST_F(Function2D_Cuda_Test, std){
float *dataMA= new float [9]{1, 2, 3, 2, 2, 6, 3, 3, 6};
auto A = Aurora::Matrix::fromRawData(dataMA,3,3);
auto D= Aurora::std(A.toDeviceMatrix());
EXPECT_FLOAT_EQ(1.0, D.getValue(0));
EXPECT_FLOAT_EQ(2.3094, fourDecimalRound(D.getValue(1)));
EXPECT_FLOAT_EQ(1.7321, fourDecimalRound(D.getValue(2)));
}