Add support for AoS data layout

Signed-off-by: Rafael Ravedutti <rafaelravedutti@gmail.com>
This commit is contained in:
Rafael Ravedutti
2021-03-20 18:32:50 +01:00
parent b39957421c
commit 3f7edb5dbf
6 changed files with 93 additions and 77 deletions

View File

@@ -35,4 +35,23 @@ typedef struct {
extern void initAtom(Atom*);
extern void createAtom(Atom*, Parameter*);
extern void growAtom(Atom*);
#ifdef AOS
inline const char *posDataLayout() { return "AoS"; }
inline void set_atom_x(Atom *atom, int i, MD_FLOAT x) { atom->x[i * 3 + 0] = x; }
inline void set_atom_y(Atom *atom, int i, MD_FLOAT y) { atom->x[i * 3 + 1] = y; }
inline void set_atom_z(Atom *atom, int i, MD_FLOAT z) { atom->x[i * 3 + 2] = z; }
inline MD_FLOAT get_atom_x(Atom *atom, int i) { return atom->x[i * 3 + 0]; }
inline MD_FLOAT get_atom_y(Atom *atom, int i) { return atom->x[i * 3 + 1]; }
inline MD_FLOAT get_atom_z(Atom *atom, int i) { return atom->x[i * 3 + 2]; }
#else
inline const char *posDataLayout() { return "SoA"; }
inline void set_atom_x(Atom *atom, int i, MD_FLOAT x) { atom->x[i] = x; }
inline void set_atom_y(Atom *atom, int i, MD_FLOAT y) { atom->y[i] = y; }
inline void set_atom_z(Atom *atom, int i, MD_FLOAT z) { atom->z[i] = z; }
inline MD_FLOAT get_atom_x(Atom *atom, int i) { return atom->x[i]; }
inline MD_FLOAT get_atom_y(Atom *atom, int i) { return atom->y[i]; }
inline MD_FLOAT get_atom_z(Atom *atom, int i) { return atom->z[i]; }
#endif
#endif