diff TaskManager/test/UtilizationTest/main.cc @ 1697:ef1099c41449 draft

UtilizationTest
author Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
date Fri, 04 Oct 2013 16:41:23 +0900
parents
children 7673e2ad2623
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TaskManager/test/UtilizationTest/main.cc	Fri Oct 04 16:41:23 2013 +0900
@@ -0,0 +1,153 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/time.h>
+#include "TaskManager.h"
+#include "Func.h"
+
+extern void task_init(void);
+static int task = 1;
+static int length = DATA_NUM;
+const char *usr_help_str = "Usage: ./multiply \n";
+static int print_flag = 0;
+void TMend(TaskManager *);
+
+float *A,*B,*C;
+
+static double st_time = 0 ;
+static double ed_time = 0;
+
+static double
+getTime() {
+    struct timeval tv;
+    gettimeofday(&tv, NULL);
+    return tv.tv_sec + (double)tv.tv_usec*1e-6;
+}
+
+static void
+check_data() {
+    for(int i=0; i<length;i++) {
+        if (A[i]*B[i]!=C[i]) {
+            printf("Multiplication went wrong.\n");
+            return;
+        }
+    }
+    printf("Multiplication was succeeded.\n");
+    return;
+}
+        
+static void
+print_result() {
+    printf("---\n");
+    if(print_flag == 1) {
+        for (int i =0;i<length;i++) {
+            printf("%f * %f = %f \n",A[i],B[i],C[i]);
+        }
+    }
+    printf("---\n");
+}
+
+
+void
+init(int args, char *argv[]) {
+    for (int i = 1; argv[i]; ++i) {
+        if (strcmp(argv[i], "--length") == 0 || strcmp(argv[i], "-l") == 0) {
+            length = atoi(argv[++i]);
+        } else if (strcmp(argv[i], "-t") == 0) {
+            task = atoi(argv[++i]);
+        } else if (strcmp(argv[i], "-print") == 0) {
+            print_flag = 1;
+        }
+    }
+}
+
+void
+multi_init(TaskManager *manager)
+{
+    
+    A = new float[length];
+    B = new float[length];
+    C = new float[length];
+    for(int i=0; i<length; i++) {
+        A[i]=(float)(i+1000);
+        B[i]=(float)(i+1)/10.f;
+    }
+
+    HTask *multiply = manager->create_task(MULTIPLY_TASK);
+    multiply->set_cpu((CPU_TYPE)((int)SPE_0));
+
+    multiply->set_inData(0,(memaddr)A, sizeof(float)*length);
+    multiply->set_inData(1,(memaddr)B, sizeof(float)*length);
+    
+    multiply->set_outData(0,(memaddr)C, sizeof(float)*length);
+    
+    multiply->spawn();
+
+    HTask* previous = multiply;
+
+    for(int i=1;i<4;i++) {
+        multiply = manager->create_task(MULTIPLY_TASK);
+        multiply->set_cpu((CPU_TYPE)((int)SPE_0+i));
+
+        multiply->set_inData(0,(memaddr)A, sizeof(float)*length);
+        multiply->set_inData(1,(memaddr)B, sizeof(float)*length);
+        
+        multiply->set_outData(0,(memaddr)C, sizeof(float)*length);
+        
+        multiply->wait_for(previous);
+        
+        multiply->spawn();
+
+        previous = multiply;
+    }
+    // // HTask* second_multiply = manager->create_task(MULTIPLY_TASK);
+    // // second_multiply->set_cpu(SPE_1);
+
+    // // second_multiply->set_inData(0,(memaddr)A, sizeof(float)*length);
+    // // second_multiply->set_inData(1,(memaddr)B, sizeof(float)*length);
+    
+    // // second_multiply->set_outData(0,(memaddr)C, sizeof(float)*length);
+    
+    // // second_multiply->wait_for(multiply);
+
+
+    // second_multiply->spawn();
+
+    // multiply = manager->create_task(MULTIPLY_TASK);
+    // multiply->set_cpu(SPE_2);
+
+    // multiply->set_inData(0,(memaddr)A, sizeof(float)*length);
+    // multiply->set_inData(1,(memaddr)B, sizeof(float)*length);
+    
+    // multiply->set_outData(0,(memaddr)C, sizeof(float)*length);
+
+    // multiply->spawn();
+}
+
+
+int
+TMmain(TaskManager *manager,int argc, char *argv[])
+{
+    init(argc, argv);
+    // Task Register
+    task_init();
+    for (int i = 0; i < task; ++i) {
+        multi_init(manager);
+    }
+    st_time = getTime();
+    manager->set_TMend(TMend);
+    return 0;
+}
+
+void
+TMend(TaskManager *manager)
+{
+    ed_time = getTime();
+    print_result();
+    printf("Time: %0.6f\n",ed_time-st_time);
+    check_data();
+
+    delete A;
+    delete B;
+    delete C;
+}