infer.hpp 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. #ifndef __INFER_HPP__
  2. #define __INFER_HPP__
  3. #include <initializer_list>
  4. #include <memory>
  5. #include <string>
  6. #include <vector>
  7. namespace trt {
  8. #define INFO(...) trt::__log_func(__FILE__, __LINE__, __VA_ARGS__)
  9. void __log_func(const char *file, int line, const char *fmt, ...);
  10. enum class DType : int { FLOAT = 0, HALF = 1, INT8 = 2, INT32 = 3, BOOL = 4, UINT8 = 5 };
  11. class Timer {
  12. public:
  13. Timer();
  14. virtual ~Timer();
  15. void start(void *stream = nullptr);
  16. float stop(const char *prefix = "Timer", bool print = true);
  17. private:
  18. void *start_, *stop_;
  19. void *stream_;
  20. };
  21. class BaseMemory {
  22. public:
  23. BaseMemory() = default;
  24. BaseMemory(void *cpu, size_t cpu_bytes, void *gpu, size_t gpu_bytes);
  25. virtual ~BaseMemory();
  26. virtual void *gpu_realloc(size_t bytes);
  27. virtual void *cpu_realloc(size_t bytes);
  28. void release_gpu();
  29. void release_cpu();
  30. void release();
  31. inline bool owner_gpu() const { return owner_gpu_; }
  32. inline bool owner_cpu() const { return owner_cpu_; }
  33. inline size_t cpu_bytes() const { return cpu_bytes_; }
  34. inline size_t gpu_bytes() const { return gpu_bytes_; }
  35. virtual inline void *get_gpu() const { return gpu_; }
  36. virtual inline void *get_cpu() const { return cpu_; }
  37. void reference(void *cpu, size_t cpu_bytes, void *gpu, size_t gpu_bytes);
  38. protected:
  39. void *cpu_ = nullptr;
  40. size_t cpu_bytes_ = 0, cpu_capacity_ = 0;
  41. bool owner_cpu_ = true;
  42. void *gpu_ = nullptr;
  43. size_t gpu_bytes_ = 0, gpu_capacity_ = 0;
  44. bool owner_gpu_ = true;
  45. };
  46. template <typename _DT>
  47. class Memory : public BaseMemory {
  48. public:
  49. Memory() = default;
  50. Memory(const Memory &other) = delete;
  51. Memory &operator=(const Memory &other) = delete;
  52. virtual _DT *gpu(size_t size) { return (_DT *)BaseMemory::gpu_realloc(size * sizeof(_DT)); }
  53. virtual _DT *cpu(size_t size) { return (_DT *)BaseMemory::cpu_realloc(size * sizeof(_DT)); }
  54. inline size_t cpu_size() const { return cpu_bytes_ / sizeof(_DT); }
  55. inline size_t gpu_size() const { return gpu_bytes_ / sizeof(_DT); }
  56. virtual inline _DT *gpu() const { return (_DT *)gpu_; }
  57. virtual inline _DT *cpu() const { return (_DT *)cpu_; }
  58. };
  59. class Infer {
  60. public:
  61. virtual bool forward(const std::vector<void *> &bindings, void *stream = nullptr,
  62. void *input_consum_event = nullptr) = 0;
  63. virtual int index(const std::string &name) = 0;
  64. virtual std::vector<int> run_dims(const std::string &name) = 0;
  65. virtual std::vector<int> run_dims(int ibinding) = 0;
  66. virtual std::vector<int> static_dims(const std::string &name) = 0;
  67. virtual std::vector<int> static_dims(int ibinding) = 0;
  68. virtual int numel(const std::string &name) = 0;
  69. virtual int numel(int ibinding) = 0;
  70. virtual int num_bindings() = 0;
  71. virtual bool is_input(int ibinding) = 0;
  72. virtual bool set_run_dims(const std::string &name, const std::vector<int> &dims) = 0;
  73. virtual bool set_run_dims(int ibinding, const std::vector<int> &dims) = 0;
  74. virtual DType dtype(const std::string &name) = 0;
  75. virtual DType dtype(int ibinding) = 0;
  76. virtual bool has_dynamic_dim() = 0;
  77. virtual void print() = 0;
  78. };
  79. std::shared_ptr<Infer> load(const std::string &file);
  80. std::string format_shape(const std::vector<int> &shape);
  81. } // namespace trt
  82. #endif // __INFER_HPP__