Commit 3ac29abe authored by Thomas Macht's avatar Thomas Macht
Browse files

Distributed memory backend:

 - Added is-distributed property to type.
 - stdlib can be compiled for distributed memory backend.
 - Printing does not yet work correctly but other array accesses do.
 - For now, only AKS arrays can be distributed.
parent f6637368
Showing with 65 additions and 11 deletions
+65 -11
......@@ -75,7 +75,8 @@ rule(`SAC_DISTMEM_DEC_RC_FREE', `SAC_ND_DEC_RC_FREE__NOOP', `SCL', `NHD', `NUQ')
rule(`SAC_DISTMEM_DEC_RC_FREE', `SAC_ND_DEC_RC_FREE__NOOP', `SCL', `HNS', `NUQ')
rule(`SAC_DISTMEM_DEC_RC_FREE', `SAC_ND_DEC_RC_FREE__NOOP', `SCL', `*HID', `UNQ')
rule(`SAC_DISTMEM_DEC_RC_FREE', `SAC_ND_DEC_RC_FREE__NOOP', `AKS', `*HID', `UNQ')
rule(`SAC_DISTMEM_DEC_RC_FREE', `SAC_DISTMEM_DEC_RC_FREE__DEFAULT', `*SHP', `*HID', `NUQ')
rule(`SAC_DISTMEM_DEC_RC_FREE', `SAC_DISTMEM_DEC_RC_FREE__DEFAULT', `AKS', `*HID', `NUQ')
rule(`SAC_DISTMEM_DEC_RC_FREE', `SAC_ND_DEC_RC_FREE', `*SHP', `*HID', `NUQ')
end_icm_definition
......
......@@ -73,6 +73,7 @@
#define Item5(a, b) Item4 b
#define Item6(a, b) Item5 b
#define Item7(a, b) Item6 b
#define Item8(a, b) Item7 b
/*
* The odd-looking CAT? macros is required to provide a degree of indirection
......
......@@ -46,6 +46,9 @@
*
* storage:INT:
* FLO:
*
* distribution: DIS uses DSM memory
* NDI does not use DSM memory
*/
#define NT_NAME(var_NT) Item0 var_NT
......@@ -56,6 +59,7 @@
#define NT_SCO(var_NT) Item5 var_NT
#define NT_USG(var_NT) Item6 var_NT
#define NT_BIT(var_NT) Item7 var_NT
#define NT_DIS(var_NT) Item8 var_NT
#define NT_STR(var_NT) TO_STR (NT_NAME (var_NT))
......@@ -405,6 +409,25 @@ typedef intptr_t *SAC_array_descriptor_t;
#define SAC_ND_A_SHAPE__AUD(var_NT, dim) SAC_ND_A_DESC_SHAPE (var_NT, dim)
/*
* TODO: move SAC_DISTMEM_MIRROR_OFFS implementations (referenced by distmem_icm_gen.h)
*/
#define SAC_ND_A_MIRROR_OFFS(var_NT) CAT12 (NT_NAME (var_NT), __dm_offs)
/*
* TODO: move SAC_DISTMEM_MIRROR_FIRST_ELEMS implementations (referenced by
* distmem_icm_gen.h)
*/
#define SAC_ND_A_MIRROR_FIRST_ELEMS(var_NT) CAT12 (NT_NAME (var_NT), __dm_firstElems)
/*
* TODO: move SAC_DISTMEM_MIRROR_IS_DIST implementations (referenced by distmem_icm_gen.h)
*/
#define SAC_ND_A_MIRROR_IS_DIST(var_NT) CAT12 (NT_NAME (var_NT), __dm_isDist)
/****************
****************
***
......@@ -461,6 +484,14 @@ typedef intptr_t *SAC_array_descriptor_t;
SAC_CS_READ_ARRAY (from_NT, from_pos) \
SAC_ND_GETVAR (from_NT, SAC_ND_A_FIELD (from_NT))[from_pos])
/* TODO: int is hardcoded now and not always mirror? , ) */
#define SAC_ND_READ__DISTMEM(from_NT, from_pos) \
(SAC_TR_AA_PRINT ("DSM read", from_NT, from_pos) SAC_BC_READ (from_NT, from_pos) \
SAC_CS_READ_ARRAY (from_NT, from_pos) SAC_ND_A_MIRROR_IS_DIST (from_NT) \
? *SAC_DISTMEM_ELEM_POINTER (SAC_ND_A_MIRROR_OFFS (from_NT), int, \
SAC_ND_A_MIRROR_FIRST_ELEMS (from_NT), from_pos) \
: SAC_ND_READ__DEFAULT (from_NT, from_pos))
/*
* SAC_ND_WRITE implementations (referenced by sac_std_gen.h)
*/
......@@ -480,6 +511,16 @@ typedef intptr_t *SAC_array_descriptor_t;
SAC_CS_WRITE_ARRAY (to_NT, to_pos) \
SAC_ND_GETVAR (to_NT, SAC_ND_A_FIELD (to_NT))[to_pos]
/* TODO: int is hardcoded now and not always mirror? , )
TODO: check that we never write into the cache
TODO: optimize away some pointer calculations */
#define SAC_ND_WRITE_DISTMEM(to_NT, to_pos) \
SAC_TR_AA_PRINT ("DSM write", to_NT, to_pos) \
SAC_BC_WRITE (to_NT, to_pos) \
SAC_CS_WRITE_ARRAY (to_NT, to_pos) \
*SAC_DISTMEM_ELEM_POINTER (SAC_ND_A_MIRROR_OFFS (to_NT), int, \
SAC_ND_A_MIRROR_FIRST_ELEMS (to_NT), to_pos)
/*
* SAC_ND_WRITE_COPY implementations (referenced by sac_std_gen.h)
*/
......@@ -489,6 +530,15 @@ typedef intptr_t *SAC_array_descriptor_t;
SAC_ND_WRITE (to_NT, to_pos) = expr; \
}
#define SAC_ND_WRITE_COPY__NHD_DISTMEM(to_NT, to_pos, expr, copyfun) \
{ \
if (SAC_ND_A_MIRROR_IS_DIST (to_NT)) { \
SAC_ND_WRITE_DISTMEM (to_NT, to_pos) = expr; \
} else { \
SAC_ND_WRITE (to_NT, to_pos) = expr; \
} \
}
#define SAC_ND_WRITE_COPY__HID(to_NT, to_pos, expr, copyfun) \
{ \
SAC_ND_WRITE (to_NT, to_pos) = copyfun (expr); \
......
......@@ -102,10 +102,11 @@ rule(`SAC_ND_A_SHAPE', `SAC_ND_A_SHAPE__AKS_AKD', `AKD')
rule(`SAC_ND_A_SHAPE', `SAC_ND_A_SHAPE__AUD', `AUD')
pat(`SAC_ND_READ', `0', `1', `NT_SHP', `NT_BIT')
rule(`SAC_ND_READ', `SAC_ND_READ__SCL', `SCL', `*BIT')
rule(`SAC_ND_READ', `SAC_ND_READ__BITARRAY', `*SHP', `YES')
rule(`SAC_ND_READ', `SAC_ND_READ__DEFAULT', `*SHP', `*BIT')
pat(`SAC_ND_READ', `0', `1', `NT_SHP', `NT_BIT', `NT_DIS')
rule(`SAC_ND_READ', `SAC_ND_READ__SCL', `SCL', `*BIT', `*DIS')
rule(`SAC_ND_READ', `SAC_ND_READ__BITARRAY', `*SHP', `YES', `*DIS')
rule(`SAC_ND_READ', `SAC_ND_READ__DISTMEM', `AKS', `*BIT', `DIS')
rule(`SAC_ND_READ', `SAC_ND_READ__DEFAULT', `*SHP', `*BIT', `*DIS')
pat(`SAC_ND_WRITE', `0', `1', `NT_SHP', `NT_BIT')
......@@ -118,10 +119,11 @@ pat(`SAC_ND_WRITE_READ_COPY', `0', `4', `NT_HID')
rule(`SAC_ND_WRITE_READ_COPY', `SAC_ND_WRITE_READ_COPY__NESTED', `HNS')
rule(`SAC_ND_WRITE_READ_COPY', `SAC_ND_WRITE_READ_COPY__DEFAULT', `*HID')
pat(`SAC_ND_WRITE_COPY', `0', `3', `NT_HID')
rule(`SAC_ND_WRITE_COPY', `SAC_ND_WRITE_COPY__HID', `HID')
rule(`SAC_ND_WRITE_COPY', `SAC_ND_WRITE_COPY__NHD', `NHD')
rule(`SAC_ND_WRITE_COPY', `SAC_ND_WRITE_COPY__HNS', `HNS')
pat(`SAC_ND_WRITE_COPY', `0', `3', `NT_HID', `NT_SHP', `NT_DIS')
rule(`SAC_ND_WRITE_COPY', `SAC_ND_WRITE_COPY__HID', `HID', `*SHP', `*DIS')
rule(`SAC_ND_WRITE_COPY', `SAC_ND_WRITE_COPY__NHD_DISTMEM', `NHD', `AKS', `DIS')
rule(`SAC_ND_WRITE_COPY', `SAC_ND_WRITE_COPY__NHD', `NHD', `*SHP', `*DIS')
rule(`SAC_ND_WRITE_COPY', `SAC_ND_WRITE_COPY__HNS', `HNS, `*SHP'', `*DIS')
pat(`SAC_ND_PRINT_SHAPE', `0', `0', `NT_SHP')
rule(`SAC_ND_PRINT_SHAPE', `SAC_ND_PRINT_SHAPE__SCL', `SCL')
......
......@@ -190,11 +190,11 @@ typedef enum {
#if SAC_DO_TRACE_DISTMEM
#define SAC_TR_DISTMEM_PRINT(msg) SAC_TR_PRINT (msg);
#define SAC_TR_DISTMEM_PRINT(...) SAC_TR_PRINT (("DSM -> " __VA_ARGS__))
#else /* SAC_DO_TRACE_MEM */
#define SAC_TR_DISTMEM_PRINT(msg)
#define SAC_TR_DISTMEM_PRINT(...)
#endif
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment