Initial FP16 support

This commit is contained in:
Ryan Curtin
2025-07-07 04:00:20 +00:00
committed by conradsnicta
parent 252d43ae35
commit f07af5a111
99 changed files with 2589 additions and 646 deletions
+26 -20
View File
@@ -18,39 +18,45 @@
#include <armadillo>
#include "catch.hpp"
#include "utils.hpp"
using namespace arma;
TEST_CASE("fn_diff_1")
TEMPLATE_TEST_CASE("fn_diff_1", "[diff]", TEST_FLOAT_TYPES)
{
colvec a = square( linspace<colvec>(1,5,6) );
rowvec b = square( linspace<rowvec>(1,5,5) );
typedef TestType eT;
colvec a_diff_1 = { 2.2400, 3.5200, 4.8000, 6.0800, 7.3600 };
colvec a_diff_2 = { 1.2800, 1.2800, 1.2800, 1.2800 };
colvec a_diff_9;
Col<eT> a = square( linspace<Col<eT>>(1,5,6) );
Row<eT> b = square( linspace<Row<eT>>(1,5,5) );
rowvec b_diff_1 = { 3, 5, 7, 9 };
rowvec b_diff_2 = { 2, 2, 2 };
rowvec b_diff_9;
Col<eT> a_diff_1 = { eT(2.2400), eT(3.5200), eT(4.8000), eT(6.0800), eT(7.3600) };
Col<eT> a_diff_2 = { eT(1.2800), eT(1.2800), eT(1.2800), eT(1.2800) };
Col<eT> a_diff_9;
REQUIRE( accu(abs(diff(a,0) - a )) == Approx(0.0).margin(0.001) );
REQUIRE( accu(abs(diff(a ) - a_diff_1)) == Approx(0.0).margin(0.001) );
REQUIRE( accu(abs(diff(a,1) - a_diff_1)) == Approx(0.0).margin(0.001) );
REQUIRE( accu(abs(diff(a,2) - a_diff_2)) == Approx(0.0).margin(0.001) );
REQUIRE( accu(abs(diff(a,9) - a_diff_9)) == Approx(0.0).margin(0.001) );
Row<eT> b_diff_1 = { eT(3), eT(5), eT(7), eT(9) };
Row<eT> b_diff_2 = { eT(2), eT(2), eT(2) };
Row<eT> b_diff_9;
// significantly larger margin for low-precision because the errors can really add up!
constexpr eT margin = is_blas_real<eT>::value ? eT(0.001) : eT(1.0);
REQUIRE( accu(abs(diff(b,0) - b )) == Approx(0.0).margin(0.001) );
REQUIRE( accu(abs(diff(b ) - b_diff_1)) == Approx(0.0).margin(0.001) );
REQUIRE( accu(abs(diff(b,1) - b_diff_1)) == Approx(0.0).margin(0.001) );
REQUIRE( accu(abs(diff(b,2) - b_diff_2)) == Approx(0.0).margin(0.001) );
REQUIRE( accu(abs(diff(b,9) - b_diff_9)) == Approx(0.0).margin(0.001) );
REQUIRE( eT(accu(abs(diff(a,0) - a ))) == Approx(eT(0)).margin(margin) );
REQUIRE( eT(accu(abs(diff(a ) - a_diff_1))) == Approx(eT(0)).margin(margin) );
REQUIRE( eT(accu(abs(diff(a,1) - a_diff_1))) == Approx(eT(0)).margin(margin) );
REQUIRE( eT(accu(abs(diff(a,2) - a_diff_2))) == Approx(eT(0)).margin(margin) );
REQUIRE( eT(accu(abs(diff(a,9) - a_diff_9))) == Approx(eT(0)).margin(margin) );
REQUIRE( eT(accu(abs(diff(b,0) - b ))) == Approx(eT(0)).margin(margin) );
REQUIRE( eT(accu(abs(diff(b ) - b_diff_1))) == Approx(eT(0)).margin(margin) );
REQUIRE( eT(accu(abs(diff(b,1) - b_diff_1))) == Approx(eT(0)).margin(margin) );
REQUIRE( eT(accu(abs(diff(b,2) - b_diff_2))) == Approx(eT(0)).margin(margin) );
REQUIRE( eT(accu(abs(diff(b,9) - b_diff_9))) == Approx(eT(0)).margin(margin) );
}
TEST_CASE("fn_diff_2")
TEST_CASE("fn_diff_2", "[diff]")
{
mat A =
"\