Add a naive L2 shared option for comm techs bench

This commit is contained in:
Thomas Preud'homme 2009-06-10 23:30:24 +02:00 committed by Thomas Preud'homme
parent cc7da2e459
commit 44aacb978e
1 changed files with 37 additions and 0 deletions

View File

@ -1,3 +1,5 @@
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
@ -17,6 +19,7 @@ static long nb_cache_lines = 0;
static long nb_prod = 0;
static long size_buf = 1;
static char *calculation_lib = NULL;
static int shared = 0;
void usage(char *argv[])
{
@ -106,6 +109,7 @@ int analyse_options(int argc, char *argv[])
}
break;
case 's' :
shared = 1;
/* TODO: shared L2 cache */
break;
case '?' :
@ -129,6 +133,11 @@ int analyse_options(int argc, char *argv[])
fprintf(stderr, "You must give the number of producers\n");
return -1;
}
if (shared && (nb_prod > 1))
{
fprintf(stderr, "Too many producers to fit with the consumer in processors which share a same cache\n");
return -1;
}
return 0;
}
@ -136,6 +145,20 @@ void *producer(void *unused)
{
int i, j, k;
if (shared)
{
pthread_t tid;
cpu_set_t cpuset;
tid = pthread_self();
CPU_ZERO(&cpuset);
CPU_SET(1, &cpuset);
if (pthread_setaffinity_np(tid, sizeof(cpu_set_t), &cpuset))
{
perror("pthread_setaffinity_np");
return NULL;
}
}
printf("Registering: %p !\n", (void*) pthread_self());
add_sender();
k = (uintptr_t) pthread_self();
@ -161,6 +184,20 @@ void onMessage(uintptr_t val)
void *receptor(void *a)
{
if (shared)
{
pthread_t tid;
cpu_set_t cpuset;
tid = pthread_self();
CPU_ZERO(&cpuset);
CPU_SET(1, &cpuset);
if (pthread_setaffinity_np(tid, sizeof(cpu_set_t), &cpuset))
{
perror("pthread_setaffinity_np");
return NULL;
}
}
reception(onMessage);
return NULL;
}