]> rtime.felk.cvut.cz Git - frescor/fosa.git/commitdiff
Accelerating testbench of long_jump in FOSA
authortelleriam <telleriam@35b4ef3e-fd22-0410-ab77-dab3279adceb>
Wed, 28 Nov 2007 09:31:19 +0000 (09:31 +0000)
committertelleriam <telleriam@35b4ef3e-fd22-0410-ab77-dab3279adceb>
Wed, 28 Nov 2007 09:31:19 +0000 (09:31 +0000)
git-svn-id: http://www.frescor.org/private/svn/frescor/fosa/trunk@908 35b4ef3e-fd22-0410-ab77-dab3279adceb

src_marte/tests/test_non_local_jump/Makefile
src_marte/tests/test_non_local_jump/testbench_long_jump.c

index f450c2f958a626699d405dc066069ad970ec365b..d2539bfe2e576f6ac26d8e187650ec704d0f448a 100644 (file)
@@ -7,9 +7,10 @@ CFLAGS += -I$(FRSH_PATH)/src_ads  # Quick hack for frsh_error
 
 frsh_error.o:  frsh_error.c
 
-testbench_long_jump.exe:  testbench_long_jump.c frsh_error.o
+testbench_long_jump.exe:  testbench_long_jump.c frsh_error.o libfosa
+
+test_fosa_long_jump.exe:  test_fosa_long_jump.c frsh_error.o libfosa
 
-test_fosa_long_jump.exe:  test_fosa_long_jump.c frsh_error.o
 
 
 
index 8b8199a598ce4a82ecb4fd1eeb916ad36ce85dbb..302ea8fa82884e1657126301823df13493e0e5e2 100644 (file)
 #define PERIODIC_THREAD_PRIORITY (fosa_get_priority_min() + 5)
 #define MAIN_THREAD_PRIORITY (fosa_get_priority_min() + 3)
 
-#define NUMBER_OF_JUMPS 5
+#define NUMBER_OF_JUMPS 100
 
 typedef struct _results_t
 {
     double first_jump_interval_ms;
     double average_jump_interval_ms;
     double min_jump_interval_ms;
+    int iteration_min_jump_interval;
     double max_jump_interval_ms;
+    int iteration_max_jump_interval;
     double total_jump_interval_ms;
     int  number_of_jumps;
 } results_t;
@@ -94,8 +96,9 @@ int main()
     results.average_jump_interval_ms = results.total_jump_interval_ms/results.number_of_jumps;
 
     printf("------------  RESULTS -------------\n");
-    printf("First Time:  %6.3f ms  Max Time: %6.3f ms  Min Time: %6.3f ms\n",
-           results.first_jump_interval_ms, results.max_jump_interval_ms, results.min_jump_interval_ms);
+    printf("First Time:  %6.3f ms\n  Max Time: %6.3f ms   Iteration %d  Min Time: %6.3f ms Iteration %d\n",
+           results.first_jump_interval_ms, results.max_jump_interval_ms, results.iteration_max_jump_interval,
+           results.min_jump_interval_ms, results.iteration_min_jump_interval);
     printf("Average_time: %6.3f ms   Total jumps: %d\n", results.average_jump_interval_ms, results.number_of_jumps);
 
     printf("End of test\n");
@@ -157,10 +160,8 @@ static void *periodic_code(void *thread_arg)
     while (results->number_of_jumps < NUMBER_OF_JUMPS)
     {
         int jumped = -1;
-        struct timespec budget = {1, 400000000};  // 1.4 secs
+        struct timespec budget = {0, 20000000};  // 20 ms
 
-        struct timespec old_activation_timestamp = {-1, -1};
-        struct timespec activation_timestamp = {-1, -1};
         struct timespec after_jump_timestamp = {-1, -1 };
         double jump_interval_ms = 0.0;
 
@@ -170,8 +171,6 @@ static void *periodic_code(void *thread_arg)
         jumped = 0;
         memset(&before_jump_timestamp, 0, sizeof(before_jump_timestamp) );
 
-        /* For statistical purposes we read the activation time */
-        fosa_clock_get_time(FOSA_CLOCK_REALTIME, &old_activation_timestamp);
 
         /* Start of the interruptible block */
         /************************************/
@@ -179,6 +178,7 @@ static void *periodic_code(void *thread_arg)
         /* We arm the jump_timer */
         fosa_timer_arm(jump_timer, false, &budget);
 
+        
         /* This is the point where the jump returns */
         fosa_long_jump_save_context(&context);
 
@@ -202,8 +202,12 @@ static void *periodic_code(void *thread_arg)
             if (first_time)
             {
                 results->first_jump_interval_ms = jump_interval_ms;
+
                 results->max_jump_interval_ms = jump_interval_ms;
+                results->iteration_max_jump_interval = results->number_of_jumps;
+
                 results->min_jump_interval_ms = jump_interval_ms;
+                results->iteration_min_jump_interval = results->number_of_jumps;
 
                 first_time = 0;
             }
@@ -212,31 +216,20 @@ static void *periodic_code(void *thread_arg)
             if (jump_interval_ms > results->max_jump_interval_ms)
             {
                 results->max_jump_interval_ms = jump_interval_ms;
+                results->iteration_max_jump_interval = results->number_of_jumps;
             }
 
             if (jump_interval_ms < results->min_jump_interval_ms)
             {
                 results->min_jump_interval_ms = jump_interval_ms;
+                results->iteration_min_jump_interval = results->number_of_jumps;
             }
        
-            printf("Jump Iteration: %d\n", results->number_of_jumps);
+            printf("Jump Iteration: %d\r", results->number_of_jumps);
         }
 
-        
         /* End of interruptible work */
         /*****************************/
-        printf("After interruptible block\n");
-        
-        /* Now we measure the time duration of the block */
-        /*************************************************/
-        fosa_clock_get_time(FOSA_CLOCK_REALTIME, &activation_timestamp);
-        decr_timespec(&activation_timestamp, &old_activation_timestamp);
-        printf("Execution time: %6.3f\n", t2d(activation_timestamp) );
-    
-        /* And we program the next loop */
-        incr_timespec(&old_activation_timestamp, &period);
-        clock_nanosleep(FOSA_CLOCK_REALTIME, TIMER_ABSTIME, &activation_timestamp,
-                        &old_activation_timestamp);
     }
 
     
@@ -249,12 +242,6 @@ static void *periodic_code(void *thread_arg)
 
 static void work_under_a_interruptible_budget()
 {
-    struct timespec exec_time = {1, 0};  // 1 seg
-
-    printf("Start regular work\n");
-
-    frsh_eat(&exec_time);
-
     /* This must be measured */
     while(1)
     {