verify_args.hpp 3.13 KB
Newer Older
Paul's avatar
Paul committed
1
2
3
4
5
6
7
8
#ifndef MIGRAPH_GUARD_RTGLIB_VERIFY_ARGS_HPP
#define MIGRAPH_GUARD_RTGLIB_VERIFY_ARGS_HPP

#include <migraph/verify.hpp>
#include <migraph/argument.hpp>

namespace migraph {

Paul's avatar
Paul committed
9
inline bool verify_args(const std::string& name,
Paul's avatar
Paul committed
10
11
12
                        const argument& cpu_arg,
                        const argument& gpu_arg,
                        double tolerance = 80)
Paul's avatar
Paul committed
13
{
Paul's avatar
Paul committed
14
    bool passed = true;
Paul's avatar
Paul committed
15
    visit_all(cpu_arg, gpu_arg)([&](auto cpu, auto gpu) {
Paul's avatar
Paul committed
16
        double error;
Paul's avatar
Paul committed
17
18
        passed = verify_range(cpu, gpu, tolerance, &error);
        if(not passed)
Paul's avatar
Paul committed
19
20
21
        {
            // TODO: Check for nans
            std::cout << "FAILED: " << name << std::endl;
Paul's avatar
Paul committed
22
            std::cout << "error: " << error << std::endl;
Paul's avatar
Paul committed
23
24
25
26
27
28
29
30
31
            if(cpu.size() < 32)
                std::cout << "cpu:" << cpu << std::endl;
            if(gpu.size() < 32)
                std::cout << "gpu:" << gpu << std::endl;
            if(range_zero(cpu))
                std::cout << "Cpu data is all zeros" << std::endl;
            if(range_zero(gpu))
                std::cout << "Gpu data is all zeros" << std::endl;

Paul's avatar
Paul committed
32
33
34
            auto mxdiff = max_diff(cpu, gpu);
            std::cout << "Max diff: " << mxdiff << std::endl;

Paul's avatar
Paul committed
35
36
37
38
39
40
41
            auto idx = mismatch_idx(cpu, gpu, float_equal);
            if(idx < range_distance(cpu))
            {
                std::cout << "Mismatch at " << idx << ": " << cpu[idx] << " != " << gpu[idx]
                          << std::endl;
            }

Paul's avatar
Paul committed
42
43
44
45
46
47
48
49
50
51
52
            auto cpu_nan_idx = find_idx(cpu, not_finite);
            if(cpu_nan_idx >= 0)
                std::cout << "Non finite number found in cpu at " << cpu_nan_idx << ": "
                          << cpu[cpu_nan_idx] << std::endl;

            auto gpu_nan_idx = find_idx(gpu, not_finite);
            if(gpu_nan_idx >= 0)
                std::cout << "Non finite number found in gpu at " << gpu_nan_idx << ": "
                          << gpu[gpu_nan_idx] << std::endl;
            std::cout << std::endl;
        }
Paul's avatar
Paul committed
53
        else
Paul's avatar
Paul committed
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
        {
            if(range_zero(cpu))
                std::cout << "Cpu data is all zeros" << std::endl;
            if(range_zero(gpu))
                std::cout << "Gpu data is all zeros" << std::endl;

            // auto mxdiff = max_diff(cpu, gpu);
            // std::cout << "Max diff: " << mxdiff << std::endl;

            // auto idx = mismatch_idx(cpu, gpu, float_equal);
            // if(idx < range_distance(cpu))
            // {
            //     std::cout << "Mismatch at " << idx << ": " << cpu[idx] << " != " << gpu[idx]
            //               << std::endl;
            // }

Paul's avatar
Paul committed
70
71
72
73
74
75
76
77
78
            auto cpu_nan_idx = find_idx(cpu, not_finite);
            if(cpu_nan_idx >= 0)
                std::cout << "Non finite number found in cpu at " << cpu_nan_idx << ": "
                          << cpu[cpu_nan_idx] << std::endl;

            auto gpu_nan_idx = find_idx(gpu, not_finite);
            if(gpu_nan_idx >= 0)
                std::cout << "Non finite number found in gpu at " << gpu_nan_idx << ": "
                          << gpu[gpu_nan_idx] << std::endl;
Paul's avatar
Paul committed
79
            // std::cout << std::endl;
Paul's avatar
Paul committed
80
81
        }
    });
Paul's avatar
Paul committed
82
    return passed;
Paul's avatar
Paul committed
83
84
85
86
87
}

} // namespace migraph

#endif