1
1
openmpi/ompi/mca/bml/base/bml_base_endpoint.c
George Bosilca 00d24bf8ab Scalability patch, or slim-fast effect #1. All BML structures just
got a whole lot smaller, decreasing the memory footprint of the
running application. How much it's a good question. Here is a
breakdown:

- in mca_bml_base_endpoint_t: 3 *size_t + 1 * uint32_t
- in mca_bml_base_btl_t: 1 * int + 1 * double - 1 * float
                         + 6 * size_t + 9 * (void*)

The decrease in mca_bml_base_endpoint_t is for each peer and the
decrease in mca_bml_base_btl_t is for each BTL for each peer.
So, if we consider the most convenient case where there is only
one network between all peers, this decrease the memory foot print
per peer by
9*size_t + 9*(void*) + 2 * int32_t + 1 * double - 1 * float.
On a 64 bits machine this will be 156 bytes per peer.

Now we access all these fields directly from the underlying BTL
structure, and as this structure is common to multiple BML endpoint,
we are a lot more cache friendly. Even if this do not improve the
latency, it makes the SM performance graph a lot smoother.

This commit was SVN r19659.
2008-09-30 21:02:37 +00:00

54 строки
1.5 KiB
C

/*
* Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
* University Research and Technology
* Corporation. All rights reserved.
* Copyright (c) 2004-2008 The University of Tennessee and The University
* of Tennessee Research Foundation. All rights
* reserved.
* Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
* University of Stuttgart. All rights reserved.
* Copyright (c) 2004-2006 The Regents of the University of California.
* All rights reserved.
* Copyright (c) 2008 Cisco Systems, Inc. All rights reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
*
* $HEADER$
*/
#include "ompi_config.h"
#include "opal/sys/atomic.h"
#include "ompi/mca/bml/bml.h"
#include "ompi/mca/pml/pml.h"
static void mca_bml_base_endpoint_construct(mca_bml_base_endpoint_t* ep)
{
ep->btl_pipeline_send_length = 0;
ep->btl_send_limit = 0;
OBJ_CONSTRUCT(&ep->btl_eager, mca_bml_base_btl_array_t);
OBJ_CONSTRUCT(&ep->btl_send, mca_bml_base_btl_array_t);
OBJ_CONSTRUCT(&ep->btl_rdma, mca_bml_base_btl_array_t);
}
static void mca_bml_base_endpoint_destruct(mca_bml_base_endpoint_t* ep)
{
OBJ_DESTRUCT(&ep->btl_eager);
OBJ_DESTRUCT(&ep->btl_send);
OBJ_DESTRUCT(&ep->btl_rdma);
}
OBJ_CLASS_INSTANCE(
mca_bml_base_endpoint_t,
opal_object_t,
mca_bml_base_endpoint_construct,
mca_bml_base_endpoint_destruct
);