#include #include #include #include "dacs_hello.h" extern dacs_program_handle_t dacs_hello_spu; char *dacs_hello_spu_filename = "./spu/dacs_hello_spu"; char host_buf[128] __attribute__ ((aligned (128))); int main(int argc __attribute__((unused)), char **args __attribute__ ((unused))) { DACS_ERR_T rc; uint32_t i; uint32_t num_rsvd_child; de_id_t rsvd_child_des[MAX_NCHILD]; dacs_process_id_t rsvd_child_pids[MAX_NCHILD]; dacs_group_t hello_group; dacs_remote_mem_t host_buf_handle[MAX_NCHILD]; for (i=0;i < 128;i++){ host_buf[i] = i; } for(i=0;i < 8; i++){ printf("i=%d, value=%d\n", i, host_buf[i]); } rc = dacs_runtime_init(NULL, NULL); ERRCHK("PPE: dacs_init", rc); rc = dacs_group_init(&hello_group, 0); ERRCHK("PPE: dacs_group_init", rc); int num_avail_child; rc = dacs_get_num_avail_children(DACS_DE_CELL_BLADE, &num_avail_child); ERRCHK("PPE: dacs_get_num_avail_children", rc); num_rsvd_child =1; rc = dacs_reserve_children(DACS_DE_CELL_BLADE, &num_rsvd_child, rsvd_child_des); ERRCHK("PPE: dacs_reserve_children", rc); printf("PPE: Hello from my %d SPE children.\n", num_rsvd_child); for (i = 0; i < num_rsvd_child; i++) { rc = dacs_de_start(rsvd_child_des[i], dacs_hello_spu_filename, NULL, NULL, DACS_PROC_LOCAL_FILE, &rsvd_child_pids[i]); ERRCHK("PPE: dacs_de_start", rc); rc = dacs_group_add_member(rsvd_child_des[i], rsvd_child_pids[i], hello_group); ERRCHK("PPE: dacs_group_add_member", rc); dacs_mailbox_write(&i, rsvd_child_des[i], rsvd_child_pids[i]); ERRCHK("PPE: dacs_mailbox_write", rc); int recvmsg; dacs_mailbox_read(&recvmsg, rsvd_child_des[i], rsvd_child_pids[i]); ERRCHK("PPE: dacs_mailbox_read", rc); printf("got a message from child: %d\n", recvmsg); rc =dacs_remote_mem_create(host_buf, sizeof(host_buf), DACS_READ_WRITE, &host_buf_handle[i]); ERRCHK("dacs_mem_create failed\n", rc); rc = dacs_remote_mem_share(rsvd_child_des[i], rsvd_child_pids[i], host_buf_handle[i]); ERRCHK("dacs_mem_shared failed\n", rc); } rc = dacs_group_add_member(DACS_DE_SELF, DACS_PID_SELF, hello_group); ERRCHK("PPE: dacs_group_add_member", rc); rc = dacs_group_close(hello_group); ERRCHK("PPE: dacs_group_close", rc); dacs_barrier_wait(hello_group); ERRCHK("PPE: dacs_barrier_wait", rc); for(i=0;i < 8; i++){ printf("i=%d, value=%d\n", i, host_buf[i]); } rc = dacs_group_destroy(&hello_group); ERRCHK("PPE: dacs_group_destroy", rc); dacs_remote_mem_destroy(&host_buf_handle[i]); dacs_runtime_exit(); return 0; }