Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/marian-nmt/intgemm.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKenneth Heafield <github@kheafield.com>2020-04-18 19:23:44 +0300
committerKenneth Heafield <github@kheafield.com>2020-04-18 19:23:44 +0300
commita7ad687f322bd0b070ba8b361ec23828a9281f26 (patch)
tree87e121e883334051d33699f1e66daefbd54dfbf6
parent27049f4f30347ae999311eb1445941e2ae88809e (diff)
Test statically unrolled multiplies too
-rw-r--r--test/tile_test.inl38
1 files changed, 26 insertions, 12 deletions
diff --git a/test/tile_test.inl b/test/tile_test.inl
index 2beaff6..a1d3777 100644
--- a/test/tile_test.inl
+++ b/test/tile_test.inl
@@ -194,25 +194,39 @@ template <class Kernel> void TestMultiplyNoOverhang(Tile shape) {
}
}
-TEST_CASE("MultiplyNoOverhang Signed8 " INTGEMM_TEST_NAME, "[tile]") {
- if (kCPU < CPUType::INTGEMM_ARCH) return;
- // Test small multiples.
- TestMultiplyNoOverhang<Signed8>(Tile{1,sizeof(Register),1});
- TestMultiplyNoOverhang<Signed8>(Tile{2, sizeof(Register), 1});
- TestMultiplyNoOverhang<Signed8>(Tile{1, 2 * sizeof(Register),1});
- TestMultiplyNoOverhang<Signed8>(Tile{1, sizeof(Register), 2});
- TestMultiplyNoOverhang<Signed8>(Tile{2, 2 * sizeof(Register), 2});
+template <class Kernel> void TestMultiplyNoOverhangShapes() {
+ Tile shape = Kernel::kTile;
+ // Minimum size.
+ TestMultiplyNoOverhang<Signed8>(shape);
+ // Multiples on each dimension.
+ TestMultiplyNoOverhang<Signed8>(Tile{shape.A_rows * 2, shape.inner, shape.B_cols});
+ TestMultiplyNoOverhang<Signed8>(Tile{shape.A_rows, shape.inner * 2, shape.B_cols});
+ TestMultiplyNoOverhang<Signed8>(Tile{shape.A_rows, shape.inner, shape.B_cols * 2});
+ TestMultiplyNoOverhang<Signed8>(Tile{shape.A_rows * 2, shape.inner * 2, shape.B_cols * 2});
// Try a bunch of shapes!
- Tile shape;
- for (shape.A_rows = 0; shape.A_rows <= 33; ++shape.A_rows) {
- for (shape.inner = 0; shape.inner <= 9 * sizeof(Register); shape.inner += sizeof(Register)) {
- for (shape.B_cols = 0; shape.B_cols <= 33; ++shape.B_cols) {
+ for (shape.A_rows = 0; shape.A_rows <= Kernel::kTile.A_rows * 9; shape.A_rows += Kernel::kTile.A_rows) {
+ for (shape.inner = 0; shape.inner <= Kernel::kTile.inner * 9; shape.inner += Kernel::kTile.inner) {
+ for (shape.B_cols = 0; shape.B_cols <= Kernel::kTile.B_cols * 9; shape.B_cols += Kernel::kTile.B_cols) {
TestMultiplyNoOverhang<Signed8>(shape);
}
}
}
}
+TEST_CASE("MultiplyNoOverhang Signed8 " INTGEMM_TEST_NAME, "[tile]") {
+ if (kCPU < CPUType::INTGEMM_ARCH) return;
+ TestMultiplyNoOverhangShapes<Signed8>();
+}
+
+TEST_CASE("MultiplyNoOverhang Tiled Signed8 " INTGEMM_TEST_NAME, "[tile]") {
+ if (kCPU < CPUType::INTGEMM_ARCH) return;
+ TestMultiplyNoOverhangShapes<InnerTile<1, Signed8> >();
+ TestMultiplyNoOverhangShapes<InnerTile<2, Signed8> >();
+ TestMultiplyNoOverhangShapes<InnerTile<3, Signed8> >();
+ TestMultiplyNoOverhangShapes<MatrixTile<3, 3, Signed8> >();
+ TestMultiplyNoOverhangShapes<InnerTile<2, MatrixTile<3, 3, Signed8> > >();
+}
+
#endif
} // namespace INTGEMM_ARCH