45{
46
52
53 size_t nPts;
54 int count = 0;
55 double time = 0.0;
56
57#ifndef NEKTAR_USE_LIKWID
58 boost::ignore_unused(count, time);
59#endif
60
61 if (argc < 2)
62 {
63 nPts = 100;
64 }
65 else
66 {
67 nPts = std::stoi(argv[1]);
68 }
69
70 std::cout << "number of points\t" << nPts << '\n';
71
72
73 constexpr size_t experiments = 1 << 18;
74 {
75
78 size_t zero = 0;
80
81
82 for (size_t i = 0; i < nPts; ++i)
83 {
84 indexTrace[i] = i;
85 }
86
88 for (size_t j = 0; j < experiments; ++j)
89 {
90
92 }
94
95 constexpr short CPU_CLK_UNHALTED_REF_id = 2;
96 int nevents{20};
97 std::vector<double> events(nevents);
98
100
101 double cpeGathrArray =
102 events[CPU_CLK_UNHALTED_REF_id] / nPts / experiments;
103 std::cout << "GathrArray likwid CPE\t" << cpeGathrArray << '\n';
104 std::cout << dataTrace[0] << std::endl;
105 }
106
107 {
108
111 size_t zero = 0;
113
114
115 for (size_t i = 0; i < nPts; ++i)
116 {
117 indexTrace[i] = i;
118 }
119
121 for (size_t j = 0; j < experiments; ++j)
122 {
123
125 dataTrace.data());
126 }
128
129 constexpr short CPU_CLK_UNHALTED_REF_id = 2;
130 int nevents{20};
131 std::vector<double> events(nevents);
132
134
135 double cpeGathrSimd =
136 events[CPU_CLK_UNHALTED_REF_id] / nPts / experiments;
137 std::cout << "GathrSimd likwid CPE\t" << cpeGathrSimd << '\n';
138 std::cout << dataTrace[0] << std::endl;
139 }
140
141 {
142
145 size_t zero = 0;
147
148
149 for (size_t i = 0; i < nPts; ++i)
150 {
151 indexTrace[i] = i;
152 }
153
155 for (size_t j = 0; j < experiments; ++j)
156 {
157
159 dataTrace.data());
160 }
162
163 constexpr short CPU_CLK_UNHALTED_REF_id = 2;
164 int nevents{20};
165 std::vector<double> events(nevents);
166
168 &count);
169
170 double cpeGathrScalar =
171 events[CPU_CLK_UNHALTED_REF_id] / nPts / experiments;
172 std::cout << "GathrScalar likwid CPE\t" << cpeGathrScalar << '\n';
173 std::cout << dataTrace[0] << std::endl;
174 }
175
177}
#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(int n, const T *sign, const T *x, const int *y, T *z)
Gather vector z[i] = sign[i]*x[y[i]].