1
1

Major modification of the vprotocol framework build system. With a better integration in autogen.sh, it allows for generating static-components.h the usual way.

NOTE: This build system does not work with the current autogen.sh. Modified one is under heavy testing to make sure it does not have side effects 

This commit was SVN r16110.
Этот коммит содержится в:
Aurelien Bouteiller 2007-09-12 18:46:37 +00:00
родитель b4c68c0925
Коммит 828af95be8
54 изменённых файлов: 182 добавлений и 123 удалений

Просмотреть файл

@ -1,3 +1 @@
bouteill
bosilca
coti

Просмотреть файл

@ -24,32 +24,25 @@ component_noinst = libmca_pml_v.la
component_install =
endif
SUBDIRS = $(MCA_pml_v_PROTOCOLS)
SUBDIRS = vprotocol $(MCA_pml_v_SUBDIRS)
local_sources = \
pml_v.c \
pml_v.h \
pml_v_component.c \
pml_v_output.h \
pml_v_output.c \
vprotocol.h \
base/base.h \
base/vprotocol_base.c \
base/vprotocol_base_select.c \
base/vprotocol_base_parasite.c \
base/vprotocol_base_request.h \
base/vprotocol_base_request.c
pml_v_output.c
mcacomponentdir = $(libdir)/openmpi
mcacomponent_LTLIBRARIES = $(component_install)
mca_pml_v_la_SOURCES = $(local_sources)
mca_pml_v_la_LIBADD =
mca_pml_v_la_LIBADD = vprotocol/libmca_vprotocol.la
mca_pml_v_la_CFLAGS =
mca_pml_v_la_LDFLAGS = -module -avoid-version
noinst_LTLIBRARIES = $(component_noinst)
libmca_pml_v_la_SOURCES = $(local_sources)
libmca_pml_v_la_LIBADD =
libmca_pml_v_la_LIBADD = vprotocol/libmca_vprotocol.la
libmca_pml_v_la_CFLAGS =
libmca_pml_v_la_LDFLAGS = -module -avoid-version

Просмотреть файл

@ -9,11 +9,53 @@
#
AC_DEFUN([MCA_pml_v_CONFIG],[
protocol_subdirs=""
while read protocol; do
echo "Adding $protocol to pml_v subdirs"
protocol_subdirs="$protocol $protocol_subdirs"
done <$srcdir/ompi/mca/pml/v/autogen.vprotocols
AC_SUBST(MCA_pml_v_PROTOCOLS, [$protocol_subdirs])
# We are going to make recursive call in shell, nothing is impossible
# Still, this is not really smart or clean
(
# Change srcdir (for DIRECT builds)
srcdir=`cd $srcdir && pwd`
srcdir="$srcdir/$project/mca/$framework/$component"
# Create directory structure (for VPATH builds)
AS_MKDIR_P("$project/mca/$framework/$component/vprotocol")
cd "$project/mca/$framework/$component"
rm -f vprotocol/mca && ln -s . vprotocol/mca
rm -f vprotocol/vprotocol && ln -s . vprotocol/vprotocol
MCA_CONFIGURE_FRAMEWORK(vprotocol, vprotocol, 1)
cat >mca_vprotocol_config_output <<EOF
#
# /!\ This is Automatically generated file. Do not edit.
#
# Apply the modifications to current shell context
MCA_vprotocol_ALL_COMPONENTS="$MCA_vprotocol_ALL_COMPONENTS"
MCA_vprotocol_STATIC_COMPONENTS="$MCA_vprotocol_STATIC_COMPONENTS"
MCA_vprotocol_DSO_COMPONENTS="$MCA_vprotocol_DSO_COMPONENTS"
MCA_vprotocol_STATIC_LTLIBS="$MCA_vprotocol_STATIC_LTLIBS"
AC_SUBST(MCA_vprotocol_ALL_COMPONENTS)
AC_SUBST(MCA_vprotocol_STATIC_COMPONENTS)
AC_SUBST(MCA_vprotocol_DSO_COMPONENTS)
AC_SUBST(MCA_vprotocol_STATIC_LTLIBS)
OMPI_MCA_MAKE_DIR_LIST(MCA_vprotocol_ALL_SUBDIRS, vprotocol, [$MCA_vprotocol_ALL_COMPONENTS])
OMPI_MCA_MAKE_DIR_LIST(MCA_vprotocol_STATIC_SUBDIRS, vprotocol, [$MCA_vprotocol_STATIC_COMPONENTS])
OMPI_MCA_MAKE_DIR_LIST(MCA_vprotocol_DSO_SUBDIRS, vprotocol, [$MCA_vprotocol_DSO_COMPONENTS])
m4_foreach(mca_component, [mca_vprotocol_no_config_component_list],
[m4_ifval(mca_component, [
[BUILD_vprotocol_]mca_component[_DSO]="$[BUILD_vprotocol_]mca_component[_DSO]"
AM_CONDITIONAL([OMPI_BUILD_vprotocol_]mca_component[_DSO], test "$[BUILD_vprotocol_]mca_component[_DSO]" = "1")])])
m4_foreach(mca_component, [mca_vprotocol_m4_config_component_list],
[m4_ifval(mca_component, [
[BUILD_vprotocol_]mca_component[_DSO]= $[BUILD_vprotocol_]mca_component[_DSO]
AM_CONDITIONAL([OMPI_BUILD_vprotocol_]mca_component[_DSO], test "$[BUILD_vprotocol_]mca_component[_DSO]" = "1")])])
EOF
)
# Reload the output from vprotocol framework's config
. $project/mca/$framework/$component/mca_vprotocol_config_output
])

Просмотреть файл

@ -12,14 +12,16 @@
# Specific to this module
PARAM_INIT_FILE=pml_v.c
PARAM_CONFIG_HEADER_FILE="v_config.h"
PARAM_CONFIG_FILES="Makefile"
>autogen.vprotocols
for protocol in protocol_*; do
( cd $pd_ompi_topdir
process_dir "$pd_dir/$protocol" $pd_ompi_topdir
)
done
# Operate on the vprotocol framework directory to detect and configure all
# the vprotocols.
(
cd $pd_ompi_topdir
mv "$mca_no_config_env_file" "$mca_no_config_env_file.bak"
mv "$mca_m4_config_env_file" "$mca_m4_config_env_file.bak"
process_framework $pd_dir/vprotocol $rg_cwd vprotocol vprotocol
mv "$mca_no_config_env_file.bak" "$mca_no_config_env_file"
mv "$mca_m4_config_env_file.bak" "$mca_m4_config_env_file"
)

Просмотреть файл

@ -16,8 +16,8 @@
#include "ompi/constants.h"
#include "ompi/mca/pml/base/base.h"
#include "pml_v.h"
#include "vprotocol.h"
#include "base/base.h"
#include "vprotocol/vprotocol.h"
#include "vprotocol/base/base.h"
static int mca_pml_v_component_open(void);
static int mca_pml_v_component_close(void);

Просмотреть файл

@ -1,10 +0,0 @@
/*
* $HEADER$
*/
const mca_base_component_t *mca_vprotocol_base_static_components[] = {
NULL
};

39
ompi/mca/pml/v/vprotocol/Makefile.am Обычный файл
Просмотреть файл

@ -0,0 +1,39 @@
#
# Copyright (c) 2004-2007 The University of Tennessee and The University
# of Tennessee Research Foundation. All rights
# reserved.
# $COPYRIGHT$
#
# Additional copyrights may follow
#
# $HEADER$
#
# iterate trough the components
SUBDIRS= $(MCA_vprotocol_ALL_SUBDIRS)
# main library setup
noinst_LTLIBRARIES = libmca_vprotocol.la
libmca_vprotocol_la_SOURCES =
# header setup
nobase_ompi_HEADERS =
nobase_nodist_ompi_HEADERS =
# local files
headers = vprotocol.h
libmca_vprotocol_la_SOURCES += $(headers) $(nodist_headers)
# Conditionally install the header files
if WANT_INSTALL_HEADERS
nobase_ompi_HEADERS += $(headers)
nobase_nodist_ompi_HEADERS += $(nodist_headers)
ompidir = $(includedir)/openmpi/ompi/mca/vprotocol
else
ompidir = $(includedir)
endif
include base/Makefile.am
distclean-local:
rm -f base/static-components.h

20
ompi/mca/pml/v/vprotocol/base/Makefile.am Обычный файл
Просмотреть файл

