Skip to content

Commit b7cced5

Browse files
committed
Manual SoA is the best, except for the CPURealRW. There should be something wrong in that benchmark
1 parent af42ad8 commit b7cced5

File tree

3 files changed

+187
-167
lines changed

3 files changed

+187
-167
lines changed

benchmark.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,15 +170,19 @@ void BM_CPURealRW(benchmark::State &state, T t)
170170
for (int i = 0; i < n; ++i) {
171171
MEMBER_ACCESS(t, x5, i) += 2;
172172
}
173+
#pragma clang loop vectorize(assume_safety)
173174
for (int i = 0; i < n; ++i) {
174175
MEMBER_ACCESS(t, x6, i) += v;
175176
}
177+
#pragma clang loop vectorize(assume_safety)
176178
for (int i = 0; i < n; ++i) {
177179
MEMBER_ACCESS(t, x7, i) += v;
178180
}
181+
#pragma clang loop vectorize(assume_safety)
179182
for (int i = 0; i < n; ++i) {
180183
MEMBER_ACCESS(t, x8, i) += m;
181184
}
185+
#pragma clang loop vectorize(assume_safety)
182186
for (int i = 0; i < n; ++i) {
183187
MEMBER_ACCESS(t, x9, i) += m;
184188
}
@@ -278,22 +282,27 @@ void BM_CPUHardRW(benchmark::State &state, T t)
278282
for (int i = 0; i < n; ++i) {
279283
MEMBER_ACCESS(t, x36, i) += 2; MEMBER_ACCESS(t, x37, i) += 2; MEMBER_ACCESS(t, x38, i) += 2;
280284
}
285+
#pragma clang loop vectorize(assume_safety)
281286
for (int i = 0; i < n; ++i) {
282287
MEMBER_ACCESS(t, x39, i) += v; MEMBER_ACCESS(t, x40, i) += v; MEMBER_ACCESS(t, x41, i) += v;
283288
MEMBER_ACCESS(t, x42, i) += v; MEMBER_ACCESS(t, x43, i) += v;
284289
}
290+
#pragma clang loop vectorize(assume_safety)
285291
for (int i = 0; i < n; ++i) {
286292
MEMBER_ACCESS(t, x44, i) += v; MEMBER_ACCESS(t, x45, i) += v; MEMBER_ACCESS(t, x46, i) += v;
287293
MEMBER_ACCESS(t, x47, i) += v; MEMBER_ACCESS(t, x48, i) += v;
288294
}
295+
#pragma clang loop vectorize(assume_safety)
289296
for (int i = 0; i < n; ++i) {
290297
MEMBER_ACCESS(t, x49, i) += v; MEMBER_ACCESS(t, x50, i) += v; MEMBER_ACCESS(t, x51, i) += m;
291298
MEMBER_ACCESS(t, x52, i) += m; MEMBER_ACCESS(t, x53, i) += m;
292299
}
300+
#pragma clang loop vectorize(assume_safety)
293301
for (int i = 0; i < n; ++i) {
294302
MEMBER_ACCESS(t, x54, i) += m; MEMBER_ACCESS(t, x55, i) += m; MEMBER_ACCESS(t, x56, i) += m;
295303
MEMBER_ACCESS(t, x57, i) += m; MEMBER_ACCESS(t, x58, i) += m;
296304
}
305+
#pragma clang loop vectorize(assume_safety)
297306
for (int i = 0; i < n; ++i) {
298307
MEMBER_ACCESS(t, x59, i) += m; MEMBER_ACCESS(t, x60, i) += m; MEMBER_ACCESS(t, x61, i) += m;
299308
MEMBER_ACCESS(t, x62, i) += m; MEMBER_ACCESS(t, x63, i) += m;

boost/SoALayout.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -628,7 +628,7 @@
628628
using ConstViewTemplate = ConstViewTemplateFreeParams<ALIGNMENT, ALIGNMENT_ENFORCEMENT, RESTRICT_QUALIFY, \
629629
RANGE_CHECKING>; \
630630
\
631-
using ConstView = ConstViewTemplate<false, false>; \
631+
using ConstView = ConstViewTemplate<true, false>; \
632632
\
633633
/* Generate the mutable View template */ \
634634
_GENERATE_SOA_TRIVIAL_VIEW(CLASS, \
@@ -641,7 +641,7 @@
641641
template <bool RESTRICT_QUALIFY, bool RANGE_CHECKING> \
642642
using ViewTemplate = ViewTemplateFreeParams<ALIGNMENT, ALIGNMENT_ENFORCEMENT, RESTRICT_QUALIFY, RANGE_CHECKING>; \
643643
\
644-
using View = ViewTemplate<false, false>; \
644+
using View = ViewTemplate<true, false>; \
645645
\
646646
/* Trivial constuctor */ \
647647
CLASS() \

0 commit comments

Comments
 (0)