Skip to content

Commit fe2782a

Browse files
committed
Add custom data interface definition.
1 parent b757d3b commit fe2782a

2 files changed

Lines changed: 203 additions & 0 deletions

File tree

Lines changed: 162 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,162 @@
1+
#include "arlvis_if.h"
2+
3+
void arlvis_register_data_handle(starpu_data_handle_t handle, unsigned home_node, void *data_interface)
4+
{
5+
struct starpu_arlvis_if *arlvis_if = (struct starpu_arlvis_if *) data_interface;
6+
7+
unsigned node;
8+
for(node = 0; node < STARPU_MAXNODES; node++)
9+
{
10+
struct starpu_arlvis_if *local_if =
11+
(struct starpu_arlvis_if *) starpu_data_get_interface_on_node(handle, node);
12+
// if(arlvis_if->nvis >= STARPU_MAXNODES && (arlvis_if->nvis % STARPU_MAXNODES) == 0)
13+
// {
14+
// local_if->nvis = (arlvis_if->nvis)/STARPU_MAXNODES;
15+
// local_if->npol = arlvis_if->npol;
16+
// local_if->data = &arlvis_if->data[local_if->nvis*node];
17+
// local_if->phasecentre = arlvis_if->phasecentre;
18+
// }
19+
// else
20+
// {
21+
local_if->nvis = arlvis_if->nvis;
22+
local_if->npol = arlvis_if->npol;
23+
local_if->data = arlvis_if->data;
24+
local_if->phasecentre = arlvis_if->phasecentre;
25+
// }
26+
// if(node == home_node)
27+
local_if->cpu_ptr = arlvis_if->cpu_ptr;
28+
// else
29+
// local_if->cpu_ptr = NULL;
30+
31+
}
32+
}
33+
starpu_ssize_t arlvis_allocate_data_on_node(void *data_interface, unsigned node)
34+
{
35+
struct starpu_arlvis_if *arlvis_if = (struct starpu_arlvis_if *) data_interface;
36+
37+
void *addr_data;
38+
char *addr_phasecentre;
39+
starpu_ssize_t data_memory = (80+(32*arlvis_if->npol))*arlvis_if->nvis *sizeof(char);
40+
starpu_ssize_t phase_memory = 5000 * sizeof(char);
41+
addr_data = starpu_malloc_on_node(node, data_memory);
42+
if(!addr_data)
43+
return -ENOMEM;
44+
addr_phasecentre = starpu_malloc_on_node(node,phase_memory);
45+
if(!addr_phasecentre)
46+
{
47+
starpu_free_on_node(node, (uintptr_t) addr_data, data_memory);
48+
return -ENOMEM;
49+
}
50+
51+
arlvis_if->data = addr_data;
52+
arlvis_if->phasecentre = addr_phasecentre;
53+
return data_memory+phase_memory;
54+
}
55+
struct starpu_data_copy_methods arlvis_copy_methods =
56+
{
57+
.ram_to_ram = NULL
58+
};
59+
60+
size_t arlvis_get_size(starpu_data_handle_t handle)
61+
{
62+
size_t size;
63+
struct starpu_arlvis_if *arlvis_if;
64+
65+
arlvis_if = (struct starpu_arlvis_if *)
66+
starpu_data_get_interface_on_node(handle, STARPU_MAIN_RAM);
67+
size = (80+(32*arlvis_if->npol))*arlvis_if->nvis *sizeof(char)+ 5000 * sizeof(char)+sizeof(int)+sizeof(void*)+sizeof(size_t);
68+
return size;
69+
}
70+
71+
void arlvis_footprint()
72+
{
73+
74+
}
75+
76+
void * arlvis_handle_to_pointer(starpu_data_handle_t handle, unsigned node)
77+
{
78+
struct starpu_arlvis_if *arlvis_if =
79+
(struct starpu_arlvis_if *) starpu_data_get_interface_on_node(handle, STARPU_MAIN_RAM);
80+
81+
switch(starpu_node_get_kind(node))
82+
{
83+
case STARPU_CPU_RAM:
84+
return arlvis_if->cpu_ptr;
85+
case STARPU_MAIN_RAM:
86+
return arlvis_if->cpu_ptr;
87+
default:
88+
assert(0);
89+
}
90+
}static struct starpu_data_interface_ops if_arlvis_ops =
91+
{
92+
.register_data_handle = arlvis_register_data_handle,
93+
.allocate_data_on_node = arlvis_allocate_data_on_node,
94+
.copy_methods = &arlvis_copy_methods,
95+
.get_size = arlvis_get_size,
96+
.footprint = arlvis_footprint,
97+
.interfaceid = STARPU_UNKNOWN_INTERFACE_ID,
98+
.interface_size = sizeof(struct starpu_arlvis_if),
99+
.handle_to_pointer = arlvis_handle_to_pointer
100+
};
101+
102+
void * starpu_arlvis_get_cpu_ptr(starpu_data_handle_t handle)
103+
{
104+
struct starpu_arlvis_if *arlvis_if =
105+
(struct starpu_arlvis_if *) starpu_data_get_interface_on_node(handle, STARPU_MAIN_RAM);
106+
107+
return arlvis_if->cpu_ptr;
108+
}
109+
110+
size_t starpu_arlvis_get_nvis(starpu_data_handle_t handle)
111+
{
112+
struct starpu_arlvis_if *arlvis_if =
113+
(struct starpu_arlvis_if *) starpu_data_get_interface_on_node(handle, STARPU_MAIN_RAM);
114+
115+
return arlvis_if->nvis;
116+
}
117+
118+
int starpu_arlvis_get_npol(starpu_data_handle_t handle)
119+
{
120+
struct starpu_arlvis_if *arlvis_if =
121+
(struct starpu_arlvis_if *) starpu_data_get_interface_on_node(handle, STARPU_MAIN_RAM);
122+
123+
return arlvis_if->npol;
124+
}
125+
126+
void *starpu_arlvis_get_data(starpu_data_handle_t handle)
127+
{
128+
struct starpu_arlvis_if *arlvis_if =
129+
(struct starpu_arlvis_if *) starpu_data_get_interface_on_node(handle, STARPU_MAIN_RAM);
130+
131+
return arlvis_if->data;
132+
}
133+
134+
char *starpu_arlvis_get_phase(starpu_data_handle_t handle)
135+
{
136+
struct starpu_arlvis_if *arlvis_if =
137+
(struct starpu_arlvis_if *) starpu_data_get_interface_on_node(handle, STARPU_MAIN_RAM);
138+
139+
return arlvis_if->phasecentre;
140+
}
141+
142+
void starpu_arlvis_data_register(starpu_data_handle_t *handle,
143+
unsigned home_node, void * cpu_ptr, size_t nvis, int npol, void *data, char* phasecentre)
144+
{
145+
struct starpu_arlvis_if arlvis =
146+
{
147+
.cpu_ptr = cpu_ptr,
148+
.nvis = nvis,
149+
.npol = npol,
150+
.data = data,
151+
.phasecentre = phasecentre
152+
};
153+
154+
if(if_arlvis_ops.interfaceid == STARPU_UNKNOWN_INTERFACE_ID)
155+
{
156+
if_arlvis_ops.interfaceid = starpu_data_interface_get_next_id();
157+
}
158+
159+
starpu_data_register(handle, home_node, &arlvis, &if_arlvis_ops);
160+
}
161+
162+
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
#include <stdio.h>
2+
#include <stdlib.h>
3+
#include <string.h>
4+
#include <assert.h>
5+
#include <sys/types.h>
6+
#include <sys/stat.h>
7+
#include <math.h>
8+
9+
#include <starpu.h>
10+
11+
struct starpu_arlvis_if
12+
{
13+
void *cpu_ptr;
14+
size_t nvis;
15+
int npol;
16+
void *data;
17+
char *phasecentre;
18+
};
19+
20+
void arlvis_register_data_handle(starpu_data_handle_t handle, unsigned home_node, void *data_interface);
21+
starpu_ssize_t arlvis_allocate_data_on_node(void *data_interface, unsigned node);
22+
size_t arlvis_get_size();
23+
void arlvis_footprint();
24+
void * arlvis_handle_to_pointer(starpu_data_handle_t handle, unsigned node);
25+
void * starpu_arlvis_get_cpu_ptr(starpu_data_handle_t handle);
26+
size_t starpu_arlvis_get_nvis(starpu_data_handle_t handle);
27+
int starpu_arlvis_get_npol(starpu_data_handle_t handle);
28+
void *starpu_arlvis_get_data(starpu_data_handle_t handle);
29+
char *starpu_arlvis_get_phase(starpu_data_handle_t handle);
30+
31+
#define STARPU_ARLVIS_GET_CPU_PTR(interface) \
32+
(((struct starpu_arlvis_if *)(interface))->cpu_ptr)
33+
#define STARPU_ARLVIS_GET_NVIS(interface) \
34+
(((struct starpu_arlvis_if *)(interface))->nvis)
35+
#define STARPU_ARLVIS_GET_NPOL(interface) \
36+
(((struct starpu_arlvis_if *)(interface))->npol)
37+
#define STARPU_ARLVIS_GET_DATA(interface) \
38+
(((struct starpu_arlvis_if *)(interface))->data)
39+
#define STARPU_ARLVIS_GET_PHASECENTRE(interface) \
40+
(((struct starpu_arlvis_if *)(interface))->phasecentre)
41+

0 commit comments

Comments
 (0)