@ -0,0 +1,20 @@
#
# Copyright (c) 2004-2007 The University of Tennessee and The University
# of Tennessee Research Foundation. All rights
# reserved.
# $COPYRIGHT$
#
# Additional copyrights may follow
#
# $HEADER$
#
headers += \
base/base.h \
base/vprotocol_base_request.h
libmca_vprotocol_la_SOURCES += \
base/vprotocol_base.c \
base/vprotocol_base_select.c \
base/vprotocol_base_parasite.c \
base/vprotocol_base_request.c

Просмотреть файл

Просмотреть файл

@ -10,7 +10,7 @@
#include "base.h"
#include "opal/mca/mca.h"
#include "opal/mca/base/base.h"
#include "static-components.h"
#include "ompi/mca/pml/v/vprotocol/base/static-components.h"
opal_list_t mca_vprotocol_base_components_available;

Просмотреть файл

@ -14,7 +14,7 @@
#include "ompi_config.h"
#include "ompi/mca/pml/base/pml_base_request.h"
#include "../vprotocol.h"
#include "../pml_v.h"
#include "../../pml_v.h"
#if defined(c_plusplus) || defined(__cplusplus)
extern "C" {

Просмотреть файл

@ -16,7 +16,7 @@ include $(top_ompi_srcdir)/config/Makefile.options
# protocol_<name>.la (for DSO builds) or libprotocol_<name>.la
# (for static builds).
if OMPI_BUILD_pml_v_DSO
if OMPI_BUILD_vprotocol_pessimist_DSO
component_noinst =
component_install = mca_vprotocol_pessimist.la
else

Просмотреть файл

@ -12,9 +12,4 @@
# Specific to this module
PARAM_INIT_FILE=vprotocol_pessimist.c
PARAM_CONFIG_HEADER_FILE="vprotocol_pessimist_config.h"
PARAM_CONFIG_FILES="Makefile"
# Mandatory for all vprotocol
echo `basename \`pwd\`` >> ../autogen.vprotocols

Просмотреть файл

@ -9,7 +9,6 @@
*/
#include "ompi_config.h"
#include "../pml_v.h"
#include "vprotocol_pessimist.h"
int mca_vprotocol_pessimist_add_comm(struct ompi_communicator_t* comm)

Просмотреть файл

@ -16,7 +16,7 @@
#include "ompi/mca/pml/base/pml_base_request.h"
typedef uint64_t vprotocol_pessimist_clock_t;
#define PRIpclock PRIx64
#define PRIpclock "ullx"
typedef enum {
VPROTOCOL_PESSIMIST_EVENT_TYPE_MATCHING,

Просмотреть файл

@ -10,7 +10,6 @@
#include "ompi_config.h"
#include "ompi/request/request.h"
#include "../pml_v.h"
#include "vprotocol_pessimist.h"
static inline int replay_iprobe(int src, int tag,

Просмотреть файл

@ -9,7 +9,6 @@
*/
#include "ompi_config.h"
#include "../pml_v.h"
#include "vprotocol_pessimist.h"
int mca_vprotocol_pessimist_add_procs(struct ompi_proc_t **procs, size_t nprocs)

Просмотреть файл

@ -9,7 +9,6 @@
*/
#include "ompi_config.h"
#include "../pml_v.h"
#include "vprotocol_pessimist.h"
int mca_vprotocol_pessimist_progress(void)

Просмотреть файл

@ -11,7 +11,6 @@
#include "ompi_config.h"
#include "ompi/request/request.h"
#include "ompi/mca/pml/base/pml_base_recvreq.h"
#include "../pml_v.h"
#include "vprotocol_pessimist.h"

Просмотреть файл

@ -11,7 +11,7 @@
#include "ompi_config.h"
#include "vprotocol_pessimist_request.h"
#include "vprotocol_pessimist_eventlog.h"
#include "../../base/pml_base_request.h"
#include "ompi/mca/pml/base/pml_base_request.h"
static void vprotocol_pessimist_request_construct(mca_pml_base_request_t *req);

Просмотреть файл

@ -9,7 +9,6 @@
*/
#include "ompi_config.h"
#include "../pml_v.h"
#include "vprotocol_pessimist.h"
#include "vprotocol_pessimist_sender_based.h"

Просмотреть файл

@ -87,6 +87,7 @@ void vprotocol_pessimist_sender_based_alloc(size_t len)
/* How much space left for application data */
sb.sb_available = sb.sb_length - sb.sb_cursor;
#if 0
if(-1 == lseek(sb.sb_fd, sb.sb_offset + sb.sb_length, SEEK_SET))
{
V_OUTPUT_ERR("pml_v: vprotocol_pessimist: sender_based_alloc: lseek: %s",
@ -104,6 +105,8 @@ void vprotocol_pessimist_sender_based_alloc(size_t len)
sb.sb_addr = (uintptr_t) mmap((void *) sb.sb_addr, sb.sb_length,
PROT_WRITE | PROT_READ, MAP_SHARED, sb.sb_fd,
sb.sb_offset);
#endif
sb.sb_addr = (uintptr_t) malloc(sb.sb_length);
if(((uintptr_t) -1) == sb.sb_addr)
{
V_OUTPUT_ERR("pml_v: vprotocol_pessimist: sender_based_alloc: mmap: %s",

Просмотреть файл

@ -49,37 +49,20 @@ void vprotocol_pessimist_sender_based_finalize(void);
*/
void vprotocol_pessimist_sender_based_alloc(size_t len);
#define __SENDER_BASED_CNVTOR_PACK(req) do { \
if( 0 != req->req_bytes_packed ) { \
ompi_convertor_t conv; \
size_t max_data; \
size_t zero = 0; \
unsigned int iov_count = 1; \
struct iovec iov; \
\
iov.iov_len = req->req_bytes_packed; \
iov.iov_base = \
(IOVBASE_TYPE *) mca_vprotocol_pessimist.sender_based.sb_cursor; \
ompi_convertor_clone_with_position( &req->req_base.req_convertor, \
&conv, 0, &zero ); \
ompi_convertor_pack(&conv, &iov, &iov_count, &max_data); \
/** Copy data associated to a pml_base_send_request_t to the sender based
* message payload buffer
*/
#define VPROTOCOL_PESSIMIST_SENDER_BASED_COPY(REQ) do { \
mca_pml_base_send_request_t *req = (mca_pml_base_send_request_t *) (REQ); \
if(req->req_bytes_packed + \
sizeof(vprotocol_pessimist_sender_based_header_t) >= \
mca_vprotocol_pessimist.sender_based.sb_available) \
{ \
vprotocol_pessimist_sender_based_alloc(req->req_bytes_packed); \
} \
__SENDER_BASED_PACK(req); \
} while(0)
#define __SENDER_BASED_SNDRCV_PACK(req) do { \
mca_pml_v.host_pml.pml_irecv( \
mca_vprotocol_pessimist.sender_based.sb_cursor, \
req->req_bytes_packed, MPI_PACKED, 0, 0, \
mca_vprotocol_pessimist.sender_based.sb_comm, \
&VPESSIMIST_SEND_REQ(req)->sb_reqs[0]); \
mca_pml_v.host_pml.pml_isend(req->req_base.req_addr, \
req->req_base.req_count, req->req_base.req_datatype, 0, 0, \
MCA_PML_BASE_SEND_READY, \
mca_vprotocol_pessimist.sender_based.sb_comm, \
&VPESSIMIST_SEND_REQ(req)->sb_reqs[1]); \
} while(0);
#if 0
#define __SENDER_BASED_PACK(req) do { \
vprotocol_pessimist_sender_based_header_t *sbhdr = \
(vprotocol_pessimist_sender_based_header_t *) \
@ -96,51 +79,51 @@ void vprotocol_pessimist_sender_based_alloc(size_t len);
mca_vprotocol_pessimist.sender_based.sb_cursor += sbhdr->size; \
mca_vprotocol_pessimist.sender_based.sb_available -= (sbhdr->size + \
sizeof(vprotocol_pessimist_sender_based_header_t)); \
V_OUTPUT_VERBOSE(70, "pessimist:\tsb\twrite\t%"PRIpclock"\tsize %lu", VPESSIMIST_REQ(&req->req_base)->reqid, sbhdr->size + sizeof(vprotocol_pessimist_sender_based_header_t); \
V_OUTPUT_VERBOSE(70, "pessimist:\tsb\twrite\t%"PRIpclock"\tsize %lu", VPESSIMIST_REQ(&req->req_base)->reqid, sbhdr->size + sizeof(vprotocol_pessimist_sender_based_header_t)); \
} while(0)
#endif
static inline void __SENDER_BASED_PACK(mca_pml_base_send_request_t *req) {
vprotocol_pessimist_sender_based_header_t *sbhdr =
(vprotocol_pessimist_sender_based_header_t *)
mca_vprotocol_pessimist.sender_based.sb_cursor;
sbhdr->size = req->req_bytes_packed;
sbhdr->dst = req->req_base.req_peer;
sbhdr->tag = req->req_base.req_tag;
sbhdr->contextid = req->req_base.req_comm->c_contextid;
sbhdr->sequence = req->req_base.req_sequence;
mca_vprotocol_pessimist.sender_based.sb_cursor +=
sizeof(vprotocol_pessimist_sender_based_header_t);
__SENDER_BASED_CNVTOR_PACK(req);
mca_vprotocol_pessimist.sender_based.sb_cursor += sbhdr->size;
mca_vprotocol_pessimist.sender_based.sb_available -= (sbhdr->size +
sizeof(vprotocol_pessimist_sender_based_header_t));
V_OUTPUT_VERBOSE(70, "pessimist:\tsb\twrite\t%"PRIpclock"\tsize %lu", VPESSIMIST_REQ(&req->req_base)->reqid, sbhdr->size + sizeof(vprotocol_pessimist_sender_based_header_t));
}
/** Copy data associated to a pml_base_send_request_t to the sender based
* message payload buffer
*/
#define VPROTOCOL_PESSIMIST_SENDER_BASED_COPY(REQ) do { \
mca_pml_base_send_request_t *req = (mca_pml_base_send_request_t *) (REQ); \
if(req->req_bytes_packed + \
sizeof(vprotocol_pessimist_sender_based_header_t) >= \
mca_vprotocol_pessimist.sender_based.sb_available) \
{ \
vprotocol_pessimist_sender_based_alloc(req->req_bytes_packed); \
} \
__SENDER_BASED_PACK(req); \
} while(0)
/** Ensure sender based is finished before allowing user to touch send buffer
*/
*/
#define VPROTOCOL_PESSIMIST_SENDER_BASED_FLUSH(REQ) __SENDER_BASED_CNVTOR_FLUSH(REQ)
/* There is 2 different ways of packing the data to the sender-based buffer
* just pick one
*/
#define __SENDER_BASED_CNVTOR_PACK(req) do { \
if(0 != req->req_bytes_packed) { \
ompi_convertor_t conv; \
size_t max_data; \
size_t zero = 0; \
unsigned int iov_count = 1; \
struct iovec iov; \
\
iov.iov_len = req->req_bytes_packed; \
iov.iov_base = \
(IOVBASE_TYPE *) mca_vprotocol_pessimist.sender_based.sb_cursor; \
ompi_convertor_clone_with_position( &req->req_base.req_convertor, \
&conv, 0, &zero ); \
ompi_convertor_pack(&conv, &iov, &iov_count, &max_data); \
} \
} while(0)
#define __SENDER_BASED_CNVTOR_FLUSH(REQ)
#define __SENDER_BASED_SNDRCV_PACK(req) do { \
mca_pml_v.host_pml.pml_irecv( \
mca_vprotocol_pessimist.sender_based.sb_cursor, \
req->req_bytes_packed, MPI_PACKED, 0, 0, \
mca_vprotocol_pessimist.sender_based.sb_comm, \
&VPESSIMIST_SEND_REQ(req)->sb_reqs[0]); \
mca_pml_v.host_pml.pml_isend(req->req_base.req_addr, \
req->req_base.req_count, req->req_base.req_datatype, 0, 0, \
MCA_PML_BASE_SEND_READY, \
mca_vprotocol_pessimist.sender_based.sb_comm, \
&VPESSIMIST_SEND_REQ(req)->sb_reqs[1]); \
} while(0);
#define __SENDER_BASED_SNDRCV_FLUSH(REQ) do { \
if(NULL != VPESSIMIST_REQ(REQ)->sb_reqs[0]) \
{ \

Просмотреть файл

@ -87,7 +87,7 @@ typedef mca_vprotocol_base_module_1_0_0_t mca_vprotocol_base_module_t;
/* silently include the pml_v.h as every file including vprotocol.h will also
* need it
*/
#include "pml_v.h"
#include "../pml_v.h"
#include "base/base.h"
#endif /* __INCLUDE_VPROTOCOL_H_ */