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

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

namespace migraph {

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

Paul's avatar
Paul committed
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
            auto idx = mismatch_idx(cpu, gpu, float_equal);
            if(idx < range_distance(cpu))
            {
                std::cout << "Mismatch at " << idx << ": " << cpu[idx] << " != " << gpu[idx]
                          << std::endl;
            }

            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;
        }
    });
}

} // namespace migraph

#endif