added experimental support for big numa machines
This commit is contained in:
		
							parent
							
								
									271af406f3
								
							
						
					
					
						commit
						793175be3a
					
				| 
						 | 
					@ -95,6 +95,9 @@ NO_WARMUP = 1
 | 
				
			||||||
# If you want to disable CPU/Memory affinity on Linux.
 | 
					# If you want to disable CPU/Memory affinity on Linux.
 | 
				
			||||||
NO_AFFINITY = 1
 | 
					NO_AFFINITY = 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# if you are compiling for Linux and you have more than 16 numa nodes or more than 256 cpus
 | 
				
			||||||
 | 
					# BIGNUMA = 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Don't use AVX kernel on Sandy Bridge. It is compatible with old compilers
 | 
					# Don't use AVX kernel on Sandy Bridge. It is compatible with old compilers
 | 
				
			||||||
# and OS. However, the performance is low.
 | 
					# and OS. However, the performance is low.
 | 
				
			||||||
# NO_AVX = 1
 | 
					# NO_AVX = 1
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -803,6 +803,10 @@ ifeq ($(USE_OPENMP), 1)
 | 
				
			||||||
CCOMMON_OPT	+= -DUSE_OPENMP
 | 
					CCOMMON_OPT	+= -DUSE_OPENMP
 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ifeq ($(BIGNUMA), 1)
 | 
				
			||||||
 | 
					CCOMMON_OPT	+= -DBIGNUMA
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ifeq ($(NO_WARMUP), 1)
 | 
					ifeq ($(NO_WARMUP), 1)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -85,8 +85,16 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
				
			||||||
#include <unistd.h>
 | 
					#include <unistd.h>
 | 
				
			||||||
#include <string.h>
 | 
					#include <string.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if defined(BIGNUMA)
 | 
				
			||||||
 | 
					// max number of nodes as defined in numa.h
 | 
				
			||||||
 | 
					// max cpus as defined in sched.h
 | 
				
			||||||
 | 
					#define MAX_NODES	128
 | 
				
			||||||
 | 
					#define MAX_CPUS	CPU_SETSIZE
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
#define MAX_NODES	16
 | 
					#define MAX_NODES	16
 | 
				
			||||||
#define MAX_CPUS	256
 | 
					#define MAX_CPUS	256
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define NCPUBITS        (8*sizeof(unsigned long))
 | 
					#define NCPUBITS        (8*sizeof(unsigned long))
 | 
				
			||||||
#define MAX_BITMASK_LEN (MAX_CPUS/NCPUBITS)
 | 
					#define MAX_BITMASK_LEN (MAX_CPUS/NCPUBITS)
 | 
				
			||||||
#define CPUELT(cpu)	((cpu) / NCPUBITS)
 | 
					#define CPUELT(cpu)	((cpu) / NCPUBITS)
 | 
				
			||||||
| 
						 | 
					@ -544,16 +552,26 @@ static inline int is_dead(int id) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  return shmctl(id, IPC_STAT, &ds);
 | 
					  return shmctl(id, IPC_STAT, &ds);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void open_shmem(void) {
 | 
					static void open_shmem(void) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  int try = 0;
 | 
					  int try = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  do {
 | 
					  do {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if defined(BIGNUMA)
 | 
				
			||||||
 | 
					    // raised to 32768, enough for 128 nodes and 1024 cups
 | 
				
			||||||
 | 
					    shmid = shmget(SH_MAGIC, 32768, 0666);
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
    shmid = shmget(SH_MAGIC, 4096, 0666);
 | 
					    shmid = shmget(SH_MAGIC, 4096, 0666);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (shmid == -1) {
 | 
					    if (shmid == -1) {
 | 
				
			||||||
 | 
					#if defined(BIGNUMA)
 | 
				
			||||||
 | 
					      shmid = shmget(SH_MAGIC, 32768, IPC_CREAT | 0666);
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
      shmid = shmget(SH_MAGIC, 4096, IPC_CREAT | 0666);
 | 
					      shmid = shmget(SH_MAGIC, 4096, IPC_CREAT | 0666);
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    try ++;
 | 
					    try ++;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue