Skip to content

Commit 048f757

Browse files
committed
osc-portals4: add support for noncontiguous datatypes
This commit implements onesided operations for noncontiguous datatypes using two different algorithms. * If the result and/or origin datatype is noncontiguous and the target datatype is contiguous, then an iovec MD is created for the result and origin. The operation is performed using a single Portals4 call (unless it exceeds the max message size). * If the target datatype is noncontigous, then an algorithm similar to the one in osc-rdma is used to loop over the contiguous blocks of each datatype. The operation is performed using multiple Portals4 calls. This commit ensures that individual operations do not exceed the max atomic size or the max message size supported by the device. Signed-off-by: Todd Kordenbrock <[email protected]>
1 parent f7fe2f7 commit 048f757

File tree

3 files changed

+2779
-438
lines changed

3 files changed

+2779
-438
lines changed

ompi/mca/osc/portals4/osc_portals4.h

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
22
/*
3-
* Copyright (c) 2011-2013 Sandia National Laboratories. All rights reserved.
3+
* Copyright (c) 2011-2017 Sandia National Laboratories. All rights reserved.
44
* Copyright (c) 2015 Los Alamos National Security, LLC. All rights
55
* reserved.
66
* Copyright (c) 2015 Research Organization for Information Science
@@ -23,6 +23,8 @@
2323

2424
#define REQ_OSC_TABLE_ID 4
2525

26+
#define OSC_PORTALS4_IOVEC_MAX 64
27+
2628
#define OSC_PORTALS4_MB_DATA 0x0000000000000000ULL
2729
#define OSC_PORTALS4_MB_CONTROL 0x1000000000000000ULL
2830

@@ -95,6 +97,11 @@ struct ompi_osc_portals4_module_t {
9597
int64_t opcount;
9698
ptl_match_bits_t match_bits; /* match bits for module. Same as cid for comm in most cases. */
9799

100+
ptl_iovec_t *origin_iovec_list; /* list of memory segments that compose the noncontiguous region */
101+
ptl_handle_md_t origin_iovec_md_h; /* memory descriptor describing a noncontiguous region in this window */
102+
ptl_iovec_t *result_iovec_list; /* list of memory segments that compose the noncontiguous region */
103+
ptl_handle_md_t result_iovec_md_h; /* memory descriptor describing a noncontiguous region in this window */
104+
98105
ptl_size_t atomic_max; /* max size of atomic messages. Will guarantee ordering IF ordering requested */
99106
ptl_size_t fetch_atomic_max; /* max size of fetchatomic messages. Will guarantee ordering IF ordering requested */
100107

0 commit comments

Comments
 (0)