annotate ppe/Menu.cc @ 0:68a98d68d62a

commit
author yutaka@localhost.localdomain
date Sun, 28 Mar 2010 19:47:00 +0900
parents
children dcd83cefb980
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
yutaka@localhost.localdomain
parents:
diff changeset
1 #include <stdio.h>
yutaka@localhost.localdomain
parents:
diff changeset
2 #include <stdlib.h>
yutaka@localhost.localdomain
parents:
diff changeset
3 #include "Menu.h"
yutaka@localhost.localdomain
parents:
diff changeset
4 #include "Sys.h"
yutaka@localhost.localdomain
parents:
diff changeset
5 #include "params.h"
yutaka@localhost.localdomain
parents:
diff changeset
6
yutaka@localhost.localdomain
parents:
diff changeset
7 //headk_num と send_param_head の値を必ず返さないと、動作しない
yutaka@localhost.localdomain
parents:
diff changeset
8
yutaka@localhost.localdomain
parents:
diff changeset
9 send_params_head_t*
yutaka@localhost.localdomain
parents:
diff changeset
10 menu(int &head_num) {
yutaka@localhost.localdomain
parents:
diff changeset
11
yutaka@localhost.localdomain
parents:
diff changeset
12 head_num = SPE_NUM;
yutaka@localhost.localdomain
parents:
diff changeset
13 int all_task_num = SPE_NUM*1000;
yutaka@localhost.localdomain
parents:
diff changeset
14 //int all_task_num = 1;
yutaka@localhost.localdomain
parents:
diff changeset
15 //int task_size = MAX_DMA_SIZE;
yutaka@localhost.localdomain
parents:
diff changeset
16 int task_size = 16*1024;
yutaka@localhost.localdomain
parents:
diff changeset
17 int in_size = (task_size - sizeof(send_params_head_t)) * all_task_num;
yutaka@localhost.localdomain
parents:
diff changeset
18 int out_size = (task_size - sizeof(send_params_head_t)) * all_task_num;
yutaka@localhost.localdomain
parents:
diff changeset
19
yutaka@localhost.localdomain
parents:
diff changeset
20 float *in;
yutaka@localhost.localdomain
parents:
diff changeset
21 float *out = (float*)allocate(out_size);
yutaka@localhost.localdomain
parents:
diff changeset
22
yutaka@localhost.localdomain
parents:
diff changeset
23 int partition_size = task_size - sizeof(send_params_head_t);
yutaka@localhost.localdomain
parents:
diff changeset
24 send_params_t *send_params = (send_params_t*)allocate(sizeof(send_params_t)*all_task_num);
yutaka@localhost.localdomain
parents:
diff changeset
25
yutaka@localhost.localdomain
parents:
diff changeset
26 send_params_head_t *head = (send_params_head_t*)allocate(sizeof(send_params_head_t)*head_num);
yutaka@localhost.localdomain
parents:
diff changeset
27
yutaka@localhost.localdomain
parents:
diff changeset
28 for (int i = 0; i < all_task_num; i++) {
yutaka@localhost.localdomain
parents:
diff changeset
29
yutaka@localhost.localdomain
parents:
diff changeset
30 send_params[i] = task_allocate(task_size); // header と、in サイズを確保するよ。
yutaka@localhost.localdomain
parents:
diff changeset
31 in = (float*)send_params[i].buff;
yutaka@localhost.localdomain
parents:
diff changeset
32
yutaka@localhost.localdomain
parents:
diff changeset
33 for (int j = 0; j < partition_size / sizeof(float); j++) {
yutaka@localhost.localdomain
parents:
diff changeset
34 in[j] = j;
yutaka@localhost.localdomain
parents:
diff changeset
35 //printf("%f\n",in[j]);
yutaka@localhost.localdomain
parents:
diff changeset
36 }
yutaka@localhost.localdomain
parents:
diff changeset
37
yutaka@localhost.localdomain
parents:
diff changeset
38 }
yutaka@localhost.localdomain
parents:
diff changeset
39
yutaka@localhost.localdomain
parents:
diff changeset
40 int task_list_length = all_task_num / head_num;
yutaka@localhost.localdomain
parents:
diff changeset
41 int index = 0;
yutaka@localhost.localdomain
parents:
diff changeset
42
yutaka@localhost.localdomain
parents:
diff changeset
43 for (int i = 0; i < head_num; i++) {
yutaka@localhost.localdomain
parents:
diff changeset
44
yutaka@localhost.localdomain
parents:
diff changeset
45 head[i].next_task = (unsigned long) send_params[index].head;
yutaka@localhost.localdomain
parents:
diff changeset
46 head[i].next_task_size = task_size;
yutaka@localhost.localdomain
parents:
diff changeset
47
yutaka@localhost.localdomain
parents:
diff changeset
48 head[i].ea_out = (unsigned long) &out[(index * partition_size) / sizeof(float)];
yutaka@localhost.localdomain
parents:
diff changeset
49 head[i].size_out = partition_size;
yutaka@localhost.localdomain
parents:
diff changeset
50
yutaka@localhost.localdomain
parents:
diff changeset
51 head[i].pin_in = 0;
yutaka@localhost.localdomain
parents:
diff changeset
52 head[i].pin_out = 0;
yutaka@localhost.localdomain
parents:
diff changeset
53
yutaka@localhost.localdomain
parents:
diff changeset
54
yutaka@localhost.localdomain
parents:
diff changeset
55 for (int j = 0; j < task_list_length - 1; j++) {
yutaka@localhost.localdomain
parents:
diff changeset
56
yutaka@localhost.localdomain
parents:
diff changeset
57 //Cerium を要チェック
yutaka@localhost.localdomain
parents:
diff changeset
58
yutaka@localhost.localdomain
parents:
diff changeset
59 send_params[index].head->next_task = (unsigned long) send_params[index+1].head;
yutaka@localhost.localdomain
parents:
diff changeset
60 send_params[index].head->next_task_size = task_size;
yutaka@localhost.localdomain
parents:
diff changeset
61
yutaka@localhost.localdomain
parents:
diff changeset
62 send_params[index].head->ea_out = (unsigned long) &out[((index) * partition_size) / sizeof(float)];
yutaka@localhost.localdomain
parents:
diff changeset
63 send_params[index].head->size_out = partition_size;
yutaka@localhost.localdomain
parents:
diff changeset
64
yutaka@localhost.localdomain
parents:
diff changeset
65 send_params[index].head->pin_in = 0;
yutaka@localhost.localdomain
parents:
diff changeset
66 send_params[index].head->pin_out = 0;
yutaka@localhost.localdomain
parents:
diff changeset
67
yutaka@localhost.localdomain
parents:
diff changeset
68 index++;
yutaka@localhost.localdomain
parents:
diff changeset
69
yutaka@localhost.localdomain
parents:
diff changeset
70
yutaka@localhost.localdomain
parents:
diff changeset
71 }
yutaka@localhost.localdomain
parents:
diff changeset
72
yutaka@localhost.localdomain
parents:
diff changeset
73
yutaka@localhost.localdomain
parents:
diff changeset
74 send_params[index].head->next_task = 0;
yutaka@localhost.localdomain
parents:
diff changeset
75 send_params[index].head->next_task_size = 0;
yutaka@localhost.localdomain
parents:
diff changeset
76
yutaka@localhost.localdomain
parents:
diff changeset
77 send_params[index].head->ea_out = (unsigned long) &out[(index) * partition_size / sizeof(float)];
yutaka@localhost.localdomain
parents:
diff changeset
78
yutaka@localhost.localdomain
parents:
diff changeset
79 //printf("[PPE] %p\n",(unsigned long)send_params[index].head->ea_out);
yutaka@localhost.localdomain
parents:
diff changeset
80
yutaka@localhost.localdomain
parents:
diff changeset
81 //send_params[index].head->ea_out = 0;
yutaka@localhost.localdomain
parents:
diff changeset
82 send_params[index].head->size_out = partition_size;
yutaka@localhost.localdomain
parents:
diff changeset
83
yutaka@localhost.localdomain
parents:
diff changeset
84 send_params[index].head->pin_in = 0;
yutaka@localhost.localdomain
parents:
diff changeset
85 send_params[index].head->pin_out = 0;
yutaka@localhost.localdomain
parents:
diff changeset
86
yutaka@localhost.localdomain
parents:
diff changeset
87 //send_params[index].head = NULL;
yutaka@localhost.localdomain
parents:
diff changeset
88
yutaka@localhost.localdomain
parents:
diff changeset
89 index++;
yutaka@localhost.localdomain
parents:
diff changeset
90
yutaka@localhost.localdomain
parents:
diff changeset
91
yutaka@localhost.localdomain
parents:
diff changeset
92 }
yutaka@localhost.localdomain
parents:
diff changeset
93
yutaka@localhost.localdomain
parents:
diff changeset
94 printf("return run\n");
yutaka@localhost.localdomain
parents:
diff changeset
95
yutaka@localhost.localdomain
parents:
diff changeset
96 return head;
yutaka@localhost.localdomain
parents:
diff changeset
97
yutaka@localhost.localdomain
parents:
diff changeset
98 }