29 class IntSimdMatrixTest :
public ::testing::Test {
34 for (
int i = 0; i < no; ++i) {
35 for (
int j = 0; j < ni; ++j) {
42 std::vector<int8_t> RandomVector(
int size,
const IntSimdMatrix& matrix) {
43 int rounded_size = matrix.RoundInputs(size);
44 std::vector<int8_t> v(rounded_size, 0);
45 for (
int i = 0; i < size; ++i) {
53 for (
int i = 0; i < size; ++i) {
54 v[i] = 1.0 +
random_.SignedRand(1.0);
59 void ExpectEqualResults(IntSimdMatrix* matrix) {
60 for (
int num_out = 1; num_out < 130; ++num_out) {
61 for (
int num_in = 1; num_in < 130; ++num_in) {
64 std::vector<int8_t> u = RandomVector(num_in, *matrix);
66 std::vector<double> base_result(num_out);
67 base_.MatrixDotVector(w, scales, u.data(), base_result.data());
68 std::vector<double> test_result(num_out);
69 matrix->MatrixDotVector(w, scales, u.data(), test_result.data());
70 for (
int i = 0; i < num_out; ++i)
71 EXPECT_FLOAT_EQ(base_result[i], test_result[i]) <<
"i=" << i;
81 TEST_F(IntSimdMatrixTest, SSE) {
83 tprintf(
"SSE found! Continuing...");
85 tprintf(
"No SSE found! Not Tested!");
88 std::unique_ptr<IntSimdMatrix> matrix(
new IntSimdMatrixSSE());
89 ExpectEqualResults(matrix.get());
93 TEST_F(IntSimdMatrixTest, AVX2) {
95 tprintf(
"AVX2 found! Continuing...");
97 tprintf(
"No AVX2 found! Not Tested!");
100 std::unique_ptr<IntSimdMatrix> matrix(
new IntSimdMatrixAVX2());
101 ExpectEqualResults(matrix.get());
static bool IsSSEAvailable()
static bool IsAVX2Available()