HEBench
hebench_dotproduct.h
Go to the documentation of this file.
1 
2 // Copyright (C) 2021 Intel Corporation
3 // SPDX-License-Identifier: Apache-2.0
4 
5 #ifndef _HEBench_Harness_DataGenerator_DotProduct_H_0596d40a3cce4b108a81595c50eb286d
6 #define _HEBench_Harness_DataGenerator_DotProduct_H_0596d40a3cce4b108a81595c50eb286d
7 
8 #include <array>
9 #include <memory>
10 #include <random>
11 #include <utility>
12 #include <vector>
13 
14 #include "hebench/modules/general/include/nocopy.h"
15 #include "hebench/modules/logging/include/logging.h"
16 
18 
21 
22 namespace hebench {
23 namespace TestHarness {
24 namespace DotProduct {
25 
27 {
28 public:
29  DISABLE_COPY(BenchmarkDescriptorCategory)
30  DISABLE_MOVE(BenchmarkDescriptorCategory)
31 private:
32  IL_DECLARE_CLASS_NAME(DotProduct::BenchmarkDescriptorCategory)
33 public:
34  static constexpr const char *BaseWorkloadName = "Dot Product";
35  static constexpr std::uint64_t WorkloadParameterCount = 1; // number of parameters for this workload
36  static constexpr std::uint64_t OpParameterCount = 2; // number of parameters for this operation
37  static constexpr std::uint64_t OpResultCount = 1; // number of outputs for this operation
39 
40  static std::uint64_t fetchVectorSize(const std::vector<hebench::APIBridge::WorkloadParam> &w_params);
41 
42 public:
44  ~BenchmarkDescriptorCategory() override = default;
45 
46 protected:
48  const std::vector<hebench::APIBridge::WorkloadParam> &w_params) const override;
50  const Engine &engine,
51  const BenchmarkDescription::Backend &backend_desc,
52  const BenchmarkDescription::Configuration &config) const override;
53 };
54 
56 {
57 public:
58  DISABLE_COPY(DataLoader)
59  DISABLE_MOVE(DataLoader)
60 private:
61  IL_DECLARE_CLASS_NAME(DotProduct::DataLoader)
62 
63 public:
64  typedef std::shared_ptr<DataLoader> Ptr;
65 
66  static DataLoader::Ptr create(std::uint64_t vector_size,
67  std::uint64_t batch_size_a,
68  std::uint64_t batch_size_b,
70  static DataLoader::Ptr create(std::uint64_t vector_size,
71  std::uint64_t batch_size_a,
72  std::uint64_t batch_size_b,
74  const std::string &dataset_filename);
75 
76  ~DataLoader() override {}
77 
78 protected:
79  void computeResult(std::vector<hebench::APIBridge::NativeDataBuffer *> &result,
80  const std::uint64_t *param_data_pack_indices,
81  hebench::APIBridge::DataType data_type) override;
82 
83 private:
84  static constexpr std::size_t InputDim0 = BenchmarkDescriptorCategory::OpParameterCount;
85  static constexpr std::size_t OutputDim0 = BenchmarkDescriptorCategory::OpResultCount;
86  std::uint64_t m_vector_size;
87 
88  DataLoader();
89  void init(std::uint64_t vector_size,
90  std::uint64_t batch_size_a,
91  std::uint64_t batch_size_b,
93  void init(std::uint64_t vector_size,
94  std::uint64_t batch_size_a,
95  std::uint64_t batch_size_b,
97  const std::string &dataset_filename);
98 };
99 
100 } // namespace DotProduct
101 } // namespace TestHarness
102 } // namespace hebench
103 
104 #endif // defined _HEBench_Harness_DataGenerator_DotProduct_H_0596d40a3cce4b108a81595c50eb286d
void completeWorkloadDescription(WorkloadDescriptionOutput &output, const Engine &engine, const BenchmarkDescription::Backend &backend_desc, const BenchmarkDescription::Configuration &config) const override
Completes the description for the matched benchmark.
bool matchBenchmarkDescriptor(const hebench::APIBridge::BenchmarkDescriptor &bench_desc, const std::vector< hebench::APIBridge::WorkloadParam > &w_params) const override
Determines if the represented benchmark can perform the workload described by a specified HEBench ben...
static std::uint64_t fetchVectorSize(const std::vector< hebench::APIBridge::WorkloadParam > &w_params)
static hebench::APIBridge::WorkloadParamType::WorkloadParamType WorkloadParameterType[WorkloadParameterCount]
void computeResult(std::vector< hebench::APIBridge::NativeDataBuffer * > &result, const std::uint64_t *param_data_pack_indices, hebench::APIBridge::DataType data_type) override
Computes result of the operation on the input data given the of the input sample.
static DataLoader::Ptr create(std::uint64_t vector_size, std::uint64_t batch_size_a, std::uint64_t batch_size_b, hebench::APIBridge::DataType data_type)
Provides boilerplate implementation to common methods of interface IBenchmarkDescription and implemen...
Bundles values that need to be filled by a workload during completeWorkloadDescription().
WorkloadParamType
Defines the possible data types for a workload flexible parameter.
Definition: types.h:303
DataType
Defines data types for a workload.
Definition: types.h:379
Defines a benchmark test.
Definition: types.h:527