45{
46
52
53 size_t nPts;
54 [[maybe_unused]] int count = 0;
55 [[maybe_unused]] double time = 0.0;
56
57 if (argc < 2)
58 {
59 nPts = 100;
60 }
61 else
62 {
63 nPts = std::stoi(argv[1]);
64 }
65
66 std::cout << "number of points\t" << nPts << '\n';
67
68
69 constexpr size_t experiments = 1 << 18;
70 {
71
74 size_t zero = 0;
76
77
78 for (size_t i = 0; i < nPts; ++i)
79 {
80 indexTrace[i] = i;
81 }
82
84 for (size_t j = 0; j < experiments; ++j)
85 {
86
88 }
90
91 constexpr short CPU_CLK_UNHALTED_REF_id = 2;
92 int nevents{20};
93 std::vector<double> events(nevents);
94
96
97 double cpeGathrArray =
98 events[CPU_CLK_UNHALTED_REF_id] / nPts / experiments;
99 std::cout << "GathrArray likwid CPE\t" << cpeGathrArray << '\n';
100 std::cout << dataTrace[0] << std::endl;
101 }
102
103 {
104
107 size_t zero = 0;
109
110
111 for (size_t i = 0; i < nPts; ++i)
112 {
113 indexTrace[i] = i;
114 }
115
117 for (size_t j = 0; j < experiments; ++j)
118 {
119
121 dataTrace.data());
122 }
124
125 constexpr short CPU_CLK_UNHALTED_REF_id = 2;
126 int nevents{20};
127 std::vector<double> events(nevents);
128
130
131 double cpeGathrSimd =
132 events[CPU_CLK_UNHALTED_REF_id] / nPts / experiments;
133 std::cout << "GathrSimd likwid CPE\t" << cpeGathrSimd << '\n';
134 std::cout << dataTrace[0] << std::endl;
135 }
136
137 {
138
141 size_t zero = 0;
143
144
145 for (size_t i = 0; i < nPts; ++i)
146 {
147 indexTrace[i] = i;
148 }
149
151 for (size_t j = 0; j < experiments; ++j)
152 {
153
155 dataTrace.data());
156 }
158
159 constexpr short CPU_CLK_UNHALTED_REF_id = 2;
160 int nevents{20};
161 std::vector<double> events(nevents);
162
164 &count);
165
166 double cpeGathrScalar =
167 events[CPU_CLK_UNHALTED_REF_id] / nPts / experiments;
168 std::cout << "GathrScalar likwid CPE\t" << cpeGathrScalar << '\n';
169 std::cout << dataTrace[0] << std::endl;
170 }
171
173}
#define LIKWID_MARKER_THREADINIT
#define LIKWID_MARKER_START(regionTag)
#define LIKWID_MARKER_CLOSE
#define LIKWID_MARKER_INIT
#define LIKWID_MARKER_REGISTER(regionTag)
#define LIKWID_MARKER_STOP(regionTag)
#define LIKWID_MARKER_GET(regionTag, nevents, events, time, count)
void Gathr(const I n, const T *x, const I *y, T *z)
Gather vector z[i] = x[y[i]].
void Gathr(I n, const T *x, const I *y, T *z)
Gather vector z[i] = x[y[i]].