Skip to content

Commit c03927d

Browse files
committed
Separate kernel, pll, memory interfaces for different devices
1 parent 47a5b84 commit c03927d

File tree

2 files changed

+41
-23
lines changed

2 files changed

+41
-23
lines changed

include/acl_hal_mmd.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,14 @@ struct aocl_mmd_streaming_kernel_arg_info_t {
149149
std::vector<char> value;
150150
};
151151

152+
// MMD interface ID cache populated by calling aocl_mmd_get_info with
153+
// corresponding interface MMD info ID
154+
typedef struct {
155+
int kernel_interface = -1;
156+
int pll_interface = -1;
157+
int memory_interface = -1;
158+
} aocl_mmd_interface_info_t;
159+
152160
// MMD Version checking
153161
// Since MMD version changes only with major releases it is safe to assume
154162
// this is a float with at most one decimal
@@ -286,6 +294,7 @@ typedef struct {
286294
int handle;
287295
std::string name;
288296
acl_mmd_dispatch_t *mmd_dispatch;
297+
aocl_mmd_interface_info_t mmd_ifaces;
289298
} acl_mmd_device_t;
290299

291300
#endif

src/acl_hal_mmd.cpp

Lines changed: 32 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -247,11 +247,6 @@ static size_t num_board_pkgs;
247247
static unsigned num_physical_devices = 0;
248248
static double min_MMD_version = DBL_MAX;
249249

250-
// Interfaces
251-
static int kernel_interface = -1;
252-
static int pll_interface = -1;
253-
static int memory_interface = -1;
254-
255250
static acl_bsp_io bsp_io_kern[ACL_MAX_DEVICE];
256251
static acl_bsp_io bsp_io_pll[ACL_MAX_DEVICE];
257252
static acl_kernel_if kern[ACL_MAX_DEVICE];
@@ -1159,6 +1154,9 @@ static int l_try_device(unsigned int physical_device_id, const char *name,
11591154
}
11601155

