55 lines
985 B
C
55 lines
985 B
C
|
/* Copyright (c) 2023 Barcelona Supercomputing Center (BSC)
|
||
|
* SPDX-License-Identifier: GPL-3.0-or-later */
|
||
|
|
||
|
/* Spawn a task from the main thread that calls some nanos6
|
||
|
* functions. */
|
||
|
|
||
|
#define _DEFAULT_SOURCE
|
||
|
|
||
|
#include <nanos6.h>
|
||
|
#include <nanos6/library-mode.h>
|
||
|
#include <time.h>
|
||
|
|
||
|
#include "common.h"
|
||
|
|
||
|
static double
|
||
|
get_time_ms(void)
|
||
|
{
|
||
|
struct timespec ts;
|
||
|
clock_gettime(CLOCK_MONOTONIC, &ts);
|
||
|
return (double) ts.tv_sec + (double) ts.tv_nsec * 1.0e-9;
|
||
|
}
|
||
|
|
||
|
static void
|
||
|
dummy_work(double ms)
|
||
|
{
|
||
|
double end = get_time_ms() + ms * 1e-3;
|
||
|
while (get_time_ms() < end);
|
||
|
}
|
||
|
|
||
|
static void
|
||
|
polling_func(void *arg)
|
||
|
{
|
||
|
double ms = *((double *) arg);
|
||
|
double end = get_time_ms() + ms * 1e-3;
|
||
|
while (get_time_ms() < end) {
|
||
|
dummy_work(1.0); /* 1 ms */
|
||
|
nanos6_wait_for(1000UL); /* 1 ms */
|
||
|
}
|
||
|
}
|
||
|
|
||
|
int
|
||
|
main(void)
|
||
|
{
|
||
|
double T = 100.0;
|
||
|
|
||
|
nanos6_spawn_function(polling_func, &T, NULL, NULL, "polling_task");
|
||
|
|
||
|
#pragma oss task label("dummy_task")
|
||
|
dummy_work(T);
|
||
|
|
||
|
#pragma oss taskwait
|
||
|
|
||
|
return 0;
|
||
|
}
|