Stage time can be made smaller
Allow stage time to be smaller by adjusting after the computing was done instead of before.
This commit is contained in:
parent
cacde80b30
commit
8010f34abe
|
@ -20,12 +20,13 @@
|
|||
//#define NB_CORES 12; /* Quad Hexa */
|
||||
#endif
|
||||
|
||||
long seq_len = 27720;
|
||||
long nb_packets = 100000;
|
||||
useconds_t stage_time = 0;
|
||||
//#define NOSLEEP
|
||||
|
||||
typedef unsigned long data_t;
|
||||
|
||||
long seq_len = 24/*27720*/;
|
||||
long nb_packets = 100000;
|
||||
struct timespec stage_time;
|
||||
|
||||
/* $Stage_{i+1} (data_{j+1}) = E_i (data_{j+1}) + E_{i+1} (data_j)$ */
|
||||
void process_stage(data_t *prev_pipeline_stage, data_t *next_pipeline_stage)
|
||||
|
@ -33,13 +34,24 @@ void process_stage(data_t *prev_pipeline_stage, data_t *next_pipeline_stage)
|
|||
long i;
|
||||
static __thread data_t *prev_data = NULL;
|
||||
data_t prev_process_step;
|
||||
#ifndef NOSLEEP
|
||||
struct timespec beginning, now, end;
|
||||
|
||||
clock_gettime(CLOCK_REALTIME, &beginning);
|
||||
end.tv_sec = beginning.tv_sec + stage_time.tv_sec;
|
||||
if (beginning.tv_nsec + stage_time.tv_nsec < 1000000000)
|
||||
end.tv_nsec = beginning.tv_nsec + stage_time.tv_nsec;
|
||||
else
|
||||
{
|
||||
end.tv_nsec = beginning.tv_nsec + stage_time.tv_nsec - 1000000000;
|
||||
end.tv_sec++;
|
||||
}
|
||||
#endif
|
||||
if (prev_data == NULL)
|
||||
{
|
||||
prev_data = malloc(sizeof(*prev_data) * seq_len / NB_CORES);
|
||||
memset(prev_data, 0, sizeof(*prev_data) * seq_len / NB_CORES);
|
||||
}
|
||||
usleep(stage_time); // stage_time is in usecs
|
||||
prev_process_step = *prev_pipeline_stage;
|
||||
for (i = 0; i < seq_len / NB_CORES; i++)
|
||||
{
|
||||
|
@ -47,6 +59,12 @@ void process_stage(data_t *prev_pipeline_stage, data_t *next_pipeline_stage)
|
|||
prev_process_step = prev_data[i];
|
||||
}
|
||||
*next_pipeline_stage = prev_data[i - 1];
|
||||
#ifndef NOSLEEP
|
||||
do
|
||||
{
|
||||
clock_gettime(CLOCK_REALTIME, &now);
|
||||
} while ((now.tv_sec < end.tv_sec) || (now.tv_nsec < end.tv_nsec));
|
||||
#endif
|
||||
}
|
||||
|
||||
void last_process_stage(data_t *prev_stage)
|
||||
|
@ -60,7 +78,7 @@ void last_process_stage(data_t *prev_stage)
|
|||
int analyse_options(int argc, char *argv[])
|
||||
{
|
||||
char **arg_p;
|
||||
long total_time = 10000000;
|
||||
long stg_time, total_time = 10000000000;
|
||||
|
||||
argc--;
|
||||
arg_p = argv;
|
||||
|
@ -119,7 +137,9 @@ int analyse_options(int argc, char *argv[])
|
|||
}
|
||||
}
|
||||
}
|
||||
stage_time = total_time / (nb_packets * NB_CORES);
|
||||
stg_time = total_time / (nb_packets * NB_CORES);
|
||||
stage_time.tv_sec = stg_time / 1000000000;
|
||||
stage_time.tv_nsec = stg_time % 1000000000;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue