Skip to content
Snippets Groups Projects
Commit e65279ac authored by Peter W. Draper's avatar Peter W. Draper
Browse files

Merge branch 'part_alignment' into 'master'

Align critical structures on 128 bytes and make all their sizes multiples of 32 bytes.

Here is another one for you.

Following the discussion we had earlier about the task structure I have gone through the rest of the code and made sure everything important is aligned on 128 bytes. 

See merge request !240
parents 7e148295 b3ab1487
No related branches found
No related tags found
1 merge request!240Align critical structures on 128 bytes and make all their sizes multiples of 32 bytes.
...@@ -55,7 +55,7 @@ AM_SOURCES = space.c runner.c queue.c task.c cell.c engine.c \ ...@@ -55,7 +55,7 @@ AM_SOURCES = space.c runner.c queue.c task.c cell.c engine.c \
runner_doiact_fft.c threadpool.c cooling.c runner_doiact_fft.c threadpool.c cooling.c
# Include files for distribution, not installation. # Include files for distribution, not installation.
nobase_noinst_HEADERS = approx_math.h atomic.h cycle.h error.h inline.h kernel_hydro.h kernel_gravity.h \ nobase_noinst_HEADERS = align.h approx_math.h atomic.h cycle.h error.h inline.h kernel_hydro.h kernel_gravity.h \
kernel_long_gravity.h vector.h runner_doiact.h runner_doiact_grav.h runner_doiact_fft.h \ kernel_long_gravity.h vector.h runner_doiact.h runner_doiact_grav.h runner_doiact_fft.h \
units.h intrinsics.h minmax.h kick.h timestep.h drift.h adiabatic_index.h io_properties.h \ units.h intrinsics.h minmax.h kick.h timestep.h drift.h adiabatic_index.h io_properties.h \
dimension.h equation_of_state.h \ dimension.h equation_of_state.h \
......
/*******************************************************************************
* This file is part of SWIFT.
* Copyright (c) 2016 Matthieu Schaller (matthieu.schaller@durham.ac.uk).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published
* by the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
******************************************************************************/
#ifndef SWIFT_ALIGN_H
#define SWIFT_ALIGN_H
/**
* @brief Defines alignment of structures
*/
#define SWIFT_STRUCT_ALIGN __attribute__((aligned(32)))
#endif /* SWIFT_ALIGN_H */
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
#include <stddef.h> #include <stddef.h>
/* Local includes. */ /* Local includes. */
#include "align.h"
#include "lock.h" #include "lock.h"
#include "multipole.h" #include "multipole.h"
#include "part.h" #include "part.h"
...@@ -44,7 +45,7 @@ struct space; ...@@ -44,7 +45,7 @@ struct space;
* The maximum was lowered by a further factor of 2 to be on the safe side.*/ * The maximum was lowered by a further factor of 2 to be on the safe side.*/
#define cell_max_tag (1 << 29) #define cell_max_tag (1 << 29)
#define cell_align 32 #define cell_align 128
/* Global variables. */ /* Global variables. */
extern int cell_next_tag; extern int cell_next_tag;
...@@ -74,7 +75,8 @@ struct pcell { ...@@ -74,7 +75,8 @@ struct pcell {
/* Relative indices of the cell's progeny. */ /* Relative indices of the cell's progeny. */
int progeny[8]; int progeny[8];
};
} SWIFT_STRUCT_ALIGN;
/* Structure to store the data of a single cell. */ /* Structure to store the data of a single cell. */
struct cell { struct cell {
...@@ -208,7 +210,7 @@ struct cell { ...@@ -208,7 +210,7 @@ struct cell {
#endif #endif
} __attribute__((aligned(cell_align))); } SWIFT_STRUCT_ALIGN;
/* Convert cell location to ID. */ /* Convert cell location to ID. */
#define cell_getid(cdim, i, j, k) \ #define cell_getid(cdim, i, j, k) \
......
...@@ -53,6 +53,6 @@ struct gpart { ...@@ -53,6 +53,6 @@ struct gpart {
which this gpart is linked. */ which this gpart is linked. */
long long id_or_neg_offset; long long id_or_neg_offset;
} __attribute__((aligned(gpart_align))); } SWIFT_STRUCT_ALIGN;
#endif /* SWIFT_DEFAULT_GRAVITY_PART_H */ #endif /* SWIFT_DEFAULT_GRAVITY_PART_H */
...@@ -33,7 +33,7 @@ struct xpart { ...@@ -33,7 +33,7 @@ struct xpart {
/* Old density. */ /* Old density. */
float omega; float omega;
} __attribute__((aligned(xpart_align))); } SWIFT_STRUCT_ALIGN;
/* Data of a single particle. */ /* Data of a single particle. */
struct part { struct part {
...@@ -120,6 +120,6 @@ struct part { ...@@ -120,6 +120,6 @@ struct part {
/* Pointer to corresponding gravity part. */ /* Pointer to corresponding gravity part. */
struct gpart* gpart; struct gpart* gpart;
} __attribute__((aligned(part_align))); } SWIFT_STRUCT_ALIGN;
#endif /* SWIFT_DEFAULT_HYDRO_PART_H */ #endif /* SWIFT_DEFAULT_HYDRO_PART_H */
...@@ -28,7 +28,7 @@ struct xpart { ...@@ -28,7 +28,7 @@ struct xpart {
/* Velocity at the last full step. */ /* Velocity at the last full step. */
float v_full[3]; float v_full[3];
} __attribute__((aligned(xpart_align))); } SWIFT_STRUCT_ALIGN;
/* Data of a single particle. */ /* Data of a single particle. */
struct part { struct part {
...@@ -110,6 +110,6 @@ struct part { ...@@ -110,6 +110,6 @@ struct part {
/* Pointer to corresponding gravity part. */ /* Pointer to corresponding gravity part. */
struct gpart* gpart; struct gpart* gpart;
} __attribute__((aligned(part_align))); } SWIFT_STRUCT_ALIGN;
#endif /* SWIFT_GADGET2_HYDRO_PART_H */ #endif /* SWIFT_GADGET2_HYDRO_PART_H */
...@@ -26,7 +26,7 @@ struct xpart { ...@@ -26,7 +26,7 @@ struct xpart {
/* Velocity at the last full step. */ /* Velocity at the last full step. */
float v_full[3]; float v_full[3];
} __attribute__((aligned(xpart_align))); } SWIFT_STRUCT_ALIGN;
/* Data of a single particle. */ /* Data of a single particle. */
struct part { struct part {
...@@ -196,4 +196,4 @@ struct part { ...@@ -196,4 +196,4 @@ struct part {
/* Associated gravitas. */ /* Associated gravitas. */
struct gpart *gpart; struct gpart *gpart;
} __attribute__((aligned(part_align))); } SWIFT_STRUCT_ALIGN;
...@@ -47,7 +47,7 @@ struct xpart { ...@@ -47,7 +47,7 @@ struct xpart {
float v_full[3]; /*!< Velocity at the last full step. */ float v_full[3]; /*!< Velocity at the last full step. */
} __attribute__((aligned(xpart_align))); } SWIFT_STRUCT_ALIGN;
/** /**
* @brief Particle fields for the SPH particles * @brief Particle fields for the SPH particles
...@@ -120,6 +120,6 @@ struct part { ...@@ -120,6 +120,6 @@ struct part {
struct gpart* gpart; /*!< Pointer to corresponding gravity part. */ struct gpart* gpart; /*!< Pointer to corresponding gravity part. */
} __attribute__((aligned(part_align))); } SWIFT_STRUCT_ALIGN;
#endif /* SWIFT_MINIMAL_HYDRO_PART_H */ #endif /* SWIFT_MINIMAL_HYDRO_PART_H */
...@@ -31,12 +31,13 @@ ...@@ -31,12 +31,13 @@
#endif #endif
/* Local headers. */ /* Local headers. */
#include "align.h"
#include "const.h" #include "const.h"
/* Some constants. */ /* Some constants. */
#define part_align 64 #define part_align 128
#define xpart_align 32 #define xpart_align 128
#define gpart_align 32 #define gpart_align 128
/* Import the right hydro particle definition */ /* Import the right hydro particle definition */
#if defined(MINIMAL_SPH) #if defined(MINIMAL_SPH)
......
...@@ -26,6 +26,7 @@ ...@@ -26,6 +26,7 @@
#include "../config.h" #include "../config.h"
/* Includes. */ /* Includes. */
#include "align.h"
#include "cell.h" #include "cell.h"
#include "cycle.h" #include "cycle.h"
...@@ -149,7 +150,7 @@ struct task { ...@@ -149,7 +150,7 @@ struct task {
/*! Is this task implicit (i.e. does not do anything) ? */ /*! Is this task implicit (i.e. does not do anything) ? */
char implicit; char implicit;
} __attribute__((aligned(32))); } SWIFT_STRUCT_ALIGN;
/* Function prototypes. */ /* Function prototypes. */
void task_unlock(struct task *t); void task_unlock(struct task *t);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment