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

#include <migraph/verify.hpp>
#include <migraph/argument.hpp>
6
#include <migraph/config.hpp>
Paul's avatar
Paul committed
7

8
namespace migraph { inline namespace MIGRAPH_INLINE_NS {
Paul's avatar
Paul committed
9

Paul's avatar
Paul committed
10
inline bool verify_args(const std::string& name,
Paul's avatar
Paul committed
11
12
13
                        const argument& cpu_arg,
                        const argument& gpu_arg,
                        double tolerance = 80)
Paul's avatar
Paul committed
14
{
Paul's avatar
Paul committed
15
    bool passed = true;
Paul's avatar
Paul committed
16
    visit_all(cpu_arg, gpu_arg)([&](auto cpu, auto gpu) {
Paul's avatar
Paul committed
17
        double error;
Paul's avatar
Paul committed
18
19
        passed = verify_range(cpu, gpu, tolerance, &error);
        if(not passed)
Paul's avatar
Paul committed
20
21
22
        {
            // TODO: Check for nans
            std::cout << "FAILED: " << name << std::endl;
Paul's avatar
Paul committed
23
            std::cout << "error: " << error << std::endl;
Paul's avatar
Paul committed
24
25
26
27
28
29
30
31
32
            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
33
34
35
            auto mxdiff = max_diff(cpu, gpu);
            std::cout << "Max diff: " << mxdiff << std::endl;

Paul's avatar
Paul committed
36
37
38
39
40
41
42
            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
43
44
45
46
47
48
49
50
51
52
53
            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
54
        else
Paul's avatar
Paul committed
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
        {
            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
71
72
73
74
75
76
77
78
79
            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
80
            // std::cout << std::endl;
Paul's avatar
Paul committed
81
82
        }
    });
Paul's avatar
Paul committed
83
    return passed;
Paul's avatar
Paul committed
84
85
}

86
} // inline namespace MIGRAPH_INLINE_NS
Paul's avatar
Paul committed
87
88
89
} // namespace migraph

#endif