PIPS
terapix.c
Go to the documentation of this file.
1 #include <stdlib.h>
2 
3 /* A small implementation of the runtime used by the code generated by the
4  kernel_load_store and isolate_statement
5 */
6 
7 
8 /* To copy scalars */
9 void P4A_copy_from_accel(size_t element_size,
10  int *host_address,
11  int *accel_address) {
12  host_address[0] = accel_address[0];
13 }
14 
15 
16 void P4A_copy_to_accel(size_t element_size,
17  int *host_address,
18  int *accel_address) {
19  for(size_t i = 0; i < element_size; i++)
20  accel_address[i] = host_address[i];
21 }
22 
23 /* To copy parts of 1D arrays */
24 void P4A_copy_from_accel_1d(size_t element_size,
25  size_t d1_size,
26  size_t d1_block_size,
27  size_t d1_offset,
28  int *host_address,
29  int *accel_address) {
30  size_t i;
31  for(i = 0; i < d1_block_size; i++)
32  host_address[i+d1_offset] = accel_address[i];
33 }
34 
35 
36 void P4A_copy_to_accel_1d(size_t element_size,
37  size_t d1_size,
38  size_t d1_block_size,
39  size_t d1_offset,
40  int *host_address,
41  int *accel_address) {
42  size_t i;
43  for(i = 0; i < d1_block_size; i++)
44  accel_address[i] = host_address[i+d1_offset];
45 }
46 
47 
48 
49 /* To copy parts of 2D arrays */
50 void P4A_copy_from_accel_2d(size_t element_size,
51  size_t d1_size, size_t d2_size,
52  size_t d1_block_size, size_t d2_block_size,
53  size_t d1_offset, size_t d2_offset,
54  int host_address[d2_size],
55  int accel_address[d1_block_size][d2_block_size]) {
56  size_t i, j;
57  for(i = 0; i < d1_block_size; i++)
58  for(j = 0; j < d2_block_size; j++)
59  host_address[d2_offset+(i+d1_offset)*d2_size+j] =
60  accel_address[i][j];
61 }
62 
63 
64 void P4A_copy_to_accel_2d(size_t element_size,
65  size_t d1_size, size_t d2_size,
66  size_t d1_block_size, size_t d2_block_size,
67  size_t d1_offset, size_t d2_offset,
68  int host_address [d2_size],
69  int accel_address [d1_block_size][d2_block_size]) {
70  size_t i, j;
71  for(i = 0; i < d1_block_size; i++)
72  for(j = 0; j < d2_block_size; j++)
73  accel_address[i][j] =
74  host_address[d2_offset+(i + d1_offset)*d2_size+j];
75 }
76 
77 void P4A_copy_to_accel_3d(size_t element_size,
78  size_t d1_size, size_t d2_size, size_t d3_size,
79  size_t d1_block_size, size_t d2_block_size, size_t d3_block_size,
80  size_t d1_offset, size_t d2_offset, size_t d3_offset,
81  int host_address [d3_size],
82  int accel_address [d1_block_size][d2_block_size][d3_block_size]) {
83  size_t i, j,k;
84  for(i = 0; i < d1_block_size; i++)
85  for(j = 0; j < d2_block_size; j++)
86  for(k = 0; k < d3_block_size; k++)
87  accel_address[i][j][k] =
88  host_address[d3_offset+( (i + d1_offset)*d2_size + j + d2_offset)*d3_size+j];
89 }
90 
91 /* Allocate memory on the accelerator */
92 void P4A_accel_malloc(void **ptr, size_t n) {
93  if(n) *ptr=malloc(n);
94  else *ptr=NULL;
95 }
96 
97 /* Deallocate memory on the accelerator */
98 void P4A_accel_free(void *ptr) {
99  free(ptr);
100 }
void * malloc(YYSIZE_T)
void free(void *)
void P4A_copy_to_accel_1d(size_t element_size, size_t d1_size, size_t d1_block_size, size_t d1_offset, int *host_address, int *accel_address)
Definition: terapix.c:36
void P4A_copy_from_accel_1d(size_t element_size, size_t d1_size, size_t d1_block_size, size_t d1_offset, int *host_address, int *accel_address)
To copy parts of 1D arrays.
Definition: terapix.c:24
void P4A_copy_to_accel(size_t element_size, int *host_address, int *accel_address)
Definition: terapix.c:16
void P4A_copy_from_accel_2d(size_t element_size, size_t d1_size, size_t d2_size, size_t d1_block_size, size_t d2_block_size, size_t d1_offset, size_t d2_offset, int host_address[d2_size], int accel_address[d1_block_size][d2_block_size])
To copy parts of 2D arrays.
Definition: terapix.c:50
void P4A_copy_to_accel_2d(size_t element_size, size_t d1_size, size_t d2_size, size_t d1_block_size, size_t d2_block_size, size_t d1_offset, size_t d2_offset, int host_address[d2_size], int accel_address[d1_block_size][d2_block_size])
Definition: terapix.c:64
void P4A_accel_free(void *ptr)
Deallocate memory on the accelerator.
Definition: terapix.c:98
void P4A_accel_malloc(void **ptr, size_t n)
Allocate memory on the accelerator.
Definition: terapix.c:92
void P4A_copy_to_accel_3d(size_t element_size, size_t d1_size, size_t d2_size, size_t d3_size, size_t d1_block_size, size_t d2_block_size, size_t d3_block_size, size_t d1_offset, size_t d2_offset, size_t d3_offset, int host_address[d3_size], int accel_address[d1_block_size][d2_block_size][d3_block_size])
Definition: terapix.c:77
void P4A_copy_from_accel(size_t element_size, int *host_address, int *accel_address)
A small implementation of the runtime used by the code generated by the kernel_load_store and isolate...
Definition: terapix.c:9