Sort elements within vector to fix distance calculation on index tracer

Signed-off-by: Rafael Ravedutti <rafaelravedutti@gmail.com>
This commit is contained in:
Rafael Ravedutti 2021-07-15 23:51:00 +02:00
parent d97fc577b0
commit 8e1542c87d

View File

@ -61,6 +61,24 @@
fprintf(index_tracer_fp, "\n"); \ fprintf(index_tracer_fp, "\n"); \
} \ } \
} }
# define DIST_TRACE_SORT(l, e) if(first_exec) { \
for(int __i = 0; __i < (e); __i += VECTOR_WIDTH) { \
int __e = (((e) - __i) < VECTOR_WIDTH) ? ((e) - __i) : VECTOR_WIDTH; \
if(__e > 1) { \
for(int __j = __i; __j < __i + __e - 1; ++__j) { \
for(int __k = __i; __k < __i + __e - (__j - __i) - 1; ++__k) { \
if(l[__k] > l[__k + 1]) { \
int __t = l[__k]; \
l[__k] = l[__k + 1]; \
l[__k + 1] = __t; \
} \
} \
} \
} \
} \
}
# define DIST_TRACE(l, e) if(first_exec) { \ # define DIST_TRACE(l, e) if(first_exec) { \
for(int __i = 0; __i < (e); __i += VECTOR_WIDTH) { \ for(int __i = 0; __i < (e); __i += VECTOR_WIDTH) { \
int __e = (((e) - __i) < VECTOR_WIDTH) ? ((e) - __i) : VECTOR_WIDTH; \ int __e = (((e) - __i) < VECTOR_WIDTH) ? ((e) - __i) : VECTOR_WIDTH; \
@ -78,6 +96,7 @@
# define INDEX_TRACER_INIT # define INDEX_TRACER_INIT
# define INDEX_TRACER_END # define INDEX_TRACER_END
# define INDEX_TRACE(l, e) # define INDEX_TRACE(l, e)
# define DIST_TRACE_SORT(l, e)
# define DIST_TRACE(l, e) # define DIST_TRACE(l, e)
#endif #endif
@ -127,6 +146,7 @@ double computeForce(Parameter *param, Atom *atom, Neighbor *neighbor, int first_
for(int n = 0; n < nmax; n++) { for(int n = 0; n < nmax; n++) {
#endif #endif
DIST_TRACE_SORT(neighs, numneighs);
INDEX_TRACE(neighs, numneighs); INDEX_TRACE(neighs, numneighs);
DIST_TRACE(neighs, numneighs); DIST_TRACE(neighs, numneighs);