11611156
// Get interfaces - for now assume one kernel, one pll and one memory
1157+
int kernel_interface = -1;
1158+
int pll_interface = -1;
1159+
int memory_interface = -1;
11621160
ACL_HAL_DEBUG_MSG_VERBOSE(1,
11631161
"HAL : Getting interfaces via aocl_mmd_get_info\n");
11641162
device->mmd_dispatch->aocl_mmd_get_info(device->handle,
@@ -1182,22 +1180,23 @@ static int l_try_device(unsigned int physical_device_id, const char *name,
11821180
printf("Error mmd_get_info: handles for kernel, pll, and memory must be "
11831181
"unique and greater than 0\n");
11841182
}
1183+
device->mmd_ifaces.kernel_interface = kernel_interface;
1184+
device->mmd_ifaces.pll_interface = pll_interface;
1185+
device->mmd_ifaces.memory_interface = memory_interface;
1186+
11851187
device->mmd_dispatch->aocl_mmd_set_status_handler(
11861188
device->handle, acl_hal_mmd_status_handler, NULL);
11871189

11881190
kern[physical_device_id].physical_device_id = physical_device_id;
11891191

1190-
bsp_io_kern[physical_device_id].debug_verbosity = debug_verbosity;
1191-
11921192
// Initialize PLL
11931193
if (pll_interface >= 0) {
11941194
bsp_io_pll[physical_device_id].device_info = device;
11951195
bsp_io_pll[physical_device_id].read = acl_pll_read;
11961196
bsp_io_pll[physical_device_id].write = acl_pll_write;
11971197
bsp_io_pll[physical_device_id].get_time_ns = acl_bsp_get_timestamp;
11981198
bsp_io_pll[physical_device_id].printf = printf;
1199-
bsp_io_pll[physical_device_id].debug_verbosity =
1200-
bsp_io_kern[physical_device_id].debug_verbosity;
1199+
bsp_io_pll[physical_device_id].debug_verbosity = debug_verbosity;
12011200
info_assert(acl_pll_init(&pll[physical_device_id],
12021201
bsp_io_pll[physical_device_id], "") == 0,
12031202
"Failed to read PLL config");
@@ -1215,6 +1214,7 @@ static int l_try_device(unsigned int physical_device_id, const char *name,
12151214
bsp_io_kern[physical_device_id].write = acl_kernel_if_write;
12161215
bsp_io_kern[physical_device_id].get_time_ns = acl_bsp_get_timestamp;
12171216
bsp_io_kern[physical_device_id].printf = printf;
1217+
bsp_io_kern[physical_device_id].debug_verbosity = debug_verbosity;
12181218

12191219
info_assert(acl_kernel_if_init(&kern[physical_device_id],
12201220
bsp_io_kern[physical_device_id], sys) == 0,
@@ -1892,7 +1892,7 @@ int acl_hal_mmd_program_device(unsigned int physical_device_id,
18921892
device_info[physical_device_id].mmd_dispatch->aocl_mmd_set_status_handler(
18931893
device_info[physical_device_id].handle, acl_hal_mmd_status_handler, NULL);
18941894
acl_kernel_if_update(devdef->autodiscovery_def, &kern[physical_device_id]);
1895-
if (pll_interface >= 0) {
1895+
if (device_info[physical_device_id].mmd_ifaces.pll_interface >= 0) {
18961896
if (acl_pkg_section_exists(binary, ACL_PKG_SECTION_PLL_CONFIG,
18971897
&pll_config_len)) {
18981898
info_assert(acl_pll_init(&pll[physical_device_id],
@@ -2099,7 +2099,8 @@ void acl_hal_mmd_copy_hostmem_to_globalmem(cl_event event, const void *src,
20992099

21002100
s = device_info[physical_device_id].mmd_dispatch->aocl_mmd_write(
21012101
device_info[physical_device_id].handle, (aocl_mmd_op_t)event, size, src,
2102-
memory_interface, (size_t)ACL_STRIP_PHYSICAL_ID(dest));
2102+
device_info[physical_device_id].mmd_ifaces.memory_interface,
2103+
(size_t)ACL_STRIP_PHYSICAL_ID(dest));
21032104
assert(s == 0 && "mmd read/write failed");
21042105
}
21052106

@@ -2122,7 +2123,8 @@ void acl_hal_mmd_copy_globalmem_to_hostmem(cl_event event, const void *src,
21222123

21232124
s = device_info[physical_device_id].mmd_dispatch->aocl_mmd_read(
21242125
device_info[physical_device_id].handle, (aocl_mmd_op_t)event, size, dest,
2125-
memory_interface, (size_t)ACL_STRIP_PHYSICAL_ID(src));
2126+
device_info[physical_device_id].mmd_ifaces.memory_interface,
2127+
(size_t)ACL_STRIP_PHYSICAL_ID(src));
21262128
assert(s == 0 && "mmd read/write failed");
21272129
}
21282130

@@ -2150,7 +2152,8 @@ void acl_hal_mmd_copy_globalmem_to_globalmem(cl_event event, const void *src,
21502152
// Let the MMD provider do the intra-device copy.
21512153
s = device_info[physical_device_id_src].mmd_dispatch->aocl_mmd_copy(
21522154
device_info[physical_device_id_src].handle, (aocl_mmd_op_t)event, size,
2153-
memory_interface, (size_t)ACL_STRIP_PHYSICAL_ID(src),
2155+
device_info[physical_device_id_src].mmd_ifaces.memory_interface,
2156+
(size_t)ACL_STRIP_PHYSICAL_ID(src),
21542157
(size_t)ACL_STRIP_PHYSICAL_ID(dest));
21552158
} else {
21562159
// Copy from device to device via host memory.
@@ -2174,7 +2177,9 @@ void acl_hal_mmd_copy_globalmem_to_globalmem(cl_event event, const void *src,
21742177
// Read the initial block into data[0]
21752178
s = device_info[physical_device_id_src].mmd_dispatch->aocl_mmd_read(
21762179
device_info[physical_device_id_src].handle, NULL, transfer_size,
2177-
&data[0][0], memory_interface, (size_t)ACL_STRIP_PHYSICAL_ID(src));
2180+
&data[0][0],
2181+
device_info[physical_device_id_src].mmd_ifaces.memory_interface,
2182+
(size_t)ACL_STRIP_PHYSICAL_ID(src));
21782183
src = (const char *)src + transfer_size;
21792184
size -= transfer_size;
21802185

@@ -2198,13 +2203,15 @@ void acl_hal_mmd_copy_globalmem_to_globalmem(cl_event event, const void *src,
21982203

21992204
device_info[physical_device_id_dst].mmd_dispatch->aocl_mmd_write(
22002205
device_info[physical_device_id_dst].handle, &dst_dev_done,
2201-
transfer_size, &data[buffer][0], memory_interface,
2206+
transfer_size, &data[buffer][0],
2207+
device_info[physical_device_id_dst].mmd_ifaces.memory_interface,
22022208
(size_t)ACL_STRIP_PHYSICAL_ID(dest));
22032209

22042210
if (transfer_size_next)
22052211
device_info[physical_device_id_src].mmd_dispatch->aocl_mmd_read(
22062212
device_info[physical_device_id_src].handle, &src_dev_done,
2207-
transfer_size_next, &data[1 - buffer][0], memory_interface,
2213+
transfer_size_next, &data[1 - buffer][0],
2214+
device_info[physical_device_id_src].mmd_ifaces.memory_interface,
22082215
(size_t)ACL_STRIP_PHYSICAL_ID(src));
22092216
else
22102217
src_dev_done = 1;
@@ -2787,7 +2794,7 @@ static size_t acl_kernel_if_read(acl_bsp_io *io, dev_addr_t src, char *dest,
27872794
size, (size_t)src, (size_t)dest);
27882795
return io->device_info->mmd_dispatch->aocl_mmd_read(
27892796
io->device_info->handle, NULL, size, (void *)dest,
2790-
kernel_interface, (size_t)src) == 0
2797+
io->device_info->mmd_ifaces.kernel_interface, (size_t)src) == 0
27912798
? size
27922799
: 0;
27932800
}
@@ -2800,7 +2807,7 @@ static size_t acl_kernel_if_write(acl_bsp_io *io, dev_addr_t dest,
28002807
size, (size_t)src, (size_t)dest);
28012808
return io->device_info->mmd_dispatch->aocl_mmd_write(
28022809
io->device_info->handle, NULL, size, (const void *)src,
2803-
kernel_interface, (size_t)dest) == 0
2810+
io->device_info->mmd_ifaces.kernel_interface, (size_t)dest) == 0
28042811
? size
28052812
: 0;
28062813
}
@@ -2812,8 +2819,8 @@ static size_t acl_pll_read(acl_bsp_io *io, dev_addr_t src, char *dest,
28122819
ACL_HAL_DEBUG_MSG_VERBOSE(5, "HAL Reading from PLL: %zu bytes %zx -> %zx\n",
28132820
size, (size_t)src, (size_t)dest);
28142821
return io->device_info->mmd_dispatch->aocl_mmd_read(
2815-
io->device_info->handle, NULL, size, (void *)dest, pll_interface,
2816-
(size_t)src) == 0
2822+
io->device_info->handle, NULL, size, (void *)dest,
2823+
io->device_info->mmd_ifaces.pll_interface, (size_t)src) == 0
28172824
? size
28182825
: 0;
28192826
}
@@ -2826,7 +2833,7 @@ static size_t acl_pll_write(acl_bsp_io *io, dev_addr_t dest, const char *src,
28262833
size, (size_t)src, (size_t)dest);
28272834
return io->device_info->mmd_dispatch->aocl_mmd_write(
28282835
io->device_info->handle, NULL, size, (const void *)src,
2829-
pll_interface, (size_t)dest) == 0
2836+
io->device_info->mmd_ifaces.pll_interface, (size_t)dest) == 0
28302837
? size
28312838
: 0;
28322839
}
@@ -3079,14 +3086,16 @@ size_t acl_hal_mmd_read_csr(unsigned int physical_device_id, uintptr_t offset,
30793086
void *ptr, size_t size) {
30803087
return device_info[physical_device_id].mmd_dispatch->aocl_mmd_read(
30813088
device_info[physical_device_id].handle, NULL, size, (void *)ptr,
3082-
kernel_interface, (size_t)offset);
3089+
device_info[physical_device_id].mmd_ifaces.kernel_interface,
3090+
(size_t)offset);
30833091
}
30843092

30853093
size_t acl_hal_mmd_write_csr(unsigned int physical_device_id, uintptr_t offset,
30863094
const void *ptr, size_t size) {
30873095
return device_info[physical_device_id].mmd_dispatch->aocl_mmd_write(
30883096
device_info[physical_device_id].handle, NULL, size, (const void *)ptr,
3089-
kernel_interface, (size_t)offset);
3097+
device_info[physical_device_id].mmd_ifaces.kernel_interface,
3098+
(size_t)offset);
30903099
}
30913100

30923101
void acl_hal_mmd_simulation_streaming_kernel_start(

0 commit comments

Comments
 (0)