annotate ppe/Menu.cc @ 7:febf899d0043

mandelbrot
author yutaka@localhost.localdomain
date Mon, 12 Apr 2010 00:32:34 +0900
parents 39d405bc46b7
children ec2c1003f9b6
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"
5
yutaka@localhost.localdomain
parents: 3
diff changeset
6 #include "fb.h"
0
yutaka@localhost.localdomain
parents:
diff changeset
7
yutaka@localhost.localdomain
parents:
diff changeset
8 //headk_num と send_param_head の値を必ず返さないと、動作しない
yutaka@localhost.localdomain
parents:
diff changeset
9
2
yutaka@localhost.localdomain
parents: 1
diff changeset
10 task_head_t*
yutaka@localhost.localdomain
parents: 1
diff changeset
11 menu(int &list_num) {
0
yutaka@localhost.localdomain
parents:
diff changeset
12
2
yutaka@localhost.localdomain
parents: 1
diff changeset
13 list_num = SPE_NUM;
5
yutaka@localhost.localdomain
parents: 3
diff changeset
14
yutaka@localhost.localdomain
parents: 3
diff changeset
15 fb_t fb = get_fbdev_addr();
yutaka@localhost.localdomain
parents: 3
diff changeset
16 int max_size = MAX_DMA_SIZE - sizeof(task_head_t);
7
febf899d0043 mandelbrot
yutaka@localhost.localdomain
parents: 5
diff changeset
17 int all_line_num = fb.height;
5
yutaka@localhost.localdomain
parents: 3
diff changeset
18 int line_size = fb.width * fb.bpp / DIV_BYTE;
2
yutaka@localhost.localdomain
parents: 1
diff changeset
19
5
yutaka@localhost.localdomain
parents: 3
diff changeset
20 // line num per task
yutaka@localhost.localdomain
parents: 3
diff changeset
21 int lnpt = max_size / line_size;
yutaka@localhost.localdomain
parents: 3
diff changeset
22 int out_size = lnpt * line_size;
7
febf899d0043 mandelbrot
yutaka@localhost.localdomain
parents: 5
diff changeset
23 int list_length = (all_line_num / list_num) / lnpt;
5
yutaka@localhost.localdomain
parents: 3
diff changeset
24
yutaka@localhost.localdomain
parents: 3
diff changeset
25 int in_size = sizeof(int)*4;
yutaka@localhost.localdomain
parents: 3
diff changeset
26 int real_in_size = sizeof(int)*2;
2
yutaka@localhost.localdomain
parents: 1
diff changeset
27
yutaka@localhost.localdomain
parents: 1
diff changeset
28 task_head_t *list_head = (task_head_t*)allocate(sizeof(task_head_t)*list_num);
7
febf899d0043 mandelbrot
yutaka@localhost.localdomain
parents: 5
diff changeset
29 task_t **tail = (task_t**)allocate(sizeof(task_t*)*list_num);
0
yutaka@localhost.localdomain
parents:
diff changeset
30
5
yutaka@localhost.localdomain
parents: 3
diff changeset
31 int index = 0;
2
yutaka@localhost.localdomain
parents: 1
diff changeset
32 for (int i = 0; i < list_num; i++) {
7
febf899d0043 mandelbrot
yutaka@localhost.localdomain
parents: 5
diff changeset
33 tail[i] = entry_head(&list_head[i]);
febf899d0043 mandelbrot
yutaka@localhost.localdomain
parents: 5
diff changeset
34 }
febf899d0043 mandelbrot
yutaka@localhost.localdomain
parents: 5
diff changeset
35
febf899d0043 mandelbrot
yutaka@localhost.localdomain
parents: 5
diff changeset
36 for (int i = 0; i < all_line_num / lnpt; i++) {
5
yutaka@localhost.localdomain
parents: 3
diff changeset
37 task_t *task = task_allocate(in_size, 0);
yutaka@localhost.localdomain
parents: 3
diff changeset
38 task->head->ea_out = (unsigned long long) (unsigned long) &fb.pixels[index*out_size];
yutaka@localhost.localdomain
parents: 3
diff changeset
39 task->head->size_out = out_size;
2
yutaka@localhost.localdomain
parents: 1
diff changeset
40 int *in = (int*)task->input;
0
yutaka@localhost.localdomain
parents:
diff changeset
41
5
yutaka@localhost.localdomain
parents: 3
diff changeset
42 in[0] = index*out_size;
yutaka@localhost.localdomain
parents: 3
diff changeset
43 in[1] = (index+1)*out_size;
2
yutaka@localhost.localdomain
parents: 1
diff changeset
44
5
yutaka@localhost.localdomain
parents: 3
diff changeset
45 int pin_in = in_size - real_in_size;
2
yutaka@localhost.localdomain
parents: 1
diff changeset
46 int pin_out = 0;
yutaka@localhost.localdomain
parents: 1
diff changeset
47
yutaka@localhost.localdomain
parents: 1
diff changeset
48 set_pin(task, pin_in, pin_out);
7
febf899d0043 mandelbrot
yutaka@localhost.localdomain
parents: 5
diff changeset
49 tail[i%list_num] = add_list(tail[i%list_num], task);
5
yutaka@localhost.localdomain
parents: 3
diff changeset
50
yutaka@localhost.localdomain
parents: 3
diff changeset
51 index++;
2
yutaka@localhost.localdomain
parents: 1
diff changeset
52
7
febf899d0043 mandelbrot
yutaka@localhost.localdomain
parents: 5
diff changeset
53 }
febf899d0043 mandelbrot
yutaka@localhost.localdomain
parents: 5
diff changeset
54
febf899d0043 mandelbrot
yutaka@localhost.localdomain
parents: 5
diff changeset
55 // for (int i = 0; i < list_num; i++) {
febf899d0043 mandelbrot
yutaka@localhost.localdomain
parents: 5
diff changeset
56
febf899d0043 mandelbrot
yutaka@localhost.localdomain
parents: 5
diff changeset
57 // task_t *head = entry_head(&list_head[i]);
febf899d0043 mandelbrot
yutaka@localhost.localdomain
parents: 5
diff changeset
58
febf899d0043 mandelbrot
yutaka@localhost.localdomain
parents: 5
diff changeset
59 // for (int j = 0; j < list_length; j++) {
febf899d0043 mandelbrot
yutaka@localhost.localdomain
parents: 5
diff changeset
60
febf899d0043 mandelbrot
yutaka@localhost.localdomain
parents: 5
diff changeset
61 // task_t *task = task_allocate(in_size, 0);
febf899d0043 mandelbrot
yutaka@localhost.localdomain
parents: 5
diff changeset
62 // task->head->ea_out = (unsigned long long) (unsigned long) &fb.pixels[index*out_size];
febf899d0043 mandelbrot
yutaka@localhost.localdomain
parents: 5
diff changeset
63 // task->head->size_out = out_size;
febf899d0043 mandelbrot
yutaka@localhost.localdomain
parents: 5
diff changeset
64 // int *in = (int*)task->input;
0
yutaka@localhost.localdomain
parents:
diff changeset
65
7
febf899d0043 mandelbrot
yutaka@localhost.localdomain
parents: 5
diff changeset
66 // in[0] = index*out_size;
febf899d0043 mandelbrot
yutaka@localhost.localdomain
parents: 5
diff changeset
67 // in[1] = (index+1)*out_size;
febf899d0043 mandelbrot
yutaka@localhost.localdomain
parents: 5
diff changeset
68
febf899d0043 mandelbrot
yutaka@localhost.localdomain
parents: 5
diff changeset
69 // int pin_in = in_size - real_in_size;
febf899d0043 mandelbrot
yutaka@localhost.localdomain
parents: 5
diff changeset
70 // int pin_out = 0;
febf899d0043 mandelbrot
yutaka@localhost.localdomain
parents: 5
diff changeset
71
febf899d0043 mandelbrot
yutaka@localhost.localdomain
parents: 5
diff changeset
72 // set_pin(task, pin_in, pin_out);
febf899d0043 mandelbrot
yutaka@localhost.localdomain
parents: 5
diff changeset
73 // head = add_list(head, task);
febf899d0043 mandelbrot
yutaka@localhost.localdomain
parents: 5
diff changeset
74
febf899d0043 mandelbrot
yutaka@localhost.localdomain
parents: 5
diff changeset
75 // index++;
febf899d0043 mandelbrot
yutaka@localhost.localdomain
parents: 5
diff changeset
76
febf899d0043 mandelbrot
yutaka@localhost.localdomain
parents: 5
diff changeset
77 // }
febf899d0043 mandelbrot
yutaka@localhost.localdomain
parents: 5
diff changeset
78
febf899d0043 mandelbrot
yutaka@localhost.localdomain
parents: 5
diff changeset
79 // }
0
yutaka@localhost.localdomain
parents:
diff changeset
80
yutaka@localhost.localdomain
parents:
diff changeset
81 printf("return run\n");
5
yutaka@localhost.localdomain
parents: 3
diff changeset
82
yutaka@localhost.localdomain
parents: 3
diff changeset
83 //munmap(fb.pixels, fb.size);
yutaka@localhost.localdomain
parents: 3
diff changeset
84 //close(fb.fd);
yutaka@localhost.localdomain
parents: 3
diff changeset
85
2
yutaka@localhost.localdomain
parents: 1
diff changeset
86 return list_head;
0
yutaka@localhost.localdomain
parents:
diff changeset
87
yutaka@localhost.localdomain
parents:
diff changeset
88 }